import { __name as e, log as t } from "./chunk-AGHRB4JF.js";
import n from "../../../../khroma/dist/methods/rgba.js";
import r from "../../../../khroma/dist/methods/channel.js";
import { clear as i, common_default as a, configureSvgSize as o, getConfig as s, getConfig2 as c, getEffectiveHtmlLabels as l, getUrl as u, sanitizeText as d } from "./chunk-ICPOFSXX.js";
import f from "../../../../d3-selection/src/select.js";
import p from "../../../../d3-shape/src/line.js";
import m from "../../../../d3-shape/src/curve/basis.js";
import "../../../../d3/src/index.js";
import { computeLabelTransform as h, getLineFunctionsWithOffset as g } from "./chunk-BSJP7CBP.js";
import { decodeEntities as _, getStylesFromArray as v, utils_default as y } from "./chunk-5PVQY5BW.js";
import { configureLabelImages as b, getSubGraphTitleMargins as x } from "./chunk-ZZ45TVLE.js";
import { createText as S } from "./chunk-U2HBQHQK.js";
import { getIconStyles as C } from "./chunk-FMBD7UC4.js";
import w from "../../../../lodash-es/clone.js";
import { Graph as T } from "../../../../dagre-d3-es/src/graphlib/graph.js";
import "../../../../dagre-d3-es/src/graphlib/index.js";
//#region ../../node_modules/mermaid/dist/chunks/mermaid.core/blockDiagram-DXYQGD6D.mjs
var E = (function() {
	var t = /* @__PURE__ */ e(function(e, t, n, r) {
		for (n ||= {}, r = e.length; r--; n[e[r]] = t);
		return n;
	}, "o"), n = [1, 15], r = [1, 7], i = [1, 13], a = [1, 14], o = [1, 19], s = [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__ */ e(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__ */ e(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: n,
				11: 3,
				13: 4,
				19: 5,
				20: 6,
				21: r,
				22: 8,
				23: 9,
				24: 10,
				25: 11,
				26: 12,
				28: i,
				29: a,
				31: o,
				39: s,
				43: c,
				46: l
			},
			{ 8: [1, 20] },
			t(u, [2, 12], {
				13: 4,
				19: 5,
				20: 6,
				22: 8,
				23: 9,
				24: 10,
				25: 11,
				26: 12,
				11: 21,
				10: n,
				21: r,
				28: i,
				29: a,
				31: o,
				39: s,
				43: c,
				46: l
			}),
			t(d, [2, 16], {
				14: 22,
				15: f,
				16: p
			}),
			t(d, [2, 17]),
			t(d, [2, 18]),
			t(d, [2, 19]),
			t(d, [2, 20]),
			t(d, [2, 21]),
			t(d, [2, 22]),
			t(m, [2, 25], { 27: [1, 25] }),
			t(d, [2, 26]),
			{
				19: 26,
				26: 12,
				31: o
			},
			{
				10: n,
				11: 27,
				13: 4,
				19: 5,
				20: 6,
				21: r,
				22: 8,
				23: 9,
				24: 10,
				25: 11,
				26: 12,
				28: i,
				29: a,
				31: o,
				39: s,
				43: c,
				46: l
			},
			{
				40: [1, 28],
				42: [1, 29]
			},
			{ 44: [1, 30] },
			{ 47: [1, 31] },
			t(h, [2, 29], {
				32: 32,
				35: [1, 33],
				37: [1, 34]
			}),
			{ 1: [2, 7] },
			t(u, [2, 13]),
			{
				26: 35,
				31: o
			},
			{ 31: [2, 14] },
			{ 17: [1, 36] },
			t(m, [2, 24]),
			{
				10: n,
				11: 37,
				13: 4,
				14: 22,
				15: f,
				16: p,
				19: 5,
				20: 6,
				21: r,
				22: 8,
				23: 9,
				24: 10,
				25: 11,
				26: 12,
				28: i,
				29: a,
				31: o,
				39: s,
				43: c,
				46: l
			},
			{ 30: [1, 38] },
			{ 41: [1, 39] },
			{ 41: [1, 40] },
			{ 45: [1, 41] },
			{ 48: [1, 42] },
			t(h, [2, 30]),
			{ 18: [1, 43] },
			{ 18: [1, 44] },
			t(m, [2, 23]),
			{ 18: [1, 45] },
			{ 30: [1, 46] },
			t(d, [2, 28]),
			t(d, [2, 35]),
			t(d, [2, 36]),
			t(d, [2, 37]),
			t(d, [2, 38]),
			{ 36: [1, 47] },
			{
				33: 48,
				34: g
			},
			{ 15: [1, 50] },
			t(d, [2, 27]),
			t(h, [2, 33]),
			{ 38: [1, 51] },
			{
				33: 52,
				34: g,
				38: [2, 31]
			},
			{ 31: [2, 15] },
			t(h, [2, 34]),
			{ 38: [2, 32] }
		],
		defaultActions: {
			20: [2, 7],
			23: [2, 14],
			50: [2, 15],
			52: [2, 32]
		},
		parseError: /* @__PURE__ */ e(function(e, t) {
			if (t.recoverable) this.trace(e);
			else {
				var n = Error(e);
				throw n.hash = t, n;
			}
		}, "parseError"),
		parse: /* @__PURE__ */ e(function(t) {
			var n = this, r = [0], i = [], a = [null], o = [], s = this.table, c = "", l = 0, u = 0, d = 0, f = 2, p = 1, m = o.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(t, g.yy), g.yy.lexer = h, g.yy.parser = this, h.yylloc === void 0 && (h.yylloc = {});
			var v = h.yylloc;
			o.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) {
				r.length -= 2 * e, a.length -= e, o.length -= e;
			}
			e(b, "popStack");
			function x() {
				var e = i.pop() || h.lex() || p;
				return typeof e != "number" && (e instanceof Array && (i = e, e = i.pop()), e = n.symbols_[e] || e), e;
			}
			e(x, "lex");
			for (var S, C, w, T, E, D = {}, O, k, A, j;;) {
				if (w = r[r.length - 1], this.defaultActions[w] ? T = this.defaultActions[w] : (S ??= x(), T = s[w] && s[w][S]), T === void 0 || !T.length || !T[0]) {
					var M = "";
					for (O in j = [], s[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:
						r.push(S), a.push(h.yytext), o.push(h.yylloc), r.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.$ = a[a.length - k], D._$ = {
							first_line: o[o.length - (k || 1)].first_line,
							last_line: o[o.length - 1].last_line,
							first_column: o[o.length - (k || 1)].first_column,
							last_column: o[o.length - 1].last_column
						}, y && (D._$.range = [o[o.length - (k || 1)].range[0], o[o.length - 1].range[1]]), E = this.performAction.apply(D, [
							c,
							u,
							l,
							g.yy,
							T[1],
							a,
							o
						].concat(m)), E !== void 0) return E;
						k && (r = r.slice(0, -1 * k * 2), a = a.slice(0, -1 * k), o = o.slice(0, -1 * k)), r.push(this.productions_[T[1]][0]), a.push(D.$), o.push(D._$), A = s[r[r.length - 2]][r[r.length - 1]], r.push(A);
						break;
					case 3: return !0;
				}
			}
			return !0;
		}, "parse")
	};
	_.lexer = /* @__PURE__ */ (function() {
		return {
			EOF: 1,
			parseError: /* @__PURE__ */ e(function(e, t) {
				if (this.yy.parser) this.yy.parser.parseError(e, t);
				else throw Error(e);
			}, "parseError"),
			setInput: /* @__PURE__ */ e(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__ */ e(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__ */ e(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__ */ e(function() {
				return this._more = !0, this;
			}, "more"),
			reject: /* @__PURE__ */ e(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__ */ e(function(e) {
				this.unput(this.match.slice(e));
			}, "less"),
			pastInput: /* @__PURE__ */ e(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__ */ e(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__ */ e(function() {
				var e = this.pastInput(), t = Array(e.length + 1).join("-");
				return e + this.upcomingInput() + "\n" + t + "^";
			}, "showPosition"),
			test_match: /* @__PURE__ */ e(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__ */ e(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__ */ e(function() {
				return this.next() || this.lex();
			}, "lex"),
			begin: /* @__PURE__ */ e(function(e) {
				this.conditionStack.push(e);
			}, "begin"),
			popState: /* @__PURE__ */ e(function() {
				return this.conditionStack.length - 1 > 0 ? this.conditionStack.pop() : this.conditionStack[0];
			}, "popState"),
			_currentRules: /* @__PURE__ */ e(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__ */ e(function(e) {
				return e = this.conditionStack.length - 1 - Math.abs(e || 0), e >= 0 ? this.conditionStack[e] : "INITIAL";
			}, "topState"),
			pushState: /* @__PURE__ */ e(function(e) {
				this.begin(e);
			}, "pushState"),
			stateStackSize: /* @__PURE__ */ e(function() {
				return this.conditionStack.length;
			}, "stateStackSize"),
			options: {},
			performAction: /* @__PURE__ */ e(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 e(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 = c(), N = /* @__PURE__ */ new Map(), re = "", ie = /* @__PURE__ */ e((e) => a.sanitizeText(e, ne), "sanitizeText"), ae = /* @__PURE__ */ e(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"), oe = /* @__PURE__ */ e(function(e, t = "") {
	let n = O.get(e);
	t != null && (n.styles = t.split(te));
}, "addStyle2Node"), se = /* @__PURE__ */ e(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"), ce = /* @__PURE__ */ e((e, n) => {
	let r = e.flat(), i = [], a = r.find((e) => e?.type === "column-setting")?.columns ?? -1;
	for (let e of r) {
		if (typeof a == "number" && a > 0 && e.type !== "column-setting" && typeof e.widthInColumns == "number" && e.widthInColumns > a && t.warn(`Block ${e.id} width ${e.widthInColumns} exceeds configured column width ${a}`), e.label &&= ie(e.label), e.type === "classDef") {
			ae(e.id, e.css);
			continue;
		}
		if (e.type === "applyClass") {
			se(e.id, e?.styleClass ?? "");
			continue;
		}
		if (e.type === "applyStyles") {
			e?.stylesStr && oe(e.id, e?.stylesStr);
			continue;
		}
		if (e.type === "column-setting") n.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 && ce(e.children, e), e.type === "space") {
				let t = e.width ?? 1;
				for (let n = 0; n < t; n++) {
					let t = w(e);
					t.id = t.id + "-" + n, O.set(t.id, t), i.push(t);
				}
			} else t === void 0 && i.push(e);
		}
	}
	n.children = i;
}, "populateBlockDatabase"), le = [], P = {
	id: "root",
	type: "composite",
	children: [],
	columns: -1
}, ue = /* @__PURE__ */ e(() => {
	t.debug("Clear called"), i(), P = {
		id: "root",
		type: "composite",
		children: [],
		columns: -1
	}, O = /* @__PURE__ */ new Map([["root", P]]), le = [], N = /* @__PURE__ */ new Map(), k = [], A = /* @__PURE__ */ new Map(), re = "";
}, "clear");
function de(e) {
	switch (t.debug("typeStr2Type", e), e) {
		case "[]": return "square";
		case "()": return t.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";
	}
}
e(de, "typeStr2Type");
function fe(e) {
	switch (t.debug("typeStr2Type", e), e) {
		case "==": return "thick";
		default: return "normal";
	}
}
e(fe, "edgeTypeStr2Type");
function pe(e) {
	switch (e.replace(/^[\s-]+|[\s-]+$/g, "")) {
		case "x": return "arrow_cross";
		case "o": return "arrow_circle";
		case ">": return "arrow_point";
		default: return "";
	}
}
e(pe, "edgeStrToEdgeData");
var me = 0, he = {
	getConfig: /* @__PURE__ */ e(() => s().block, "getConfig"),
	typeStr2Type: de,
	edgeTypeStr2Type: fe,
	edgeStrToEdgeData: pe,
	getLogger: /* @__PURE__ */ e(() => t, "getLogger"),
	getBlocksFlat: /* @__PURE__ */ e(() => [...O.values()], "getBlocksFlat"),
	getBlocks: /* @__PURE__ */ e(() => le || [], "getBlocks"),
	getEdges: /* @__PURE__ */ e(() => k, "getEdges"),
	setHierarchy: /* @__PURE__ */ e((e) => {
		P.children = e, ce(e, P), le = P.children;
	}, "setHierarchy"),
	getBlock: /* @__PURE__ */ e((e) => O.get(e), "getBlock"),
	setBlock: /* @__PURE__ */ e((e) => {
		O.set(e.id, e);
	}, "setBlock"),
	getColumns: /* @__PURE__ */ e((e) => {
		let t = O.get(e);
		return t ? t.columns ? t.columns : t.children ? t.children.length : -1 : -1;
	}, "getColumns"),
	getClasses: /* @__PURE__ */ e(function() {
		return N;
	}, "getClasses"),
	clear: ue,
	generateId: /* @__PURE__ */ e(() => (me++, "id-" + Math.random().toString(36).substr(2, 12) + "-" + me), "generateId"),
	setDiagramId: /* @__PURE__ */ e((e) => {
		re = e;
	}, "setDiagramId"),
	getDiagramId: /* @__PURE__ */ e(() => re, "getDiagramId")
}, F = /* @__PURE__ */ e((e, t) => {
	let i = r;
	return n(i(e, "r"), i(e, "g"), i(e, "b"), t);
}, "fade"), ge = /* @__PURE__ */ e((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: ${F(e.mainBkg, .5)};
    fill: ${F(e.clusterBkg, .5)};
    stroke: ${F(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};
  }
  ${C()}
`, "getStyles"), _e = /* @__PURE__ */ e((e, t, n, r) => {
	t.forEach((t) => {
		ve[t](e, n, r);
	});
}, "insertMarkers"), ve = {
	extension: /* @__PURE__ */ e((e, n, r) => {
		t.trace("Making markers for ", r), e.append("defs").append("marker").attr("id", r + "_" + n + "-extensionStart").attr("class", "marker extension " + n).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", r + "_" + n + "-extensionEnd").attr("class", "marker extension " + n).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__ */ e((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__ */ e((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__ */ e((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__ */ e((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__ */ e((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__ */ e((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__ */ e((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__ */ e((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")
}, ye = _e, I = c()?.block?.padding ?? 8;
function L(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)
	};
}
e(L, "calculateBlockPosition");
var be = /* @__PURE__ */ e((e) => {
	let n = 0, r = 0;
	for (let i of e.children) {
		let { width: e, height: a, x: o, y: s } = i.size ?? {
			width: 0,
			height: 0,
			x: 0,
			y: 0
		};
		t.debug("getMaxChildSize abc95 child:", i.id, "width:", e, "height:", a, "x:", o, "y:", s, i.type), i.type !== "space" && (e > n && (n = e / (i.widthInColumns ?? 1)), a > r && (r = a));
	}
	return {
		width: n,
		height: r
	};
}, "getMaxChildSize");
function R(e, n, r = 0, i = 0) {
	t.debug("setBlockSizes abc95 (start)", e.id, e?.size?.x, "block width =", e?.size, "siblingWidth", r), e?.size?.width || (e.size = {
		width: r,
		height: i,
		x: 0,
		y: 0
	});
	let a = 0, o = 0;
	if (e.children?.length > 0) {
		for (let t of e.children) R(t, n);
		let s = be(e);
		a = s.width, o = s.height, t.debug("setBlockSizes abc95 maxWidth of", e.id, ":s children is ", a, o);
		for (let n of e.children) n.size && (t.debug(`abc95 Setting size of children of ${e.id} id=${n.id} ${a} ${o} ${JSON.stringify(n.size)}`), n.size.width = a * (n.widthInColumns ?? 1) + I * ((n.widthInColumns ?? 1) - 1), n.size.height = o, n.size.x = 0, n.size.y = 0, t.debug(`abc95 updating size of ${e.id} children child:${n.id} maxWidth:${a} maxHeight:${o}`));
		for (let t of e.children) R(t, n, a, o);
		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 * (a + I) + I, p = d * (o + I) + I;
		if (f < r) {
			t.debug(`Detected to small sibling: abc95 ${e.id} siblingWidth ${r} siblingHeight ${i} width ${f}`), f = r, p = i;
			let n = (r - u * I - I) / u, s = (i - d * I - I) / d;
			t.debug("Size indata abc88", e.id, "childWidth", n, "maxWidth", a), t.debug("Size indata abc88", e.id, "childHeight", s, "maxHeight", o), t.debug("Size indata abc88 xSize", u, "padding", I);
			for (let t of e.children) t.size && (t.size.width = n, t.size.height = s, t.size.x = 0, t.size.y = 0);
		}
		if (t.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 n = c > 0 ? Math.min(e.children.length, c) : e.children.length;
			if (n > 0) {
				let r = (f - n * I - I) / n;
				t.debug("abc95 (growing to fit) width", e.id, f, e.size?.width, r);
				for (let t of e.children) t.size && (t.size.width = r);
			}
		}
		e.size = {
			width: f,
			height: p,
			x: 0,
			y: 0
		};
	}
	t.debug("setBlockSizes abc94 (done)", e.id, e?.size?.x, e?.size?.width, e?.size?.y, e?.size?.height);
}
e(R, "setBlockSizes");
function z(e, n) {
	t.debug(`abc85 layout blocks (=>layoutBlocks) ${e.id} x: ${e?.size?.x} y: ${e?.size?.y} width: ${e?.size?.width}`);
	let r = e.columns ?? -1;
	if (t.debug("layoutBlocks columns abc95", e.id, "=>", r, e), e.children && e.children.length > 0) {
		let i = e?.children[0]?.size?.width ?? 0, a = e.children.length * i + (e.children.length - 1) * I;
		t.debug("widthOfChildren 88", a, "posX");
		let o = /* @__PURE__ */ new Map();
		{
			let t = 0;
			for (let n of e.children) {
				if (!n.size) continue;
				let { py: e } = L(r, t), i = o.get(e) ?? 0;
				n.size.height > i && o.set(e, n.size.height);
				let a = n?.widthInColumns ?? 1;
				r > 0 && (a = Math.min(a, r - t % r)), t += a;
			}
		}
		let s = /* @__PURE__ */ new Map();
		{
			let e = 0, t = [...o.keys()].sort((e, t) => e - t);
			for (let n of t) s.set(n, e), e += (o.get(n) ?? 0) + I;
		}
		let c = 0;
		t.debug("abc91 block?.size?.x", e.id, e?.size?.x);
		let l = e?.size?.x ? e?.size?.x + (-e?.size?.width / 2 || 0) : -I, u = 0;
		for (let i of e.children) {
			let a = e;
			if (!i.size) continue;
			let { width: d, height: f } = i.size, { px: p, py: m } = L(r, c);
			if (m != u && (u = m, l = e?.size?.x ? e?.size?.x + (-e?.size?.width / 2 || 0) : -I, t.debug("New row in layout for block", e.id, " and child ", i.id, u)), t.debug(`abc89 layout blocks (child) id: ${i.id} Pos: ${c} (px, py) ${p},${m} (${a?.size?.x},${a?.size?.y}) parent: ${a.id} width: ${d}${I}`), a.size) {
				let e = d / 2;
				i.size.x = l + I + e, t.debug(`abc91 layout blocks (calc) px, pyid:${i.id} startingPos=X${l} new startingPosX${i.size.x} ${e} padding=${I} width=${d} halfWidth=${e} => x:${i.size.x} y:${i.size.y} ${i.widthInColumns} (width * (child?.w || 1)) / 2 ${d * (i?.widthInColumns ?? 1) / 2}`), l = i.size.x + e;
				let n = s.get(m) ?? 0, r = o.get(m) ?? f;
				i.size.y = a.size.y - a.size.height / 2 + n + r / 2 + I, t.debug(`abc88 layout blocks (calc) px, pyid:${i.id}startingPosX${l}${I}${e}=>x:${i.size.x}y:${i.size.y}${i.widthInColumns}(width * (child?.w || 1)) / 2${d * (i?.widthInColumns ?? 1) / 2}`);
			}
			i.children && z(i, n);
			let h = i?.widthInColumns ?? 1;
			r > 0 && (h = Math.min(h, r - c % r)), c += h, t.debug("abc88 columnsPos", i, c);
		}
	}
	t.debug(`layout blocks (<==layoutBlocks) ${e.id} x: ${e?.size?.x} y: ${e?.size?.y} width: ${e?.size?.width}`);
}
e(z, "layoutBlocks");
function B(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} = B(a, {
		minX: t,
		minY: n,
		maxX: r,
		maxY: i
	}));
	return {
		minX: t,
		minY: n,
		maxX: r,
		maxY: i
	};
}
e(B, "findBounds");
function xe(e) {
	let n = e.getBlock("root");
	if (!n) return;
	R(n, e, 0, 0), z(n, e), t.debug("getBlocks", JSON.stringify(n, null, 2));
	let { minX: r, minY: i, maxX: a, maxY: o } = B(n), s = o - i;
	return {
		x: r,
		y: i,
		width: a - r,
		height: s
	};
}
e(xe, "layout");
var V = /* @__PURE__ */ e(async (e, t, n, r = !1, i = !1) => {
	let a = t || "";
	typeof a == "object" && (a = a[0]);
	let o = c(), s = l(o);
	return await S(e, a, {
		style: n,
		isTitle: r,
		useHtmlLabels: s,
		markdown: !1,
		isNode: i,
		width: Infinity
	}, o);
}, "createLabel"), Se = /* @__PURE__ */ e((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__ */ e((e, n, r, i, a, o) => {
	let s = Ce[r];
	if (!s) {
		t.warn(`Unknown arrow type: ${r}`);
		return;
	}
	let c = n === "start" ? "Start" : "End";
	e.attr(`marker-${n}`, `url(${i}#${a}_${o}-${s}${c})`);
}, "addEdgeMarker"), H = {}, U = {}, Te = /* @__PURE__ */ e(async (e, t) => {
	let n = c(), r = l(n), i = e.insert("g").attr("class", "edgeLabel"), a = i.insert("g").attr("class", "label"), o = t.labelType === "markdown", s = await S(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 u = s.getBBox(), d = u;
	if (r) {
		let e = s.children[0], t = f(s);
		u = e.getBoundingClientRect(), d = u, t.attr("width", u.width), t.attr("height", u.height);
	} else {
		let e = f(s).select("text").node();
		e && typeof e.getBBox == "function" && (d = e.getBBox());
	}
	a.attr("transform", h(d, r)), H[t.id] = i, t.width = u.width, t.height = u.height;
	let p;
	if (t.startLabelLeft) {
		let n = e.insert("g").attr("class", "edgeTerminals"), i = n.insert("g").attr("class", "inner"), a = await V(i, t.startLabelLeft, t.labelStyle);
		p = a;
		let o = a.getBBox();
		if (r) {
			let e = a.children[0], t = f(a);
			o = e.getBoundingClientRect(), t.attr("width", o.width), t.attr("height", o.height);
		}
		i.attr("transform", h(o, r)), U[t.id] || (U[t.id] = {}), U[t.id].startLeft = n, W(p, t.startLabelLeft);
	}
	if (t.startLabelRight) {
		let n = e.insert("g").attr("class", "edgeTerminals"), i = n.insert("g").attr("class", "inner"), a = await V(n, t.startLabelRight, t.labelStyle);
		p = a, i.node().appendChild(a);
		let o = a.getBBox();
		if (r) {
			let e = a.children[0], t = f(a);
			o = e.getBoundingClientRect(), t.attr("width", o.width), t.attr("height", o.height);
		}
		i.attr("transform", h(o, r)), U[t.id] || (U[t.id] = {}), U[t.id].startRight = n, W(p, t.startLabelRight);
	}
	if (t.endLabelLeft) {
		let n = e.insert("g").attr("class", "edgeTerminals"), i = n.insert("g").attr("class", "inner"), a = await V(i, t.endLabelLeft, t.labelStyle);
		p = a;
		let o = a.getBBox();
		if (r) {
			let e = a.children[0], t = f(a);
			o = e.getBoundingClientRect(), t.attr("width", o.width), t.attr("height", o.height);
		}
		i.attr("transform", h(o, r)), n.node().appendChild(a), U[t.id] || (U[t.id] = {}), U[t.id].endLeft = n, W(p, t.endLabelLeft);
	}
	if (t.endLabelRight) {
		let n = e.insert("g").attr("class", "edgeTerminals"), i = n.insert("g").attr("class", "inner"), a = await V(i, t.endLabelRight, t.labelStyle);
		p = a;
		let o = a.getBBox();
		if (r) {
			let e = a.children[0], t = f(a);
			o = e.getBoundingClientRect(), t.attr("width", o.width), t.attr("height", o.height);
		}
		i.attr("transform", h(o, r)), n.node().appendChild(a), U[t.id] || (U[t.id] = {}), U[t.id].endRight = n, W(p, t.endLabelRight);
	}
	return s;
}, "insertEdgeLabel");
function W(e, t) {
	l(c()) && e && (e.style.width = t.length * 9 + "px", e.style.height = "12px");
}
e(W, "setTerminalWidth");
var Ee = /* @__PURE__ */ e((e, n) => {
	t.debug("Moving label abc88 ", e.id, e.label, H[e.id], n);
	let r = n.updatedPath ? n.updatedPath : n.originalPath, { subGraphTitleTotalMargin: i } = x(c());
	if (e.label) {
		let a = H[e.id], o = e.x, s = e.y;
		if (r) {
			let i = y.calcLabelPosition(r);
			t.debug("Moving label " + e.label + " from (", o, ",", s, ") to (", i.x, ",", i.y, ") abc88"), n.updatedPath && (o = i.x, s = i.y);
		}
		a.attr("transform", `translate(${o}, ${s + i / 2})`);
	}
	if (e.startLabelLeft) {
		let t = U[e.id].startLeft, n = e.x, i = e.y;
		if (r) {
			let t = y.calcTerminalLabelPosition(e.arrowTypeStart ? 10 : 0, "start_left", r);
			n = t.x, i = t.y;
		}
		t.attr("transform", `translate(${n}, ${i})`);
	}
	if (e.startLabelRight) {
		let t = U[e.id].startRight, n = e.x, i = e.y;
		if (r) {
			let t = y.calcTerminalLabelPosition(e.arrowTypeStart ? 10 : 0, "start_right", r);
			n = t.x, i = t.y;
		}
		t.attr("transform", `translate(${n}, ${i})`);
	}
	if (e.endLabelLeft) {
		let t = U[e.id].endLeft, n = e.x, i = e.y;
		if (r) {
			let t = y.calcTerminalLabelPosition(e.arrowTypeEnd ? 10 : 0, "end_left", r);
			n = t.x, i = t.y;
		}
		t.attr("transform", `translate(${n}, ${i})`);
	}
	if (e.endLabelRight) {
		let t = U[e.id].endRight, n = e.x, i = e.y;
		if (r) {
			let t = y.calcTerminalLabelPosition(e.arrowTypeEnd ? 10 : 0, "end_right", r);
			n = t.x, i = t.y;
		}
		t.attr("transform", `translate(${n}, ${i})`);
	}
}, "positionEdgeLabel"), De = /* @__PURE__ */ e((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__ */ e((e, n, r) => {
	t.debug(`intersection calc abc89:
  outsidePoint: ${JSON.stringify(n)}
  insidePoint : ${JSON.stringify(r)}
  node        : x:${e.x} y:${e.y} w:${e.width} h:${e.height}`);
	let i = e.x, a = e.y, o = Math.abs(i - r.x), s = e.width / 2, c = r.x < n.x ? s - o : s + o, l = e.height / 2, u = Math.abs(n.y - r.y), d = Math.abs(n.x - r.x);
	if (Math.abs(a - n.y) * s > Math.abs(i - n.x) * l) {
		let e = r.y < n.y ? n.y - l - a : a - l - n.y;
		c = d * e / u;
		let i = {
			x: r.x < n.x ? r.x + c : r.x - d + c,
			y: r.y < n.y ? r.y + u - e : r.y - u + e
		};
		return c === 0 && (i.x = n.x, i.y = n.y), d === 0 && (i.x = n.x), u === 0 && (i.y = n.y), t.debug(`abc89 topp/bott calc, Q ${u}, q ${e}, R ${d}, r ${c}`, i), i;
	} else {
		c = r.x < n.x ? n.x - s - i : i - s - n.x;
		let e = u * c / d, a = r.x < n.x ? r.x + d - c : r.x - d + c, o = r.y < n.y ? r.y + e : r.y - e;
		return t.debug(`sides calc abc89, Q ${u}, q ${e}, R ${d}, r ${c}`, {
			_x: a,
			_y: o
		}), c === 0 && (a = n.x, o = n.y), d === 0 && (a = n.x), u === 0 && (o = n.y), {
			x: a,
			y: o
		};
	}
}, "intersection"), ke = /* @__PURE__ */ e((e, n) => {
	t.debug("abc88 cutPathAtIntersect", e, n);
	let r = [], i = e[0], a = !1;
	return e.forEach((e) => {
		if (!De(n, e) && !a) {
			let t = Oe(n, i, e), o = !1;
			r.forEach((e) => {
				o ||= e.x === t.x && e.y === t.y;
			}), r.some((e) => e.x === t.x && e.y === t.y) || r.push(t), a = !0;
		} else i = e, a || r.push(e);
	}), r;
}, "cutPathAtIntersect"), Ae = /* @__PURE__ */ e(function(e, n, r, i, a, o, s) {
	let l = r.points;
	t.debug("abc88 InsertEdge: edge=", r, "e=", n);
	let d = !1, f = o.node(n.v);
	var h = o.node(n.w);
	h?.intersect && f?.intersect && (l = l.slice(1, r.points.length - 1), l.unshift(f.intersect(l[0])), l.push(h.intersect(l[l.length - 1]))), r.toCluster && (t.debug("to cluster abc88", i[r.toCluster]), l = ke(r.points, i[r.toCluster].node), d = !0), r.fromCluster && (t.debug("from cluster abc88", i[r.fromCluster]), l = ke(l.reverse(), i[r.fromCluster].node).reverse(), d = !0);
	let _ = l.filter((e) => !Number.isNaN(e.y)), v = m;
	r.curve && (a === "graph" || a === "flowchart") && (v = r.curve);
	let { x: y, y: b } = g(r), x = p().x(y).y(b).curve(v), S;
	switch (r.thickness) {
		case "normal":
			S = "edge-thickness-normal";
			break;
		case "thick":
			S = "edge-thickness-thick";
			break;
		case "invisible":
			S = "edge-thickness-thick";
			break;
		default: S = "";
	}
	switch (r.pattern) {
		case "solid":
			S += " edge-pattern-solid";
			break;
		case "dotted":
			S += " edge-pattern-dotted";
			break;
		case "dashed":
			S += " edge-pattern-dashed";
			break;
	}
	let C = e.append("path").attr("d", x(_)).attr("id", r.id).attr("class", " " + S + (r.classes ? " " + r.classes : "")).attr("style", r.style), w = "";
	(c().flowchart.arrowMarkerAbsolute || c().state.arrowMarkerAbsolute) && (w = u(!0)), Se(C, r, w, s, a);
	let T = {};
	return d && (T.updatedPath = l), T.originalPath = r.points, T;
}, "insertEdge"), je = /* @__PURE__ */ e((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__ */ e((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);
}
e(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
	};
}
e(Fe, "intersectEllipse");
var Ie = Fe;
function Le(e, t, n) {
	return Ie(e, t, t, n);
}
e(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 && G(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 && G(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
	};
}
e(ze, "intersectLine");
function G(e, t) {
	return e * t > 0;
}
e(G, "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;
}
e(He, "intersectPolygon");
var K = {
	node: Pe,
	circle: Re,
	ellipse: Ie,
	polygon: Ve,
	rect: /* @__PURE__ */ e((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")
}, q = /* @__PURE__ */ e(async (e, t, n, r) => {
	let i = c(), a, o = t.useHtmlLabels || l(i);
	a = n || "node default";
	let s = e.insert("g").attr("class", a).attr("id", t.domId || t.id), u = s.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" ? S(u, d(_(p), i), {
		useHtmlLabels: o,
		width: t.width || i.flowchart.wrappingWidth,
		classes: "markdown-node-label"
	}, i) : await V(u, d(_(p), i), t.labelStyle, !1, r);
	let h = m.getBBox(), g = t.padding / 2;
	if (l(i)) {
		let e = m.children[0], t = f(m);
		await b(e, p), h = e.getBoundingClientRect(), t.attr("width", h.width), t.attr("height", h.height);
	}
	return o ? u.attr("transform", "translate(" + -h.width / 2 + ", " + -h.height / 2 + ")") : u.attr("transform", "translate(0, " + -h.height / 2 + ")"), t.centerLabel && u.attr("transform", "translate(" + -h.width / 2 + ", " + -h.height / 2 + ")"), u.insert("rect", ":first-child"), {
		shapeSvg: s,
		bbox: h,
		halfPadding: g,
		label: u
	};
}, "labelHelper"), J = /* @__PURE__ */ e((e, t) => {
	let n = t.node().getBBox();
	e.width = n.width, e.height = n.height;
}, "updateNodeBounds");
function Y(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 + ")");
}
e(Y, "insertPolygonShape");
var Ue = /* @__PURE__ */ e(async (e, n) => {
	n.useHtmlLabels || l(c()) || (n.centerLabel = !0);
	let { shapeSvg: r, bbox: i, halfPadding: a } = await q(e, n, "node " + n.classes, !0);
	t.info("Classes = ", n.classes);
	let o = r.insert("rect", ":first-child");
	return o.attr("rx", n.rx).attr("ry", n.ry).attr("x", -i.width / 2 - a).attr("y", -i.height / 2 - a).attr("width", i.width + n.padding).attr("height", i.height + n.padding), J(n, o), n.intersect = function(e) {
		return K.rect(n, e);
	}, r;
}, "note"), We = /* @__PURE__ */ e((e) => e ? " " + e : "", "formatClass"), X = /* @__PURE__ */ e((e, t) => `${t || "node default"}${We(e.classes)} ${We(e.class)}`, "getClassesFromNode"), Ge = /* @__PURE__ */ e(async (e, n) => {
	let { shapeSvg: r, bbox: i } = await q(e, n, X(n, void 0), !0), a = i.width + n.padding + (i.height + n.padding), o = [
		{
			x: a / 2,
			y: 0
		},
		{
			x: a,
			y: -a / 2
		},
		{
			x: a / 2,
			y: -a
		},
		{
			x: 0,
			y: -a / 2
		}
	];
	t.info("Question main (Circle)");
	let s = Y(r, a, a, o);
	return s.attr("style", n.style), J(n, s), n.intersect = function(e) {
		return t.warn("Intersect called"), K.polygon(n, o, e);
	}, r;
}, "question"), Ke = /* @__PURE__ */ e((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 K.circle(t, 14, e);
	}, n;
}, "choice"), qe = /* @__PURE__ */ e(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await q(e, t, X(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 = Y(n, o, i, s);
	return c.attr("style", t.style), J(t, c), t.intersect = function(e) {
		return K.polygon(t, s, e);
	}, n;
}, "hexagon"), Je = /* @__PURE__ */ e(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await q(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 = Y(n, o, i, s);
	return c.attr("style", t.style), J(t, c), t.intersect = function(e) {
		return K.polygon(t, s, e);
	}, n;
}, "block_arrow"), Ye = /* @__PURE__ */ e(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await q(e, t, X(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 Y(n, i, a, o).attr("style", t.style), t.width = i + a, t.height = a, t.intersect = function(e) {
		return K.polygon(t, o, e);
	}, n;
}, "rect_left_inv_arrow"), Xe = /* @__PURE__ */ e(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await q(e, t, X(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 = Y(n, i, a, o);
	return s.attr("style", t.style), J(t, s), t.intersect = function(e) {
		return K.polygon(t, o, e);
	}, n;
}, "lean_right"), Ze = /* @__PURE__ */ e(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await q(e, t, X(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 = Y(n, i, a, o);
	return s.attr("style", t.style), J(t, s), t.intersect = function(e) {
		return K.polygon(t, o, e);
	}, n;
}, "lean_left"), Qe = /* @__PURE__ */ e(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await q(e, t, X(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 = Y(n, i, a, o);
	return s.attr("style", t.style), J(t, s), t.intersect = function(e) {
		return K.polygon(t, o, e);
	}, n;
}, "trapezoid"), $e = /* @__PURE__ */ e(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await q(e, t, X(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 = Y(n, i, a, o);
	return s.attr("style", t.style), J(t, s), t.intersect = function(e) {
		return K.polygon(t, o, e);
	}, n;
}, "inv_trapezoid"), et = /* @__PURE__ */ e(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await q(e, t, X(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 = Y(n, i, a, o);
	return s.attr("style", t.style), J(t, s), t.intersect = function(e) {
		return K.polygon(t, o, e);
	}, n;
}, "rect_right_inv_arrow"), tt = /* @__PURE__ */ e(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await q(e, t, X(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 J(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 = K.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__ */ e(async (e, n) => {
	let { shapeSvg: r, bbox: i, halfPadding: a } = await q(e, n, "node " + n.classes + " " + n.class, !0), o = r.insert("rect", ":first-child"), s = n.positioned ? n.width : i.width + n.padding, c = n.positioned ? n.height : i.height + n.padding, l = n.positioned ? -s / 2 : -i.width / 2 - a, u = n.positioned ? -c / 2 : -i.height / 2 - a;
	if (o.attr("class", "basic label-container").attr("style", n.style).attr("rx", n.rx).attr("ry", n.ry).attr("x", l).attr("y", u).attr("width", s).attr("height", c), n.props) {
		let e = new Set(Object.keys(n.props));
		n.props.borders && (Z(o, n.props.borders, s, c), e.delete("borders")), e.forEach((e) => {
			t.warn(`Unknown node property ${e}`);
		});
	}
	return J(n, o), n.intersect = function(e) {
		return K.rect(n, e);
	}, r;
}, "rect"), rt = /* @__PURE__ */ e(async (e, n) => {
	let { shapeSvg: r, bbox: i, halfPadding: a } = await q(e, n, "node " + n.classes, !0), o = r.insert("rect", ":first-child"), s = n.positioned ? n.width : i.width + n.padding, c = n.positioned ? n.height : i.height + n.padding, l = n.positioned ? -s / 2 : -i.width / 2 - a, u = n.positioned ? -c / 2 : -i.height / 2 - a;
	if (o.attr("class", "basic cluster composite label-container").attr("style", n.style).attr("rx", n.rx).attr("ry", n.ry).attr("x", l).attr("y", u).attr("width", s).attr("height", c), n.props) {
		let e = new Set(Object.keys(n.props));
		n.props.borders && (Z(o, n.props.borders, s, c), e.delete("borders")), e.forEach((e) => {
			t.warn(`Unknown node property ${e}`);
		});
	}
	return J(n, o), n.intersect = function(e) {
		return K.rect(n, e);
	}, r;
}, "composite"), it = /* @__PURE__ */ e(async (e, n) => {
	let { shapeSvg: r } = await q(e, n, "label", !0);
	t.trace("Classes = ", n.class);
	let i = r.insert("rect", ":first-child");
	if (i.attr("width", 0).attr("height", 0), r.attr("class", "label edgeLabel"), n.props) {
		let e = new Set(Object.keys(n.props));
		n.props.borders && (Z(i, n.props.borders, 0, 0), e.delete("borders")), e.forEach((e) => {
			t.warn(`Unknown node property ${e}`);
		});
	}
	return J(n, i), n.intersect = function(e) {
		return K.rect(n, e);
	}, r;
}, "labelRect");
function Z(n, r, i, a) {
	let o = [], s = /* @__PURE__ */ e((e) => {
		o.push(e, 0);
	}, "addBorder"), c = /* @__PURE__ */ e((e) => {
		o.push(0, e);
	}, "skipBorder");
	r.includes("t") ? (t.debug("add top border"), s(i)) : c(i), r.includes("r") ? (t.debug("add right border"), s(a)) : c(a), r.includes("b") ? (t.debug("add bottom border"), s(i)) : c(i), r.includes("l") ? (t.debug("add left border"), s(a)) : c(a), n.attr("stroke-dasharray", o.join(" "));
}
e(Z, "applyNodePropertyBorders");
var at = /* @__PURE__ */ e(async (e, n) => {
	let r;
	r = n.classes ? "node " + n.classes : "node default";
	let i = e.insert("g").attr("class", r).attr("id", n.domId || n.id), a = i.insert("rect", ":first-child"), o = i.insert("line"), s = i.insert("g").attr("class", "label"), u = n.labelText.flat ? n.labelText.flat() : n.labelText, d = "";
	d = typeof u == "object" ? u[0] : u, t.info("Label text abc79", d, u, typeof u == "object");
	let p = await V(s, d, n.labelStyle, !0, !0), m = {
		width: 0,
		height: 0
	};
	if (l(c())) {
		let e = p.children[0], t = f(p);
		m = e.getBoundingClientRect(), t.attr("width", m.width), t.attr("height", m.height);
	}
	t.info("Text 2", u);
	let h = u.slice(1, u.length), g = p.getBBox(), _ = await V(s, h.join ? h.join("<br/>") : h, n.labelStyle, !0, !0);
	if (l(c())) {
		let e = _.children[0], t = f(_);
		m = e.getBoundingClientRect(), t.attr("width", m.width), t.attr("height", m.height);
	}
	let v = n.padding / 2;
	return f(_).attr("transform", "translate( " + (m.width > g.width ? 0 : (g.width - m.width) / 2) + ", " + (g.height + v + 5) + ")"), f(p).attr("transform", "translate( " + (m.width < g.width ? 0 : -(g.width - m.width) / 2) + ", 0)"), m = s.node().getBBox(), s.attr("transform", "translate(" + -m.width / 2 + ", " + (-m.height / 2 - v + 3) + ")"), a.attr("class", "outer title-state").attr("x", -m.width / 2 - v).attr("y", -m.height / 2 - v).attr("width", m.width + n.padding).attr("height", m.height + n.padding), o.attr("class", "divider").attr("x1", -m.width / 2 - v).attr("x2", m.width / 2 + v).attr("y1", -m.height / 2 - v + g.height + v).attr("y2", -m.height / 2 - v + g.height + v), J(n, a), n.intersect = function(e) {
		return K.rect(n, e);
	}, i;
}, "rectWithTitle"), ot = /* @__PURE__ */ e(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await q(e, t, X(t, void 0), !0), i = r.height + t.padding, a = r.width + i / 4 + t.padding;
	return J(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 K.rect(t, e);
	}, n;
}, "stadium"), st = /* @__PURE__ */ e(async (e, n) => {
	let { shapeSvg: r, bbox: i, halfPadding: a } = await q(e, n, X(n, void 0), !0), o = r.insert("circle", ":first-child");
	return o.attr("style", n.style).attr("rx", n.rx).attr("ry", n.ry).attr("r", i.width / 2 + a).attr("width", i.width + n.padding).attr("height", i.height + n.padding), t.info("Circle main"), J(n, o), n.intersect = function(e) {
		return t.info("Circle intersect", n, i.width / 2 + a, e), K.circle(n, i.width / 2 + a, e);
	}, r;
}, "circle"), ct = /* @__PURE__ */ e(async (e, n) => {
	let { shapeSvg: r, bbox: i, halfPadding: a } = await q(e, n, X(n, void 0), !0), o = r.insert("g", ":first-child"), s = o.insert("circle"), c = o.insert("circle");
	return o.attr("class", n.class), s.attr("style", n.style).attr("rx", n.rx).attr("ry", n.ry).attr("r", i.width / 2 + a + 5).attr("width", i.width + n.padding + 10).attr("height", i.height + n.padding + 10), c.attr("style", n.style).attr("rx", n.rx).attr("ry", n.ry).attr("r", i.width / 2 + a).attr("width", i.width + n.padding).attr("height", i.height + n.padding), t.info("DoubleCircle main"), J(n, s), n.intersect = function(e) {
		return t.info("DoubleCircle intersect", n, i.width / 2 + a + 5, e), K.circle(n, i.width / 2 + a + 5, e);
	}, r;
}, "doublecircle"), lt = /* @__PURE__ */ e(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await q(e, t, X(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 = Y(n, i, a, o);
	return s.attr("style", t.style), J(t, s), t.intersect = function(e) {
		return K.polygon(t, o, e);
	}, n;
}, "subroutine"), ut = /* @__PURE__ */ e((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), J(t, r), t.intersect = function(e) {
		return K.circle(t, 7, e);
	}, n;
}, "start"), dt = /* @__PURE__ */ e((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), J(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 K.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__ */ e((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), J(t, i), t.intersect = function(e) {
			return K.circle(t, 7, e);
		}, n;
	}, "end"),
	note: Ue,
	subroutine: lt,
	fork: dt,
	join: dt,
	class_box: /* @__PURE__ */ e(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"), u = 0, d = 4, p = i.insert("g").attr("class", "label"), m = 0, h = t.classData.annotations?.[0], g = await V(p, t.classData.annotations[0] ? "«" + t.classData.annotations[0] + "»" : "", t.labelStyle, !0, !0), _ = g.getBBox();
		if (l(c())) {
			let e = g.children[0], t = f(g);
			_ = e.getBoundingClientRect(), t.attr("width", _.width), t.attr("height", _.height);
		}
		t.classData.annotations[0] && (d += _.height + 4, u += _.width);
		let v = t.classData.label;
		t.classData.type !== void 0 && t.classData.type !== "" && (l(c()) ? v += "&lt;" + t.classData.type + "&gt;" : v += "<" + t.classData.type + ">");
		let y = await V(p, v, t.labelStyle, !0, !0);
		f(y).attr("class", "classTitle");
		let b = y.getBBox();
		if (l(c())) {
			let e = y.children[0], t = f(y);
			b = e.getBoundingClientRect(), t.attr("width", b.width), t.attr("height", b.height);
		}
		d += b.height + 4, b.width > u && (u = b.width);
		let x = [];
		t.classData.members.forEach(async (e) => {
			let n = e.getDisplayDetails(), r = n.displayText;
			l(c()) && (r = r.replace(/</g, "&lt;").replace(/>/g, "&gt;"));
			let i = await V(p, r, n.cssStyle ? n.cssStyle : t.labelStyle, !0, !0), a = i.getBBox();
			if (l(c())) {
				let e = i.children[0], t = f(i);
				a = e.getBoundingClientRect(), t.attr("width", a.width), t.attr("height", a.height);
			}
			a.width > u && (u = a.width), d += a.height + 4, x.push(i);
		}), d += 8;
		let S = [];
		if (t.classData.methods.forEach(async (e) => {
			let n = e.getDisplayDetails(), r = n.displayText;
			l(c()) && (r = r.replace(/</g, "&lt;").replace(/>/g, "&gt;"));
			let i = await V(p, r, n.cssStyle ? n.cssStyle : t.labelStyle, !0, !0), a = i.getBBox();
			if (l(c())) {
				let e = i.children[0], t = f(i);
				a = e.getBoundingClientRect(), t.attr("width", a.width), t.attr("height", a.height);
			}
			a.width > u && (u = a.width), d += a.height + 4, S.push(i);
		}), d += 8, h) {
			let e = (u - _.width) / 2;
			f(g).attr("transform", "translate( " + (-1 * u / 2 + e) + ", " + -1 * d / 2 + ")"), m = _.height + 4;
		}
		let C = (u - b.width) / 2;
		return f(y).attr("transform", "translate( " + (-1 * u / 2 + C) + ", " + (-1 * d / 2 + m) + ")"), m += b.height + 4, o.attr("class", "divider").attr("x1", -u / 2 - n).attr("x2", u / 2 + n).attr("y1", -d / 2 - n + 8 + m).attr("y2", -d / 2 - n + 8 + m), m += 8, x.forEach((e) => {
			f(e).attr("transform", "translate( " + -u / 2 + ", " + (-1 * d / 2 + m + 8 / 2) + ")");
			let t = e?.getBBox();
			m += (t?.height ?? 0) + 4;
		}), m += 8, s.attr("class", "divider").attr("x1", -u / 2 - n).attr("x2", u / 2 + n).attr("y1", -d / 2 - n + 8 + m).attr("y2", -d / 2 - n + 8 + m), m += 8, S.forEach((e) => {
			f(e).attr("transform", "translate( " + -u / 2 + ", " + (-1 * d / 2 + m) + ")");
			let t = e?.getBBox();
			m += (t?.height ?? 0) + 4;
		}), a.attr("style", t.style).attr("class", "outer title-state").attr("x", -u / 2 - n).attr("y", -(d / 2) - n).attr("width", u + t.padding).attr("height", d + t.padding), J(t, a), t.intersect = function(e) {
			return K.rect(t, e);
		}, i;
	}, "class_box")
}, Q = {}, pt = /* @__PURE__ */ e(async (e, t, n) => {
	let r, i;
	if (t.link) {
		let a;
		c().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), Q[t.id] = r, t.haveCallback && Q[t.id].attr("class", Q[t.id].attr("class") + " clickable"), r;
}, "insertNode"), mt = /* @__PURE__ */ e((e) => {
	let n = Q[e.id];
	t.trace("Transforming node", e.diff, e, "translate(" + (e.x - e.width / 2 - 5) + ", " + e.width / 2 + ")");
	let r = e.diff || 0;
	return e.clusterNode ? n.attr("transform", "translate(" + (e.x + r - e.width / 2) + ", " + (e.y - e.height / 2 - 8) + ")") : n.attr("transform", "translate(" + e.x + ", " + e.y + ")"), r;
}, "positionNode");
function ht(e, t, n = !1) {
	let r = e, i = "default";
	(r?.classes?.length || 0) > 0 && (i = (r?.classes ?? []).join(" ")), i += " flowchart-label";
	let a = 0, o = "", c;
	switch (r.type) {
		case "round":
			a = 5, o = "rect";
			break;
		case "composite":
			a = 0, o = "composite", c = 0;
			break;
		case "square":
			o = "rect";
			break;
		case "diamond":
			o = "question";
			break;
		case "hexagon":
			o = "hexagon";
			break;
		case "block_arrow":
			o = "block_arrow";
			break;
		case "odd":
			o = "rect_left_inv_arrow";
			break;
		case "lean_right":
			o = "lean_right";
			break;
		case "lean_left":
			o = "lean_left";
			break;
		case "trapezoid":
			o = "trapezoid";
			break;
		case "inv_trapezoid":
			o = "inv_trapezoid";
			break;
		case "rect_left_inv_arrow":
			o = "rect_left_inv_arrow";
			break;
		case "circle":
			o = "circle";
			break;
		case "ellipse":
			o = "ellipse";
			break;
		case "stadium":
			o = "stadium";
			break;
		case "subroutine":
			o = "subroutine";
			break;
		case "cylinder":
			o = "cylinder";
			break;
		case "group":
			o = "rect";
			break;
		case "doublecircle":
			o = "doublecircle";
			break;
		default: o = "rect";
	}
	let l = v(r?.styles ?? []), u = r.label, d = r.size ?? {
		width: 0,
		height: 0,
		x: 0,
		y: 0
	}, f = t.getDiagramId();
	return {
		labelStyle: l.labelStyle,
		shape: o,
		labelText: u,
		rx: a,
		ry: a,
		class: i,
		style: l.style,
		id: r.id,
		domId: f ? `${f}-${r.id}` : r.id,
		directions: r.directions,
		width: d.width,
		height: d.height,
		x: d.x,
		y: d.y,
		positioned: n,
		intersect: void 0,
		type: r.type,
		padding: c ?? s()?.block?.padding ?? 0
	};
}
e(ht, "getNodeFromBlock");
async function gt(e, t, n) {
	let r = ht(t, n, !1);
	if (r.type === "group") return;
	let i = await pt(e, r, { config: s() }), 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();
}
e(gt, "calculateBlockSize");
async function _t(e, t, n) {
	let r = ht(t, n, !0);
	n.getBlock(r.id).type !== "space" && (await pt(e, r, { config: s() }), t.intersect = r?.intersect, mt(r));
}
e(_t, "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);
}
e($, "performOperations");
async function vt(e, t, n) {
	await $(e, t, n, gt);
}
e(vt, "calculateBlockSizes");
async function yt(e, t, n) {
	await $(e, t, n, _t);
}
e(yt, "insertBlocks");
async function bt(e, t, n, r, i) {
	let a = new T({
		multigraph: !0,
		compound: !0
	});
	a.setGraph({
		rankdir: "TB",
		nodesep: 10,
		ranksep: 10,
		marginx: 8,
		marginy: 8
	});
	for (let e of n) e.size && a.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), o = r.getBlock(n.end);
		if (t?.size && o?.size) {
			let r = t.size, s = o.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
				}
			], l = i ? `${i}-${n.id}` : n.id;
			Ae(e, {
				v: n.start,
				w: n.end,
				name: l
			}, {
				...n,
				id: l,
				arrowTypeEnd: n.arrowTypeEnd,
				arrowTypeStart: n.arrowTypeStart,
				points: c,
				classes: "edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"
			}, void 0, "block", a, 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 }));
		}
	}
}
e(bt, "insertEdges");
var xt = {
	parser: D,
	db: he,
	renderer: {
		draw: /* @__PURE__ */ e(async function(e, n, r, i) {
			let { securityLevel: a, block: c } = s(), l = i.db;
			l.setDiagramId(n);
			let u;
			a === "sandbox" && (u = f("#i" + n));
			let d = f(a === "sandbox" ? u.nodes()[0].contentDocument.body : "body"), p = a === "sandbox" ? d.select(`[id="${n}"]`) : f(`[id="${n}"]`);
			ye(p, [
				"point",
				"circle",
				"cross"
			], i.type, n);
			let m = l.getBlocks(), h = l.getBlocksFlat(), g = l.getEdges(), _ = p.insert("g").attr("class", "block");
			await vt(_, m, l);
			let v = xe(l);
			if (await yt(_, m, l), await bt(_, g, h, l, n), v) {
				let e = v, n = Math.max(1, Math.round(.125 * (e.width / e.height))), r = e.height + n + 10, i = e.width + 10, { useMaxWidth: a } = c;
				o(p, r, i, !!a), t.debug("Here Bounds", v, e), p.attr("viewBox", `${e.x - 5} ${e.y - 5} ${e.width + 10} ${e.height + 10}`);
			}
		}, "draw"),
		getClasses: /* @__PURE__ */ e(function(e, t) {
			return t.db.getClasses();
		}, "getClasses")
	},
	styles: ge
};
//#endregion
export { xt as diagram };
