import { w as e } from "./src-9kyTNi70.js";
import { n as t, r as n } from "./src-DsDbTxqE.js";
import { O as r, T as i, a, b as o, c as s, rt as c, s as l, x as u, z as d } from "./chunk-CSCIHK7Q-C4xvUEFK.js";
import { t as f } from "./channel-D8k1Grbh.js";
import { A as p, B as m, C as h, D as g, E as _, F as v, H as y, I as b, L as x, M as S, N as C, O as w, P as T, R as E, S as D, T as O, U as k, V as A, W as j, a as M, et as ee, g as N, j as te, k as ne, l as re, v as ie, w as ae, x as oe, z as se } from "./chunk-5ZQYHXKU-BD_i0OiX.js";
import { t as ce } from "./line-DNk5Q4Hr.js";
import { n as le } from "./chunk-O5CBEL6O-BiQWlWIi.js";
import { t as ue } from "./chunk-FMBD7UC4-Q_-vtI4n.js";
import { n as de, t as P } from "./chunk-BSJP7CBP-Y4RvC_3X.js";
import { n as fe, t as pe } from "./chunk-L5ZTLDWV-jNHhGxZV.js";
import { t as me } from "./graphlib-VMWSbyYi.js";
//#region node_modules/es-toolkit/dist/compat/predicate/isArray.mjs
function he(e) {
	return Array.isArray(e);
}
//#endregion
//#region node_modules/es-toolkit/dist/compat/object/clone.mjs
function ge(e) {
	if (j(e)) return e;
	let t = k(e);
	if (!_e(e)) return {};
	if (he(e)) {
		let t = Array.from(e);
		return e.length > 0 && typeof e[0] == "string" && Object.hasOwn(e, "index") && (t.index = e.index, t.input = e.input), t;
	}
	if (ie(e)) {
		let t = e, n = t.constructor;
		return new n(t.buffer, t.byteOffset, t.length);
	}
	if (t === "[object ArrayBuffer]") return new ArrayBuffer(e.byteLength);
	if (t === "[object DataView]") {
		let t = e, n = t.buffer, r = t.byteOffset, i = t.byteLength, a = new ArrayBuffer(i), o = new Uint8Array(n, r, i);
		return new Uint8Array(a).set(o), new DataView(a);
	}
	if (t === "[object Boolean]" || t === "[object Number]" || t === "[object String]") {
		let n = e.constructor, r = new n(e.valueOf());
		return t === "[object String]" ? be(r, e) : ve(r, e), r;
	}
	if (t === "[object Date]") return new Date(Number(e));
	if (t === "[object RegExp]") {
		let t = e, n = new RegExp(t.source, t.flags);
		return n.lastIndex = t.lastIndex, n;
	}
	if (t === "[object Symbol]") return Object(Symbol.prototype.valueOf.call(e));
	if (t === "[object Map]") {
		let t = e, n = /* @__PURE__ */ new Map();
		return t.forEach((e, t) => {
			n.set(t, e);
		}), n;
	}
	if (t === "[object Set]") {
		let t = e, n = /* @__PURE__ */ new Set();
		return t.forEach((e) => {
			n.add(e);
		}), n;
	}
	if (t === "[object Arguments]") {
		let t = e, n = {};
		return ve(n, t), n.length = t.length, n[Symbol.iterator] = t[Symbol.iterator], n;
	}
	let n = {};
	return xe(n, e), ve(n, e), ye(n, e), n;
}
function _e(e) {
	switch (k(e)) {
		case oe:
		case h:
		case D:
		case O:
		case ae:
		case _:
		case g:
		case w:
		case te:
		case ne:
		case p:
		case S:
		case C:
		case T:
		case v:
		case b:
		case x:
		case E:
		case A:
		case y:
		case se:
		case m: return !0;
		default: return !1;
	}
}
function ve(e, t) {
	for (let n in t) Object.hasOwn(t, n) && (e[n] = t[n]);
}
function ye(e, t) {
	let n = Object.getOwnPropertySymbols(t);
	for (let r = 0; r < n.length; r++) {
		let i = n[r];
		Object.prototype.propertyIsEnumerable.call(t, i) && (e[i] = t[i]);
	}
}
function be(e, t) {
	let n = t.valueOf().length;
	for (let r in t) Object.hasOwn(t, r) && (Number.isNaN(Number(r)) || Number(r) >= n) && (e[r] = t[r]);
}
function xe(e, t) {
	let n = Object.getPrototypeOf(t);
	n !== null && typeof t.constructor == "function" && Object.setPrototypeOf(e, n);
}
//#endregion
//#region node_modules/mermaid/dist/chunks/mermaid.core/blockDiagram-GPEHLZMM.mjs
var Se = (function() {
	var e = /* @__PURE__ */ t(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__ */ t(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__ */ t(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]), n = r.generateId();
					this.$ = {
						id: n,
						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 i = r.edgeStrToEdgeData(a[s - 1].edgeTypeStr), o = r.edgeStrToEdgeStartData(a[s - 1].edgeTypeStr), c = r.edgeStrToThickness(a[s - 1].edgeTypeStr), l = r.edgeStrToPattern(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",
							thickness: c,
							pattern: l,
							directions: a[s].directions,
							arrowTypeEnd: i,
							arrowTypeStart: o
						},
						{
							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]);
					let u = r.generateId();
					this.$ = {
						id: u,
						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] },
			e(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
			}),
			e(d, [2, 16], {
				14: 22,
				15: f,
				16: p
			}),
			e(d, [2, 17]),
			e(d, [2, 18]),
			e(d, [2, 19]),
			e(d, [2, 20]),
			e(d, [2, 21]),
			e(d, [2, 22]),
			e(m, [2, 25], { 27: [1, 25] }),
			e(d, [2, 26]),
			{
				19: 26,
				26: 12,
				31: 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] },
			e(h, [2, 29], {
				32: 32,
				35: [1, 33],
				37: [1, 34]
			}),
			{ 1: [2, 7] },
			e(u, [2, 13]),
			{
				26: 35,
				31: o
			},
			{ 31: [2, 14] },
			{ 17: [1, 36] },
			e(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] },
			e(h, [2, 30]),
			{ 18: [1, 43] },
			{ 18: [1, 44] },
			e(m, [2, 23]),
			{ 18: [1, 45] },
			{ 30: [1, 46] },
			e(d, [2, 28]),
			e(d, [2, 35]),
			e(d, [2, 36]),
			e(d, [2, 37]),
			e(d, [2, 38]),
			{ 36: [1, 47] },
			{
				33: 48,
				34: g
			},
			{ 15: [1, 50] },
			e(d, [2, 27]),
			e(h, [2, 33]),
			{ 38: [1, 51] },
			{
				33: 52,
				34: g,
				38: [2, 31]
			},
			{ 31: [2, 15] },
			e(h, [2, 34]),
			{ 38: [2, 32] }
		],
		defaultActions: {
			20: [2, 7],
			23: [2, 14],
			50: [2, 15],
			52: [2, 32]
		},
		parseError: /* @__PURE__ */ t(function(e, t) {
			if (t.recoverable) this.trace(e);
			else {
				var n = Error(e);
				throw n.hash = t, n;
			}
		}, "parseError"),
		parse: /* @__PURE__ */ t(function(e) {
			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(e, 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;
			}
			t(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;
			}
			t(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__ */ t(function(e, t) {
				if (this.yy.parser) this.yy.parser.parseError(e, t);
				else throw Error(e);
			}, "parseError"),
			setInput: /* @__PURE__ */ t(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__ */ t(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__ */ t(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__ */ t(function() {
				return this._more = !0, this;
			}, "more"),
			reject: /* @__PURE__ */ t(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__ */ t(function(e) {
				this.unput(this.match.slice(e));
			}, "less"),
			pastInput: /* @__PURE__ */ t(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__ */ t(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__ */ t(function() {
				var e = this.pastInput(), t = Array(e.length + 1).join("-");
				return e + this.upcomingInput() + "\n" + t + "^";
			}, "showPosition"),
			test_match: /* @__PURE__ */ t(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__ */ t(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__ */ t(function() {
				return this.next() || this.lex();
			}, "lex"),
			begin: /* @__PURE__ */ t(function(e) {
				this.conditionStack.push(e);
			}, "begin"),
			popState: /* @__PURE__ */ t(function() {
				return this.conditionStack.length - 1 > 0 ? this.conditionStack.pop() : this.conditionStack[0];
			}, "popState"),
			_currentRules: /* @__PURE__ */ t(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__ */ t(function(e) {
				return e = this.conditionStack.length - 1 - Math.abs(e || 0), e >= 0 ? this.conditionStack[e] : "INITIAL";
			}, "topState"),
			pushState: /* @__PURE__ */ t(function(e) {
				this.begin(e);
			}, "pushState"),
			stateStackSize: /* @__PURE__ */ t(function() {
				return this.conditionStack.length;
			}, "stateStackSize"),
			options: {},
			performAction: /* @__PURE__ */ t(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 t(v, "Parser"), v.prototype = _, _.Parser = v, new v();
})();
Se.parser = Se;
var Ce = Se, F = /* @__PURE__ */ new Map(), I = [], L = /* @__PURE__ */ new Map(), we = "color", Te = "fill", Ee = "bgFill", De = ",", Oe = u(), R = /* @__PURE__ */ new Map(), z = "", ke = /* @__PURE__ */ t((e) => l.sanitizeText(e, Oe), "sanitizeText"), Ae = /* @__PURE__ */ t(function(e, t = "") {
	let n = R.get(e);
	n || (n = {
		id: e,
		styles: [],
		textStyles: []
	}, R.set(e, n)), t?.split(De).forEach((e) => {
		let t = e.replace(/([^;]*);/, "$1").trim();
		if (RegExp(we).exec(e)) {
			let e = t.replace(Te, Ee).replace(we, Te);
			n.textStyles.push(e);
		}
		n.styles.push(t);
	});
}, "addStyleClass"), je = /* @__PURE__ */ t(function(e, t = "") {
	let n = F.get(e);
	t != null && (n.styles = t.split(De));
}, "addStyle2Node"), Me = /* @__PURE__ */ t(function(e, t) {
	e.split(",").forEach(function(e) {
		let n = F.get(e);
		if (n === void 0) {
			let t = e.trim();
			n = {
				id: t,
				type: "na",
				children: []
			}, F.set(t, n);
		}
		n.classes ||= [], n.classes.push(t);
	});
}, "setCssClass"), Ne = /* @__PURE__ */ t((e, t) => {
	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 && n.warn(`Block ${e.id} width ${e.widthInColumns} exceeds configured column width ${a}`), e.label &&= ke(e.label), e.type === "classDef") {
			Ae(e.id, e.css);
			continue;
		}
		if (e.type === "applyClass") {
			Me(e.id, e?.styleClass ?? "");
			continue;
		}
		if (e.type === "applyStyles") {
			e?.stylesStr && je(e.id, e?.stylesStr);
			continue;
		}
		if (e.type === "column-setting") t.columns = e.columns ?? -1;
		else if (e.type === "edge") {
			let t = (L.get(e.id) ?? 0) + 1;
			L.set(e.id, t), e.id = t + "-" + e.id, I.push(e);
		} else {
			e.label || (e.type === "composite" ? e.label = "" : e.label = e.id);
			let t = F.get(e.id);
			if (t === void 0 ? F.set(e.id, e) : (e.type !== "na" && (t.type = e.type), e.label !== e.id && (t.label = e.label)), e.children && Ne(e.children, e), e.type === "space") {
				let t = e.width ?? 1;
				for (let n = 0; n < t; n++) {
					let t = ge(e);
					t.id = t.id + "-" + n, F.set(t.id, t), i.push(t);
				}
			} else t === void 0 && i.push(e);
		}
	}
	t.children = i;
}, "populateBlockDatabase"), Pe = [], B = {
	id: "root",
	type: "composite",
	children: [],
	columns: -1
}, Fe = /* @__PURE__ */ t(() => {
	n.debug("Clear called"), a(), B = {
		id: "root",
		type: "composite",
		children: [],
		columns: -1
	}, F = /* @__PURE__ */ new Map([["root", B]]), Pe = [], R = /* @__PURE__ */ new Map(), I = [], L = /* @__PURE__ */ new Map(), z = "";
}, "clear");
function Ie(e) {
	switch (n.debug("typeStr2Type", e), e) {
		case "[]": return "square";
		case "()": return n.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";
	}
}
t(Ie, "typeStr2Type");
function Le(e) {
	switch (n.debug("typeStr2Type", e), e) {
		case "==": return "thick";
		default: return "normal";
	}
}
t(Le, "edgeTypeStr2Type");
function Re(e) {
	switch (e.trim().slice(-1)) {
		case "x": return "arrow_cross";
		case "o": return "arrow_circle";
		case ">": return "arrow_point";
		default: return "";
	}
}
t(Re, "edgeStrToEdgeData");
function ze(e) {
	switch (e.trim().charAt(0)) {
		case "x": return "arrow_cross";
		case "o": return "arrow_circle";
		case "<": return "arrow_point";
		default: return "arrow_open";
	}
}
t(ze, "edgeStrToEdgeStartData");
function Be(e) {
	return e.includes("==") ? "thick" : "normal";
}
t(Be, "edgeStrToThickness");
function Ve(e) {
	return e.includes(".-") ? "dotted" : "solid";
}
t(Ve, "edgeStrToPattern");
var He = 0, Ue = {
	getConfig: /* @__PURE__ */ t(() => o().block, "getConfig"),
	typeStr2Type: Ie,
	edgeTypeStr2Type: Le,
	edgeStrToEdgeData: Re,
	edgeStrToEdgeStartData: ze,
	edgeStrToThickness: Be,
	edgeStrToPattern: Ve,
	getLogger: /* @__PURE__ */ t(() => n, "getLogger"),
	getBlocksFlat: /* @__PURE__ */ t(() => [...F.values()], "getBlocksFlat"),
	getBlocks: /* @__PURE__ */ t(() => Pe || [], "getBlocks"),
	getEdges: /* @__PURE__ */ t(() => I, "getEdges"),
	setHierarchy: /* @__PURE__ */ t((e) => {
		B.children = e, Ne(e, B), Pe = B.children;
	}, "setHierarchy"),
	getBlock: /* @__PURE__ */ t((e) => F.get(e), "getBlock"),
	setBlock: /* @__PURE__ */ t((e) => {
		F.set(e.id, e);
	}, "setBlock"),
	getColumns: /* @__PURE__ */ t((e) => {
		let t = F.get(e);
		return t ? t.columns ? t.columns : t.children ? t.children.length : -1 : -1;
	}, "getColumns"),
	getClasses: /* @__PURE__ */ t(function() {
		return R;
	}, "getClasses"),
	clear: Fe,
	generateId: /* @__PURE__ */ t(() => (He++, "id-" + Math.random().toString(36).substr(2, 12) + "-" + He), "generateId"),
	setDiagramId: /* @__PURE__ */ t((e) => {
		z = e;
	}, "setDiagramId"),
	getDiagramId: /* @__PURE__ */ t(() => z, "getDiagramId")
}, We = /* @__PURE__ */ t((e, t) => {
	let n = f;
	return c(n(e, "r"), n(e, "g"), n(e, "b"), t);
}, "fade"), Ge = /* @__PURE__ */ t((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: ${We(e.mainBkg, .5)};
    fill: ${We(e.clusterBkg, .5)};
    stroke: ${We(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};
  }
  ${ue()}
`, "getStyles"), Ke = /* @__PURE__ */ t((e, t, n, r) => {
	t.forEach((t) => {
		qe[t](e, n, r);
	});
}, "insertMarkers"), qe = {
	extension: /* @__PURE__ */ t((e, t, r) => {
		n.trace("Making markers for ", r), e.append("defs").append("marker").attr("id", r + "_" + t + "-extensionStart").attr("class", "marker extension " + t).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"), e.append("defs").append("marker").attr("id", r + "_" + t + "-extensionEnd").attr("class", "marker extension " + t).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z");
	}, "extension"),
	composition: /* @__PURE__ */ t((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__ */ t((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__ */ t((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__ */ t((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__ */ t((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__ */ t((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__ */ t((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__ */ t((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")
}, Je = Ke, V = u()?.block?.padding ?? 8;
function Ye(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)
	};
}
t(Ye, "calculateBlockPosition");
var Xe = /* @__PURE__ */ t((e) => {
	let t = 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
		};
		if (n.debug("getMaxChildSize abc95 child:", i.id, "width:", e, "height:", a, "x:", o, "y:", s, i.type), i.type === "space") continue;
		let c = e / (i.widthInColumns ?? 1);
		c > t && (t = c), a > r && (r = a);
	}
	return {
		width: t,
		height: r
	};
}, "getMaxChildSize");
function H(e, t, r = 0, i = 0) {
	n.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 n of e.children) H(n, t);
		let s = Xe(e);
		a = s.width, o = s.height, n.debug("setBlockSizes abc95 maxWidth of", e.id, ":s children is ", a, o);
		for (let t of e.children) t.size && (n.debug(`abc95 Setting size of children of ${e.id} id=${t.id} ${a} ${o} ${JSON.stringify(t.size)}`), t.size.width = a * (t.widthInColumns ?? 1) + V * ((t.widthInColumns ?? 1) - 1), t.size.height = o, t.size.x = 0, t.size.y = 0, n.debug(`abc95 updating size of ${e.id} children child:${t.id} maxWidth:${a} maxHeight:${o}`));
		for (let n of e.children) H(n, t, 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 + V) + V, p = d * (o + V) + V;
		if (f < r) {
			n.debug(`Detected to small sibling: abc95 ${e.id} siblingWidth ${r} siblingHeight ${i} width ${f}`), f = r, p = i;
			let t = (r - u * V - V) / u, s = (i - d * V - V) / d;
			n.debug("Size indata abc88", e.id, "childWidth", t, "maxWidth", a), n.debug("Size indata abc88", e.id, "childHeight", s, "maxHeight", o), n.debug("Size indata abc88 xSize", u, "padding", V);
			for (let n of e.children) n.size && (n.size.width = t, n.size.height = s, n.size.x = 0, n.size.y = 0);
		}
		if (n.debug(`abc95 (finale calc) ${e.id} xSize ${u} ySize ${d} columns ${c}${e.children.length} width=${Math.max(f, e.size?.width || 0)}`), f < (e?.size?.width || 0)) {
			f = e?.size?.width || 0;
			let t = c > 0 ? Math.min(e.children.length, c) : e.children.length;
			if (t > 0) {
				let r = (f - t * V - V) / t;
				n.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
		};
	}
	n.debug("setBlockSizes abc94 (done)", e.id, e?.size?.x, e?.size?.width, e?.size?.y, e?.size?.height);
}
t(H, "setBlockSizes");
function Ze(e, t) {
	n.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 (n.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) * V;
		n.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 } = Ye(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) + V;
		}
		let c = 0;
		n.debug("abc91 block?.size?.x", e.id, e?.size?.x);
		let l = e?.size?.x ? e?.size?.x + (-e?.size?.width / 2 || 0) : -V, 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 } = Ye(r, c);
			if (m != u && (u = m, l = e?.size?.x ? e?.size?.x + (-e?.size?.width / 2 || 0) : -V, n.debug("New row in layout for block", e.id, " and child ", i.id, u)), n.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}${V}`), a.size) {
				let e = d / 2;
				i.size.x = l + V + e, n.debug(`abc91 layout blocks (calc) px, pyid:${i.id} startingPos=X${l} new startingPosX${i.size.x} ${e} padding=${V} 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 t = s.get(m) ?? 0, r = o.get(m) ?? f;
				i.size.y = a.size.y - a.size.height / 2 + t + r / 2 + V, n.debug(`abc88 layout blocks (calc) px, pyid:${i.id}startingPosX${l}${V}${e}=>x:${i.size.x}y:${i.size.y}${i.widthInColumns}(width * (child?.w || 1)) / 2${d * (i?.widthInColumns ?? 1) / 2}`);
			}
			i.children && Ze(i, t);
			let h = i?.widthInColumns ?? 1;
			r > 0 && (h = Math.min(h, r - c % r)), c += h, n.debug("abc88 columnsPos", i, c);
		}
	}
	n.debug(`layout blocks (<==layoutBlocks) ${e.id} x: ${e?.size?.x} y: ${e?.size?.y} width: ${e?.size?.width}`);
}
t(Ze, "layoutBlocks");
function Qe(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} = Qe(a, {
		minX: t,
		minY: n,
		maxX: r,
		maxY: i
	}));
	return {
		minX: t,
		minY: n,
		maxX: r,
		maxY: i
	};
}
t(Qe, "findBounds");
function $e(e) {
	let t = e.getBlock("root");
	if (!t) return;
	H(t, e, 0, 0), Ze(t, e), n.debug("getBlocks", JSON.stringify(t, null, 2));
	let { minX: r, minY: i, maxX: a, maxY: o } = Qe(t), s = o - i;
	return {
		x: r,
		y: i,
		width: a - r,
		height: s
	};
}
t($e, "layout");
var U = /* @__PURE__ */ t(async (e, t, n, r = !1, a = !1) => {
	let o = t || "";
	typeof o == "object" && (o = o[0]);
	let s = u(), c = i(s);
	return await le(e, o, {
		style: n,
		isTitle: r,
		useHtmlLabels: c,
		markdown: !1,
		isNode: a,
		width: Infinity
	}, s);
}, "createLabel"), et = /* @__PURE__ */ t((e, t, n, r, i) => {
	t.arrowTypeStart && nt(e, "start", t.arrowTypeStart, n, r, i), t.arrowTypeEnd && nt(e, "end", t.arrowTypeEnd, n, r, i);
}, "addEdgeMarkers"), tt = {
	arrow_cross: "cross",
	arrow_point: "point",
	arrow_barb: "barb",
	arrow_circle: "circle",
	aggregation: "aggregation",
	extension: "extension",
	composition: "composition",
	dependency: "dependency",
	lollipop: "lollipop"
}, nt = /* @__PURE__ */ t((e, t, r, i, a, o) => {
	let s = tt[r];
	if (!s) {
		n.warn(`Unknown arrow type: ${r}`);
		return;
	}
	let c = t === "start" ? "Start" : "End";
	e.attr(`marker-${t}`, `url(${i}#${a}_${o}-${s}${c})`);
}, "addEdgeMarker"), rt = {}, W = {}, it = /* @__PURE__ */ t(async (t, n) => {
	let r = u(), a = i(r), o = t.insert("g").attr("class", "edgeLabel"), s = o.insert("g").attr("class", "label"), c = n.labelType === "markdown", l = await le(t, n.label, {
		style: n.labelStyle,
		useHtmlLabels: a,
		addSvgBackground: c,
		isNode: !1,
		markdown: c,
		width: c ? void 0 : Infinity
	}, r);
	s.node().appendChild(l);
	let d = l.getBBox(), f = d;
	if (a) {
		let t = l.children[0], n = e(l);
		d = t.getBoundingClientRect(), f = d, n.attr("width", d.width), n.attr("height", d.height);
	} else {
		let t = e(l).select("text").node();
		t && typeof t.getBBox == "function" && (f = t.getBBox());
	}
	s.attr("transform", P(f, a)), rt[n.id] = o, n.width = d.width, n.height = d.height;
	let p;
	if (n.startLabelLeft) {
		let r = t.insert("g").attr("class", "edgeTerminals"), i = r.insert("g").attr("class", "inner"), o = await U(i, n.startLabelLeft, n.labelStyle);
		p = o;
		let s = o.getBBox();
		if (a) {
			let t = o.children[0], n = e(o);
			s = t.getBoundingClientRect(), n.attr("width", s.width), n.attr("height", s.height);
		}
		i.attr("transform", P(s, a)), W[n.id] || (W[n.id] = {}), W[n.id].startLeft = r, G(p, n.startLabelLeft);
	}
	if (n.startLabelRight) {
		let r = t.insert("g").attr("class", "edgeTerminals"), i = r.insert("g").attr("class", "inner"), o = await U(i, n.startLabelRight, n.labelStyle);
		p = o;
		let s = o.getBBox();
		if (a) {
			let t = o.children[0], n = e(o);
			s = t.getBoundingClientRect(), n.attr("width", s.width), n.attr("height", s.height);
		}
		i.attr("transform", P(s, a)), W[n.id] || (W[n.id] = {}), W[n.id].startRight = r, G(p, n.startLabelRight);
	}
	if (n.endLabelLeft) {
		let r = t.insert("g").attr("class", "edgeTerminals"), i = r.insert("g").attr("class", "inner"), o = await U(r, n.endLabelLeft, n.labelStyle);
		p = o;
		let s = o.getBBox();
		if (a) {
			let t = o.children[0], n = e(o);
			s = t.getBoundingClientRect(), n.attr("width", s.width), n.attr("height", s.height);
		}
		i.attr("transform", P(s, a)), W[n.id] || (W[n.id] = {}), W[n.id].endLeft = r, G(p, n.endLabelLeft);
	}
	if (n.endLabelRight) {
		let r = t.insert("g").attr("class", "edgeTerminals"), i = r.insert("g").attr("class", "inner"), o = await U(r, n.endLabelRight, n.labelStyle);
		p = o;
		let s = o.getBBox();
		if (a) {
			let t = o.children[0], n = e(o);
			s = t.getBoundingClientRect(), n.attr("width", s.width), n.attr("height", s.height);
		}
		i.attr("transform", P(s, a)), W[n.id] || (W[n.id] = {}), W[n.id].endRight = r, G(p, n.endLabelRight);
	}
	return l;
}, "insertEdgeLabel");
function G(e, t) {
	i(u()) && e && (e.style.width = t.length * 9 + "px", e.style.height = "12px");
}
t(G, "setTerminalWidth");
var at = /* @__PURE__ */ t((e, t) => {
	n.debug("Moving label abc88 ", e.id, e.label, rt[e.id], t);
	let r = t.updatedPath ? t.updatedPath : t.originalPath, { subGraphTitleTotalMargin: i } = fe(u());
	if (e.label) {
		let a = rt[e.id], o = e.x, s = e.y;
		if (r) {
			let i = N.calcLabelPosition(r);
			n.debug("Moving label " + e.label + " from (", o, ",", s, ") to (", i.x, ",", i.y, ") abc88"), t.updatedPath && (o = i.x, s = i.y);
		}
		a.attr("transform", `translate(${o}, ${s + i / 2})`);
	}
	if (e.startLabelLeft) {
		let t = W[e.id].startLeft, n = e.x, i = e.y;
		if (r) {
			let t = N.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 = W[e.id].startRight, n = e.x, i = e.y;
		if (r) {
			let t = N.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 = W[e.id].endLeft, n = e.x, i = e.y;
		if (r) {
			let t = N.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 = W[e.id].endRight, n = e.x, i = e.y;
		if (r) {
			let t = N.calcTerminalLabelPosition(e.arrowTypeEnd ? 10 : 0, "end_right", r);
			n = t.x, i = t.y;
		}
		t.attr("transform", `translate(${n}, ${i})`);
	}
}, "positionEdgeLabel"), ot = /* @__PURE__ */ t((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"), st = /* @__PURE__ */ t((e, t, r) => {
	n.debug(`intersection calc abc89:
  outsidePoint: ${JSON.stringify(t)}
  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 < t.x ? s - o : s + o, l = e.height / 2, u = Math.abs(t.y - r.y), d = Math.abs(t.x - r.x);
	if (Math.abs(a - t.y) * s > Math.abs(i - t.x) * l) {
		let e = r.y < t.y ? t.y - l - a : a - l - t.y;
		c = d * e / u;
		let i = {
			x: r.x < t.x ? r.x + c : r.x - d + c,
			y: r.y < t.y ? r.y + u - e : r.y - u + e
		};
		return c === 0 && (i.x = t.x, i.y = t.y), d === 0 && (i.x = t.x), u === 0 && (i.y = t.y), n.debug(`abc89 topp/bott calc, Q ${u}, q ${e}, R ${d}, r ${c}`, i), i;
	} else {
		c = r.x < t.x ? t.x - s - i : i - s - t.x;
		let e = u * c / d, a = r.x < t.x ? r.x + d - c : r.x - d + c, o = r.y < t.y ? r.y + e : r.y - e;
		return n.debug(`sides calc abc89, Q ${u}, q ${e}, R ${d}, r ${c}`, {
			_x: a,
			_y: o
		}), c === 0 && (a = t.x, o = t.y), d === 0 && (a = t.x), u === 0 && (o = t.y), {
			x: a,
			y: o
		};
	}
}, "intersection"), ct = /* @__PURE__ */ t((e, t) => {
	n.debug("abc88 cutPathAtIntersect", e, t);
	let r = [], i = e[0], a = !1;
	return e.forEach((e) => {
		if (!ot(t, e) && !a) {
			let n = st(t, i, e), o = !1;
			r.forEach((e) => {
				o ||= e.x === n.x && e.y === n.y;
			}), r.some((e) => e.x === n.x && e.y === n.y) || r.push(n), a = !0;
		} else i = e, a || r.push(e);
	}), r;
}, "cutPathAtIntersect"), lt = /* @__PURE__ */ t(function(e, t, i, a, o, s, c) {
	let l = i.points;
	n.debug("abc88 InsertEdge: edge=", i, "e=", t);
	let d = !1, f = s.node(t.v);
	var p = s.node(t.w);
	p?.intersect && f?.intersect && (l = l.slice(1, i.points.length - 1), l.unshift(f.intersect(l[0])), l.push(p.intersect(l[l.length - 1]))), i.toCluster && (n.debug("to cluster abc88", a[i.toCluster]), l = ct(i.points, a[i.toCluster].node), d = !0), i.fromCluster && (n.debug("from cluster abc88", a[i.fromCluster]), l = ct(l.reverse(), a[i.fromCluster].node).reverse(), d = !0);
	let m = l.filter((e) => !Number.isNaN(e.y)), h = ee;
	i.curve && (o === "graph" || o === "flowchart") && (h = i.curve);
	let { x: g, y: _ } = de(i), v = ce().x(g).y(_).curve(h), y;
	switch (i.thickness) {
		case "normal":
			y = "edge-thickness-normal";
			break;
		case "thick":
			y = "edge-thickness-thick";
			break;
		case "invisible":
			y = "edge-thickness-thick";
			break;
		default: y = "";
	}
	switch (i.pattern) {
		case "solid":
			y += " edge-pattern-solid";
			break;
		case "dotted":
			y += " edge-pattern-dotted";
			break;
		case "dashed":
			y += " edge-pattern-dashed";
			break;
	}
	let b = e.append("path").attr("d", v(m)).attr("id", i.id).attr("class", " " + y + (i.classes ? " " + i.classes : "")).attr("style", i.style), x = "";
	(u().flowchart.arrowMarkerAbsolute || u().state.arrowMarkerAbsolute) && (x = r(!0)), et(b, i, x, c, o);
	let S = {};
	return d && (S.updatedPath = l), S.originalPath = i.points, S;
}, "insertEdge"), ut = /* @__PURE__ */ t((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"), dt = /* @__PURE__ */ t((e, t, n, r) => {
	let i = ut(e), a = t.height + 2 * n.padding, o = a / 2, s = r ?? t.width + 2 * o + n.padding, c = n.padding / 2;
	return i.has("right") && i.has("left") && i.has("up") && i.has("down") ? [
		{
			x: 0,
			y: 0
		},
		{
			x: o,
			y: 0
		},
		{
			x: s / 2,
			y: 2 * c
		},
		{
			x: s - o,
			y: 0
		},
		{
			x: s,
			y: 0
		},
		{
			x: s,
			y: -a / 3
		},
		{
			x: s + 2 * c,
			y: -a / 2
		},
		{
			x: s,
			y: -2 * a / 3
		},
		{
			x: s,
			y: -a
		},
		{
			x: s - o,
			y: -a
		},
		{
			x: s / 2,
			y: -a - 2 * c
		},
		{
			x: o,
			y: -a
		},
		{
			x: 0,
			y: -a
		},
		{
			x: 0,
			y: -2 * a / 3
		},
		{
			x: -2 * c,
			y: -a / 2
		},
		{
			x: 0,
			y: -a / 3
		}
	] : i.has("right") && i.has("left") && i.has("up") ? [
		{
			x: o,
			y: 0
		},
		{
			x: s - o,
			y: 0
		},
		{
			x: s,
			y: -a / 2
		},
		{
			x: s - o,
			y: -a
		},
		{
			x: o,
			y: -a
		},
		{
			x: 0,
			y: -a / 2
		}
	] : i.has("right") && i.has("left") && i.has("down") ? [
		{
			x: 0,
			y: 0
		},
		{
			x: o,
			y: -a
		},
		{
			x: s - o,
			y: -a
		},
		{
			x: s,
			y: 0
		}
	] : i.has("right") && i.has("up") && i.has("down") ? [
		{
			x: 0,
			y: 0
		},
		{
			x: s,
			y: -o
		},
		{
			x: s,
			y: -a + o
		},
		{
			x: 0,
			y: -a
		}
	] : i.has("left") && i.has("up") && i.has("down") ? [
		{
			x: s,
			y: 0
		},
		{
			x: 0,
			y: -o
		},
		{
			x: 0,
			y: -a + o
		},
		{
			x: s,
			y: -a
		}
	] : i.has("right") && i.has("left") ? [
		{
			x: o,
			y: 0
		},
		{
			x: o,
			y: -c
		},
		{
			x: s - o,
			y: -c
		},
		{
			x: s - o,
			y: 0
		},
		{
			x: s,
			y: -a / 2
		},
		{
			x: s - o,
			y: -a
		},
		{
			x: s - o,
			y: -a + c
		},
		{
			x: o,
			y: -a + c
		},
		{
			x: o,
			y: -a
		},
		{
			x: 0,
			y: -a / 2
		}
	] : i.has("up") && i.has("down") ? [
		{
			x: s / 2,
			y: 0
		},
		{
			x: 0,
			y: -c
		},
		{
			x: o,
			y: -c
		},
		{
			x: o,
			y: -a + c
		},
		{
			x: 0,
			y: -a + c
		},
		{
			x: s / 2,
			y: -a
		},
		{
			x: s,
			y: -a + c
		},
		{
			x: s - o,
			y: -a + c
		},
		{
			x: s - o,
			y: -c
		},
		{
			x: s,
			y: -c
		}
	] : i.has("right") && i.has("up") ? [
		{
			x: 0,
			y: 0
		},
		{
			x: s,
			y: -o
		},
		{
			x: 0,
			y: -a
		}
	] : i.has("right") && i.has("down") ? [
		{
			x: 0,
			y: 0
		},
		{
			x: s,
			y: 0
		},
		{
			x: 0,
			y: -a
		}
	] : i.has("left") && i.has("up") ? [
		{
			x: s,
			y: 0
		},
		{
			x: 0,
			y: -o
		},
		{
			x: s,
			y: -a
		}
	] : i.has("left") && i.has("down") ? [
		{
			x: s,
			y: 0
		},
		{
			x: 0,
			y: 0
		},
		{
			x: s,
			y: -a
		}
	] : i.has("right") ? [
		{
			x: o,
			y: -c
		},
		{
			x: o,
			y: -c
		},
		{
			x: s - o,
			y: -c
		},
		{
			x: s - o,
			y: 0
		},
		{
			x: s,
			y: -a / 2
		},
		{
			x: s - o,
			y: -a
		},
		{
			x: s - o,
			y: -a + c
		},
		{
			x: o,
			y: -a + c
		},
		{
			x: o,
			y: -a + c
		}
	] : i.has("left") ? [
		{
			x: o,
			y: 0
		},
		{
			x: o,
			y: -c
		},
		{
			x: s - o,
			y: -c
		},
		{
			x: s - o,
			y: -a + c
		},
		{
			x: o,
			y: -a + c
		},
		{
			x: o,
			y: -a
		},
		{
			x: 0,
			y: -a / 2
		}
	] : i.has("up") ? [
		{
			x: o,
			y: -c
		},
		{
			x: o,
			y: -a + c
		},
		{
			x: 0,
			y: -a + c
		},
		{
			x: s / 2,
			y: -a
		},
		{
			x: s,
			y: -a + c
		},
		{
			x: s - o,
			y: -a + c
		},
		{
			x: s - o,
			y: -c
		}
	] : i.has("down") ? [
		{
			x: s / 2,
			y: 0
		},
		{
			x: 0,
			y: -c
		},
		{
			x: o,
			y: -c
		},
		{
			x: o,
			y: -a + c
		},
		{
			x: s - o,
			y: -a + c
		},
		{
			x: s - o,
			y: -c
		},
		{
			x: s,
			y: -c
		}
	] : [{
		x: 0,
		y: 0
	}];
}, "getArrowPoints");
function ft(e, t) {
	return e.intersect(t);
}
t(ft, "intersectNode");
var pt = ft;
function mt(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
	};
}
t(mt, "intersectEllipse");
var ht = mt;
function gt(e, t, n) {
	return ht(e, t, t, n);
}
t(gt, "intersectCircle");
var _t = gt;
function vt(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 && yt(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 && yt(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
	};
}
t(vt, "intersectLine");
function yt(e, t) {
	return e * t > 0;
}
t(yt, "sameSign");
var bt = vt, xt = St;
function St(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 = bt(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;
}
t(St, "intersectPolygon");
var K = {
	node: pt,
	circle: _t,
	ellipse: ht,
	polygon: xt,
	rect: /* @__PURE__ */ t((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__ */ t(async (t, n, r, a) => {
	let o = u(), s, c = n.useHtmlLabels || i(o);
	s = r || "node default";
	let l = t.insert("g").attr("class", s).attr("id", n.domId || n.id), f = l.insert("g").attr("class", "label").attr("style", n.labelStyle), p;
	p = n.labelText === void 0 ? "" : typeof n.labelText == "string" ? n.labelText : n.labelText[0];
	let m;
	m = n.labelType === "markdown" ? le(f, d(M(p), o), {
		useHtmlLabels: c,
		width: n.width || o.flowchart.wrappingWidth,
		classes: "markdown-node-label"
	}, o) : await U(f, d(M(p), o), n.labelStyle, !1, a);
	let h = m.getBBox(), g = n.padding / 2;
	if (i(o)) {
		let t = m.children[0], n = e(m);
		await pe(t, p), h = t.getBoundingClientRect(), n.attr("width", h.width), n.attr("height", h.height);
	}
	return c ? f.attr("transform", "translate(" + -h.width / 2 + ", " + -h.height / 2 + ")") : f.attr("transform", "translate(0, " + -h.height / 2 + ")"), n.centerLabel && f.attr("transform", "translate(" + -h.width / 2 + ", " + -h.height / 2 + ")"), f.insert("rect", ":first-child"), {
		shapeSvg: l,
		bbox: h,
		halfPadding: g,
		label: f
	};
}, "labelHelper"), J = /* @__PURE__ */ t((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 + ")");
}
t(Y, "insertPolygonShape");
var Ct = /* @__PURE__ */ t(async (e, t) => {
	t.useHtmlLabels || i(u()) || (t.centerLabel = !0);
	let { shapeSvg: r, bbox: a, halfPadding: o } = await q(e, t, "node " + t.classes, !0);
	n.info("Classes = ", t.classes);
	let s = r.insert("rect", ":first-child");
	return s.attr("rx", t.rx).attr("ry", t.ry).attr("x", -a.width / 2 - o).attr("y", -a.height / 2 - o).attr("width", a.width + t.padding).attr("height", a.height + t.padding), J(t, s), t.intersect = function(e) {
		return K.rect(t, e);
	}, r;
}, "note"), wt = /* @__PURE__ */ t((e) => e ? " " + e : "", "formatClass"), X = /* @__PURE__ */ t((e, t) => `${t || "node default"}${wt(e.classes)} ${wt(e.class)}`, "getClassesFromNode"), Tt = /* @__PURE__ */ t(async (e, t) => {
	let { shapeSvg: r, bbox: i } = await q(e, t, X(t, void 0), !0), a = i.width + t.padding + (i.height + t.padding), o = [
		{
			x: a / 2,
			y: 0
		},
		{
			x: a,
			y: -a / 2
		},
		{
			x: a / 2,
			y: -a
		},
		{
			x: 0,
			y: -a / 2
		}
	];
	n.info("Question main (Circle)");
	let s = Y(r, a, a, o);
	return s.attr("style", t.style), J(t, s), t.intersect = function(e) {
		return n.warn("Intersect called"), K.polygon(t, o, e);
	}, r;
}, "question"), Et = /* @__PURE__ */ t((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"), Dt = /* @__PURE__ */ t(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await q(e, t, X(t, void 0), !0), i = t.positioned ? t.height : r.height + t.padding, a = i / 4, o = t.positioned ? t.width : 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"), Ot = /* @__PURE__ */ t(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 = t.positioned && (t.widthInColumns ?? 1) > 1 && t.width > o ? t.width : o, c = dt(t.directions, r, t, s), l = Y(n, s, i, c);
	return l.attr("style", t.style), J(t, l), t.intersect = function(e) {
		return K.polygon(t, c, e);
	}, n;
}, "block_arrow"), kt = /* @__PURE__ */ t(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"), At = /* @__PURE__ */ t(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"), jt = /* @__PURE__ */ t(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"), Mt = /* @__PURE__ */ t(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"), Nt = /* @__PURE__ */ t(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"), Pt = /* @__PURE__ */ t(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"), Ft = /* @__PURE__ */ t(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"), It = /* @__PURE__ */ t(async (e, t) => {
	let { shapeSvg: r, bbox: i, halfPadding: a } = await q(e, t, "node " + t.classes + " " + t.class, !0), o = r.insert("rect", ":first-child"), s = t.positioned ? t.width : i.width + t.padding, c = t.positioned ? t.height : i.height + t.padding, l = t.positioned ? -s / 2 : -i.width / 2 - a, u = t.positioned ? -c / 2 : -i.height / 2 - a;
	if (o.attr("class", "basic label-container").attr("style", t.style).attr("rx", t.rx).attr("ry", t.ry).attr("x", l).attr("y", u).attr("width", s).attr("height", c), t.props) {
		let e = new Set(Object.keys(t.props));
		t.props.borders && (Z(o, t.props.borders, s, c), e.delete("borders")), e.forEach((e) => {
			n.warn(`Unknown node property ${e}`);
		});
	}
	return J(t, o), t.intersect = function(e) {
		return K.rect(t, e);
	}, r;
}, "rect"), Lt = /* @__PURE__ */ t(async (e, t) => {
	let { shapeSvg: r, bbox: i, halfPadding: a } = await q(e, t, "node " + t.classes, !0), o = r.insert("rect", ":first-child"), s = t.positioned ? t.width : i.width + t.padding, c = t.positioned ? t.height : i.height + t.padding, l = t.positioned ? -s / 2 : -i.width / 2 - a, u = t.positioned ? -c / 2 : -i.height / 2 - a;
	if (o.attr("class", "basic cluster composite label-container").attr("style", t.style).attr("rx", t.rx).attr("ry", t.ry).attr("x", l).attr("y", u).attr("width", s).attr("height", c), t.props) {
		let e = new Set(Object.keys(t.props));
		t.props.borders && (Z(o, t.props.borders, s, c), e.delete("borders")), e.forEach((e) => {
			n.warn(`Unknown node property ${e}`);
		});
	}
	return J(t, o), t.intersect = function(e) {
		return K.rect(t, e);
	}, r;
}, "composite"), Rt = /* @__PURE__ */ t(async (e, t) => {
	let { shapeSvg: r } = await q(e, t, "label", !0);
	n.trace("Classes = ", t.class);
	let i = r.insert("rect", ":first-child");
	if (i.attr("width", 0).attr("height", 0), r.attr("class", "label edgeLabel"), t.props) {
		let e = new Set(Object.keys(t.props));
		t.props.borders && (Z(i, t.props.borders, 0, 0), e.delete("borders")), e.forEach((e) => {
			n.warn(`Unknown node property ${e}`);
		});
	}
	return J(t, i), t.intersect = function(e) {
		return K.rect(t, e);
	}, r;
}, "labelRect");
function Z(e, r, i, a) {
	let o = [], s = /* @__PURE__ */ t((e) => {
		o.push(e, 0);
	}, "addBorder"), c = /* @__PURE__ */ t((e) => {
		o.push(0, e);
	}, "skipBorder");
	r.includes("t") ? (n.debug("add top border"), s(i)) : c(i), r.includes("r") ? (n.debug("add right border"), s(a)) : c(a), r.includes("b") ? (n.debug("add bottom border"), s(i)) : c(i), r.includes("l") ? (n.debug("add left border"), s(a)) : c(a), e.attr("stroke-dasharray", o.join(" "));
}
t(Z, "applyNodePropertyBorders");
var zt = /* @__PURE__ */ t(async (t, r) => {
	let a;
	a = r.classes ? "node " + r.classes : "node default";
	let o = t.insert("g").attr("class", a).attr("id", r.domId || r.id), s = o.insert("rect", ":first-child"), c = o.insert("line"), l = o.insert("g").attr("class", "label"), d = r.labelText.flat ? r.labelText.flat() : r.labelText, f = "";
	f = typeof d == "object" ? d[0] : d, n.info("Label text abc79", f, d, typeof d == "object");
	let p = await U(l, f, r.labelStyle, !0, !0), m = {
		width: 0,
		height: 0
	};
	if (i(u())) {
		let t = p.children[0], n = e(p);
		m = t.getBoundingClientRect(), n.attr("width", m.width), n.attr("height", m.height);
	}
	n.info("Text 2", d);
	let h = d.slice(1, d.length), g = p.getBBox(), _ = await U(l, h.join ? h.join("<br/>") : h, r.labelStyle, !0, !0);
	if (i(u())) {
		let t = _.children[0], n = e(_);
		m = t.getBoundingClientRect(), n.attr("width", m.width), n.attr("height", m.height);
	}
	let v = r.padding / 2;
	return e(_).attr("transform", "translate( " + (m.width > g.width ? 0 : (g.width - m.width) / 2) + ", " + (g.height + v + 5) + ")"), e(p).attr("transform", "translate( " + (m.width < g.width ? 0 : -(g.width - m.width) / 2) + ", 0)"), m = l.node().getBBox(), l.attr("transform", "translate(" + -m.width / 2 + ", " + (-m.height / 2 - v + 3) + ")"), s.attr("class", "outer title-state").attr("x", -m.width / 2 - v).attr("y", -m.height / 2 - v).attr("width", m.width + r.padding).attr("height", m.height + r.padding), c.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(r, s), r.intersect = function(e) {
		return K.rect(r, e);
	}, o;
}, "rectWithTitle"), Bt = /* @__PURE__ */ t(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"), Vt = /* @__PURE__ */ t(async (e, t) => {
	let { shapeSvg: r, bbox: i, halfPadding: a } = await q(e, t, X(t, void 0), !0), o = r.insert("circle", ":first-child");
	return o.attr("style", t.style).attr("rx", t.rx).attr("ry", t.ry).attr("r", i.width / 2 + a).attr("width", i.width + t.padding).attr("height", i.height + t.padding), n.info("Circle main"), J(t, o), t.intersect = function(e) {
		return n.info("Circle intersect", t, i.width / 2 + a, e), K.circle(t, i.width / 2 + a, e);
	}, r;
}, "circle"), Ht = /* @__PURE__ */ t(async (e, t) => {
	let { shapeSvg: r, bbox: i, halfPadding: a } = await q(e, t, X(t, void 0), !0), o = r.insert("g", ":first-child"), s = o.insert("circle"), c = o.insert("circle");
	return o.attr("class", t.class), s.attr("style", t.style).attr("rx", t.rx).attr("ry", t.ry).attr("r", i.width / 2 + a + 5).attr("width", i.width + t.padding + 10).attr("height", i.height + t.padding + 10), c.attr("style", t.style).attr("rx", t.rx).attr("ry", t.ry).attr("r", i.width / 2 + a).attr("width", i.width + t.padding).attr("height", i.height + t.padding), n.info("DoubleCircle main"), J(t, s), t.intersect = function(e) {
		return n.info("DoubleCircle intersect", t, i.width / 2 + a + 5, e), K.circle(t, i.width / 2 + a + 5, e);
	}, r;
}, "doublecircle"), Ut = /* @__PURE__ */ t(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"), Wt = /* @__PURE__ */ t((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"), Gt = /* @__PURE__ */ t((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"), Kt = {
	rhombus: Tt,
	composite: Lt,
	question: Tt,
	rect: It,
	labelRect: Rt,
	rectWithTitle: zt,
	choice: Et,
	circle: Vt,
	doublecircle: Ht,
	stadium: Bt,
	hexagon: Dt,
	block_arrow: Ot,
	rect_left_inv_arrow: kt,
	lean_right: At,
	lean_left: jt,
	trapezoid: Mt,
	inv_trapezoid: Nt,
	rect_right_inv_arrow: Pt,
	cylinder: Ft,
	start: Wt,
	end: /* @__PURE__ */ t((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: Ct,
	subroutine: Ut,
	fork: Gt,
	join: Gt,
	class_box: /* @__PURE__ */ t(async (t, n) => {
		let r = n.padding / 2, a;
		a = n.classes ? "node " + n.classes : "node default";
		let o = t.insert("g").attr("class", a).attr("id", n.domId || n.id), s = o.insert("rect", ":first-child"), c = o.insert("line"), l = o.insert("line"), d = 0, f = 4, p = o.insert("g").attr("class", "label"), m = 0, h = n.classData.annotations?.[0], g = await U(p, n.classData.annotations[0] ? "«" + n.classData.annotations[0] + "»" : "", n.labelStyle, !0, !0), _ = g.getBBox();
		if (i(u())) {
			let t = g.children[0], n = e(g);
			_ = t.getBoundingClientRect(), n.attr("width", _.width), n.attr("height", _.height);
		}
		n.classData.annotations[0] && (f += _.height + 4, d += _.width);
		let v = n.classData.label;
		n.classData.type !== void 0 && n.classData.type !== "" && (i(u()) ? v += "&lt;" + n.classData.type + "&gt;" : v += "<" + n.classData.type + ">");
		let y = await U(p, v, n.labelStyle, !0, !0);
		e(y).attr("class", "classTitle");
		let b = y.getBBox();
		if (i(u())) {
			let t = y.children[0], n = e(y);
			b = t.getBoundingClientRect(), n.attr("width", b.width), n.attr("height", b.height);
		}
		f += b.height + 4, b.width > d && (d = b.width);
		let x = [];
		n.classData.members.forEach(async (t) => {
			let r = t.getDisplayDetails(), a = r.displayText;
			i(u()) && (a = a.replace(/</g, "&lt;").replace(/>/g, "&gt;"));
			let o = await U(p, a, r.cssStyle ? r.cssStyle : n.labelStyle, !0, !0), s = o.getBBox();
			if (i(u())) {
				let t = o.children[0], n = e(o);
				s = t.getBoundingClientRect(), n.attr("width", s.width), n.attr("height", s.height);
			}
			s.width > d && (d = s.width), f += s.height + 4, x.push(o);
		}), f += 8;
		let S = [];
		if (n.classData.methods.forEach(async (t) => {
			let r = t.getDisplayDetails(), a = r.displayText;
			i(u()) && (a = a.replace(/</g, "&lt;").replace(/>/g, "&gt;"));
			let o = await U(p, a, r.cssStyle ? r.cssStyle : n.labelStyle, !0, !0), s = o.getBBox();
			if (i(u())) {
				let t = o.children[0], n = e(o);
				s = t.getBoundingClientRect(), n.attr("width", s.width), n.attr("height", s.height);
			}
			s.width > d && (d = s.width), f += s.height + 4, S.push(o);
		}), f += 8, h) {
			let t = (d - _.width) / 2;
			e(g).attr("transform", "translate( " + (-1 * d / 2 + t) + ", " + -1 * f / 2 + ")"), m = _.height + 4;
		}
		let C = (d - b.width) / 2;
		return e(y).attr("transform", "translate( " + (-1 * d / 2 + C) + ", " + (-1 * f / 2 + m) + ")"), m += b.height + 4, c.attr("class", "divider").attr("x1", -d / 2 - r).attr("x2", d / 2 + r).attr("y1", -f / 2 - r + 8 + m).attr("y2", -f / 2 - r + 8 + m), m += 8, x.forEach((t) => {
			e(t).attr("transform", "translate( " + -d / 2 + ", " + (-1 * f / 2 + m + 8 / 2) + ")");
			let n = t?.getBBox();
			m += (n?.height ?? 0) + 4;
		}), m += 8, l.attr("class", "divider").attr("x1", -d / 2 - r).attr("x2", d / 2 + r).attr("y1", -f / 2 - r + 8 + m).attr("y2", -f / 2 - r + 8 + m), m += 8, S.forEach((t) => {
			e(t).attr("transform", "translate( " + -d / 2 + ", " + (-1 * f / 2 + m) + ")");
			let n = t?.getBBox();
			m += (n?.height ?? 0) + 4;
		}), s.attr("style", n.style).attr("class", "outer title-state").attr("x", -d / 2 - r).attr("y", -(f / 2) - r).attr("width", d + n.padding).attr("height", f + n.padding), J(n, s), n.intersect = function(e) {
			return K.rect(n, e);
		}, o;
	}, "class_box")
}, Q = {}, qt = /* @__PURE__ */ t(async (e, t, n) => {
	let r, i;
	if (t.link) {
		let a;
		u().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 Kt[t.shape](r, t, n);
	} else i = await Kt[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"), Jt = /* @__PURE__ */ t((e) => {
	let t = Q[e.id];
	n.trace("Transforming node", e.diff, e, "translate(" + (e.x - e.width / 2 - 5) + ", " + e.width / 2 + ")");
	let r = e.diff || 0;
	return e.clusterNode ? t.attr("transform", "translate(" + (e.x + r - e.width / 2) + ", " + (e.y - e.height / 2 - 8) + ")") : t.attr("transform", "translate(" + e.x + ", " + e.y + ")"), r;
}, "positionNode");
function Yt(e, t, n = !1) {
	let r = e, i = "default";
	(r?.classes?.length || 0) > 0 && (i = (r?.classes ?? []).join(" ")), i += " flowchart-label";
	let a = 0, s = "", c;
	switch (r.type) {
		case "round":
			a = 5, s = "rect";
			break;
		case "composite":
			a = 0, s = "composite", c = 0;
			break;
		case "square":
			s = "rect";
			break;
		case "diamond":
			s = "question";
			break;
		case "hexagon":
			s = "hexagon";
			break;
		case "block_arrow":
			s = "block_arrow";
			break;
		case "odd":
			s = "rect_left_inv_arrow";
			break;
		case "lean_right":
			s = "lean_right";
			break;
		case "lean_left":
			s = "lean_left";
			break;
		case "trapezoid":
			s = "trapezoid";
			break;
		case "inv_trapezoid":
			s = "inv_trapezoid";
			break;
		case "rect_left_inv_arrow":
			s = "rect_left_inv_arrow";
			break;
		case "circle":
			s = "circle";
			break;
		case "ellipse":
			s = "ellipse";
			break;
		case "stadium":
			s = "stadium";
			break;
		case "subroutine":
			s = "subroutine";
			break;
		case "cylinder":
			s = "cylinder";
			break;
		case "group":
			s = "rect";
			break;
		case "doublecircle":
			s = "doublecircle";
			break;
		default: s = "rect";
	}
	let l = re(r?.styles ?? []), u = r.label, d = r.size ?? {
		width: 0,
		height: 0,
		x: 0,
		y: 0
	}, f = t.getDiagramId();
	return {
		labelStyle: l.labelStyle,
		shape: s,
		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 ?? o()?.block?.padding ?? 0,
		widthInColumns: r.widthInColumns ?? 1
	};
}
t(Yt, "getNodeFromBlock");
async function Xt(e, t, n) {
	let r = Yt(t, n, !1);
	if (r.type === "group") return;
	let i = await qt(e, r, { config: o() }), a = i.node().getBBox(), s = n.getBlock(r.id);
	s.size = {
		width: a.width,
		height: a.height,
		x: 0,
		y: 0,
		node: i
	}, n.setBlock(s), i.remove();
}
t(Xt, "calculateBlockSize");
async function Zt(e, t, n) {
	let r = Yt(t, n, !0);
	n.getBlock(r.id).type !== "space" && (await qt(e, r, { config: o() }), t.intersect = r?.intersect, Jt(r));
}
t(Zt, "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);
}
t($, "performOperations");
async function Qt(e, t, n) {
	await $(e, t, n, Xt);
}
t(Qt, "calculateBlockSizes");
async function $t(e, t, n) {
	await $(e, t, n, Zt);
}
t($t, "insertBlocks");
async function en(e, t, n, r, i) {
	let a = new me({
		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, u = `${n.thickness === "thick" ? "edge-thickness-thick" : "edge-thickness-normal"} ${n.pattern === "dotted" ? "edge-pattern-dotted" : "edge-pattern-solid"} flowchart-link LS-a1 LE-b1`;
			lt(e, {
				v: n.start,
				w: n.end,
				name: l
			}, {
				...n,
				id: l,
				arrowTypeEnd: n.arrowTypeEnd,
				arrowTypeStart: n.arrowTypeStart,
				points: c,
				classes: u
			}, void 0, "block", a, i), n.label && (await it(e, {
				...n,
				label: n.label,
				labelStyle: "stroke: #333; stroke-width: 1.5px;fill:none;",
				arrowTypeEnd: n.arrowTypeEnd,
				arrowTypeStart: n.arrowTypeStart,
				points: c,
				classes: u
			}), at({
				...n,
				x: c[1].x,
				y: c[1].y
			}, { originalPath: c }));
		}
	}
}
t(en, "insertEdges");
var tn = {
	parser: Ce,
	db: Ue,
	renderer: {
		draw: /* @__PURE__ */ t(async function(t, r, i, a) {
			let { securityLevel: c, block: l } = o(), u = a.db;
			u.setDiagramId(r);
			let d;
			c === "sandbox" && (d = e("#i" + r));
			let f = e(c === "sandbox" ? d.nodes()[0].contentDocument.body : "body"), p = c === "sandbox" ? f.select(`[id="${r}"]`) : e(`[id="${r}"]`);
			Je(p, [
				"point",
				"circle",
				"cross"
			], a.type, r);
			let m = u.getBlocks(), h = u.getBlocksFlat(), g = u.getEdges(), _ = p.insert("g").attr("class", "block");
			await Qt(_, m, u);
			let v = $e(u);
			if (await $t(_, m, u), await en(_, g, h, u, r), v) {
				let e = v, t = Math.max(1, Math.round(.125 * (e.width / e.height))), r = e.height + t + 10, i = e.width + 10, { useMaxWidth: a } = l;
				s(p, r, i, !!a), n.debug("Here Bounds", v, e), p.attr("viewBox", `${e.x - 5} ${e.y - 5} ${e.width + 10} ${e.height + 10}`);
			}
		}, "draw"),
		getClasses: /* @__PURE__ */ t(function(e, t) {
			return t.db.getClasses();
		}, "getClasses")
	},
	styles: Ge
};
//#endregion
export { tn as diagram };

//# sourceMappingURL=blockDiagram-GPEHLZMM-Bf_AXJNB.js.map