.hasOwnProperty.call(opts, "compound") ? opts.compound : false; this._label = void 0; this._defaultNodeLabelFn = constant_default7(void 0); this._defaultEdgeLabelFn = constant_default7(void 0); this._nodes = {}; if (this._isCompound) { this._parent = {}; this._children = {}; this._children[GRAPH_NODE] = {}; } this._in = {}; this._preds = {}; this._out = {}; this._sucs = {}; this._edgeObjs = {}; this._edgeLabels = {}; } /* === Graph functions ========= */ isDirected() { return this._isDirected; } isMultigraph() { return this._isMultigraph; } isCompound() { return this._isCompound; } setGraph(label) { this._label = label; return this; } graph() { return this._label; } /* === Node functions ========== */ setDefaultNodeLabel(newDefault) { if (!isFunction_default(newDefault)) { newDefault = constant_default7(newDefault); } this._defaultNodeLabelFn = newDefault; return this; } nodeCount() { return this._nodeCount; } nodes() { return keys_default(this._nodes); } sources() { var self2 = this; return filter_default3(this.nodes(), function(v3) { return isEmpty_default(self2._in[v3]); }); } sinks() { var self2 = this; return filter_default3(this.nodes(), function(v3) { return isEmpty_default(self2._out[v3]); }); } setNodes(vs, value2) { var args = arguments; var self2 = this; forEach_default(vs, function(v3) { if (args.length > 1) { self2.setNode(v3, value2); } else { self2.setNode(v3); } }); return this; } setNode(v3, value2) { if (Object.prototype.hasOwnProperty.call(this._nodes, v3)) { if (arguments.length > 1) { this._nodes[v3] = value2; } return this; } this._nodes[v3] = arguments.length > 1 ? value2 : this._defaultNodeLabelFn(v3); if (this._isCompound) { this._parent[v3] = GRAPH_NODE; this._children[v3] = {}; this._children[GRAPH_NODE][v3] = true; } this._in[v3] = {}; this._preds[v3] = {}; this._out[v3] = {}; this._sucs[v3] = {}; ++this._nodeCount; return this; } node(v3) { return this._nodes[v3]; } hasNode(v3) { return Object.prototype.hasOwnProperty.call(this._nodes, v3); } removeNode(v3) { if (Object.prototype.hasOwnProperty.call(this._nodes, v3)) { var removeEdge = /* @__PURE__ */ __name((e3) => this.removeEdge(this._edgeObjs[e3]), "removeEdge"); delete this._nodes[v3]; if (this._isCompound) { this._removeFromParentsChildList(v3); delete this._parent[v3]; forEach_default(this.children(v3), (child) => { this.setParent(child); }); delete this._children[v3]; } forEach_default(keys_default(this._in[v3]), removeEdge); delete this._in[v3]; delete this._preds[v3]; forEach_default(keys_default(this._out[v3]), removeEdge); delete this._out[v3]; delete this._sucs[v3]; --this._nodeCount; } return this; } setParent(v3, parent4) { if (!this._isCompound) { throw new Error("Cannot set parent in a non-compound graph"); } if (isUndefined_default(parent4)) { parent4 = GRAPH_NODE; } else { parent4 += ""; for (var ancestor = parent4; !isUndefined_default(ancestor); ancestor = this.parent(ancestor)) { if (ancestor === v3) { throw new Error("Setting " + parent4 + " as parent of " + v3 + " would create a cycle"); } } this.setNode(parent4); } this.setNode(v3); this._removeFromParentsChildList(v3); this._parent[v3] = parent4; this._children[parent4][v3] = true; return this; } _removeFromParentsChildList(v3) { delete this._children[this._parent[v3]][v3]; } parent(v3) { if (this._isCompound) { var parent4 = this._parent[v3]; if (parent4 !== GRAPH_NODE) { return parent4; } } } children(v3) { if (isUndefined_default(v3)) { v3 = GRAPH_NODE; } if (this._isCompound) { var children2 = this._children[v3]; if (children2) { return keys_default(children2); } } else if (v3 === GRAPH_NODE) { return this.nodes(); } else if (this.hasNode(v3)) { return []; } } predecessors(v3) { var predsV = this._preds[v3]; if (predsV) { return keys_default(predsV); } } successors(v3) { var sucsV = this._sucs[v3]; if (sucsV) { return keys_default(sucsV); } } neighbors(v3) { var preds = this.predecessors(v3); if (preds) { return union_default(preds, this.successors(v3)); } } isLeaf(v3) { var neighbors; if (this.isDirected()) { neighbors = this.successors(v3); } else { neighbors = this.neighbors(v3); } return neighbors.length === 0; } filterNodes(filter6) { var copy5 = new this.constructor({ directed: this._isDirected, multigraph: this._isMultigraph, compound: this._isCompound }); copy5.setGraph(this.graph()); var self2 = this; forEach_default(this._nodes, function(value2, v3) { if (filter6(v3)) { copy5.setNode(v3, value2); } }); forEach_default(this._edgeObjs, function(e3) { if (copy5.hasNode(e3.v) && copy5.hasNode(e3.w)) { copy5.setEdge(e3, self2.edge(e3)); } }); var parents3 = {}; function findParent(v3) { var parent4 = self2.parent(v3); if (parent4 === void 0 || copy5.hasNode(parent4)) { parents3[v3] = parent4; return parent4; } else if (parent4 in parents3) { return parents3[parent4]; } else { return findParent(parent4); } } __name(findParent, "findParent"); if (this._isCompound) { forEach_default(copy5.nodes(), function(v3) { copy5.setParent(v3, findParent(v3)); }); } return copy5; } /* === Edge functions ========== */ setDefaultEdgeLabel(newDefault) { if (!isFunction_default(newDefault)) { newDefault = constant_default7(newDefault); } this._defaultEdgeLabelFn = newDefault; return this; } edgeCount() { return this._edgeCount; } edges() { return values_default(this._edgeObjs); } setPath(vs, value2) { var self2 = this; var args = arguments; reduce_default(vs, function(v3, w4) { if (args.length > 1) { self2.setEdge(v3, w4, value2); } else { self2.setEdge(v3, w4); } return w4; }); return this; } /* * setEdge(v, w, [value, [name]]) * setEdge({ v, w, [name] }, [value]) */ setEdge() { var v3, w4, name, value2; var valueSpecified = false; var arg0 = arguments[0]; if (typeof arg0 === "object" && arg0 !== null && "v" in arg0) { v3 = arg0.v; w4 = arg0.w; name = arg0.name; if (arguments.length === 2) { value2 = arguments[1]; valueSpecified = true; } } else { v3 = arg0; w4 = arguments[1]; name = arguments[3]; if (arguments.length > 2) { value2 = arguments[2]; valueSpecified = true; } } v3 = "" + v3; w4 = "" + w4; if (!isUndefined_default(name)) { name = "" + name; } var e3 = edgeArgsToId(this._isDirected, v3, w4, name); if (Object.prototype.hasOwnProperty.call(this._edgeLabels, e3)) { if (valueSpecified) { this._edgeLabels[e3] = value2; } return this; } if (!isUndefined_default(name) && !this._isMultigraph) { throw new Error("Cannot set a named edge when isMultigraph = false"); } this.setNode(v3); this.setNode(w4); this._edgeLabels[e3] = valueSpecified ? value2 : this._defaultEdgeLabelFn(v3, w4, name); var edgeObj = edgeArgsToObj(this._isDirected, v3, w4, name); v3 = edgeObj.v; w4 = edgeObj.w; Object.freeze(edgeObj); this._edgeObjs[e3] = edgeObj; incrementOrInitEntry(this._preds[w4], v3); incrementOrInitEntry(this._sucs[v3], w4); this._in[w4][e3] = edgeObj; this._out[v3][e3] = edgeObj; this._edgeCount++; return this; } edge(v3, w4, name) { var e3 = arguments.length === 1 ? edgeObjToId(this._isDirected, arguments[0]) : edgeArgsToId(this._isDirected, v3, w4, name); return this._edgeLabels[e3]; } hasEdge(v3, w4, name) { var e3 = arguments.length === 1 ? edgeObjToId(this._isDirected, arguments[0]) : edgeArgsToId(this._isDirected, v3, w4, name); return Object.prototype.hasOwnProperty.call(this._edgeLabels, e3); } removeEdge(v3, w4, name) { var e3 = arguments.length === 1 ? edgeObjToId(this._isDirected, arguments[0]) : edgeArgsToId(this._isDirected, v3, w4, name); var edge = this._edgeObjs[e3]; if (edge) { v3 = edge.v; w4 = edge.w; delete this._edgeLabels[e3]; delete this._edgeObjs[e3]; decrementOrRemoveEntry(this._preds[w4], v3); decrementOrRemoveEntry(this._sucs[v3], w4); delete this._in[w4][e3]; delete this._out[v3][e3]; this._edgeCount--; } return this; } inEdges(v3, u2) { var inV = this._in[v3]; if (inV) { var edges3 = values_default(inV); if (!u2) { return edges3; } return filter_default3(edges3, function(edge) { return edge.v === u2; }); } } outEdges(v3, w4) { var outV = this._out[v3]; if (outV) { var edges3 = values_default(outV); if (!w4) { return edges3; } return filter_default3(edges3, function(edge) { return edge.w === w4; }); } } nodeEdges(v3, w4) { var inEdges = this.inEdges(v3, w4); if (inEdges) { return inEdges.concat(this.outEdges(v3, w4)); } } }; Graph.prototype._nodeCount = 0; Graph.prototype._edgeCount = 0; __name(incrementOrInitEntry, "incrementOrInitEntry"); __name(decrementOrRemoveEntry, "decrementOrRemoveEntry"); __name(edgeArgsToId, "edgeArgsToId"); __name(edgeArgsToObj, "edgeArgsToObj"); __name(edgeObjToId, "edgeObjToId"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/index.js var init_graphlib = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/index.js"() { "use strict"; init_graph(); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/data/list.js function unlink(entry) { entry._prev._next = entry._next; entry._next._prev = entry._prev; delete entry._next; delete entry._prev; } function filterOutLinks(k2, v3) { if (k2 !== "_next" && k2 !== "_prev") { return v3; } } var List; var init_list = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/data/list.js"() { "use strict"; List = class { static { __name(this, "List"); } constructor() { var sentinel = {}; sentinel._next = sentinel._prev = sentinel; this._sentinel = sentinel; } dequeue() { var sentinel = this._sentinel; var entry = sentinel._prev; if (entry !== sentinel) { unlink(entry); return entry; } } enqueue(entry) { var sentinel = this._sentinel; if (entry._prev && entry._next) { unlink(entry); } entry._next = sentinel._next; sentinel._next._prev = entry; sentinel._next = entry; entry._prev = sentinel; } toString() { var strs = []; var sentinel = this._sentinel; var curr = sentinel._prev; while (curr !== sentinel) { strs.push(JSON.stringify(curr, filterOutLinks)); curr = curr._prev; } return "[" + strs.join(", ") + "]"; } }; __name(unlink, "unlink"); __name(filterOutLinks, "filterOutLinks"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/greedy-fas.js function greedyFAS(g2, weightFn) { if (g2.nodeCount() <= 1) { return []; } var state3 = buildState(g2, weightFn || DEFAULT_WEIGHT_FN); var results = doGreedyFAS(state3.graph, state3.buckets, state3.zeroIdx); return flatten_default( map_default(results, function(e3) { return g2.outEdges(e3.v, e3.w); }) ); } function doGreedyFAS(g2, buckets, zeroIdx) { var results = []; var sources = buckets[buckets.length - 1]; var sinks = buckets[0]; var entry; while (g2.nodeCount()) { while (entry = sinks.dequeue()) { removeNode(g2, buckets, zeroIdx, entry); } while (entry = sources.dequeue()) { removeNode(g2, buckets, zeroIdx, entry); } if (g2.nodeCount()) { for (var i2 = buckets.length - 2; i2 > 0; --i2) { entry = buckets[i2].dequeue(); if (entry) { results = results.concat(removeNode(g2, buckets, zeroIdx, entry, true)); break; } } } } return results; } function removeNode(g2, buckets, zeroIdx, entry, collectPredecessors) { var results = collectPredecessors ? [] : void 0; forEach_default(g2.inEdges(entry.v), function(edge) { var weight8 = g2.edge(edge); var uEntry = g2.node(edge.v); if (collectPredecessors) { results.push({ v: edge.v, w: edge.w }); } uEntry.out -= weight8; assignBucket(buckets, zeroIdx, uEntry); }); forEach_default(g2.outEdges(entry.v), function(edge) { var weight8 = g2.edge(edge); var w4 = edge.w; var wEntry = g2.node(w4); wEntry["in"] -= weight8; assignBucket(buckets, zeroIdx, wEntry); }); g2.removeNode(entry.v); return results; } function buildState(g2, weightFn) { var fasGraph = new Graph(); var maxIn = 0; var maxOut = 0; forEach_default(g2.nodes(), function(v3) { fasGraph.setNode(v3, { v: v3, in: 0, out: 0 }); }); forEach_default(g2.edges(), function(e3) { var prevWeight = fasGraph.edge(e3.v, e3.w) || 0; var weight8 = weightFn(e3); var edgeWeight = prevWeight + weight8; fasGraph.setEdge(e3.v, e3.w, edgeWeight); maxOut = Math.max(maxOut, fasGraph.node(e3.v).out += weight8); maxIn = Math.max(maxIn, fasGraph.node(e3.w)["in"] += weight8); }); var buckets = range_default(maxOut + maxIn + 3).map(function() { return new List(); }); var zeroIdx = maxIn + 1; forEach_default(fasGraph.nodes(), function(v3) { assignBucket(buckets, zeroIdx, fasGraph.node(v3)); }); return { graph: fasGraph, buckets, zeroIdx }; } function assignBucket(buckets, zeroIdx, entry) { if (!entry.out) { buckets[0].enqueue(entry); } else if (!entry["in"]) { buckets[buckets.length - 1].enqueue(entry); } else { buckets[entry.out - entry["in"] + zeroIdx].enqueue(entry); } } var DEFAULT_WEIGHT_FN; var init_greedy_fas = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/greedy-fas.js"() { "use strict"; init_lodash(); init_graphlib(); init_list(); DEFAULT_WEIGHT_FN = constant_default7(1); __name(greedyFAS, "greedyFAS"); __name(doGreedyFAS, "doGreedyFAS"); __name(removeNode, "removeNode"); __name(buildState, "buildState"); __name(assignBucket, "assignBucket"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/acyclic.js function run(g2) { var fas = g2.graph().acyclicer === "greedy" ? greedyFAS(g2, weightFn(g2)) : dfsFAS(g2); forEach_default(fas, function(e3) { var label = g2.edge(e3); g2.removeEdge(e3); label.forwardName = e3.name; label.reversed = true; g2.setEdge(e3.w, e3.v, label, uniqueId_default("rev")); }); function weightFn(g3) { return function(e3) { return g3.edge(e3).weight; }; } __name(weightFn, "weightFn"); } function dfsFAS(g2) { var fas = []; var stack = {}; var visited = {}; function dfs3(v3) { if (Object.prototype.hasOwnProperty.call(visited, v3)) { return; } visited[v3] = true; stack[v3] = true; forEach_default(g2.outEdges(v3), function(e3) { if (Object.prototype.hasOwnProperty.call(stack, e3.w)) { fas.push(e3); } else { dfs3(e3.w); } }); delete stack[v3]; } __name(dfs3, "dfs"); forEach_default(g2.nodes(), dfs3); return fas; } function undo(g2) { forEach_default(g2.edges(), function(e3) { var label = g2.edge(e3); if (label.reversed) { g2.removeEdge(e3); var forwardName = label.forwardName; delete label.reversed; delete label.forwardName; g2.setEdge(e3.w, e3.v, label, forwardName); } }); } var init_acyclic = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/acyclic.js"() { "use strict"; init_lodash(); init_greedy_fas(); __name(run, "run"); __name(dfsFAS, "dfsFAS"); __name(undo, "undo"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/util.js function addDummyNode(g2, type3, attrs, name) { var v3; do { v3 = uniqueId_default(name); } while (g2.hasNode(v3)); attrs.dummy = type3; g2.setNode(v3, attrs); return v3; } function simplify(g2) { var simplified = new Graph().setGraph(g2.graph()); forEach_default(g2.nodes(), function(v3) { simplified.setNode(v3, g2.node(v3)); }); forEach_default(g2.edges(), function(e3) { var simpleLabel = simplified.edge(e3.v, e3.w) || { weight: 0, minlen: 1 }; var label = g2.edge(e3); simplified.setEdge(e3.v, e3.w, { weight: simpleLabel.weight + label.weight, minlen: Math.max(simpleLabel.minlen, label.minlen) }); }); return simplified; } function asNonCompoundGraph(g2) { var simplified = new Graph({ multigraph: g2.isMultigraph() }).setGraph(g2.graph()); forEach_default(g2.nodes(), function(v3) { if (!g2.children(v3).length) { simplified.setNode(v3, g2.node(v3)); } }); forEach_default(g2.edges(), function(e3) { simplified.setEdge(e3, g2.edge(e3)); }); return simplified; } function intersectRect2(rect3, point8) { var x5 = rect3.x; var y6 = rect3.y; var dx = point8.x - x5; var dy = point8.y - y6; var w4 = rect3.width / 2; var h3 = rect3.height / 2; if (!dx && !dy) { throw new Error("Not possible to find intersection inside of the rectangle"); } var sx, sy; if (Math.abs(dy) * w4 > Math.abs(dx) * h3) { if (dy < 0) { h3 = -h3; } sx = h3 * dx / dy; sy = h3; } else { if (dx < 0) { w4 = -w4; } sx = w4; sy = w4 * dy / dx; } return { x: x5 + sx, y: y6 + sy }; } function buildLayerMatrix(g2) { var layering = map_default(range_default(maxRank(g2) + 1), function() { return []; }); forEach_default(g2.nodes(), function(v3) { var node2 = g2.node(v3); var rank2 = node2.rank; if (!isUndefined_default(rank2)) { layering[rank2][node2.order] = v3; } }); return layering; } function normalizeRanks(g2) { var min9 = min_default( map_default(g2.nodes(), function(v3) { return g2.node(v3).rank; }) ); forEach_default(g2.nodes(), function(v3) { var node2 = g2.node(v3); if (has_default(node2, "rank")) { node2.rank -= min9; } }); } function removeEmptyRanks(g2) { var offset = min_default( map_default(g2.nodes(), function(v3) { return g2.node(v3).rank; }) ); var layers = []; forEach_default(g2.nodes(), function(v3) { var rank2 = g2.node(v3).rank - offset; if (!layers[rank2]) { layers[rank2] = []; } layers[rank2].push(v3); }); var delta = 0; var nodeRankFactor = g2.graph().nodeRankFactor; forEach_default(layers, function(vs, i2) { if (isUndefined_default(vs) && i2 % nodeRankFactor !== 0) { --delta; } else if (delta) { forEach_default(vs, function(v3) { g2.node(v3).rank += delta; }); } }); } function addBorderNode(g2, prefix, rank2, order2) { var node2 = { width: 0, height: 0 }; if (arguments.length >= 4) { node2.rank = rank2; node2.order = order2; } return addDummyNode(g2, "border", node2, prefix); } function maxRank(g2) { return max_default( map_default(g2.nodes(), function(v3) { var rank2 = g2.node(v3).rank; if (!isUndefined_default(rank2)) { return rank2; } }) ); } function partition(collection4, fn3) { var result = { lhs: [], rhs: [] }; forEach_default(collection4, function(value2) { if (fn3(value2)) { result.lhs.push(value2); } else { result.rhs.push(value2); } }); return result; } function time2(name, fn3) { var start3 = now_default(); try { return fn3(); } finally { console.log(name + " time: " + (now_default() - start3) + "ms"); } } function notime(name, fn3) { return fn3(); } var init_util2 = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/util.js"() { "use strict"; init_lodash(); init_graphlib(); __name(addDummyNode, "addDummyNode"); __name(simplify, "simplify"); __name(asNonCompoundGraph, "asNonCompoundGraph"); __name(intersectRect2, "intersectRect"); __name(buildLayerMatrix, "buildLayerMatrix"); __name(normalizeRanks, "normalizeRanks"); __name(removeEmptyRanks, "removeEmptyRanks"); __name(addBorderNode, "addBorderNode"); __name(maxRank, "maxRank"); __name(partition, "partition"); __name(time2, "time"); __name(notime, "notime"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/add-border-segments.js function addBorderSegments(g2) { function dfs3(v3) { var children2 = g2.children(v3); var node2 = g2.node(v3); if (children2.length) { forEach_default(children2, dfs3); } if (Object.prototype.hasOwnProperty.call(node2, "minRank")) { node2.borderLeft = []; node2.borderRight = []; for (var rank2 = node2.minRank, maxRank2 = node2.maxRank + 1; rank2 < maxRank2; ++rank2) { addBorderNode2(g2, "borderLeft", "_bl", v3, node2, rank2); addBorderNode2(g2, "borderRight", "_br", v3, node2, rank2); } } } __name(dfs3, "dfs"); forEach_default(g2.children(), dfs3); } function addBorderNode2(g2, prop, prefix, sg, sgNode, rank2) { var label = { width: 0, height: 0, rank: rank2, borderType: prop }; var prev2 = sgNode[prop][rank2 - 1]; var curr = addDummyNode(g2, "border", label, prefix); sgNode[prop][rank2] = curr; g2.setParent(curr, sg); if (prev2) { g2.setEdge(prev2, curr, { weight: 1 }); } } var init_add_border_segments = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/add-border-segments.js"() { "use strict"; init_lodash(); init_util2(); __name(addBorderSegments, "addBorderSegments"); __name(addBorderNode2, "addBorderNode"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/coordinate-system.js function adjust2(g2) { var rankDir = g2.graph().rankdir.toLowerCase(); if (rankDir === "lr" || rankDir === "rl") { swapWidthHeight(g2); } } function undo2(g2) { var rankDir = g2.graph().rankdir.toLowerCase(); if (rankDir === "bt" || rankDir === "rl") { reverseY(g2); } if (rankDir === "lr" || rankDir === "rl") { swapXY(g2); swapWidthHeight(g2); } } function swapWidthHeight(g2) { forEach_default(g2.nodes(), function(v3) { swapWidthHeightOne(g2.node(v3)); }); forEach_default(g2.edges(), function(e3) { swapWidthHeightOne(g2.edge(e3)); }); } function swapWidthHeightOne(attrs) { var w4 = attrs.width; attrs.width = attrs.height; attrs.height = w4; } function reverseY(g2) { forEach_default(g2.nodes(), function(v3) { reverseYOne(g2.node(v3)); }); forEach_default(g2.edges(), function(e3) { var edge = g2.edge(e3); forEach_default(edge.points, reverseYOne); if (Object.prototype.hasOwnProperty.call(edge, "y")) { reverseYOne(edge); } }); } function reverseYOne(attrs) { attrs.y = -attrs.y; } function swapXY(g2) { forEach_default(g2.nodes(), function(v3) { swapXYOne(g2.node(v3)); }); forEach_default(g2.edges(), function(e3) { var edge = g2.edge(e3); forEach_default(edge.points, swapXYOne); if (Object.prototype.hasOwnProperty.call(edge, "x")) { swapXYOne(edge); } }); } function swapXYOne(attrs) { var x5 = attrs.x; attrs.x = attrs.y; attrs.y = x5; } var init_coordinate_system = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/coordinate-system.js"() { "use strict"; init_lodash(); __name(adjust2, "adjust"); __name(undo2, "undo"); __name(swapWidthHeight, "swapWidthHeight"); __name(swapWidthHeightOne, "swapWidthHeightOne"); __name(reverseY, "reverseY"); __name(reverseYOne, "reverseYOne"); __name(swapXY, "swapXY"); __name(swapXYOne, "swapXYOne"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/normalize.js function run2(g2) { g2.graph().dummyChains = []; forEach_default(g2.edges(), function(edge) { normalizeEdge(g2, edge); }); } function normalizeEdge(g2, e3) { var v3 = e3.v; var vRank = g2.node(v3).rank; var w4 = e3.w; var wRank = g2.node(w4).rank; var name = e3.name; var edgeLabel = g2.edge(e3); var labelRank = edgeLabel.labelRank; if (wRank === vRank + 1) return; g2.removeEdge(e3); var attrs = void 0; var dummy, i2; for (i2 = 0, ++vRank; vRank < wRank; ++i2, ++vRank) { edgeLabel.points = []; attrs = { width: 0, height: 0, edgeLabel, edgeObj: e3, rank: vRank }; dummy = addDummyNode(g2, "edge", attrs, "_d"); if (vRank === labelRank) { attrs.width = edgeLabel.width; attrs.height = edgeLabel.height; attrs.dummy = "edge-label"; attrs.labelpos = edgeLabel.labelpos; } g2.setEdge(v3, dummy, { weight: edgeLabel.weight }, name); if (i2 === 0) { g2.graph().dummyChains.push(dummy); } v3 = dummy; } g2.setEdge(v3, w4, { weight: edgeLabel.weight }, name); } function undo3(g2) { forEach_default(g2.graph().dummyChains, function(v3) { var node2 = g2.node(v3); var origLabel = node2.edgeLabel; var w4; g2.setEdge(node2.edgeObj, origLabel); while (node2.dummy) { w4 = g2.successors(v3)[0]; g2.removeNode(v3); origLabel.points.push({ x: node2.x, y: node2.y }); if (node2.dummy === "edge-label") { origLabel.x = node2.x; origLabel.y = node2.y; origLabel.width = node2.width; origLabel.height = node2.height; } v3 = w4; node2 = g2.node(v3); } }); } var init_normalize = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/normalize.js"() { "use strict"; init_lodash(); init_util2(); __name(run2, "run"); __name(normalizeEdge, "normalizeEdge"); __name(undo3, "undo"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/rank/util.js function longestPath(g2) { var visited = {}; function dfs3(v3) { var label = g2.node(v3); if (Object.prototype.hasOwnProperty.call(visited, v3)) { return label.rank; } visited[v3] = true; var rank2 = min_default( map_default(g2.outEdges(v3), function(e3) { return dfs3(e3.w) - g2.edge(e3).minlen; }) ); if (rank2 === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 rank2 === void 0 || // return value of _.map([]) for Lodash 4 rank2 === null) { rank2 = 0; } return label.rank = rank2; } __name(dfs3, "dfs"); forEach_default(g2.sources(), dfs3); } function slack(g2, e3) { return g2.node(e3.w).rank - g2.node(e3.v).rank - g2.edge(e3).minlen; } var init_util3 = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/rank/util.js"() { "use strict"; init_lodash(); __name(longestPath, "longestPath"); __name(slack, "slack"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js function feasibleTree(g2) { var t4 = new Graph({ directed: false }); var start3 = g2.nodes()[0]; var size4 = g2.nodeCount(); t4.setNode(start3, {}); var edge, delta; while (tightTree(t4, g2) < size4) { edge = findMinSlackEdge(t4, g2); delta = t4.hasNode(edge.v) ? slack(g2, edge) : -slack(g2, edge); shiftRanks(t4, g2, delta); } return t4; } function tightTree(t4, g2) { function dfs3(v3) { forEach_default(g2.nodeEdges(v3), function(e3) { var edgeV = e3.v, w4 = v3 === edgeV ? e3.w : edgeV; if (!t4.hasNode(w4) && !slack(g2, e3)) { t4.setNode(w4, {}); t4.setEdge(v3, w4, {}); dfs3(w4); } }); } __name(dfs3, "dfs"); forEach_default(t4.nodes(), dfs3); return t4.nodeCount(); } function findMinSlackEdge(t4, g2) { return minBy_default(g2.edges(), function(e3) { if (t4.hasNode(e3.v) !== t4.hasNode(e3.w)) { return slack(g2, e3); } }); } function shiftRanks(t4, g2, delta) { forEach_default(t4.nodes(), function(v3) { g2.node(v3).rank += delta; }); } var init_feasible_tree = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js"() { "use strict"; init_lodash(); init_graphlib(); init_util3(); __name(feasibleTree, "feasibleTree"); __name(tightTree, "tightTree"); __name(findMinSlackEdge, "findMinSlackEdge"); __name(shiftRanks, "shiftRanks"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/components.js var init_components = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/components.js"() { "use strict"; } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/data/priority-queue.js var init_priority_queue = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/data/priority-queue.js"() { "use strict"; } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js var DEFAULT_WEIGHT_FUNC; var init_dijkstra = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js"() { "use strict"; init_lodash(); init_priority_queue(); DEFAULT_WEIGHT_FUNC = constant_default7(1); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js var init_dijkstra_all = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js"() { "use strict"; init_dijkstra(); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/tarjan.js var init_tarjan = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/tarjan.js"() { "use strict"; } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/find-cycles.js var init_find_cycles = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/find-cycles.js"() { "use strict"; init_tarjan(); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js var DEFAULT_WEIGHT_FUNC2; var init_floyd_warshall = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js"() { "use strict"; init_lodash(); DEFAULT_WEIGHT_FUNC2 = constant_default7(1); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/topsort.js function topsort(g2) { var visited = {}; var stack = {}; var results = []; function visit(node2) { if (Object.prototype.hasOwnProperty.call(stack, node2)) { throw new CycleException(); } if (!Object.prototype.hasOwnProperty.call(visited, node2)) { stack[node2] = true; visited[node2] = true; forEach_default(g2.predecessors(node2), visit); delete stack[node2]; results.push(node2); } } __name(visit, "visit"); forEach_default(g2.sinks(), visit); if (size_default2(visited) !== g2.nodeCount()) { throw new CycleException(); } return results; } function CycleException() { } var init_topsort = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/topsort.js"() { "use strict"; init_lodash(); topsort.CycleException = CycleException; __name(topsort, "topsort"); __name(CycleException, "CycleException"); CycleException.prototype = new Error(); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js var init_is_acyclic = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js"() { "use strict"; init_topsort(); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/dfs.js function dfs(g2, vs, order2) { if (!isArray_default(vs)) { vs = [vs]; } var navigation = (g2.isDirected() ? g2.successors : g2.neighbors).bind(g2); var acc = []; var visited = {}; forEach_default(vs, function(v3) { if (!g2.hasNode(v3)) { throw new Error("Graph does not have node: " + v3); } doDfs(g2, v3, order2 === "post", visited, navigation, acc); }); return acc; } function doDfs(g2, v3, postorder3, visited, navigation, acc) { if (!Object.prototype.hasOwnProperty.call(visited, v3)) { visited[v3] = true; if (!postorder3) { acc.push(v3); } forEach_default(navigation(v3), function(w4) { doDfs(g2, w4, postorder3, visited, navigation, acc); }); if (postorder3) { acc.push(v3); } } } var init_dfs = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/dfs.js"() { "use strict"; init_lodash(); __name(dfs, "dfs"); __name(doDfs, "doDfs"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/postorder.js function postorder(g2, vs) { return dfs(g2, vs, "post"); } var init_postorder = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/postorder.js"() { "use strict"; init_dfs(); __name(postorder, "postorder"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/preorder.js function preorder(g2, vs) { return dfs(g2, vs, "pre"); } var init_preorder = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/preorder.js"() { "use strict"; init_dfs(); __name(preorder, "preorder"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/prim.js var init_prim = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/prim.js"() { "use strict"; init_priority_queue(); init_graph(); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/index.js var init_alg = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/alg/index.js"() { "use strict"; init_components(); init_dijkstra(); init_dijkstra_all(); init_find_cycles(); init_floyd_warshall(); init_is_acyclic(); init_postorder(); init_preorder(); init_prim(); init_tarjan(); init_topsort(); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js function networkSimplex(g2) { g2 = simplify(g2); longestPath(g2); var t4 = feasibleTree(g2); initLowLimValues(t4); initCutValues(t4, g2); var e3, f2; while (e3 = leaveEdge(t4)) { f2 = enterEdge(t4, g2, e3); exchangeEdges(t4, g2, e3, f2); } } function initCutValues(t4, g2) { var vs = postorder(t4, t4.nodes()); vs = vs.slice(0, vs.length - 1); forEach_default(vs, function(v3) { assignCutValue(t4, g2, v3); }); } function assignCutValue(t4, g2, child) { var childLab = t4.node(child); var parent4 = childLab.parent; t4.edge(child, parent4).cutvalue = calcCutValue(t4, g2, child); } function calcCutValue(t4, g2, child) { var childLab = t4.node(child); var parent4 = childLab.parent; var childIsTail = true; var graphEdge = g2.edge(child, parent4); var cutValue = 0; if (!graphEdge) { childIsTail = false; graphEdge = g2.edge(parent4, child); } cutValue = graphEdge.weight; forEach_default(g2.nodeEdges(child), function(e3) { var isOutEdge = e3.v === child, other = isOutEdge ? e3.w : e3.v; if (other !== parent4) { var pointsToHead = isOutEdge === childIsTail, otherWeight = g2.edge(e3).weight; cutValue += pointsToHead ? otherWeight : -otherWeight; if (isTreeEdge(t4, child, other)) { var otherCutValue = t4.edge(child, other).cutvalue; cutValue += pointsToHead ? -otherCutValue : otherCutValue; } } }); return cutValue; } function initLowLimValues(tree, root3) { if (arguments.length < 2) { root3 = tree.nodes()[0]; } dfsAssignLowLim(tree, {}, 1, root3); } function dfsAssignLowLim(tree, visited, nextLim, v3, parent4) { var low = nextLim; var label = tree.node(v3); visited[v3] = true; forEach_default(tree.neighbors(v3), function(w4) { if (!Object.prototype.hasOwnProperty.call(visited, w4)) { nextLim = dfsAssignLowLim(tree, visited, nextLim, w4, v3); } }); label.low = low; label.lim = nextLim++; if (parent4) { label.parent = parent4; } else { delete label.parent; } return nextLim; } function leaveEdge(tree) { return find_default2(tree.edges(), function(e3) { return tree.edge(e3).cutvalue < 0; }); } function enterEdge(t4, g2, edge) { var v3 = edge.v; var w4 = edge.w; if (!g2.hasEdge(v3, w4)) { v3 = edge.w; w4 = edge.v; } var vLabel = t4.node(v3); var wLabel = t4.node(w4); var tailLabel = vLabel; var flip = false; if (vLabel.lim > wLabel.lim) { tailLabel = wLabel; flip = true; } var candidates = filter_default3(g2.edges(), function(edge2) { return flip === isDescendant(t4, t4.node(edge2.v), tailLabel) && flip !== isDescendant(t4, t4.node(edge2.w), tailLabel); }); return minBy_default(candidates, function(edge2) { return slack(g2, edge2); }); } function exchangeEdges(t4, g2, e3, f2) { var v3 = e3.v; var w4 = e3.w; t4.removeEdge(v3, w4); t4.setEdge(f2.v, f2.w, {}); initLowLimValues(t4); initCutValues(t4, g2); updateRanks(t4, g2); } function updateRanks(t4, g2) { var root3 = find_default2(t4.nodes(), function(v3) { return !g2.node(v3).parent; }); var vs = preorder(t4, root3); vs = vs.slice(1); forEach_default(vs, function(v3) { var parent4 = t4.node(v3).parent, edge = g2.edge(v3, parent4), flipped = false; if (!edge) { edge = g2.edge(parent4, v3); flipped = true; } g2.node(v3).rank = g2.node(parent4).rank + (flipped ? edge.minlen : -edge.minlen); }); } function isTreeEdge(tree, u2, v3) { return tree.hasEdge(u2, v3); } function isDescendant(tree, vLabel, rootLabel) { return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; } var init_network_simplex = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js"() { "use strict"; init_lodash(); init_alg(); init_util2(); init_feasible_tree(); init_util3(); networkSimplex.initLowLimValues = initLowLimValues; networkSimplex.initCutValues = initCutValues; networkSimplex.calcCutValue = calcCutValue; networkSimplex.leaveEdge = leaveEdge; networkSimplex.enterEdge = enterEdge; networkSimplex.exchangeEdges = exchangeEdges; __name(networkSimplex, "networkSimplex"); __name(initCutValues, "initCutValues"); __name(assignCutValue, "assignCutValue"); __name(calcCutValue, "calcCutValue"); __name(initLowLimValues, "initLowLimValues"); __name(dfsAssignLowLim, "dfsAssignLowLim"); __name(leaveEdge, "leaveEdge"); __name(enterEdge, "enterEdge"); __name(exchangeEdges, "exchangeEdges"); __name(updateRanks, "updateRanks"); __name(isTreeEdge, "isTreeEdge"); __name(isDescendant, "isDescendant"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/rank/index.js function rank(g2) { switch (g2.graph().ranker) { case "network-simplex": networkSimplexRanker(g2); break; case "tight-tree": tightTreeRanker(g2); break; case "longest-path": longestPathRanker(g2); break; default: networkSimplexRanker(g2); } } function tightTreeRanker(g2) { longestPath(g2); feasibleTree(g2); } function networkSimplexRanker(g2) { networkSimplex(g2); } var longestPathRanker; var init_rank = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/rank/index.js"() { "use strict"; init_feasible_tree(); init_network_simplex(); init_util3(); __name(rank, "rank"); longestPathRanker = longestPath; __name(tightTreeRanker, "tightTreeRanker"); __name(networkSimplexRanker, "networkSimplexRanker"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/nesting-graph.js function run3(g2) { var root3 = addDummyNode(g2, "root", {}, "_root"); var depths = treeDepths(g2); var height2 = max_default(values_default(depths)) - 1; var nodeSep = 2 * height2 + 1; g2.graph().nestingRoot = root3; forEach_default(g2.edges(), function(e3) { g2.edge(e3).minlen *= nodeSep; }); var weight8 = sumWeights(g2) + 1; forEach_default(g2.children(), function(child) { dfs2(g2, root3, nodeSep, weight8, height2, depths, child); }); g2.graph().nodeRankFactor = nodeSep; } function dfs2(g2, root3, nodeSep, weight8, height2, depths, v3) { var children2 = g2.children(v3); if (!children2.length) { if (v3 !== root3) { g2.setEdge(root3, v3, { weight: 0, minlen: nodeSep }); } return; } var top2 = addBorderNode(g2, "_bt"); var bottom2 = addBorderNode(g2, "_bb"); var label = g2.node(v3); g2.setParent(top2, v3); label.borderTop = top2; g2.setParent(bottom2, v3); label.borderBottom = bottom2; forEach_default(children2, function(child) { dfs2(g2, root3, nodeSep, weight8, height2, depths, child); var childNode = g2.node(child); var childTop = childNode.borderTop ? childNode.borderTop : child; var childBottom = childNode.borderBottom ? childNode.borderBottom : child; var thisWeight = childNode.borderTop ? weight8 : 2 * weight8; var minlen = childTop !== childBottom ? 1 : height2 - depths[v3] + 1; g2.setEdge(top2, childTop, { weight: thisWeight, minlen, nestingEdge: true }); g2.setEdge(childBottom, bottom2, { weight: thisWeight, minlen, nestingEdge: true }); }); if (!g2.parent(v3)) { g2.setEdge(root3, top2, { weight: 0, minlen: height2 + depths[v3] }); } } function treeDepths(g2) { var depths = {}; function dfs3(v3, depth) { var children2 = g2.children(v3); if (children2 && children2.length) { forEach_default(children2, function(child) { dfs3(child, depth + 1); }); } depths[v3] = depth; } __name(dfs3, "dfs"); forEach_default(g2.children(), function(v3) { dfs3(v3, 1); }); return depths; } function sumWeights(g2) { return reduce_default( g2.edges(), function(acc, e3) { return acc + g2.edge(e3).weight; }, 0 ); } function cleanup(g2) { var graphLabel = g2.graph(); g2.removeNode(graphLabel.nestingRoot); delete graphLabel.nestingRoot; forEach_default(g2.edges(), function(e3) { var edge = g2.edge(e3); if (edge.nestingEdge) { g2.removeEdge(e3); } }); } var init_nesting_graph = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/nesting-graph.js"() { "use strict"; init_lodash(); init_util2(); __name(run3, "run"); __name(dfs2, "dfs"); __name(treeDepths, "treeDepths"); __name(sumWeights, "sumWeights"); __name(cleanup, "cleanup"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js function addSubgraphConstraints(g2, cg, vs) { var prev2 = {}, rootPrev; forEach_default(vs, function(v3) { var child = g2.parent(v3), parent4, prevChild; while (child) { parent4 = g2.parent(child); if (parent4) { prevChild = prev2[parent4]; prev2[parent4] = child; } else { prevChild = rootPrev; rootPrev = child; } if (prevChild && prevChild !== child) { cg.setEdge(prevChild, child); return; } child = parent4; } }); } var init_add_subgraph_constraints = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js"() { "use strict"; init_lodash(); __name(addSubgraphConstraints, "addSubgraphConstraints"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js function buildLayerGraph(g2, rank2, relationship) { var root3 = createRootNode(g2), result = new Graph({ compound: true }).setGraph({ root: root3 }).setDefaultNodeLabel(function(v3) { return g2.node(v3); }); forEach_default(g2.nodes(), function(v3) { var node2 = g2.node(v3), parent4 = g2.parent(v3); if (node2.rank === rank2 || node2.minRank <= rank2 && rank2 <= node2.maxRank) { result.setNode(v3); result.setParent(v3, parent4 || root3); forEach_default(g2[relationship](v3), function(e3) { var u2 = e3.v === v3 ? e3.w : e3.v, edge = result.edge(u2, v3), weight8 = !isUndefined_default(edge) ? edge.weight : 0; result.setEdge(u2, v3, { weight: g2.edge(e3).weight + weight8 }); }); if (Object.prototype.hasOwnProperty.call(node2, "minRank")) { result.setNode(v3, { borderLeft: node2.borderLeft[rank2], borderRight: node2.borderRight[rank2] }); } } }); return result; } function createRootNode(g2) { var v3; while (g2.hasNode(v3 = uniqueId_default("_root"))) ; return v3; } var init_build_layer_graph = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js"() { "use strict"; init_lodash(); init_graphlib(); __name(buildLayerGraph, "buildLayerGraph"); __name(createRootNode, "createRootNode"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/order/cross-count.js function crossCount(g2, layering) { var cc2 = 0; for (var i2 = 1; i2 < layering.length; ++i2) { cc2 += twoLayerCrossCount(g2, layering[i2 - 1], layering[i2]); } return cc2; } function twoLayerCrossCount(g2, northLayer, southLayer) { var southPos = zipObject_default( southLayer, map_default(southLayer, function(v3, i2) { return i2; }) ); var southEntries = flatten_default( map_default(northLayer, function(v3) { return sortBy_default( map_default(g2.outEdges(v3), function(e3) { return { pos: southPos[e3.w], weight: g2.edge(e3).weight }; }), "pos" ); }) ); var firstIndex = 1; while (firstIndex < southLayer.length) firstIndex <<= 1; var treeSize = 2 * firstIndex - 1; firstIndex -= 1; var tree = map_default(new Array(treeSize), function() { return 0; }); var cc2 = 0; forEach_default( // @ts-expect-error southEntries.forEach(function(entry) { var index = entry.pos + firstIndex; tree[index] += entry.weight; var weightSum = 0; while (index > 0) { if (index % 2) { weightSum += tree[index + 1]; } index = index - 1 >> 1; tree[index] += entry.weight; } cc2 += entry.weight * weightSum; }) ); return cc2; } var init_cross_count = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/order/cross-count.js"() { "use strict"; init_lodash(); __name(crossCount, "crossCount"); __name(twoLayerCrossCount, "twoLayerCrossCount"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/order/init-order.js function initOrder(g2) { var visited = {}; var simpleNodes = filter_default3(g2.nodes(), function(v3) { return !g2.children(v3).length; }); var maxRank2 = max_default( map_default(simpleNodes, function(v3) { return g2.node(v3).rank; }) ); var layers = map_default(range_default(maxRank2 + 1), function() { return []; }); function dfs3(v3) { if (has_default(visited, v3)) return; visited[v3] = true; var node2 = g2.node(v3); layers[node2.rank].push(v3); forEach_default(g2.successors(v3), dfs3); } __name(dfs3, "dfs"); var orderedVs = sortBy_default(simpleNodes, function(v3) { return g2.node(v3).rank; }); forEach_default(orderedVs, dfs3); return layers; } var init_init_order = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/order/init-order.js"() { "use strict"; init_lodash(); __name(initOrder, "initOrder"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/order/barycenter.js function barycenter(g2, movable) { return map_default(movable, function(v3) { var inV = g2.inEdges(v3); if (!inV.length) { return { v: v3 }; } else { var result = reduce_default( inV, function(acc, e3) { var edge = g2.edge(e3), nodeU = g2.node(e3.v); return { sum: acc.sum + edge.weight * nodeU.order, weight: acc.weight + edge.weight }; }, { sum: 0, weight: 0 } ); return { v: v3, barycenter: result.sum / result.weight, weight: result.weight }; } }); } var init_barycenter = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/order/barycenter.js"() { "use strict"; init_lodash(); __name(barycenter, "barycenter"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js function resolveConflicts(entries2, cg) { var mappedEntries = {}; forEach_default(entries2, function(entry, i2) { var tmp = mappedEntries[entry.v] = { indegree: 0, in: [], out: [], vs: [entry.v], i: i2 }; if (!isUndefined_default(entry.barycenter)) { tmp.barycenter = entry.barycenter; tmp.weight = entry.weight; } }); forEach_default(cg.edges(), function(e3) { var entryV = mappedEntries[e3.v]; var entryW = mappedEntries[e3.w]; if (!isUndefined_default(entryV) && !isUndefined_default(entryW)) { entryW.indegree++; entryV.out.push(mappedEntries[e3.w]); } }); var sourceSet = filter_default3(mappedEntries, function(entry) { return !entry.indegree; }); return doResolveConflicts(sourceSet); } function doResolveConflicts(sourceSet) { var entries2 = []; function handleIn(vEntry) { return function(uEntry) { if (uEntry.merged) { return; } if (isUndefined_default(uEntry.barycenter) || isUndefined_default(vEntry.barycenter) || uEntry.barycenter >= vEntry.barycenter) { mergeEntries(vEntry, uEntry); } }; } __name(handleIn, "handleIn"); function handleOut(vEntry) { return function(wEntry) { wEntry["in"].push(vEntry); if (--wEntry.indegree === 0) { sourceSet.push(wEntry); } }; } __name(handleOut, "handleOut"); while (sourceSet.length) { var entry = sourceSet.pop(); entries2.push(entry); forEach_default(entry["in"].reverse(), handleIn(entry)); forEach_default(entry.out, handleOut(entry)); } return map_default( filter_default3(entries2, function(entry2) { return !entry2.merged; }), function(entry2) { return pick_default(entry2, ["vs", "i", "barycenter", "weight"]); } ); } function mergeEntries(target, source) { var sum2 = 0; var weight8 = 0; if (target.weight) { sum2 += target.barycenter * target.weight; weight8 += target.weight; } if (source.weight) { sum2 += source.barycenter * source.weight; weight8 += source.weight; } target.vs = source.vs.concat(target.vs); target.barycenter = sum2 / weight8; target.weight = weight8; target.i = Math.min(source.i, target.i); source.merged = true; } var init_resolve_conflicts = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js"() { "use strict"; init_lodash(); __name(resolveConflicts, "resolveConflicts"); __name(doResolveConflicts, "doResolveConflicts"); __name(mergeEntries, "mergeEntries"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/order/sort.js function sort(entries2, biasRight) { var parts = partition(entries2, function(entry) { return Object.prototype.hasOwnProperty.call(entry, "barycenter"); }); var sortable = parts.lhs, unsortable = sortBy_default(parts.rhs, function(entry) { return -entry.i; }), vs = [], sum2 = 0, weight8 = 0, vsIndex = 0; sortable.sort(compareWithBias(!!biasRight)); vsIndex = consumeUnsortable(vs, unsortable, vsIndex); forEach_default(sortable, function(entry) { vsIndex += entry.vs.length; vs.push(entry.vs); sum2 += entry.barycenter * entry.weight; weight8 += entry.weight; vsIndex = consumeUnsortable(vs, unsortable, vsIndex); }); var result = { vs: flatten_default(vs) }; if (weight8) { result.barycenter = sum2 / weight8; result.weight = weight8; } return result; } function consumeUnsortable(vs, unsortable, index) { var last3; while (unsortable.length && (last3 = last_default(unsortable)).i <= index) { unsortable.pop(); vs.push(last3.vs); index++; } return index; } function compareWithBias(bias) { return function(entryV, entryW) { if (entryV.barycenter < entryW.barycenter) { return -1; } else if (entryV.barycenter > entryW.barycenter) { return 1; } return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; }; } var init_sort3 = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/order/sort.js"() { "use strict"; init_lodash(); init_util2(); __name(sort, "sort"); __name(consumeUnsortable, "consumeUnsortable"); __name(compareWithBias, "compareWithBias"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js function sortSubgraph(g2, v3, cg, biasRight) { var movable = g2.children(v3); var node2 = g2.node(v3); var bl = node2 ? node2.borderLeft : void 0; var br = node2 ? node2.borderRight : void 0; var subgraphs = {}; if (bl) { movable = filter_default3(movable, function(w4) { return w4 !== bl && w4 !== br; }); } var barycenters = barycenter(g2, movable); forEach_default(barycenters, function(entry) { if (g2.children(entry.v).length) { var subgraphResult = sortSubgraph(g2, entry.v, cg, biasRight); subgraphs[entry.v] = subgraphResult; if (Object.prototype.hasOwnProperty.call(subgraphResult, "barycenter")) { mergeBarycenters(entry, subgraphResult); } } }); var entries2 = resolveConflicts(barycenters, cg); expandSubgraphs(entries2, subgraphs); var result = sort(entries2, biasRight); if (bl) { result.vs = flatten_default([bl, result.vs, br]); if (g2.predecessors(bl).length) { var blPred = g2.node(g2.predecessors(bl)[0]), brPred = g2.node(g2.predecessors(br)[0]); if (!Object.prototype.hasOwnProperty.call(result, "barycenter")) { result.barycenter = 0; result.weight = 0; } result.barycenter = (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); result.weight += 2; } } return result; } function expandSubgraphs(entries2, subgraphs) { forEach_default(entries2, function(entry) { entry.vs = flatten_default( entry.vs.map(function(v3) { if (subgraphs[v3]) { return subgraphs[v3].vs; } return v3; }) ); }); } function mergeBarycenters(target, other) { if (!isUndefined_default(target.barycenter)) { target.barycenter = (target.barycenter * target.weight + other.barycenter * other.weight) / (target.weight + other.weight); target.weight += other.weight; } else { target.barycenter = other.barycenter; target.weight = other.weight; } } var init_sort_subgraph = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js"() { "use strict"; init_lodash(); init_barycenter(); init_resolve_conflicts(); init_sort3(); __name(sortSubgraph, "sortSubgraph"); __name(expandSubgraphs, "expandSubgraphs"); __name(mergeBarycenters, "mergeBarycenters"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/order/index.js function order(g2) { var maxRank2 = maxRank(g2), downLayerGraphs = buildLayerGraphs(g2, range_default(1, maxRank2 + 1), "inEdges"), upLayerGraphs = buildLayerGraphs(g2, range_default(maxRank2 - 1, -1, -1), "outEdges"); var layering = initOrder(g2); assignOrder(g2, layering); var bestCC = Number.POSITIVE_INFINITY, best; for (var i2 = 0, lastBest = 0; lastBest < 4; ++i2, ++lastBest) { sweepLayerGraphs(i2 % 2 ? downLayerGraphs : upLayerGraphs, i2 % 4 >= 2); layering = buildLayerMatrix(g2); var cc2 = crossCount(g2, layering); if (cc2 < bestCC) { lastBest = 0; best = cloneDeep_default(layering); bestCC = cc2; } } assignOrder(g2, best); } function buildLayerGraphs(g2, ranks, relationship) { return map_default(ranks, function(rank2) { return buildLayerGraph(g2, rank2, relationship); }); } function sweepLayerGraphs(layerGraphs, biasRight) { var cg = new Graph(); forEach_default(layerGraphs, function(lg) { var root3 = lg.graph().root; var sorted = sortSubgraph(lg, root3, cg, biasRight); forEach_default(sorted.vs, function(v3, i2) { lg.node(v3).order = i2; }); addSubgraphConstraints(lg, cg, sorted.vs); }); } function assignOrder(g2, layering) { forEach_default(layering, function(layer) { forEach_default(layer, function(v3, i2) { g2.node(v3).order = i2; }); }); } var init_order2 = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/order/index.js"() { "use strict"; init_lodash(); init_graphlib(); init_util2(); init_add_subgraph_constraints(); init_build_layer_graph(); init_cross_count(); init_init_order(); init_sort_subgraph(); __name(order, "order"); __name(buildLayerGraphs, "buildLayerGraphs"); __name(sweepLayerGraphs, "sweepLayerGraphs"); __name(assignOrder, "assignOrder"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js function parentDummyChains(g2) { var postorderNums = postorder2(g2); forEach_default(g2.graph().dummyChains, function(v3) { var node2 = g2.node(v3); var edgeObj = node2.edgeObj; var pathData = findPath(g2, postorderNums, edgeObj.v, edgeObj.w); var path4 = pathData.path; var lca = pathData.lca; var pathIdx = 0; var pathV = path4[pathIdx]; var ascending5 = true; while (v3 !== edgeObj.w) { node2 = g2.node(v3); if (ascending5) { while ((pathV = path4[pathIdx]) !== lca && g2.node(pathV).maxRank < node2.rank) { pathIdx++; } if (pathV === lca) { ascending5 = false; } } if (!ascending5) { while (pathIdx < path4.length - 1 && g2.node(pathV = path4[pathIdx + 1]).minRank <= node2.rank) { pathIdx++; } pathV = path4[pathIdx]; } g2.setParent(v3, pathV); v3 = g2.successors(v3)[0]; } }); } function findPath(g2, postorderNums, v3, w4) { var vPath = []; var wPath = []; var low = Math.min(postorderNums[v3].low, postorderNums[w4].low); var lim = Math.max(postorderNums[v3].lim, postorderNums[w4].lim); var parent4; var lca; parent4 = v3; do { parent4 = g2.parent(parent4); vPath.push(parent4); } while (parent4 && (postorderNums[parent4].low > low || lim > postorderNums[parent4].lim)); lca = parent4; parent4 = w4; while ((parent4 = g2.parent(parent4)) !== lca) { wPath.push(parent4); } return { path: vPath.concat(wPath.reverse()), lca }; } function postorder2(g2) { var result = {}; var lim = 0; function dfs3(v3) { var low = lim; forEach_default(g2.children(v3), dfs3); result[v3] = { low, lim: lim++ }; } __name(dfs3, "dfs"); forEach_default(g2.children(), dfs3); return result; } var init_parent_dummy_chains = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js"() { "use strict"; init_lodash(); __name(parentDummyChains, "parentDummyChains"); __name(findPath, "findPath"); __name(postorder2, "postorder"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/position/bk.js function findType1Conflicts(g2, layering) { var conflicts = {}; function visitLayer(prevLayer, layer) { var k0 = 0, scanPos = 0, prevLayerLength = prevLayer.length, lastNode = last_default(layer); forEach_default(layer, function(v3, i2) { var w4 = findOtherInnerSegmentNode(g2, v3), k1 = w4 ? g2.node(w4).order : prevLayerLength; if (w4 || v3 === lastNode) { forEach_default(layer.slice(scanPos, i2 + 1), function(scanNode) { forEach_default(g2.predecessors(scanNode), function(u2) { var uLabel = g2.node(u2), uPos = uLabel.order; if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g2.node(scanNode).dummy)) { addConflict(conflicts, u2, scanNode); } }); }); scanPos = i2 + 1; k0 = k1; } }); return layer; } __name(visitLayer, "visitLayer"); reduce_default(layering, visitLayer); return conflicts; } function findType2Conflicts(g2, layering) { var conflicts = {}; function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { var v3; forEach_default(range_default(southPos, southEnd), function(i2) { v3 = south[i2]; if (g2.node(v3).dummy) { forEach_default(g2.predecessors(v3), function(u2) { var uNode = g2.node(u2); if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { addConflict(conflicts, u2, v3); } }); } }); } __name(scan, "scan"); function visitLayer(north, south) { var prevNorthPos = -1, nextNorthPos, southPos = 0; forEach_default(south, function(v3, southLookahead) { if (g2.node(v3).dummy === "border") { var predecessors = g2.predecessors(v3); if (predecessors.length) { nextNorthPos = g2.node(predecessors[0]).order; scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); southPos = southLookahead; prevNorthPos = nextNorthPos; } } scan(south, southPos, south.length, nextNorthPos, north.length); }); return south; } __name(visitLayer, "visitLayer"); reduce_default(layering, visitLayer); return conflicts; } function findOtherInnerSegmentNode(g2, v3) { if (g2.node(v3).dummy) { return find_default2(g2.predecessors(v3), function(u2) { return g2.node(u2).dummy; }); } } function addConflict(conflicts, v3, w4) { if (v3 > w4) { var tmp = v3; v3 = w4; w4 = tmp; } var conflictsV = conflicts[v3]; if (!conflictsV) { conflicts[v3] = conflictsV = {}; } conflictsV[w4] = true; } function hasConflict(conflicts, v3, w4) { if (v3 > w4) { var tmp = v3; v3 = w4; w4 = tmp; } return !!conflicts[v3] && Object.prototype.hasOwnProperty.call(conflicts[v3], w4); } function verticalAlignment(g2, layering, conflicts, neighborFn) { var root3 = {}, align = {}, pos = {}; forEach_default(layering, function(layer) { forEach_default(layer, function(v3, order2) { root3[v3] = v3; align[v3] = v3; pos[v3] = order2; }); }); forEach_default(layering, function(layer) { var prevIdx = -1; forEach_default(layer, function(v3) { var ws = neighborFn(v3); if (ws.length) { ws = sortBy_default(ws, function(w5) { return pos[w5]; }); var mp = (ws.length - 1) / 2; for (var i2 = Math.floor(mp), il = Math.ceil(mp); i2 <= il; ++i2) { var w4 = ws[i2]; if (align[v3] === v3 && prevIdx < pos[w4] && !hasConflict(conflicts, v3, w4)) { align[w4] = v3; align[v3] = root3[v3] = root3[w4]; prevIdx = pos[w4]; } } } }); }); return { root: root3, align }; } function horizontalCompaction(g2, layering, root3, align, reverseSep) { var xs = {}, blockG = buildBlockGraph(g2, layering, root3, reverseSep), borderType = reverseSep ? "borderLeft" : "borderRight"; function iterate(setXsFunc, nextNodesFunc) { var stack = blockG.nodes(); var elem = stack.pop(); var visited = {}; while (elem) { if (visited[elem]) { setXsFunc(elem); } else { visited[elem] = true; stack.push(elem); stack = stack.concat(nextNodesFunc(elem)); } elem = stack.pop(); } } __name(iterate, "iterate"); function pass1(elem) { xs[elem] = blockG.inEdges(elem).reduce(function(acc, e3) { return Math.max(acc, xs[e3.v] + blockG.edge(e3)); }, 0); } __name(pass1, "pass1"); function pass2(elem) { var min9 = blockG.outEdges(elem).reduce(function(acc, e3) { return Math.min(acc, xs[e3.w] - blockG.edge(e3)); }, Number.POSITIVE_INFINITY); var node2 = g2.node(elem); if (min9 !== Number.POSITIVE_INFINITY && node2.borderType !== borderType) { xs[elem] = Math.max(xs[elem], min9); } } __name(pass2, "pass2"); iterate(pass1, blockG.predecessors.bind(blockG)); iterate(pass2, blockG.successors.bind(blockG)); forEach_default(align, function(v3) { xs[v3] = xs[root3[v3]]; }); return xs; } function buildBlockGraph(g2, layering, root3, reverseSep) { var blockGraph = new Graph(), graphLabel = g2.graph(), sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); forEach_default(layering, function(layer) { var u2; forEach_default(layer, function(v3) { var vRoot = root3[v3]; blockGraph.setNode(vRoot); if (u2) { var uRoot = root3[u2], prevMax = blockGraph.edge(uRoot, vRoot); blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g2, v3, u2), prevMax || 0)); } u2 = v3; }); }); return blockGraph; } function findSmallestWidthAlignment(g2, xss) { return minBy_default(values_default(xss), function(xs) { var max10 = Number.NEGATIVE_INFINITY; var min9 = Number.POSITIVE_INFINITY; forIn_default(xs, function(x5, v3) { var halfWidth = width(g2, v3) / 2; max10 = Math.max(x5 + halfWidth, max10); min9 = Math.min(x5 - halfWidth, min9); }); return max10 - min9; }); } function alignCoordinates(xss, alignTo) { var alignToVals = values_default(alignTo), alignToMin = min_default(alignToVals), alignToMax = max_default(alignToVals); forEach_default(["u", "d"], function(vert) { forEach_default(["l", "r"], function(horiz) { var alignment = vert + horiz, xs = xss[alignment], delta; if (xs === alignTo) return; var xsVals = values_default(xs); delta = horiz === "l" ? alignToMin - min_default(xsVals) : alignToMax - max_default(xsVals); if (delta) { xss[alignment] = mapValues_default(xs, function(x5) { return x5 + delta; }); } }); }); } function balance(xss, align) { return mapValues_default(xss.ul, function(ignore, v3) { if (align) { return xss[align.toLowerCase()][v3]; } else { var xs = sortBy_default(map_default(xss, v3)); return (xs[1] + xs[2]) / 2; } }); } function positionX(g2) { var layering = buildLayerMatrix(g2); var conflicts = merge_default3(findType1Conflicts(g2, layering), findType2Conflicts(g2, layering)); var xss = {}; var adjustedLayering; forEach_default(["u", "d"], function(vert) { adjustedLayering = vert === "u" ? layering : values_default(layering).reverse(); forEach_default(["l", "r"], function(horiz) { if (horiz === "r") { adjustedLayering = map_default(adjustedLayering, function(inner2) { return values_default(inner2).reverse(); }); } var neighborFn = (vert === "u" ? g2.predecessors : g2.successors).bind(g2); var align = verticalAlignment(g2, adjustedLayering, conflicts, neighborFn); var xs = horizontalCompaction(g2, adjustedLayering, align.root, align.align, horiz === "r"); if (horiz === "r") { xs = mapValues_default(xs, function(x5) { return -x5; }); } xss[vert + horiz] = xs; }); }); var smallestWidth = findSmallestWidthAlignment(g2, xss); alignCoordinates(xss, smallestWidth); return balance(xss, g2.graph().align); } function sep(nodeSep, edgeSep, reverseSep) { return function(g2, v3, w4) { var vLabel = g2.node(v3); var wLabel = g2.node(w4); var sum2 = 0; var delta; sum2 += vLabel.width / 2; if (Object.prototype.hasOwnProperty.call(vLabel, "labelpos")) { switch (vLabel.labelpos.toLowerCase()) { case "l": delta = -vLabel.width / 2; break; case "r": delta = vLabel.width / 2; break; } } if (delta) { sum2 += reverseSep ? delta : -delta; } delta = 0; sum2 += (vLabel.dummy ? edgeSep : nodeSep) / 2; sum2 += (wLabel.dummy ? edgeSep : nodeSep) / 2; sum2 += wLabel.width / 2; if (Object.prototype.hasOwnProperty.call(wLabel, "labelpos")) { switch (wLabel.labelpos.toLowerCase()) { case "l": delta = wLabel.width / 2; break; case "r": delta = -wLabel.width / 2; break; } } if (delta) { sum2 += reverseSep ? delta : -delta; } delta = 0; return sum2; }; } function width(g2, v3) { return g2.node(v3).width; } var init_bk = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/position/bk.js"() { "use strict"; init_lodash(); init_graphlib(); init_util2(); __name(findType1Conflicts, "findType1Conflicts"); __name(findType2Conflicts, "findType2Conflicts"); __name(findOtherInnerSegmentNode, "findOtherInnerSegmentNode"); __name(addConflict, "addConflict"); __name(hasConflict, "hasConflict"); __name(verticalAlignment, "verticalAlignment"); __name(horizontalCompaction, "horizontalCompaction"); __name(buildBlockGraph, "buildBlockGraph"); __name(findSmallestWidthAlignment, "findSmallestWidthAlignment"); __name(alignCoordinates, "alignCoordinates"); __name(balance, "balance"); __name(positionX, "positionX"); __name(sep, "sep"); __name(width, "width"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/position/index.js function position(g2) { g2 = asNonCompoundGraph(g2); positionY(g2); forOwn_default(positionX(g2), function(x5, v3) { g2.node(v3).x = x5; }); } function positionY(g2) { var layering = buildLayerMatrix(g2); var rankSep = g2.graph().ranksep; var prevY = 0; forEach_default(layering, function(layer) { var maxHeight = max_default( map_default(layer, function(v3) { return g2.node(v3).height; }) ); forEach_default(layer, function(v3) { g2.node(v3).y = prevY + maxHeight / 2; }); prevY += maxHeight + rankSep; }); } var init_position = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/position/index.js"() { "use strict"; init_lodash(); init_util2(); init_bk(); __name(position, "position"); __name(positionY, "positionY"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/layout.js function layout(g2, opts) { var time4 = opts && opts.debugTiming ? time2 : notime; time4("layout", () => { var layoutGraph = time4(" buildLayoutGraph", () => buildLayoutGraph(g2)); time4(" runLayout", () => runLayout(layoutGraph, time4)); time4(" updateInputGraph", () => updateInputGraph(g2, layoutGraph)); }); } function runLayout(g2, time4) { time4(" makeSpaceForEdgeLabels", () => makeSpaceForEdgeLabels(g2)); time4(" removeSelfEdges", () => removeSelfEdges(g2)); time4(" acyclic", () => run(g2)); time4(" nestingGraph.run", () => run3(g2)); time4(" rank", () => rank(asNonCompoundGraph(g2))); time4(" injectEdgeLabelProxies", () => injectEdgeLabelProxies(g2)); time4(" removeEmptyRanks", () => removeEmptyRanks(g2)); time4(" nestingGraph.cleanup", () => cleanup(g2)); time4(" normalizeRanks", () => normalizeRanks(g2)); time4(" assignRankMinMax", () => assignRankMinMax(g2)); time4(" removeEdgeLabelProxies", () => removeEdgeLabelProxies(g2)); time4(" normalize.run", () => run2(g2)); time4(" parentDummyChains", () => parentDummyChains(g2)); time4(" addBorderSegments", () => addBorderSegments(g2)); time4(" order", () => order(g2)); time4(" insertSelfEdges", () => insertSelfEdges(g2)); time4(" adjustCoordinateSystem", () => adjust2(g2)); time4(" position", () => position(g2)); time4(" positionSelfEdges", () => positionSelfEdges(g2)); time4(" removeBorderNodes", () => removeBorderNodes(g2)); time4(" normalize.undo", () => undo3(g2)); time4(" fixupEdgeLabelCoords", () => fixupEdgeLabelCoords(g2)); time4(" undoCoordinateSystem", () => undo2(g2)); time4(" translateGraph", () => translateGraph(g2)); time4(" assignNodeIntersects", () => assignNodeIntersects(g2)); time4(" reversePoints", () => reversePointsForReversedEdges(g2)); time4(" acyclic.undo", () => undo(g2)); } function updateInputGraph(inputGraph, layoutGraph) { forEach_default(inputGraph.nodes(), function(v3) { var inputLabel = inputGraph.node(v3); var layoutLabel = layoutGraph.node(v3); if (inputLabel) { inputLabel.x = layoutLabel.x; inputLabel.y = layoutLabel.y; if (layoutGraph.children(v3).length) { inputLabel.width = layoutLabel.width; inputLabel.height = layoutLabel.height; } } }); forEach_default(inputGraph.edges(), function(e3) { var inputLabel = inputGraph.edge(e3); var layoutLabel = layoutGraph.edge(e3); inputLabel.points = layoutLabel.points; if (Object.prototype.hasOwnProperty.call(layoutLabel, "x")) { inputLabel.x = layoutLabel.x; inputLabel.y = layoutLabel.y; } }); inputGraph.graph().width = layoutGraph.graph().width; inputGraph.graph().height = layoutGraph.graph().height; } function buildLayoutGraph(inputGraph) { var g2 = new Graph({ multigraph: true, compound: true }); var graph = canonicalize(inputGraph.graph()); g2.setGraph( merge_default3({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick_default(graph, graphAttrs)) ); forEach_default(inputGraph.nodes(), function(v3) { var node2 = canonicalize(inputGraph.node(v3)); g2.setNode(v3, defaults_default(selectNumberAttrs(node2, nodeNumAttrs), nodeDefaults)); g2.setParent(v3, inputGraph.parent(v3)); }); forEach_default(inputGraph.edges(), function(e3) { var edge = canonicalize(inputGraph.edge(e3)); g2.setEdge( e3, merge_default3({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick_default(edge, edgeAttrs)) ); }); return g2; } function makeSpaceForEdgeLabels(g2) { var graph = g2.graph(); graph.ranksep /= 2; forEach_default(g2.edges(), function(e3) { var edge = g2.edge(e3); edge.minlen *= 2; if (edge.labelpos.toLowerCase() !== "c") { if (graph.rankdir === "TB" || graph.rankdir === "BT") { edge.width += edge.labeloffset; } else { edge.height += edge.labeloffset; } } }); } function injectEdgeLabelProxies(g2) { forEach_default(g2.edges(), function(e3) { var edge = g2.edge(e3); if (edge.width && edge.height) { var v3 = g2.node(e3.v); var w4 = g2.node(e3.w); var label = { rank: (w4.rank - v3.rank) / 2 + v3.rank, e: e3 }; addDummyNode(g2, "edge-proxy", label, "_ep"); } }); } function assignRankMinMax(g2) { var maxRank2 = 0; forEach_default(g2.nodes(), function(v3) { var node2 = g2.node(v3); if (node2.borderTop) { node2.minRank = g2.node(node2.borderTop).rank; node2.maxRank = g2.node(node2.borderBottom).rank; maxRank2 = max_default(maxRank2, node2.maxRank); } }); g2.graph().maxRank = maxRank2; } function removeEdgeLabelProxies(g2) { forEach_default(g2.nodes(), function(v3) { var node2 = g2.node(v3); if (node2.dummy === "edge-proxy") { g2.edge(node2.e).labelRank = node2.rank; g2.removeNode(v3); } }); } function translateGraph(g2) { var minX = Number.POSITIVE_INFINITY; var maxX = 0; var minY = Number.POSITIVE_INFINITY; var maxY = 0; var graphLabel = g2.graph(); var marginX = graphLabel.marginx || 0; var marginY = graphLabel.marginy || 0; function getExtremes(attrs) { var x5 = attrs.x; var y6 = attrs.y; var w4 = attrs.width; var h3 = attrs.height; minX = Math.min(minX, x5 - w4 / 2); maxX = Math.max(maxX, x5 + w4 / 2); minY = Math.min(minY, y6 - h3 / 2); maxY = Math.max(maxY, y6 + h3 / 2); } __name(getExtremes, "getExtremes"); forEach_default(g2.nodes(), function(v3) { getExtremes(g2.node(v3)); }); forEach_default(g2.edges(), function(e3) { var edge = g2.edge(e3); if (Object.prototype.hasOwnProperty.call(edge, "x")) { getExtremes(edge); } }); minX -= marginX; minY -= marginY; forEach_default(g2.nodes(), function(v3) { var node2 = g2.node(v3); node2.x -= minX; node2.y -= minY; }); forEach_default(g2.edges(), function(e3) { var edge = g2.edge(e3); forEach_default(edge.points, function(p3) { p3.x -= minX; p3.y -= minY; }); if (Object.prototype.hasOwnProperty.call(edge, "x")) { edge.x -= minX; } if (Object.prototype.hasOwnProperty.call(edge, "y")) { edge.y -= minY; } }); graphLabel.width = maxX - minX + marginX; graphLabel.height = maxY - minY + marginY; } function assignNodeIntersects(g2) { forEach_default(g2.edges(), function(e3) { var edge = g2.edge(e3); var nodeV = g2.node(e3.v); var nodeW = g2.node(e3.w); var p1, p22; if (!edge.points) { edge.points = []; p1 = nodeW; p22 = nodeV; } else { p1 = edge.points[0]; p22 = edge.points[edge.points.length - 1]; } edge.points.unshift(intersectRect2(nodeV, p1)); edge.points.push(intersectRect2(nodeW, p22)); }); } function fixupEdgeLabelCoords(g2) { forEach_default(g2.edges(), function(e3) { var edge = g2.edge(e3); if (Object.prototype.hasOwnProperty.call(edge, "x")) { if (edge.labelpos === "l" || edge.labelpos === "r") { edge.width -= edge.labeloffset; } switch (edge.labelpos) { case "l": edge.x -= edge.width / 2 + edge.labeloffset; break; case "r": edge.x += edge.width / 2 + edge.labeloffset; break; } } }); } function reversePointsForReversedEdges(g2) { forEach_default(g2.edges(), function(e3) { var edge = g2.edge(e3); if (edge.reversed) { edge.points.reverse(); } }); } function removeBorderNodes(g2) { forEach_default(g2.nodes(), function(v3) { if (g2.children(v3).length) { var node2 = g2.node(v3); var t4 = g2.node(node2.borderTop); var b3 = g2.node(node2.borderBottom); var l4 = g2.node(last_default(node2.borderLeft)); var r2 = g2.node(last_default(node2.borderRight)); node2.width = Math.abs(r2.x - l4.x); node2.height = Math.abs(b3.y - t4.y); node2.x = l4.x + node2.width / 2; node2.y = t4.y + node2.height / 2; } }); forEach_default(g2.nodes(), function(v3) { if (g2.node(v3).dummy === "border") { g2.removeNode(v3); } }); } function removeSelfEdges(g2) { forEach_default(g2.edges(), function(e3) { if (e3.v === e3.w) { var node2 = g2.node(e3.v); if (!node2.selfEdges) { node2.selfEdges = []; } node2.selfEdges.push({ e: e3, label: g2.edge(e3) }); g2.removeEdge(e3); } }); } function insertSelfEdges(g2) { var layers = buildLayerMatrix(g2); forEach_default(layers, function(layer) { var orderShift = 0; forEach_default(layer, function(v3, i2) { var node2 = g2.node(v3); node2.order = i2 + orderShift; forEach_default(node2.selfEdges, function(selfEdge) { addDummyNode( g2, "selfedge", { width: selfEdge.label.width, height: selfEdge.label.height, rank: node2.rank, order: i2 + ++orderShift, e: selfEdge.e, label: selfEdge.label }, "_se" ); }); delete node2.selfEdges; }); }); } function positionSelfEdges(g2) { forEach_default(g2.nodes(), function(v3) { var node2 = g2.node(v3); if (node2.dummy === "selfedge") { var selfNode = g2.node(node2.e.v); var x5 = selfNode.x + selfNode.width / 2; var y6 = selfNode.y; var dx = node2.x - x5; var dy = selfNode.height / 2; g2.setEdge(node2.e, node2.label); g2.removeNode(v3); node2.label.points = [ { x: x5 + 2 * dx / 3, y: y6 - dy }, { x: x5 + 5 * dx / 6, y: y6 - dy }, { x: x5 + dx, y: y6 }, { x: x5 + 5 * dx / 6, y: y6 + dy }, { x: x5 + 2 * dx / 3, y: y6 + dy } ]; node2.label.x = node2.x; node2.label.y = node2.y; } }); } function selectNumberAttrs(obj, attrs) { return mapValues_default(pick_default(obj, attrs), Number); } function canonicalize(attrs) { var newAttrs = {}; forEach_default(attrs, function(v3, k2) { newAttrs[k2.toLowerCase()] = v3; }); return newAttrs; } var graphNumAttrs, graphDefaults, graphAttrs, nodeNumAttrs, nodeDefaults, edgeNumAttrs, edgeDefaults, edgeAttrs; var init_layout = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/layout.js"() { "use strict"; init_lodash(); init_graphlib(); init_add_border_segments(); init_coordinate_system(); init_acyclic(); init_normalize(); init_rank(); init_nesting_graph(); init_order2(); init_parent_dummy_chains(); init_position(); init_util2(); __name(layout, "layout"); __name(runLayout, "runLayout"); __name(updateInputGraph, "updateInputGraph"); graphNumAttrs = ["nodesep", "edgesep", "ranksep", "marginx", "marginy"]; graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: "tb" }; graphAttrs = ["acyclicer", "ranker", "rankdir", "align"]; nodeNumAttrs = ["width", "height"]; nodeDefaults = { width: 0, height: 0 }; edgeNumAttrs = ["minlen", "weight", "width", "height", "labeloffset"]; edgeDefaults = { minlen: 1, weight: 1, width: 0, height: 0, labeloffset: 10, labelpos: "r" }; edgeAttrs = ["labelpos"]; __name(buildLayoutGraph, "buildLayoutGraph"); __name(makeSpaceForEdgeLabels, "makeSpaceForEdgeLabels"); __name(injectEdgeLabelProxies, "injectEdgeLabelProxies"); __name(assignRankMinMax, "assignRankMinMax"); __name(removeEdgeLabelProxies, "removeEdgeLabelProxies"); __name(translateGraph, "translateGraph"); __name(assignNodeIntersects, "assignNodeIntersects"); __name(fixupEdgeLabelCoords, "fixupEdgeLabelCoords"); __name(reversePointsForReversedEdges, "reversePointsForReversedEdges"); __name(removeBorderNodes, "removeBorderNodes"); __name(removeSelfEdges, "removeSelfEdges"); __name(insertSelfEdges, "insertSelfEdges"); __name(positionSelfEdges, "positionSelfEdges"); __name(selectNumberAttrs, "selectNumberAttrs"); __name(canonicalize, "canonicalize"); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/index.js var init_dagre = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/dagre/index.js"() { "use strict"; init_acyclic(); init_layout(); init_normalize(); init_rank(); } }); // ../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/json.js function write(g2) { var json3 = { options: { directed: g2.isDirected(), multigraph: g2.isMultigraph(), compound: g2.isCompound() }, nodes: writeNodes(g2), edges: writeEdges(g2) }; if (!isUndefined_default(g2.graph())) { json3.value = clone_default2(g2.graph()); } return json3; } function writeNodes(g2) { return map_default(g2.nodes(), function(v3) { var nodeValue = g2.node(v3); var parent4 = g2.parent(v3); var node2 = { v: v3 }; if (!isUndefined_default(nodeValue)) { node2.value = nodeValue; } if (!isUndefined_default(parent4)) { node2.parent = parent4; } return node2; }); } function writeEdges(g2) { return map_default(g2.edges(), function(e3) { var edgeValue = g2.edge(e3); var edge = { v: e3.v, w: e3.w }; if (!isUndefined_default(e3.name)) { edge.name = e3.name; } if (!isUndefined_default(edgeValue)) { edge.value = edgeValue; } return edge; }); } var init_json = __esm({ "../../node_modules/.pnpm/dagre-d3-es@7.0.11/node_modules/dagre-d3-es/src/graphlib/json.js"() { "use strict"; init_lodash(); init_graph(); __name(write, "write"); __name(writeNodes, "writeNodes"); __name(writeEdges, "writeEdges"); } }); // src/rendering-util/layout-algorithms/dagre/mermaid-graphlib.js var clusterDb, descendants, parents, clear6, isDescendant2, edgeInCluster, copy2, extractDescendants, findCommonEdges, findNonClusterChild, getAnchorId, adjustClustersAndEdges, extractor, sorter, sortNodesByHierarchy; var init_mermaid_graphlib = __esm({ "src/rendering-util/layout-algorithms/dagre/mermaid-graphlib.js"() { "use strict"; init_logger(); init_graphlib(); init_json(); clusterDb = /* @__PURE__ */ new Map(); descendants = /* @__PURE__ */ new Map(); parents = /* @__PURE__ */ new Map(); clear6 = /* @__PURE__ */ __name(() => { descendants.clear(); parents.clear(); clusterDb.clear(); }, "clear"); isDescendant2 = /* @__PURE__ */ __name((id30, ancestorId) => { const ancestorDescendants = descendants.get(ancestorId) || []; log.trace("In isDescendant", ancestorId, " ", id30, " = ", ancestorDescendants.includes(id30)); return ancestorDescendants.includes(id30); }, "isDescendant"); edgeInCluster = /* @__PURE__ */ __name((edge, clusterId) => { const clusterDescendants = descendants.get(clusterId) || []; log.info("Descendants of ", clusterId, " is ", clusterDescendants); log.info("Edge is ", edge); if (edge.v === clusterId || edge.w === clusterId) { return false; } if (!clusterDescendants) { log.debug("Tilt, ", clusterId, ",not in descendants"); return false; } return clusterDescendants.includes(edge.v) || isDescendant2(edge.v, clusterId) || isDescendant2(edge.w, clusterId) || clusterDescendants.includes(edge.w); }, "edgeInCluster"); copy2 = /* @__PURE__ */ __name((clusterId, graph, newGraph, rootId) => { log.warn( "Copying children of ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId ); const nodes5 = graph.children(clusterId) || []; if (clusterId !== rootId) { nodes5.push(clusterId); } log.warn("Copying (nodes) clusterId", clusterId, "nodes", nodes5); nodes5.forEach((node2) => { if (graph.children(node2).length > 0) { copy2(node2, graph, newGraph, rootId); } else { const data5 = graph.node(node2); log.info("cp ", node2, " to ", rootId, " with parent ", clusterId); newGraph.setNode(node2, data5); if (rootId !== graph.parent(node2)) { log.warn("Setting parent", node2, graph.parent(node2)); newGraph.setParent(node2, graph.parent(node2)); } if (clusterId !== rootId && node2 !== clusterId) { log.debug("Setting parent", node2, clusterId); newGraph.setParent(node2, clusterId); } else { log.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId); log.debug( "Not Setting parent for node=", node2, "cluster!==rootId", clusterId !== rootId, "node!==clusterId", node2 !== clusterId ); } const edges3 = graph.edges(node2); log.debug("Copying Edges", edges3); edges3.forEach((edge) => { log.info("Edge", edge); const data6 = graph.edge(edge.v, edge.w, edge.name); log.info("Edge data", data6, rootId); try { if (edgeInCluster(edge, rootId)) { log.info("Copying as ", edge.v, edge.w, data6, edge.name); newGraph.setEdge(edge.v, edge.w, data6, edge.name); log.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); } else { log.info( "Skipping copy of edge ", edge.v, "-->", edge.w, " rootId: ", rootId, " clusterId:", clusterId ); } } catch (e3) { log.error(e3); } }); } log.debug("Removing node", node2); graph.removeNode(node2); }); }, "copy"); extractDescendants = /* @__PURE__ */ __name((id30, graph) => { const children2 = graph.children(id30); let res = [...children2]; for (const child of children2) { parents.set(child, id30); res = [...res, ...extractDescendants(child, graph)]; } return res; }, "extractDescendants"); findCommonEdges = /* @__PURE__ */ __name((graph, id1, id210) => { const edges1 = graph.edges().filter((edge) => edge.v === id1 || edge.w === id1); const edges22 = graph.edges().filter((edge) => edge.v === id210 || edge.w === id210); const edges1Prim = edges1.map((edge) => { return { v: edge.v === id1 ? id210 : edge.v, w: edge.w === id1 ? id1 : edge.w }; }); const edges2Prim = edges22.map((edge) => { return { v: edge.v, w: edge.w }; }); const result = edges1Prim.filter((edgeIn1) => { return edges2Prim.some((edge) => edgeIn1.v === edge.v && edgeIn1.w === edge.w); }); return result; }, "findCommonEdges"); findNonClusterChild = /* @__PURE__ */ __name((id30, graph, clusterId) => { const children2 = graph.children(id30); log.trace("Searching children of id ", id30, children2); if (children2.length < 1) { return id30; } let reserve; for (const child of children2) { const _id = findNonClusterChild(child, graph, clusterId); const commonEdges = findCommonEdges(graph, clusterId, _id); if (_id) { if (commonEdges.length > 0) { reserve = _id; } else { return _id; } } } return reserve; }, "findNonClusterChild"); getAnchorId = /* @__PURE__ */ __name((id30) => { if (!clusterDb.has(id30)) { return id30; } if (!clusterDb.get(id30).externalConnections) { return id30; } if (clusterDb.has(id30)) { return clusterDb.get(id30).id; } return id30; }, "getAnchorId"); adjustClustersAndEdges = /* @__PURE__ */ __name((graph, depth) => { if (!graph || depth > 10) { log.debug("Opting out, no graph "); return; } else { log.debug("Opting in, graph "); } graph.nodes().forEach(function(id30) { const children2 = graph.children(id30); if (children2.length > 0) { log.warn( "Cluster identified", id30, " Replacement id in edges: ", findNonClusterChild(id30, graph, id30) ); descendants.set(id30, extractDescendants(id30, graph)); clusterDb.set(id30, { id: findNonClusterChild(id30, graph, id30), clusterData: graph.node(id30) }); } }); graph.nodes().forEach(function(id30) { const children2 = graph.children(id30); const edges3 = graph.edges(); if (children2.length > 0) { log.debug("Cluster identified", id30, descendants); edges3.forEach((edge) => { const d1 = isDescendant2(edge.v, id30); const d22 = isDescendant2(edge.w, id30); if (d1 ^ d22) { log.warn("Edge: ", edge, " leaves cluster ", id30); log.warn("Descendants of XXX ", id30, ": ", descendants.get(id30)); clusterDb.get(id30).externalConnections = true; } }); } else { log.debug("Not a cluster ", id30, descendants); } }); for (let id30 of clusterDb.keys()) { const nonClusterChild = clusterDb.get(id30).id; const parent4 = graph.parent(nonClusterChild); if (parent4 !== id30 && clusterDb.has(parent4) && !clusterDb.get(parent4).externalConnections) { clusterDb.get(id30).id = parent4; } } graph.edges().forEach(function(e3) { const edge = graph.edge(e3); log.warn("Edge " + e3.v + " -> " + e3.w + ": " + JSON.stringify(e3)); log.warn("Edge " + e3.v + " -> " + e3.w + ": " + JSON.stringify(graph.edge(e3))); let v3 = e3.v; let w4 = e3.w; log.warn( "Fix XXX", clusterDb, "ids:", e3.v, e3.w, "Translating: ", clusterDb.get(e3.v), " --- ", clusterDb.get(e3.w) ); if (clusterDb.get(e3.v) || clusterDb.get(e3.w)) { log.warn("Fixing and trying - removing XXX", e3.v, e3.w, e3.name); v3 = getAnchorId(e3.v); w4 = getAnchorId(e3.w); graph.removeEdge(e3.v, e3.w, e3.name); if (v3 !== e3.v) { const parent4 = graph.parent(v3); clusterDb.get(parent4).externalConnections = true; edge.fromCluster = e3.v; } if (w4 !== e3.w) { const parent4 = graph.parent(w4); clusterDb.get(parent4).externalConnections = true; edge.toCluster = e3.w; } log.warn("Fix Replacing with XXX", v3, w4, e3.name); graph.setEdge(v3, w4, edge, e3.name); } }); log.warn("Adjusted Graph", write(graph)); extractor(graph, 0); log.trace(clusterDb); }, "adjustClustersAndEdges"); extractor = /* @__PURE__ */ __name((graph, depth) => { log.warn("extractor - ", depth, write(graph), graph.children("D")); if (depth > 10) { log.error("Bailing out"); return; } let nodes5 = graph.nodes(); let hasChildren = false; for (const node2 of nodes5) { const children2 = graph.children(node2); hasChildren = hasChildren || children2.length > 0; } if (!hasChildren) { log.debug("Done, no node has children", graph.nodes()); return; } log.debug("Nodes = ", nodes5, depth); for (const node2 of nodes5) { log.debug( "Extracting node", node2, clusterDb, clusterDb.has(node2) && !clusterDb.get(node2).externalConnections, !graph.parent(node2), graph.node(node2), graph.children("D"), " Depth ", depth ); if (!clusterDb.has(node2)) { log.debug("Not a cluster", node2, depth); } else if (!clusterDb.get(node2).externalConnections && graph.children(node2) && graph.children(node2).length > 0) { log.warn( "Cluster without external connections, without a parent and with children", node2, depth ); const graphSettings = graph.graph(); let dir2 = graphSettings.rankdir === "TB" ? "LR" : "TB"; if (clusterDb.get(node2)?.clusterData?.dir) { dir2 = clusterDb.get(node2).clusterData.dir; log.warn("Fixing dir", clusterDb.get(node2).clusterData.dir, dir2); } const clusterGraph = new Graph({ multigraph: true, compound: true }).setGraph({ rankdir: dir2, nodesep: 50, ranksep: 50, marginx: 8, marginy: 8 }).setDefaultEdgeLabel(function() { return {}; }); log.warn("Old graph before copy", write(graph)); copy2(node2, graph, clusterGraph, node2); graph.setNode(node2, { clusterNode: true, id: node2, clusterData: clusterDb.get(node2).clusterData, label: clusterDb.get(node2).label, graph: clusterGraph }); log.warn("New graph after copy node: (", node2, ")", write(clusterGraph)); log.debug("Old graph after copy", write(graph)); } else { log.warn( "Cluster ** ", node2, " **not meeting the criteria !externalConnections:", !clusterDb.get(node2).externalConnections, " no parent: ", !graph.parent(node2), " children ", graph.children(node2) && graph.children(node2).length > 0, graph.children("D"), depth ); log.debug(clusterDb); } } nodes5 = graph.nodes(); log.warn("New list of nodes", nodes5); for (const node2 of nodes5) { const data5 = graph.node(node2); log.warn(" Now next level", node2, data5); if (data5?.clusterNode) { extractor(data5.graph, depth + 1); } } }, "extractor"); sorter = /* @__PURE__ */ __name((graph, nodes5) => { if (nodes5.length === 0) { return []; } let result = Object.assign([], nodes5); nodes5.forEach((node2) => { const children2 = graph.children(node2); const sorted = sorter(graph, children2); result = [...result, ...sorted]; }); return result; }, "sorter"); sortNodesByHierarchy = /* @__PURE__ */ __name((graph) => sorter(graph, graph.children()), "sortNodesByHierarchy"); } }); // src/rendering-util/layout-algorithms/dagre/index.js var dagre_exports = {}; __export(dagre_exports, { render: () => render3 }); var recursiveRender, render3; var init_dagre2 = __esm({ "src/rendering-util/layout-algorithms/dagre/index.js"() { "use strict"; init_dagre(); init_json(); init_graphlib(); init_markers(); init_util(); init_mermaid_graphlib(); init_nodes2(); init_clusters(); init_edges(); init_logger(); init_subGraphTitleMargins(); init_diagramAPI(); recursiveRender = /* @__PURE__ */ __name(async (_elem, graph, diagramType, id30, parentCluster, siteConfig2) => { log.warn("Graph in recursive render:XAX", write(graph), parentCluster); const dir2 = graph.graph().rankdir; log.trace("Dir in recursive render - dir:", dir2); const elem = _elem.insert("g").attr("class", "root"); if (!graph.nodes()) { log.info("No nodes found for", graph); } else { log.info("Recursive render XXX", graph.nodes()); } if (graph.edges().length > 0) { log.info("Recursive edges", graph.edge(graph.edges()[0])); } const clusters = elem.insert("g").attr("class", "clusters"); const edgePaths = elem.insert("g").attr("class", "edgePaths"); const edgeLabels3 = elem.insert("g").attr("class", "edgeLabels"); const nodes5 = elem.insert("g").attr("class", "nodes"); await Promise.all( graph.nodes().map(async function(v3) { const node2 = graph.node(v3); if (parentCluster !== void 0) { const data5 = JSON.parse(JSON.stringify(parentCluster.clusterData)); log.trace( "Setting data for parent cluster XXX\n Node.id = ", v3, "\n data=", data5.height, "\nParent cluster", parentCluster.height ); graph.setNode(parentCluster.id, data5); if (!graph.parent(v3)) { log.trace("Setting parent", v3, parentCluster.id); graph.setParent(v3, parentCluster.id, data5); } } log.info("(Insert) Node XXX" + v3 + ": " + JSON.stringify(graph.node(v3))); if (node2?.clusterNode) { log.info("Cluster identified XBX", v3, node2.width, graph.node(v3)); const { ranksep, nodesep } = graph.graph(); node2.graph.setGraph({ ...node2.graph.graph(), ranksep: ranksep + 25, nodesep }); const o2 = await recursiveRender( nodes5, node2.graph, diagramType, id30, graph.node(v3), siteConfig2 ); const newEl = o2.elem; updateNodeBounds(node2, newEl); node2.diff = o2.diff || 0; log.info( "New compound node after recursive render XAX", v3, "width", // node, node2.width, "height", node2.height // node.x, // node.y ); setNodeElem(newEl, node2); } else { if (graph.children(v3).length > 0) { log.trace( "Cluster - the non recursive path XBX", v3, node2.id, node2, node2.width, "Graph:", graph ); log.trace(findNonClusterChild(node2.id, graph)); clusterDb.set(node2.id, { id: findNonClusterChild(node2.id, graph), node: node2 }); } else { log.trace("Node - the non recursive path XAX", v3, nodes5, graph.node(v3), dir2); await insertNode(nodes5, graph.node(v3), { config: siteConfig2, dir: dir2 }); } } }) ); const processEdges = /* @__PURE__ */ __name(async () => { const edgePromises = graph.edges().map(async function(e3) { const edge = graph.edge(e3.v, e3.w, e3.name); log.info("Edge " + e3.v + " -> " + e3.w + ": " + JSON.stringify(e3)); log.info("Edge " + e3.v + " -> " + e3.w + ": ", e3, " ", JSON.stringify(graph.edge(e3))); log.info( "Fix", clusterDb, "ids:", e3.v, e3.w, "Translating: ", clusterDb.get(e3.v), clusterDb.get(e3.w) ); await insertEdgeLabel(edgeLabels3, edge); }); await Promise.all(edgePromises); }, "processEdges"); await processEdges(); log.info("Graph before layout:", JSON.stringify(write(graph))); log.info("############################################# XXX"); log.info("### Layout ### XXX"); log.info("############################################# XXX"); layout(graph); log.info("Graph after layout:", JSON.stringify(write(graph))); let diff2 = 0; let { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig2); await Promise.all( sortNodesByHierarchy(graph).map(async function(v3) { const node2 = graph.node(v3); log.info( "Position XBX => " + v3 + ": (" + node2.x, "," + node2.y, ") width: ", node2.width, " height: ", node2.height ); if (node2?.clusterNode) { node2.y += subGraphTitleTotalMargin; log.info( "A tainted cluster node XBX1", v3, node2.id, node2.width, node2.height, node2.x, node2.y, graph.parent(v3) ); clusterDb.get(node2.id).node = node2; positionNode(node2); } else { if (graph.children(v3).length > 0) { log.info( "A pure cluster node XBX1", v3, node2.id, node2.x, node2.y, node2.width, node2.height, graph.parent(v3) ); node2.height += subGraphTitleTotalMargin; graph.node(node2.parentId); const halfPadding = node2?.padding / 2 || 0; const labelHeight = node2?.labelBBox?.height || 0; const offsetY = labelHeight - halfPadding || 0; log.debug("OffsetY", offsetY, "labelHeight", labelHeight, "halfPadding", halfPadding); await insertCluster(clusters, node2); clusterDb.get(node2.id).node = node2; } else { const parent4 = graph.node(node2.parentId); node2.y += subGraphTitleTotalMargin / 2; log.info( "A regular node XBX1 - using the padding", node2.id, "parent", node2.parentId, node2.width, node2.height, node2.x, node2.y, "offsetY", node2.offsetY, "parent", parent4, parent4?.offsetY, node2 ); positionNode(node2); } } }) ); graph.edges().forEach(function(e3) { const edge = graph.edge(e3); log.info("Edge " + e3.v + " -> " + e3.w + ": " + JSON.stringify(edge), edge); edge.points.forEach((point8) => point8.y += subGraphTitleTotalMargin / 2); const startNode = graph.node(e3.v); var endNode = graph.node(e3.w); const paths = insertEdge(edgePaths, edge, clusterDb, diagramType, startNode, endNode, id30); positionEdgeLabel(edge, paths); }); graph.nodes().forEach(function(v3) { const n2 = graph.node(v3); log.info(v3, n2.type, n2.diff); if (n2.isGroup) { diff2 = n2.diff; } }); log.warn("Returning from recursive render XAX", elem, diff2); return { elem, diff: diff2 }; }, "recursiveRender"); render3 = /* @__PURE__ */ __name(async (data4Layout, svg2) => { const graph = new Graph({ multigraph: true, compound: true }).setGraph({ rankdir: data4Layout.direction, nodesep: data4Layout.config?.nodeSpacing || data4Layout.config?.flowchart?.nodeSpacing || data4Layout.nodeSpacing, ranksep: data4Layout.config?.rankSpacing || data4Layout.config?.flowchart?.rankSpacing || data4Layout.rankSpacing, marginx: 8, marginy: 8 }).setDefaultEdgeLabel(function() { return {}; }); const element3 = svg2.select("g"); markers_default(element3, data4Layout.markers, data4Layout.type, data4Layout.diagramId); clear5(); clear4(); clear3(); clear6(); data4Layout.nodes.forEach((node2) => { graph.setNode(node2.id, { ...node2 }); if (node2.parentId) { graph.setParent(node2.id, node2.parentId); } }); log.debug("Edges:", data4Layout.edges); data4Layout.edges.forEach((edge) => { if (edge.start === edge.end) { const nodeId = edge.start; const specialId1 = nodeId + "---" + nodeId + "---1"; const specialId2 = nodeId + "---" + nodeId + "---2"; const node2 = graph.node(nodeId); graph.setNode(specialId1, { domId: specialId1, id: specialId1, parentId: node2.parentId, labelStyle: "", label: "", padding: 0, shape: "labelRect", // shape: 'rect', style: "", width: 10, height: 10 }); graph.setParent(specialId1, node2.parentId); graph.setNode(specialId2, { domId: specialId2, id: specialId2, parentId: node2.parentId, labelStyle: "", padding: 0, // shape: 'rect', shape: "labelRect", label: "", style: "", width: 10, height: 10 }); graph.setParent(specialId2, node2.parentId); const edge1 = structuredClone(edge); const edgeMid = structuredClone(edge); const edge2 = structuredClone(edge); edge1.label = ""; edge1.arrowTypeEnd = "none"; edge1.id = nodeId + "-cyclic-special-1"; edgeMid.arrowTypeStart = "none"; edgeMid.arrowTypeEnd = "none"; edgeMid.id = nodeId + "-cyclic-special-mid"; edge2.label = ""; if (node2.isGroup) { edge1.fromCluster = nodeId; edge2.toCluster = nodeId; } edge2.id = nodeId + "-cyclic-special-2"; edge2.arrowTypeStart = "none"; graph.setEdge(nodeId, specialId1, edge1, nodeId + "-cyclic-special-0"); graph.setEdge(specialId1, specialId2, edgeMid, nodeId + "-cyclic-special-1"); graph.setEdge(specialId2, nodeId, edge2, nodeId + "-cyc r2.length) && (a2 = r2.length); for (var e3 = 0, n2 = Array(a2); e3 < a2; e3++) n2[e3] = r2[e3]; return n2; } function _arrayWithHoles(r2) { if (Array.isArray(r2)) return r2; } function _arrayWithoutHoles(r2) { if (Array.isArray(r2)) return _arrayLikeToArray(r2); } function _classCallCheck(a2, n2) { if (!(a2 instanceof n2)) throw new TypeError("Cannot call a class as a function"); } function _defineProperties(e3, r2) { for (var t4 = 0; t4 < r2.length; t4++) { var o2 = r2[t4]; o2.enumerable = o2.enumerable || false, o2.configurable = true, "value" in o2 && (o2.writable = true), Object.defineProperty(e3, _toPropertyKey(o2.key), o2); } } function _createClass(e3, r2, t4) { return r2 && _defineProperties(e3.prototype, r2), Object.defineProperty(e3, "prototype", { writable: false }), e3; } function _createForOfIteratorHelper(r2, e3) { var t4 = "undefined" != typeof Symbol && r2[Symbol.iterator] || r2["@@iterator"]; if (!t4) { if (Array.isArray(r2) || (t4 = _unsupportedIterableToArray(r2)) || e3) { t4 && (r2 = t4); var n2 = 0, F3 = /* @__PURE__ */ __name(function() { }, "F"); return { s: F3, n: /* @__PURE__ */ __name(function() { return n2 >= r2.length ? { done: true } : { done: false, value: r2[n2++] }; }, "n"), e: /* @__PURE__ */ __name(function(r3) { throw r3; }, "e"), f: F3 }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o2, a2 = true, u2 = false; return { s: /* @__PURE__ */ __name(function() { t4 = t4.call(r2); }, "s"), n: /* @__PURE__ */ __name(function() { var r3 = t4.next(); return a2 = r3.done, r3; }, "n"), e: /* @__PURE__ */ __name(function(r3) { u2 = true, o2 = r3; }, "e"), f: /* @__PURE__ */ __name(function() { try { a2 || null == t4.return || t4.return(); } finally { if (u2) throw o2; } }, "f") }; } function _defineProperty$1(e3, r2, t4) { return (r2 = _toPropertyKey(r2)) in e3 ? Object.defineProperty(e3, r2, { value: t4, enumerable: true, configurable: true, writable: true }) : e3[r2] = t4, e3; } function _iterableToArray(r2) { if ("undefined" != typeof Symbol && null != r2[Symbol.iterator] || null != r2["@@iterator"]) return Array.from(r2); } function _iterableToArrayLimit(r2, l4) { var t4 = null == r2 ? null : "undefined" != typeof Symbol && r2[Symbol.iterator] || r2["@@iterator"]; if (null != t4) { var e3, n2, i2, u2, a2 = [], f2 = true, o2 = false; try { if (i2 = (t4 = t4.call(r2)).next, 0 === l4) { if (Object(t4) !== t4) return; f2 = false; } else for (; !(f2 = (e3 = i2.call(t4)).done) && (a2.push(e3.value), a2.length !== l4); f2 = true) ; } catch (r3) { o2 = true, n2 = r3; } finally { try { if (!f2 && null != t4.return && (u2 = t4.return(), Object(u2) !== u2)) return; } finally { if (o2) throw n2; } } return a2; } } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _slicedToArray(r2, e3) { return _arrayWithHoles(r2) || _iterableToArrayLimit(r2, e3) || _unsupportedIterableToArray(r2, e3) || _nonIterableRest(); } function _toConsumableArray(r2) { return _arrayWithoutHoles(r2) || _iterableToArray(r2) || _unsupportedIterableToArray(r2) || _nonIterableSpread(); } function _toPrimitive(t4, r2) { if ("object" != typeof t4 || !t4) return t4; var e3 = t4[Symbol.toPrimitive]; if (void 0 !== e3) { var i2 = e3.call(t4, r2); if ("object" != typeof i2) return i2; throw new TypeError("@@toPrimitive must return a primitive value."); } return String(t4); } function _toPropertyKey(t4) { var i2 = _toPrimitive(t4, "string"); return "symbol" == typeof i2 ? i2 : i2 + ""; } function _typeof(o2) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o3) { return typeof o3; } : function(o3) { return o3 && "function" == typeof Symbol && o3.constructor === Symbol && o3 !== Symbol.prototype ? "symbol" : typeof o3; }, _typeof(o2); } function _unsupportedIterableToArray(r2, a2) { if (r2) { if ("string" == typeof r2) return _arrayLikeToArray(r2, a2); var t4 = {}.toString.call(r2).slice(8, -1); return "Object" === t4 && r2.constructor && (t4 = r2.constructor.name), "Map" === t4 || "Set" === t4 ? Array.from(r2) : "Arguments" === t4 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t4) ? _arrayLikeToArray(r2, a2) : void 0; } } function getDefaultExportFromCjs(x5) { return x5 && x5.__esModule && Object.prototype.hasOwnProperty.call(x5, "default") ? x5["default"] : x5; } function requireIsObject() { if (hasRequiredIsObject) return isObject_12; hasRequiredIsObject = 1; function isObject3(value2) { var type3 = typeof value2; return value2 != null && (type3 == "object" || type3 == "function"); } __name(isObject3, "isObject"); isObject_12 = isObject3; return isObject_12; } function require_freeGlobal() { if (hasRequired_freeGlobal) return _freeGlobal; hasRequired_freeGlobal = 1; var freeGlobal2 = typeof commonjsGlobal == "object" && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; _freeGlobal = freeGlobal2; return _freeGlobal; } function require_root() { if (hasRequired_root) return _root; hasRequired_root = 1; var freeGlobal2 = require_freeGlobal(); var freeSelf2 = typeof self == "object" && self && self.Object === Object && self; var root3 = freeGlobal2 || freeSelf2 || Function("return this")(); _root = root3; return _root; } function requireNow() { if (hasRequiredNow) return now_1; hasRequiredNow = 1; var root3 = require_root(); var now3 = /* @__PURE__ */ __name(function() { return root3.Date.now(); }, "now"); now_1 = now3; return now_1; } function require_trimmedEndIndex() { if (hasRequired_trimmedEndIndex) return _trimmedEndIndex; hasRequired_trimmedEndIndex = 1; var reWhitespace2 = /\s/; function trimmedEndIndex2(string3) { var index = string3.length; while (index-- && reWhitespace2.test(string3.charAt(index))) { } return index; } __name(trimmedEndIndex2, "trimmedEndIndex"); _trimmedEndIndex = trimmedEndIndex2; return _trimmedEndIndex; } function require_baseTrim() { if (hasRequired_baseTrim) return _baseTrim; hasRequired_baseTrim = 1; var trimmedEndIndex2 = require_trimmedEndIndex(); var reTrimStart2 = /^\s+/; function baseTrim2(string3) { return string3 ? string3.slice(0, trimmedEndIndex2(string3) + 1).replace(reTrimStart2, "") : string3; } __name(baseTrim2, "baseTrim"); _baseTrim = baseTrim2; return _baseTrim; } function require_Symbol() { if (hasRequired_Symbol) return _Symbol; hasRequired_Symbol = 1; var root3 = require_root(); var Symbol3 = root3.Symbol; _Symbol = Symbol3; return _Symbol; } function require_getRawTag() { if (hasRequired_getRawTag) return _getRawTag; hasRequired_getRawTag = 1; var Symbol3 = require_Symbol(); var objectProto22 = Object.prototype; var hasOwnProperty19 = objectProto22.hasOwnProperty; var nativeObjectToString3 = objectProto22.toString; var symToStringTag3 = Symbol3 ? Symbol3.toStringTag : void 0; function getRawTag2(value2) { var isOwn = hasOwnProperty19.call(value2, symToStringTag3), tag = value2[symToStringTag3]; try { value2[symToStringTag3] = void 0; var unmasked = true; } catch (e3) { } var result = nativeObjectToString3.call(value2); if (unmasked) { if (isOwn) { value2[symToStringTag3] = tag; } else { delete value2[symToStringTag3]; } } return result; } __name(getRawTag2, "getRawTag"); _getRawTag = getRawTag2; return _getRawTag; } function require_objectToString() { if (hasRequired_objectToString) return _objectToString; hasRequired_objectToString = 1; var objectProto22 = Object.prototype; var nativeObjectToString3 = objectProto22.toString; function objectToString2(value2) { return nativeObjectToString3.call(value2); } __name(objectToString2, "objectToString"); _objectToString = objectToString2; return _objectToString; } function require_baseGetTag() { if (hasRequired_baseGetTag) return _baseGetTag; hasRequired_baseGetTag = 1; var Symbol3 = require_Symbol(), getRawTag2 = require_getRawTag(), objectToString2 = require_objectToString(); var nullTag2 = "[object Null]", undefinedTag2 = "[object Undefined]"; var symToStringTag3 = Symbol3 ? Symbol3.toStringTag : void 0; function baseGetTag2(value2) { if (value2 == null) { return value2 === void 0 ? undefinedTag2 : nullTag2; } return symToStringTag3 && symToStringTag3 in Object(value2) ? getRawTag2(value2) : objectToString2(value2); } __name(baseGetTag2, "baseGetTag"); _baseGetTag = baseGetTag2; return _baseGetTag; } function requireIsObjectLike() { if (hasRequiredIsObjectLike) return isObjectLike_1; hasRequiredIsObjectLike = 1; function isObjectLike2(value2) { return value2 != null && typeof value2 == "object"; } __name(isObjectLike2, "isObjectLike"); isObjectLike_1 = isObjectLike2; return isObjectLike_1; } function requireIsSymbol() { if (hasRequiredIsSymbol) return isSymbol_1; hasRequiredIsSymbol = 1; var baseGetTag2 = require_baseGetTag(), isObjectLike2 = requireIsObjectLike(); var symbolTag5 = "[object Symbol]"; function isSymbol2(value2) { return typeof value2 == "symbol" || isObjectLike2(value2) && baseGetTag2(value2) == symbolTag5; } __name(isSymbol2, "isSymbol"); isSymbol_1 = isSymbol2; return isSymbol_1; } function requireToNumber() { if (hasRequiredToNumber) return toNumber_1; hasRequiredToNumber = 1; var baseTrim2 = require_baseTrim(), isObject3 = requireIsObject(), isSymbol2 = requireIsSymbol(); var NAN2 = 0 / 0; var reIsBadHex2 = /^[-+]0x[0-9a-f]+$/i; var reIsBinary2 = /^0b[01]+$/i; var reIsOctal2 = /^0o[0-7]+$/i; var freeParseInt2 = parseInt; function toNumber2(value2) { if (typeof value2 == "number") { return value2; } if (isSymbol2(value2)) { return NAN2; } if (isObject3(value2)) { var other = typeof value2.valueOf == "function" ? value2.valueOf() : value2; value2 = isObject3(other) ? other + "" : other; } if (typeof value2 != "string") { return value2 === 0 ? value2 : +value2; } value2 = baseTrim2(value2); var isBinary2 = reIsBinary2.test(value2); return isBinary2 || reIsOctal2.test(value2) ? freeParseInt2(value2.slice(2), isBinary2 ? 2 : 8) : reIsBadHex2.test(value2) ? NAN2 : +value2; } __name(toNumber2, "toNumber"); toNumber_1 = toNumber2; return toNumber_1; } function requireDebounce() { if (hasRequiredDebounce) return debounce_1; hasRequiredDebounce = 1; var isObject3 = requireIsObject(), now3 = requireNow(), toNumber2 = requireToNumber(); var FUNC_ERROR_TEXT3 = "Expected a function"; var nativeMax6 = Math.max, nativeMin = Math.min; function debounce2(func, wait, options2) { var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true; if (typeof func != "function") { throw new TypeError(FUNC_ERROR_TEXT3); } wait = toNumber2(wait) || 0; if (isObject3(options2)) { leading = !!options2.leading; maxing = "maxWait" in options2; maxWait = maxing ? nativeMax6(toNumber2(options2.maxWait) || 0, wait) : maxWait; trailing = "trailing" in options2 ? !!options2.trailing : trailing; } function invokeFunc(time4) { var args = lastArgs, thisArg = lastThis; lastArgs = lastThis = void 0; lastInvokeTime = time4; result = func.apply(thisArg, args); return result; } __name(invokeFunc, "invokeFunc"); function leadingEdge(time4) { lastInvokeTime = time4; timerId = setTimeout(timerExpired, wait); return leading ? invokeFunc(time4) : result; } __name(leadingEdge, "leadingEdge"); function remainingWait(time4) { var timeSinceLastCall = time4 - lastCallTime, timeSinceLastInvoke = time4 - lastInvokeTime, timeWaiting = wait - timeSinceLastCall; return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting; } __name(remainingWait, "remainingWait"); function shouldInvoke(time4) { var timeSinceLastCall = time4 - lastCallTime, timeSinceLastInvoke = time4 - lastInvokeTime; return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait; } __name(shouldInvoke, "shouldInvoke"); function timerExpired() { var time4 = now3(); if (shouldInvoke(time4)) { return trailingEdge(time4); } timerId = setTimeout(timerExpired, remainingWait(time4)); } __name(timerExpired, "timerExpired"); function trailingEdge(time4) { timerId = void 0; if (trailing && lastArgs) { return invokeFunc(time4); } lastArgs = lastThis = void 0; return result; } __name(trailingEdge, "trailingEdge"); function cancel() { if (timerId !== void 0) { clearTimeout(timerId); } lastInvokeTime = 0; lastArgs = lastCallTime = lastThis = timerId = void 0; } __name(cancel, "cancel"); function flush() { return timerId === void 0 ? result : trailingEdge(now3()); } __name(flush, "flush"); function debounced() { var time4 = now3(), isInvoking = shouldInvoke(time4); lastArgs = arguments; lastThis = this; lastCallTime = time4; if (isInvoking) { if (timerId === void 0) { return leadingEdge(lastCallTime); } if (maxing) { clearTimeout(timerId); timerId = setTimeout(timerExpired, wait); return invokeFunc(lastCallTime); } } if (timerId === void 0) { timerId = setTimeout(timerExpired, wait); } return result; } __name(debounced, "debounced"); debounced.cancel = cancel; debounced.flush = flush; return debounced; } __name(debounce2, "debounce"); debounce_1 = debounce2; return debounce_1; } function rotatePoint(x5, y6, centerX, centerY, angleDegrees) { var angleRadians = angleDegrees * Math.PI / 180; var rotatedX = Math.cos(angleRadians) * (x5 - centerX) - Math.sin(angleRadians) * (y6 - centerY) + centerX; var rotatedY = Math.sin(angleRadians) * (x5 - centerX) + Math.cos(angleRadians) * (y6 - centerY) + centerY; return { x: rotatedX, y: rotatedY }; } function rotatePosAndSkewByBox(pos, box, angleDegrees) { if (angleDegrees === 0) return pos; var centerX = (box.x1 + box.x2) / 2; var centerY = (box.y1 + box.y2) / 2; var skewX = box.w / box.h; var skewY = 1 / skewX; var rotated = rotatePoint(pos.x, pos.y, centerX, centerY, angleDegrees); var skewed = movePointByBoxAspect(rotated.x, rotated.y, centerX, centerY, skewX, skewY); return { x: skewed.x, y: skewed.y }; } function requireHeap$1() { if (hasRequiredHeap$1) return heap$2.exports; hasRequiredHeap$1 = 1; (function(module2, exports2) { (function() { var Heap2, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min9, nlargest, nsmallest, updateItem, _siftdown, _siftup; floor = Math.floor, min9 = Math.min; defaultCmp = /* @__PURE__ */ __name(function(x5, y6) { if (x5 < y6) { return -1; } if (x5 > y6) { return 1; } return 0; }, "defaultCmp"); insort = /* @__PURE__ */ __name(function(a2, x5, lo, hi, cmp) { var mid; if (lo == null) { lo = 0; } if (cmp == null) { cmp = defaultCmp; } if (lo < 0) { throw new Error("lo must be non-negative"); } if (hi == null) { hi = a2.length; } while (lo < hi) { mid = floor((lo + hi) / 2); if (cmp(x5, a2[mid]) < 0) { hi = mid; } else { lo = mid + 1; } } return [].splice.apply(a2, [lo, lo - lo].concat(x5)), x5; }, "insort"); heappush = /* @__PURE__ */ __name(function(array4, item, cmp) { if (cmp == null) { cmp = defaultCmp; } array4.push(item); return _siftdown(array4, 0, array4.length - 1, cmp); }, "heappush"); heappop = /* @__PURE__ */ __name(function(array4, cmp) { var lastelt, returnitem; if (cmp == null) { cmp = defaultCmp; } lastelt = array4.pop(); if (array4.length) { returnitem = array4[0]; array4[0] = lastelt; _siftup(array4, 0, cmp); } else { returnitem = lastelt; } return returnitem; }, "heappop"); heapreplace = /* @__PURE__ */ __name(function(array4, item, cmp) { var returnitem; if (cmp == null) { cmp = defaultCmp; } returnitem = array4[0]; array4[0] = item; _siftup(array4, 0, cmp); return returnitem; }, "heapreplace"); heappushpop = /* @__PURE__ */ __name(function(array4, item, cmp) { var _ref; if (cmp == null) { cmp = defaultCmp; } if (array4.length && cmp(array4[0], item) < 0) { _ref = [array4[0], item], item = _ref[0], array4[0] = _ref[1]; _siftup(array4, 0, cmp); } return item; }, "heappushpop"); heapify = /* @__PURE__ */ __name(function(array4, cmp) { var i2, _i, _len, _ref1, _results, _results1; if (cmp == null) { cmp = defaultCmp; } _ref1 = (function() { _results1 = []; for (var _j = 0, _ref = floor(array4.length / 2); 0 <= _ref ? _j < _ref : _j > _ref; 0 <= _ref ? _j++ : _j--) { _results1.push(_j); } return _results1; }).apply(this).reverse(); _results = []; for (_i = 0, _len = _ref1.length; _i < _len; _i++) { i2 = _ref1[_i]; _results.push(_siftup(array4, i2, cmp)); } return _results; }, "heapify"); updateItem = /* @__PURE__ */ __name(function(array4, item, cmp) { var pos; if (cmp == null) { cmp = defaultCmp; } pos = array4.indexOf(item); if (pos === -1) { return; } _siftdown(array4, 0, pos, cmp); return _siftup(array4, pos, cmp); }, "updateItem"); nlargest = /* @__PURE__ */ __name(function(array4, n2, cmp) { var elem, result, _i, _len, _ref; if (cmp == null) { cmp = defaultCmp; } result = array4.slice(0, n2); if (!result.length) { return result; } heapify(result, cmp); _ref = array4.slice(n2); for (_i = 0, _len = _ref.length; _i < _len; _i++) { elem = _ref[_i]; heappushpop(result, elem, cmp); } return result.sort(cmp).reverse(); }, "nlargest"); nsmallest = /* @__PURE__ */ __name(function(array4, n2, cmp) { var elem, los, result, _i, _j, _len, _ref, _ref1, _results; if (cmp == null) { cmp = defaultCmp; } if (n2 * 10 <= array4.length) { result = array4.slice(0, n2).sort(cmp); if (!result.length) { return result; } los = result[result.length - 1]; _ref = array4.slice(n2); for (_i = 0, _len = _ref.length; _i < _len; _i++) { elem = _ref[_i]; if (cmp(elem, los) < 0) { insort(result, elem, 0, null, cmp); result.pop(); los = result[result.length - 1]; } } return result; } heapify(array4, cmp); _results = []; for (_j = 0, _ref1 = min9(n2, array4.length); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; 0 <= _ref1 ? ++_j : --_j) { _results.push(heappop(array4, cmp)); } return _results; }, "nsmallest"); _siftdown = /* @__PURE__ */ __name(function(array4, startpos, pos, cmp) { var newitem, parent4, parentpos; if (cmp == null) { cmp = defaultCmp; } newitem = array4[pos]; while (pos > startpos) { parentpos = pos - 1 >> 1; parent4 = array4[parentpos]; if (cmp(newitem, parent4) < 0) { array4[pos] = parent4; pos = parentpos; continue; } break; } return array4[pos] = newitem; }, "_siftdown"); _siftup = /* @__PURE__ */ __name(function(array4, pos, cmp) { var childpos, endpos, newitem, rightpos, startpos; if (cmp == null) { cmp = defaultCmp; } endpos = array4.length; startpos = pos; newitem = array4[pos]; childpos = 2 * pos + 1; while (childpos < endpos) { rightpos = childpos + 1; if (rightpos < endpos && !(cmp(array4[childpos], array4[rightpos]) < 0)) { childpos = rightpos; } array4[pos] = array4[childpos]; pos = childpos; childpos = 2 * pos + 1; } array4[pos] = newitem; return _siftdown(array4, startpos, pos, cmp); }, "_siftup"); Heap2 = (function() { Heap3.push = heappush; Heap3.pop = heappop; Heap3.replace = heapreplace; Heap3.pushpop = heappushpop; Heap3.heapify = heapify; Heap3.updateItem = updateItem; Heap3.nlargest = nlargest; Heap3.nsmallest = nsmallest; function Heap3(cmp) { this.cmp = cmp != null ? cmp : defaultCmp; this.nodes = []; } __name(Heap3, "Heap"); Heap3.prototype.push = function(x5) { return heappush(this.nodes, x5, this.cmp); }; Heap3.prototype.pop = function() { return heappop(this.nodes, this.cmp); }; Heap3.prototype.peek = function() { return this.nodes[0]; }; Heap3.prototype.contains = function(x5) { return this.nodes.indexOf(x5) !== -1; }; Heap3.prototype.replace = function(x5) { return heapreplace(this.nodes, x5, this.cmp); }; Heap3.prototype.pushpop = function(x5) { return heappushpop(this.nodes, x5, this.cmp); }; Heap3.prototype.heapify = function() { return heapify(this.nodes, this.cmp); }; Heap3.prototype.updateItem = function(x5) { return updateItem(this.nodes, x5, this.cmp); }; Heap3.prototype.clear = function() { return this.nodes = []; }; Heap3.prototype.empty = function() { return this.nodes.length === 0; }; Heap3.prototype.size = function() { return this.nodes.length; }; Heap3.prototype.clone = function() { var heap2; heap2 = new Heap3(); heap2.nodes = this.nodes.slice(0); return heap2; }; Heap3.prototype.toArray = function() { return this.nodes.slice(0); }; Heap3.prototype.insert = Heap3.prototype.push; Heap3.prototype.top = Heap3.prototype.peek; Heap3.prototype.front = Heap3.prototype.peek; Heap3.prototype.has = Heap3.prototype.contains; Heap3.prototype.copy = Heap3.prototype.clone; return Heap3; })(); (function(root3, factory) { { return module2.exports = factory(); } })(this, function() { return Heap2; }); }).call(heap$1); })(heap$2); return heap$2.exports; } function requireHeap() { if (hasRequiredHeap) return heap; hasRequiredHeap = 1; heap = requireHeap$1(); return heap; } function inflatePolygon(polygon2, d3) { if (polygon2.length < 3) { throw new Error("Need at least 3 vertices"); } var add3 = /* @__PURE__ */ __name(function add4(a2, b3) { return { x: a2.x + b3.x, y: a2.y + b3.y }; }, "add"); var sub2 = /* @__PURE__ */ __name(function sub3(a2, b3) { return { x: a2.x - b3.x, y: a2.y - b3.y }; }, "sub"); var scale2 = /* @__PURE__ */ __name(function scale3(v3, s2) { return { x: v3.x * s2, y: v3.y * s2 }; }, "scale"); var cross3 = /* @__PURE__ */ __name(function cross4(u2, v3) { return u2.x * v3.y - u2.y * v3.x; }, "cross"); var normalize4 = /* @__PURE__ */ __name(function normalize5(v3) { var len = hypot(v3.x, v3.y); return len === 0 ? { x: 0, y: 0 } : { x: v3.x / len, y: v3.y / len }; }, "normalize"); var signedArea = /* @__PURE__ */ __name(function signedArea2(pts3) { var A2 = 0; for (var i3 = 0; i3 < pts3.length; i3++) { var p4 = pts3[i3], q4 = pts3[(i3 + 1) % pts3.length]; A2 += p4.x * q4.y - q4.x * p4.y; } return A2 / 2; }, "signedArea"); var intersectLines = /* @__PURE__ */ __name(function intersectLines2(p1, p22, p32, p4) { var r2 = sub2(p22, p1); var s2 = sub2(p4, p32); var denom = cross3(r2, s2); if (Math.abs(denom) < 1e-9) { return add3(p1, scale2(r2, 0.5)); } var t4 = cross3(sub2(p32, p1), s2) / denom; return add3(p1, scale2(r2, t4)); }, "intersectLines"); var pts2 = polygon2.map(function(p4) { return { x: p4.x, y: p4.y }; }); if (signedArea(pts2) < 0) pts2.reverse(); var n2 = pts2.length; var normals = []; for (var i2 = 0; i2 < n2; i2++) { var p3 = pts2[i2], q3 = pts2[(i2 + 1) % n2]; var edge = sub2(q3, p3); var out = normalize4({ x: edge.y, y: -edge.x }); normals.push(out); } var offsetEdges = normals.map(function(nrm, i3) { var p1 = add3(pts2[i3], scale2(nrm, d3)); var p22 = add3(pts2[(i3 + 1) % n2], scale2(nrm, d3)); return { p1, p2: p22 }; }); var inflated = []; for (var _i2 = 0; _i2 < n2; _i2++) { var prevEdge = offsetEdges[(_i2 - 1 + n2) % n2]; var currEdge = offsetEdges[_i2]; var ip = intersectLines(prevEdge.p1, prevEdge.p2, currEdge.p1, currEdge.p2); inflated.push(ip); } return inflated; } function miterBox(pts2, centerX, centerY, width3, height2, strokeWidth) { var tpts = transformPoints(pts2, centerX, centerY, width3, height2); var offsetPoints = inflatePolygon(tpts, strokeWidth); var bb = makeBoundingBox(); offsetPoints.forEach(function(pt) { return expandBoundingBoxByPoint(bb, pt.x, pt.y); }); return bb; } function satPolygonIntersection(poly1, poly2) { function getAxes2(polygon2) { var axes2 = []; for (var i2 = 0; i2 < polygon2.length; i2++) { var p1 = polygon2[i2]; var p22 = polygon2[(i2 + 1) % polygon2.length]; var edge = { x: p22.x - p1.x, y: p22.y - p1.y }; var normal = { x: -edge.y, y: edge.x }; var length2 = Math.sqrt(normal.x * normal.x + normal.y * normal.y); axes2.push({ x: normal.x / length2, y: normal.y / length2 }); } return axes2; } __name(getAxes2, "getAxes"); function project(polygon2, axis3) { var min9 = Infinity; var max10 = -Infinity; var _iterator = _createForOfIteratorHelper(polygon2), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done; ) { var point8 = _step.value; var projection2 = point8.x * axis3.x + point8.y * axis3.y; min9 = Math.min(min9, projection2); max10 = Math.max(max10, projection2); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } return { min: min9, max: max10 }; } __name(project, "project"); function overlaps(proj12, proj22) { return !(proj12.max < proj22.min || proj22.max < proj12.min); } __name(overlaps, "overlaps"); var axes = [].concat(_toConsumableArray(getAxes2(poly1)), _toConsumableArray(getAxes2(poly2))); var _iterator2 = _createForOfIteratorHelper(axes), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) { var axis2 = _step2.value; var proj1 = project(poly1, axis2); var proj2 = project(poly2, axis2); if (!overlaps(proj1, proj2)) { return false; } } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } return true; } function clusteringDistance(method, length2, getP, getQ, nodeP, nodeQ) { var impl2; if (fn$6(method)) { impl2 = method; } else { impl2 = distances[method] || distances.euclidean; } if (length2 === 0 && fn$6(method)) { return impl2(nodeP, nodeQ); } else { return impl2(length2, getP, getQ, nodeP, nodeQ); } } function requireIsArray() { if (hasRequiredIsArray) return isArray_1; hasRequiredIsArray = 1; var isArray2 = Array.isArray; isArray_1 = isArray2; return isArray_1; } function require_isKey() { if (hasRequired_isKey) return _isKey; hasRequired_isKey = 1; var isArray2 = requireIsArray(), isSymbol2 = requireIsSymbol(); var reIsDeepProp2 = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp2 = /^\w*$/; function isKey2(value2, object3) { if (isArray2(value2)) { return false; } var type3 = typeof value2; if (type3 == "number" || type3 == "symbol" || type3 == "boolean" || value2 == null || isSymbol2(value2)) { return true; } return reIsPlainProp2.test(value2) || !reIsDeepProp2.test(value2) || object3 != null && value2 in Object(object3); } __name(isKey2, "isKey"); _isKey = isKey2; return _isKey; } function requireIsFunction() { if (hasRequiredIsFunction) return isFunction_1; hasRequiredIsFunction = 1; var baseGetTag2 = require_baseGetTag(), isObject3 = requireIsObject(); var asyncTag2 = "[object AsyncFunction]", funcTag4 = "[object Function]", genTag3 = "[object GeneratorFunction]", proxyTag2 = "[object Proxy]"; function isFunction2(value2) { if (!isObject3(value2)) { return false; } var tag = baseGetTag2(value2); return tag == funcTag4 || tag == genTag3 || tag == asyncTag2 || tag == proxyTag2; } __name(isFunction2, "isFunction"); isFunction_1 = isFunction2; return isFunction_1; } function require_coreJsData() { if (hasRequired_coreJsData) return _coreJsData; hasRequired_coreJsData = 1; var root3 = require_root(); var coreJsData2 = root3["__core-js_shared__"]; _coreJsData = coreJsData2; return _coreJsData; } function require_isMasked() { if (hasRequired_isMasked) return _isMasked; hasRequired_isMasked = 1; var coreJsData2 = require_coreJsData(); var maskSrcKey2 = (function() { var uid = /[^.]+$/.exec(coreJsData2 && coreJsData2.keys && coreJsData2.keys.IE_PROTO || ""); return uid ? "Symbol(src)_1." + uid : ""; })(); function isMasked2(func) { return !!maskSrcKey2 && maskSrcKey2 in func; } __name(isMasked2, "isMasked"); _isMasked = isMasked2; return _isMasked; } function require_toSource() { if (hasRequired_toSource) return _toSource; hasRequired_toSource = 1; var funcProto4 = Function.prototype; var funcToString4 = funcProto4.toString; function toSource2(func) { if (func != null) { try { return funcToString4.call(func); } catch (e3) { } try { return func + ""; } catch (e3) { } } return ""; } __name(toSource2, "toSource"); _toSource = toSource2; return _toSource; } function require_baseIsNative() { if (hasRequired_baseIsNative) return _baseIsNative; hasRequired_baseIsNative = 1; var isFunction2 = requireIsFunction(), isMasked2 = require_isMasked(), isObject3 = requireIsObject(), toSource2 = require_toSource(); var reRegExpChar2 = /[\\^$.*+?()[\]{}|]/g; var reIsHostCtor2 = /^\[object .+?Constructor\]$/; var funcProto4 = Function.prototype, objectProto22 = Object.prototype; var funcToString4 = funcProto4.toString; var hasOwnProperty19 = objectProto22.hasOwnProperty; var reIsNative2 = RegExp( "^" + funcToString4.call(hasOwnProperty19).replace(reRegExpChar2, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$" ); function baseIsNative2(value2) { if (!isObject3(value2) || isMasked2(value2)) { return false; } var pattern = isFunction2(value2) ? reIsNative2 : reIsHostCtor2; return pattern.test(toSource2(value2)); } __name(baseIsNative2, "baseIsNative"); _baseIsNative = baseIsNative2; return _baseIsNative; } function require_getValue() { if (hasRequired_getValue) return _getValue; hasRequired_getValue = 1; function getValue3(object3, key) { return object3 == null ? void 0 : object3[key]; } __name(getValue3, "getValue"); _getValue = getValue3; return _getValue; } function require_getNative() { if (hasRequired_getNative) return _getNative; hasRequired_getNative = 1; var baseIsNative2 = require_baseIsNative(), getValue3 = require_getValue(); function getNative2(object3, key) { var value2 = getValue3(object3, key); return baseIsNative2(value2) ? value2 : void 0; } __name(getNative2, "getNative"); _getNative = getNative2; return _getNative; } function require_nativeCreate() { if (hasRequired_nativeCreate) return _nativeCreate; hasRequired_nativeCreate = 1; var getNative2 = require_getNative(); var nativeCreate2 = getNative2(Object, "create"); _nativeCreate = nativeCreate2; return _nativeCreate; } function require_hashClear() { if (hasRequired_hashClear) return _hashClear; hasRequired_hashClear = 1; var nativeCreate2 = require_nativeCreate(); function hashClear2() { this.__data__ = nativeCreate2 ? nativeCreate2(null) : {}; this.size = 0; } __name(hashClear2, "hashClear"); _hashClear = hashClear2; return _hashClear; } function require_hashDelete() { if (hasRequired_hashDelete) return _hashDelete; hasRequired_hashDelete = 1; function hashDelete2(key) { var result = this.has(key) && delete this.__data__[key]; this.size -= result ? 1 : 0; return result; } __name(hashDelete2, "hashDelete"); _hashDelete = hashDelete2; return _hashDelete; } function require_hashGet() { if (hasRequired_hashGet) return _hashGet; hasRequired_hashGet = 1; var nativeCreate2 = require_nativeCreate(); var HASH_UNDEFINED4 = "__lodash_hash_undefined__"; var objectProto22 = Object.prototype; var hasOwnProperty19 = objectProto22.hasOwnProperty; function hashGet2(key) { var data5 = this.__data__; if (nativeCreate2) { var result = data5[key]; return result === HASH_UNDEFINED4 ? void 0 : result; } return hasOwnProperty19.call(data5, key) ? data5[key] : void 0; } __name(hashGet2, "hashGet"); _hashGet = hashGet2; return _hashGet; } function require_hashHas() { if (hasRequired_hashHas) return _hashHas; hasRequired_hashHas = 1; var nativeCreate2 = require_nativeCreate(); var objectProto22 = Object.prototype; var hasOwnProperty19 = objectProto22.hasOwnProperty; function hashHas2(key) { var data5 = this.__data__; return nativeCreate2 ? data5[key] !== void 0 : hasOwnProperty19.call(data5, key); } __name(hashHas2, "hashHas"); _hashHas = hashHas2; return _hashHas; } function require_hashSet() { if (hasRequired_hashSet) return _hashSet; hasRequired_hashSet = 1; var nativeCreate2 = require_nativeCreate(); var HASH_UNDEFINED4 = "__lodash_hash_undefined__"; function hashSet2(key, value2) { var data5 = this.__data__; this.size += this.has(key) ? 0 : 1; data5[key] = nativeCreate2 && value2 === void 0 ? HASH_UNDEFINED4 : value2; return this; } __name(hashSet2, "hashSet"); _hashSet = hashSet2; return _hashSet; } function require_Hash() { if (hasRequired_Hash) return _Hash; hasRequired_Hash = 1; var hashClear2 = require_hashClear(), hashDelete2 = require_hashDelete(), hashGet2 = require_hashGet(), hashHas2 = require_hashHas(), hashSet2 = require_hashSet(); function Hash2(entries2) { var index = -1, length2 = entries2 == null ? 0 : entries2.length; this.clear(); while (++index < length2) { var entry = entries2[index]; this.set(entry[0], entry[1]); } } __name(Hash2, "Hash"); Hash2.prototype.clear = hashClear2; Hash2.prototype["delete"] = hashDelete2; Hash2.prototype.get = hashGet2; Hash2.prototype.has = hashHas2; Hash2.prototype.set = hashSet2; _Hash = Hash2; return _Hash; } function require_listCacheClear() { if (hasRequired_listCacheClear) return _listCacheClear; hasRequired_listCacheClear = 1; function listCacheClear2() { this.__data__ = []; this.size = 0; } __name(listCacheClear2, "listCacheClear"); _listCacheClear = listCacheClear2; return _listCacheClear; } function requireEq() { if (hasRequiredEq) return eq_1; hasRequiredEq = 1; function eq3(value2, other) { return value2 === other || value2 !== value2 && other !== other; } __name(eq3, "eq"); eq_1 = eq3; return eq_1; } function require_assocIndexOf() { if (hasRequired_assocIndexOf) return _assocIndexOf; hasRequired_assocIndexOf = 1; var eq3 = requireEq(); function assocIndexOf2(array4, key) { var length2 = array4.length; while (length2--) { if (eq3(array4[length2][0], key)) { return length2; } } return -1; } __name(assocIndexOf2, "assocIndexOf"); _assocIndexOf = assocIndexOf2; return _assocIndexOf; } function require_listCacheDelete() { if (hasRequired_listCacheDelete) return _listCacheDelete; hasRequired_listCacheDelete = 1; var assocIndexOf2 = require_assocIndexOf(); var arrayProto2 = Array.prototype; var splice2 = arrayProto2.splice; function listCacheDelete2(key) { var data5 = this.__data__, index = assocIndexOf2(data5, key); if (index < 0) { return false; } var lastIndex = data5.length - 1; if (index == lastIndex) { data5.pop(); } else { splice2.call(data5, index, 1); } --this.size; return true; } __name(listCacheDelete2, "listCacheDelete"); _listCacheDelete = listCacheDelete2; return _listCacheDelete; } function require_listCacheGet() { if (hasRequired_listCacheGet) return _listCacheGet; hasRequired_listCacheGet = 1; var assocIndexOf2 = require_assocIndexOf(); function listCacheGet2(key) { var data5 = this.__data__, index = assocIndexOf2(data5, key); return index < 0 ? void 0 : data5[index][1]; } __name(listCacheGet2, "listCacheGet"); _listCacheGet = listCacheGet2; return _listCacheGet; } function require_listCacheHas() { if (hasRequired_listCacheHas) return _listCacheHas; hasRequired_listCacheHas = 1; var assocIndexOf2 = require_assocIndexOf(); function listCacheHas2(key) { return assocIndexOf2(this.__data__, key) > -1; } __name(listCacheHas2, "listCacheHas"); _listCacheHas = listCacheHas2; return _listCacheHas; } function require_listCacheSet() { if (hasRequired_listCacheSet) return _listCacheSet; hasRequired_listCacheSet = 1; var assocIndexOf2 = require_assocIndexOf(); function listCacheSet2(key, value2) { var data5 = this.__data__, index = assocIndexOf2(data5, key); if (index < 0) { ++this.size; data5.push([key, value2]); } else { data5[index][1] = value2; } return this; } __name(listCacheSet2, "listCacheSet"); _listCacheSet = listCacheSet2; return _listCacheSet; } function require_ListCache() { if (hasRequired_ListCache) return _ListCache; hasRequired_ListCache = 1; var listCacheClear2 = require_listCacheClear(), listCacheDelete2 = require_listCacheDelete(), listCacheGet2 = require_listCacheGet(), listCacheHas2 = require_listCacheHas(), listCacheSet2 = require_listCacheSet(); function ListCache2(entries2) { var index = -1, length2 = entries2 == null ? 0 : entries2.length; this.clear(); while (++index < length2) { var entry = entries2[index]; this.set(entry[0], entry[1]); } } __name(ListCache2, "ListCache"); ListCache2.prototype.clear = listCacheClear2; ListCache2.prototype["delete"] = listCacheDelete2; ListCache2.prototype.get = listCacheGet2; ListCache2.prototype.has = listCacheHas2; ListCache2.prototype.set = listCacheSet2; _ListCache = ListCache2; return _ListCache; } function require_Map() { if (hasRequired_Map) return _Map; hasRequired_Map = 1; var getNative2 = require_getNative(), root3 = require_root(); var Map3 = getNative2(root3, "Map"); _Map = Map3; return _Map; } function require_mapCacheClear() { if (hasRequired_mapCacheClear) return _mapCacheClear; hasRequired_mapCacheClear = 1; var Hash2 = require_Hash(), ListCache2 = require_ListCache(), Map3 = require_Map(); function mapCacheClear2() { this.size = 0; this.__data__ = { "hash": new Hash2(), "map": new (Map3 || ListCache2)(), "string": new Hash2() }; } __name(mapCacheClear2, "mapCacheClear"); _mapCacheClear = mapCacheClear2; return _mapCacheClear; } function require_isKeyable() { if (hasRequired_isKeyable) return _isKeyable; hasRequired_isKeyable = 1; function isKeyable2(value2) { var type3 = typeof value2; return type3 == "string" || type3 == "number" || type3 == "symbol" || type3 == "boolean" ? value2 !== "__proto__" : value2 === null; } __name(isKeyable2, "isKeyable"); _isKeyable = isKeyable2; return _isKeyable; } function require_getMapData() { if (hasRequired_getMapData) return _getMapData; hasRequired_getMapData = 1; var isKeyable2 = require_isKeyable(); function getMapData2(map5, key) { var data5 = map5.__data__; return isKeyable2(key) ? data5[typeof key == "string" ? "string" : "hash"] : data5.map; } __name(getMapData2, "getMapData"); _getMapData = getMapData2; return _getMapData; } function require_mapCacheDelete() { if (hasRequired_mapCacheDelete) return _mapCacheDelete; hasRequired_mapCacheDelete = 1; var getMapData2 = require_getMapData(); function mapCacheDelete2(key) { var result = getMapData2(this, key)["delete"](key); this.size -= result ? 1 : 0; return result; } __name(mapCacheDelete2, "mapCacheDelete"); _mapCacheDelete = mapCacheDelete2; return _mapCacheDelete; } function require_mapCacheGet() { if (hasRequired_mapCacheGet) return _mapCacheGet; hasRequired_mapCacheGet = 1; var getMapData2 = require_getMapData(); function mapCacheGet2(key) { return getMapData2(this, key).get(key); } __name(mapCacheGet2, "mapCacheGet"); _mapCacheGet = mapCacheGet2; return _mapCacheGet; } function require_mapCacheHas() { if (hasRequired_mapCacheHas) return _mapCacheHas; hasRequired_mapCacheHas = 1; var getMapData2 = require_getMapData(); function mapCacheHas2(key) { return getMapData2(this, key).has(key); } __name(mapCacheHas2, "mapCacheHas"); _mapCacheHas = mapCacheHas2; return _mapCacheHas; } function require_mapCacheSet() { if (hasRequired_mapCacheSet) return _mapCacheSet; hasRequired_mapCacheSet = 1; var getMapData2 = require_getMapData(); function mapCacheSet2(key, value2) { var data5 = getMapData2(this, key), size4 = data5.size; data5.set(key, value2); this.size += data5.size == size4 ? 0 : 1; return this; } __name(mapCacheSet2, "mapCacheSet"); _mapCacheSet = mapCacheSet2; return _mapCacheSet; } function require_MapCache() { if (hasRequired_MapCache) return _MapCache; hasRequired_MapCache = 1; var mapCacheClear2 = require_mapCacheClear(), mapCacheDelete2 = require_mapCacheDelete(), mapCacheGet2 = require_mapCacheGet(), mapCacheHas2 = require_mapCacheHas(), mapCacheSet2 = require_mapCacheSet(); function MapCache2(entries2) { var index = -1, length2 = entries2 == null ? 0 : entries2.length; this.clear(); while (++index < length2) { var entry = entries2[index]; this.set(entry[0], entry[1]); } } __name(MapCache2, "MapCache"); MapCache2.prototype.clear = mapCacheClear2; MapCache2.prototype["delete"] = mapCacheDelete2; MapCache2.prototype.get = mapCacheGet2; MapCache2.prototype.has = mapCacheHas2; MapCache2.prototype.set = mapCacheSet2; _MapCache = MapCache2; return _MapCache; } function requireMemoize() { if (hasRequiredMemoize) return memoize_1; hasRequiredMemoize = 1; var MapCache2 = require_MapCache(); var FUNC_ERROR_TEXT3 = "Expected a function"; function memoize4(func, resolver3) { if (typeof func != "function" || resolver3 != null && typeof resolver3 != "function") { throw new TypeError(FUNC_ERROR_TEXT3); } var memoized = /* @__PURE__ */ __name(function() { var args = arguments, key = resolver3 ? resolver3.apply(this, args) : args[0], cache3 = memoized.cache; if (cache3.has(key)) { return cache3.get(key); } var result = func.apply(this, args); memoized.cache = cache3.set(key, result) || cache3; return result; }, "memoized"); memoized.cache = new (memoize4.Cache || MapCache2)(); return memoized; } __name(memoize4, "memoize"); memoize4.Cache = MapCache2; memoize_1 = memoize4; return memoize_1; } function require_memoizeCapped() { if (hasRequired_memoizeCapped) return _memoizeCapped; hasRequired_memoizeCapped = 1; var memoize4 = requireMemoize(); var MAX_MEMOIZE_SIZE2 = 500; function memoizeCapped2(func) { var result = memoize4(func, function(key) { if (cache3.size === MAX_MEMOIZE_SIZE2) { cache3.clear(); } return key; }); var cache3 = result.cache; return result; } __name(memoizeCapped2, "memoizeCapped"); _memoizeCapped = memoizeCapped2; return _memoizeCapped; } function require_stringToPath() { if (hasRequired_stringToPath) return _stringToPath; hasRequired_stringToPath = 1; var memoizeCapped2 = require_memoizeCapped(); var rePropName2 = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; var reEscapeChar2 = /\\(\\)?/g; var stringToPath2 = memoizeCapped2(function(string3) { var result = []; if (string3.charCodeAt(0) === 46) { result.push(""); } string3.replace(rePropName2, function(match2, number7, quote, subString) { result.push(quote ? subString.replace(reEscapeChar2, "$1") : number7 || match2); }); return result; }); _stringToPath = stringToPath2; return _stringToPath; } function require_arrayMap() { if (hasRequired_arrayMap) return _arrayMap; hasRequired_arrayMap = 1; function arrayMap2(array4, iteratee) { var index = -1, length2 = array4 == null ? 0 : array4.length, result = Array(length2); while (++index < length2) { result[index] = iteratee(array4[index], index, array4); } return result; } __name(arrayMap2, "arrayMap"); _arrayMap = arrayMap2; return _arrayMap; } function require_baseToString() { if (hasRequired_baseToString) return _baseToString; hasRequired_baseToString = 1; var Symbol3 = require_Symbol(), arrayMap2 = require_arrayMap(), isArray2 = requireIsArray(), isSymbol2 = requireIsSymbol(); var symbolProto4 = Symbol3 ? Symbol3.prototype : void 0, symbolToString2 = symbolProto4 ? symbolProto4.toString : void 0; function baseToString2(value2) { if (typeof value2 == "string") { return value2; } if (isArray2(value2)) { return arrayMap2(value2, baseToString2) + ""; } if (isSymbol2(value2)) { return symbolToString2 ? symbolToString2.call(value2) : ""; } var result = value2 + ""; return result == "0" && 1 / value2 == -Infinity ? "-0" : result; } __name(baseToString2, "baseToString"); _baseToString = baseToString2; return _baseToString; } function requireToString() { if (hasRequiredToString) return toString_1; hasRequiredToString = 1; var baseToString2 = require_baseToString(); function toString6(value2) { return value2 == null ? "" : baseToString2(value2); } __name(toString6, "toString"); toString_1 = toString6; return toString_1; } function require_castPath() { if (hasRequired_castPath) return _castPath; hasRequired_castPath = 1; var isArray2 = requireIsArray(), isKey2 = require_isKey(), stringToPath2 = require_stringToPath(), toString6 = requireToString(); function castPath2(value2, object3) { if (isArray2(value2)) { return value2; } return isKey2(value2, object3) ? [value2] : stringToPath2(toString6(value2)); } __name(castPath2, "castPath"); _castPath = castPath2; return _castPath; } function require_toKey() { if (hasRequired_toKey) return _toKey; hasRequired_toKey = 1; var isSymbol2 = requireIsSymbol(); function toKey2(value2) { if (typeof value2 == "string" || isSymbol2(value2)) { return value2; } var result = value2 + ""; return result == "0" && 1 / value2 == -Infinity ? "-0" : result; } __name(toKey2, "toKey"); _toKey = toKey2; return _toKey; } function require_baseGet() { if (hasRequired_baseGet) return _baseGet; hasRequired_baseGet = 1; var castPath2 = require_castPath(), toKey2 = require_toKey(); function baseGet2(object3, path4) { path4 = castPath2(path4, object3); var index = 0, length2 = path4.length; while (object3 != null && index < length2) { object3 = object3[toKey2(path4[index++])]; } return index && index == length2 ? object3 : void 0; } __name(baseGet2, "baseGet"); _baseGet = baseGet2; return _baseGet; } function requireGet() { if (hasRequiredGet) return get_1; hasRequiredGet = 1; var baseGet2 = require_baseGet(); function get5(object3, path4, defaultValue) { var result = object3 == null ? void 0 : baseGet2(object3, path4); return result === void 0 ? defaultValue : result; } __name(get5, "get"); get_1 = get5; return get_1; } function require_defineProperty() { if (hasRequired_defineProperty) return _defineProperty; hasRequired_defineProperty = 1; var getNative2 = require_getNative(); var defineProperty2 = (function() { try { var func = getNative2(Object, "defineProperty"); func({}, "", {}); return func; } catch (e3) { } })(); _defineProperty = defineProperty2; return _defineProperty; } function require_baseAssignValue() { if (hasRequired_baseAssignValue) return _baseAssignValue; hasRequired_baseAssignValue = 1; var defineProperty2 = require_defineProperty(); function baseAssignValue2(object3, key, value2) { if (key == "__proto__" && defineProperty2) { defineProperty2(object3, key, { "configurable": true, "enumerable": true, "value": value2, "writable": true }); } else { object3[key] = value2; } } __name(baseAssignValue2, "baseAssignValue"); _baseAssignValue = baseAssignValue2; return _baseAssignValue; } function require_assignValue() { if (hasRequired_assignValue) return _assignValue; hasRequired_assignValue = 1; var baseAssignValue2 = require_baseAssignValue(), eq3 = requireEq(); var objectProto22 = Object.prototype; var hasOwnProperty19 = objectProto22.hasOwnProperty; function assignValue2(object3, key, value2) { var objValue = object3[key]; if (!(hasOwnProperty19.call(object3, key) && eq3(objValue, value2)) || value2 === void 0 && !(key in object3)) { baseAssignValue2(object3, key, value2); } } __name(assignValue2, "assignValue"); _assignValue = assignValue2; return _assignValue; } function require_isIndex() { if (hasRequired_isIndex) return _isIndex; hasRequired_isIndex = 1; var MAX_SAFE_INTEGER3 = 9007199254740991; var reIsUint2 = /^(?:0|[1-9]\d*)$/; function isIndex2(value2, length2) { var type3 = typeof value2; length2 = length2 == null ? MAX_SAFE_INTEGER3 : length2; return !!length2 && (type3 == "number" || type3 != "symbol" && reIsUint2.test(value2)) && (value2 > -1 && value2 % 1 == 0 && value2 < length2); } __name(isIndex2, "isIndex"); _isIndex = isIndex2; return _isIndex; } function require_baseSet() { if (hasRequired_baseSet) return _baseSet; hasRequired_baseSet = 1; var assignValue2 = require_assignValue(), castPath2 = require_castPath(), isIndex2 = require_isIndex(), isObject3 = requireIsObject(), toKey2 = require_toKey(); function baseSet2(object3, path4, value2, customizer) { if (!isObject3(object3)) { return object3; } path4 = castPath2(path4, object3); var index = -1, length2 = path4.length, lastIndex = length2 - 1, nested = object3; while (nested != null && ++index < length2) { var key = toKey2(path4[index]), newValue = value2; if (key === "__proto__" || key === "constructor" || key === "prototype") { return object3; } if (index != lastIndex) { var objValue = nested[key]; newValue = customizer ? customizer(objValue, key, nested) : void 0; if (newValue === void 0) { newValue = isObject3(objValue) ? objValue : isIndex2(path4[index + 1]) ? [] : {}; } } assignValue2(nested, key, newValue); nested = nested[key]; } return object3; } __name(baseSet2, "baseSet"); _baseSet = baseSet2; return _baseSet; } function requireSet() { if (hasRequiredSet) return set_1; hasRequiredSet = 1; var baseSet2 = require_baseSet(); function set5(object3, path4, value2) { return object3 == null ? object3 : baseSet2(object3, path4, value2); } __name(set5, "set"); set_1 = set5; return set_1; } function require_copyArray() { if (hasRequired_copyArray) return _copyArray; hasRequired_copyArray = 1; function copyArray4(source, array4) { var index = -1, length2 = source.length; array4 || (array4 = Array(length2)); while (++index < length2) { array4[index] = source[index]; } return array4; } __name(copyArray4, "copyArray"); _copyArray = copyArray4; return _copyArray; } function requireToPath() { if (hasRequiredToPath) return toPath_1; hasRequiredToPath = 1; var arrayMap2 = require_arrayMap(), copyArray4 = require_copyArray(), isArray2 = requireIsArray(), isSymbol2 = requireIsSymbol(), stringToPath2 = require_stringToPath(), toKey2 = require_toKey(), toString6 = requireToString(); function toPath2(value2) { if (isArray2(value2)) { return arrayMap2(value2, toKey2); } return isSymbol2(value2) ? [value2] : copyArray4(stringToPath2(toString6(value2))); } __name(toPath2, "toPath"); toPath_1 = toPath2; return toPath_1; } function forEachCompound(eles, fn3, includeSelf, recursiveStep) { var q3 = []; var did = new Set$1(); var cy = eles.cy(); var hasCompounds = cy.hasCompoundNodes(); for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; if (includeSelf) { q3.push(ele); } else if (hasCompounds) { recursiveStep(q3, did, ele); } } while (q3.length > 0) { var _ele = q3.shift(); fn3(_ele); did.add(_ele.id()); if (hasCompounds) { recursiveStep(q3, did, _ele); } } return eles; } function addChildren(q3, did, ele) { if (ele.isParent()) { var children2 = ele._private.children; for (var i2 = 0; i2 < children2.length; i2++) { var child = children2[i2]; if (!did.has(child.id())) { q3.push(child); } } } } function addParent(q3, did, ele) { if (ele.isChild()) { var parent4 = ele._private.parent; if (!did.has(parent4.id())) { q3.push(parent4); } } } function addParentAndChildren(q3, did, ele) { addParent(q3, did, ele); addChildren(q3, did, ele); } function defineDegreeFunction(callback) { return function(includeLoops) { var self2 = this; if (includeLoops === void 0) { includeLoops = true; } if (self2.length === 0) { return; } if (self2.isNode() && !self2.removed()) { var degree = 0; var node2 = self2[0]; var connectedEdges = node2._private.edges; for (var i2 = 0; i2 < connectedEdges.length; i2++) { var edge = connectedEdges[i2]; if (!includeLoops && edge.isLoop()) { continue; } degree += callback(node2, edge); } return degree; } else { return; } }; } function defineDegreeBoundsFunction(degreeFn, callback) { return function(includeLoops) { var ret; var nodes5 = this.nodes(); for (var i2 = 0; i2 < nodes5.length; i2++) { var ele = nodes5[i2]; var degree = ele[degreeFn](includeLoops); if (degree !== void 0 && (ret === void 0 || callback(degree, ret))) { ret = degree; } } return ret; }; } function returnFalse() { return false; } function returnTrue() { return true; } function Emitter() { var opts = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : emptyOpts; var context = arguments.length > 1 ? arguments[1] : void 0; for (var i2 = 0; i2 < defaultsKeys.length; i2++) { var key = defaultsKeys[i2]; this[key] = opts[key] || defaults$8[key]; } this.context = context || this.context; this.listeners = []; this.emitting = 0; } function styleCache(key, fn3, ele) { var _p = ele._private; var cache3 = _p.styleCache = _p.styleCache || []; var val; if ((val = cache3[key]) != null) { return val; } else { val = cache3[key] = fn3(ele); return val; } } function cacheStyleFunction(key, fn3) { key = hashString(key); return /* @__PURE__ */ __name(function cachedStyleFunction(ele) { return styleCache(key, fn3, ele); }, "cachedStyleFunction"); } function cachePrototypeStyleFunction(key, fn3) { key = hashString(key); var selfFn = /* @__PURE__ */ __name(function selfFn2(ele) { return fn3.call(ele); }, "selfFn"); return /* @__PURE__ */ __name(function cachedPrototypeStyleFunction() { var ele = this[0]; if (ele) { return styleCache(key, selfFn, ele); } }, "cachedPrototypeStyleFunction"); } function checkCompound(ele, parentOk) { var _p = ele._private; var parents3 = _p.data.parent ? ele.parents() : null; if (parents3) { for (var i2 = 0; i2 < parents3.length; i2++) { var parent4 = parents3[i2]; if (!parentOk(parent4)) { return false; } } } return true; } function defineDerivedStateFunction(specs) { var ok = specs.ok; var edgeOkViaNode = specs.edgeOkViaNode || specs.ok; var parentOk = specs.parentOk || specs.ok; return function() { var cy = this.cy(); if (!cy.styleEnabled()) { return true; } var ele = this[0]; var hasCompoundNodes2 = cy.hasCompoundNodes(); if (ele) { var _p = ele._private; if (!ok(ele)) { return false; } if (ele.isNode()) { return !hasCompoundNodes2 || checkCompound(ele, parentOk); } else { var src = _p.source; var tgt = _p.target; return edgeOkViaNode(src) && (!hasCompoundNodes2 || checkCompound(src, edgeOkViaNode)) && (src === tgt || edgeOkViaNode(tgt) && (!hasCompoundNodes2 || checkCompound(tgt, edgeOkViaNode))); } } }; } function defineSwitchFunction(params) { return function() { var args = arguments; var changedEles = []; if (args.length === 2) { var data5 = args[0]; var handler = args[1]; this.on(params.event, data5, handler); } else if (args.length === 1 && fn$6(args[0])) { var _handler = args[0]; this.on(params.event, _handler); } else if (args.length === 0 || args.length === 1 && array2(args[0])) { var addlEvents = args.length === 1 ? args[0] : null; for (var i2 = 0; i2 < this.length; i2++) { var ele = this[i2]; var able = !params.ableField || ele._private[params.ableField]; var changed = ele._private[params.field] != params.value; if (params.overrideAble) { var overrideAble2 = params.overrideAble(ele); if (overrideAble2 !== void 0) { able = overrideAble2; if (!overrideAble2) { return this; } } } if (able) { ele._private[params.field] = params.value; if (changed) { changedEles.push(ele); } } } var changedColl = this.spawn(changedEles); changedColl.updateStyle(); changedColl.emit(params.event); if (addlEvents) { changedColl.emit(addlEvents); } } return this; }; } function defineSwitchSet(params) { elesfn$3[params.field] = function() { var ele = this[0]; if (ele) { if (params.overrideField) { var val = params.overrideField(ele); if (val !== void 0) { return val; } } return ele._private[params.field]; } }; elesfn$3[params.on] = defineSwitchFunction({ event: params.on, field: params.field, ableField: params.ableField, overrideAble: params.overrideAble, value: true }); elesfn$3[params.off] = defineSwitchFunction({ event: params.off, field: params.field, ableField: params.ableField, overrideAble: params.overrideAble, value: false }); } function defineSourceFunction(params) { return /* @__PURE__ */ __name(function sourceImpl2(selector) { var sources = []; for (var i2 = 0; i2 < this.length; i2++) { var ele = this[i2]; var src = ele._private[params.attr]; if (src) { sources.push(src); } } return this.spawn(sources, true).filter(selector); }, "sourceImpl"); } function defineEdgesWithFunction(params) { return /* @__PURE__ */ __name(function edgesWithImpl(otherNodes) { var elements2 = []; var cy = this._private.cy; var p3 = params || {}; if (string(otherNodes)) { otherNodes = cy.$(otherNodes); } for (var h3 = 0; h3 < otherNodes.length; h3++) { var edges3 = otherNodes[h3]._private.edges; for (var i2 = 0; i2 < edges3.length; i2++) { var edge = edges3[i2]; var edgeData2 = edge._private.data; var thisToOther = this.hasElementWithId(edgeData2.source) && otherNodes.hasElementWithId(edgeData2.target); var otherToThis = otherNodes.hasElementWithId(edgeData2.source) && this.hasElementWithId(edgeData2.target); var edgeConnectsThisAndOther = thisToOther || otherToThis; if (!edgeConnectsThisAndOther) { continue; } if (p3.thisIsSrc || p3.thisIsTgt) { if (p3.thisIsSrc && !thisToOther) { continue; } if (p3.thisIsTgt && !otherToThis) { continue; } } elements2.push(edge); } } return this.spawn(elements2, true); }, "edgesWithImpl"); } function defineParallelEdgesFunction(params) { var defaults4 = { codirected: false }; params = extend4({}, defaults4, params); return /* @__PURE__ */ __name(function parallelEdgesImpl(selector) { var elements2 = []; var edges3 = this.edges(); var p3 = params; for (var i2 = 0; i2 < edges3.length; i2++) { var edge1 = edges3[i2]; var edge1_p = edge1._private; var src1 = edge1_p.source; var srcid1 = src1._private.data.id; var tgtid1 = edge1_p.data.target; var srcEdges1 = src1._private.edges; for (var j3 = 0; j3 < srcEdges1.length; j3++) { var edge2 = srcEdges1[j3]; var edge2data = edge2._private.data; var tgtid2 = edge2data.target; var srcid2 = edge2data.source; var codirected = tgtid2 === tgtid1 && srcid2 === srcid1; var oppdirected = srcid1 === tgtid2 && tgtid1 === srcid2; if (p3.codirected && codirected || !p3.codirected && (codirected || oppdirected)) { elements2.push(edge2); } } } return this.spawn(elements2, true).filter(selector); }, "parallelEdgesImpl"); } function generateCubicBezier(mX1, mY1, mX2, mY2) { var NEWTON_ITERATIONS = 4, NEWTON_MIN_SLOPE = 1e-3, SUBDIVISION_PRECISION = 1e-7, SUBDIVISION_MAX_ITERATIONS = 10, kSplineTableSize = 11, kSampleStepSize = 1 / (kSplineTableSize - 1), float32ArraySupported = typeof Float32Array !== "undefined"; if (arguments.length !== 4) { return false; } for (var i2 = 0; i2 < 4; ++i2) { if (typeof arguments[i2] !== "number" || isNaN(arguments[i2]) || !isFinite(arguments[i2])) { return false; } } mX1 = Math.min(mX1, 1); mX2 = Math.min(mX2, 1); mX1 = Math.max(mX1, 0); mX2 = Math.max(mX2, 0); var mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize); function A2(aA1, aA2) { return 1 - 3 * aA2 + 3 * aA1; } __name(A2, "A"); function B3(aA1, aA2) { return 3 * aA2 - 6 * aA1; } __name(B3, "B"); function C3(aA1) { return 3 * aA1; } __name(C3, "C"); function calcBezier(aT, aA1, aA2) { return ((A2(aA1, aA2) * aT + B3(aA1, aA2)) * aT + C3(aA1)) * aT; } __name(calcBezier, "calcBezier"); function getSlope(aT, aA1, aA2) { return 3 * A2(aA1, aA2) * aT * aT + 2 * B3(aA1, aA2) * aT + C3(aA1); } __name(getSlope, "getSlope"); function newtonRaphsonIterate(aX, aGuessT) { for (var _i = 0; _i < NEWTON_ITERATIONS; ++_i) { var currentSlope = getSlope(aGuessT, mX1, mX2); if (currentSlope === 0) { return aGuessT; } var currentX = calcBezier(aGuessT, mX1, mX2) - aX; aGuessT -= currentX / currentSlope; } return aGuessT; } __name(newtonRaphsonIterate, "newtonRaphsonIterate"); function calcSampleValues() { for (var _i2 = 0; _i2 < kSplineTableSize; ++_i2) { mSampleValues[_i2] = calcBezier(_i2 * kSampleStepSize, mX1, mX2); } } __name(calcSampleValues, "calcSampleValues"); function binarySubdivide(aX, aA, aB) { var currentX, currentT, i3 = 0; do { currentT = aA + (aB - aA) / 2; currentX = calcBezier(currentT, mX1, mX2) - aX; if (currentX > 0) { aB = currentT; } else { aA = currentT; } } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i3 < SUBDIVISION_MAX_ITERATIONS); return currentT; } __name(binarySubdivide, "binarySubdivide"); function getTForX(aX) { var intervalStart = 0, currentSample = 1, lastSample = kSplineTableSize - 1; for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) { intervalStart += kSampleStepSize; } --currentSample; var dist3 = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]), guessForT = intervalStart + dist3 * kSampleStepSize, initialSlope = getSlope(guessForT, mX1, mX2); if (initialSlope >= NEWTON_MIN_SLOPE) { return newtonRaphsonIterate(aX, guessForT); } else if (initialSlope === 0) { return guessForT; } else { return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize); } } __name(getTForX, "getTForX"); var _precomputed = false; function precompute() { _precomputed = true; if (mX1 !== mY1 || mX2 !== mY2) { calcSampleValues(); } } __name(precompute, "precompute"); var f2 = /* @__PURE__ */ __name(function f3(aX) { if (!_precomputed) { precompute(); } if (mX1 === mY1 && mX2 === mY2) { return aX; } if (aX === 0) { return 0; } if (aX === 1) { return 1; } return calcBezier(getTForX(aX), mY1, mY2); }, "f"); f2.getControlPoints = function() { return [{ x: mX1, y: mY1 }, { x: mX2, y: mY2 }]; }; var str2 = "generateBezier(" + [mX1, mY1, mX2, mY2] + ")"; f2.toString = function() { return str2; }; return f2; } function getEasedValue(type3, start3, end2, percent, easingFn) { if (percent === 1) { return end2; } if (start3 === end2) { return end2; } var val = easingFn(start3, end2, percent); if (type3 == null) { return val; } if (type3.roundValue || type3.color) { val = Math.round(val); } if (type3.min !== void 0) { val = Math.max(val, type3.min); } if (type3.max !== void 0) { val = Math.min(val, type3.max); } return val; } function getValue2(prop, spec) { if (prop.pfValue != null || prop.value != null) { if (prop.pfValue != null && (spec == null || spec.type.units !== "%")) { return prop.pfValue; } else { return prop.value; } } else { return prop; } } function ease(startProp, endProp, percent, easingFn, propSpec) { var type3 = propSpec != null ? propSpec.type : null; if (percent < 0) { percent = 0; } else if (percent > 1) { percent = 1; } var start3 = getValue2(startProp, propSpec); var end2 = getValue2(endProp, propSpec); if (number$1(start3) && number$1(end2)) { return getEasedValue(type3, start3, end2, percent, easingFn); } else if (array2(start3) && array2(end2)) { var easedArr = []; for (var i2 = 0; i2 < end2.length; i2++) { var si = start3[i2]; var ei = end2[i2]; if (si != null && ei != null) { var val = getEasedValue(type3, si, ei, percent, easingFn); easedArr.push(val); } else { easedArr.push(ei); } } return easedArr; } return void 0; } function step$1(self2, ani, now3, isCore) { var isEles = !isCore; var _p = self2._private; var ani_p = ani._private; var pEasing = ani_p.easing; var startTime = ani_p.startTime; var cy = isCore ? self2 : self2.cy(); var style3 = cy.style(); if (!ani_p.easingImpl) { if (pEasing == null) { ani_p.easingImpl = easings["linear"]; } else { var easingVals; if (string(pEasing)) { var easingProp = style3.parse("transition-timing-function", pEasing); easingVals = easingProp.value; } else { easingVals = pEasing; } var name, args; if (string(easingVals)) { name = easingVals; args = []; } else { name = easingVals[1]; args = easingVals.slice(2).map(function(n2) { return +n2; }); } if (args.length > 0) { if (name === "spring") { args.push(ani_p.duration); } ani_p.easingImpl = easings[name].apply(null, args); } else { ani_p.easingImpl = easings[name]; } } } var easing = ani_p.easingImpl; var percent; if (ani_p.duration === 0) { percent = 1; } else { percent = (now3 - startTime) / ani_p.duration; } if (ani_p.applying) { percent = ani_p.progress; } if (percent < 0) { percent = 0; } else if (percent > 1) { percent = 1; } if (ani_p.delay == null) { var startPos = ani_p.startPosition; var endPos = ani_p.position; if (endPos && isEles && !self2.locked()) { var newPos = {}; if (valid(startPos.x, endPos.x)) { newPos.x = ease(startPos.x, endPos.x, percent, easing); } if (valid(startPos.y, endPos.y)) { newPos.y = ease(startPos.y, endPos.y, percent, easing); } self2.position(newPos); } var startPan = ani_p.startPan; var endPan = ani_p.pan; var pan2 = _p.pan; var animatingPan = endPan != null && isCore; if (animatingPan) { if (valid(startPan.x, endPan.x)) { pan2.x = ease(startPan.x, endPan.x, percent, easing); } if (valid(startPan.y, endPan.y)) { pan2.y = ease(startPan.y, endPan.y, percent, easing); } self2.emit("pan"); } var startZoom = ani_p.startZoom; var endZoom = ani_p.zoom; var animatingZoom = endZoom != null && isCore; if (animatingZoom) { if (valid(startZoom, endZoom)) { _p.zoom = bound(_p.minZoom, ease(startZoom, endZoom, percent, easing), _p.maxZoom); } self2.emit("zoom"); } if (animatingPan || animatingZoom) { self2.emit("viewport"); } var props = ani_p.style; if (props && props.length > 0 && isEles) { for (var i2 = 0; i2 < props.length; i2++) { var prop = props[i2]; var _name = prop.name; var end2 = prop; var start3 = ani_p.startStyle[_name]; var propSpec = style3.properties[start3.name]; var easedVal = ease(start3, end2, percent, easing, propSpec); style3.overrideBypass(self2, _name, easedVal); } self2.emit("style"); } } ani_p.progress = percent; return percent; } function valid(start3, end2) { if (start3 == null || end2 == null) { return false; } if (number$1(start3) && number$1(end2)) { return true; } else if (start3 && end2) { return true; } return false; } function startAnimation(self2, ani, now3, isCore) { var ani_p = ani._private; ani_p.started = true; ani_p.startTime = now3 - ani_p.progress * ani_p.duration; } function stepAll(now3, cy) { var eles = cy._private.aniEles; var doneEles = []; function stepOne(ele2, isCore) { var _p = ele2._private; var current = _p.animation.current; var queue = _p.animation.queue; var ranAnis = false; if (current.length === 0) { var next3 = queue.shift(); if (next3) { current.push(next3); } } var callbacks = /* @__PURE__ */ __name(function callbacks2(_callbacks) { for (var j3 = _callbacks.length - 1; j3 >= 0; j3--) { var cb = _callbacks[j3]; cb(); } _callbacks.splice(0, _callbacks.length); }, "callbacks"); for (var i2 = current.length - 1; i2 >= 0; i2--) { var ani = current[i2]; var ani_p = ani._private; if (ani_p.stopped) { current.splice(i2, 1); ani_p.hooked = false; ani_p.playing = false; ani_p.started = false; callbacks(ani_p.frames); continue; } if (!ani_p.playing && !ani_p.applying) { continue; } if (ani_p.playing && ani_p.applying) { ani_p.applying = false; } if (!ani_p.started) { startAnimation(ele2, ani, now3); } step$1(ele2, ani, now3, isCore); if (ani_p.applying) { ani_p.applying = false; } callbacks(ani_p.frames); if (ani_p.step != null) { ani_p.step(now3); } if (ani.completed()) { current.splice(i2, 1); ani_p.hooked = false; ani_p.playing = false; ani_p.started = false; callbacks(ani_p.completes); } ranAnis = true; } if (!isCore && current.length === 0 && queue.length === 0) { doneEles.push(ele2); } return ranAnis; } __name(stepOne, "stepOne"); var ranEleAni = false; for (var e3 = 0; e3 < eles.length; e3++) { var ele = eles[e3]; var handledThisEle = stepOne(ele); ranEleAni = ranEleAni || handledThisEle; } var ranCoreAni = stepOne(cy, true); if (ranEleAni || ranCoreAni) { if (eles.length > 0) { cy.notify("draw", eles); } else { cy.notify("draw"); } } eles.unmerge(doneEles); cy.emit("step"); } function BreadthFirstLayout(options2) { this.options = extend4({}, defaults$7, deprecatedOptionDefaults, options2); } function CircleLayout(options2) { this.options = extend4({}, defaults$6, options2); } function ConcentricLayout(options2) { this.options = extend4({}, defaults$5, options2); } function CoseLayout(options2) { this.options = extend4({}, defaults$4, options2); this.options.layout = this; var nodes5 = this.options.eles.nodes(); var edges3 = this.options.eles.edges(); var notEdges = edges3.filter(function(e3) { var sourceId = e3.source().data("id"); var targetId = e3.target().data("id"); var hasSource = nodes5.some(function(n2) { return n2.data("id") === sourceId; }); var hasTarget = nodes5.some(function(n2) { return n2.data("id") === targetId; }); return !hasSource || !hasTarget; }); this.options.eles = this.options.eles.not(notEdges); } function GridLayout(options2) { this.options = extend4({}, defaults$3, options2); } function NullLayout(options2) { this.options = extend4({}, defaults$2, options2); } function PresetLayout(options2) { this.options = extend4({}, defaults$1, options2); } function RandomLayout(options2) { this.options = extend4({}, defaults3, options2); } function NullRenderer(options2) { this.options = options2; this.notifications = 0; } function drawPreparedRoundCorner(ctx, roundCorner) { if (roundCorner.radius === 0) ctx.lineTo(roundCorner.cx, roundCorner.cy); else ctx.arc(roundCorner.cx, roundCorner.cy, roundCorner.radius, roundCorner.startAngle, roundCorner.endAngle, roundCorner.counterClockwise); } function getRoundCorner(previousPoint, currentPoint, nextPoint, radiusMax) { var isArcRadius = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : true; if (radiusMax === 0 || currentPoint.radius === 0) return { cx: currentPoint.x, cy: currentPoint.y, radius: 0, startX: currentPoint.x, startY: currentPoint.y, stopX: currentPoint.x, stopY: currentPoint.y, startAngle: void 0, endAngle: void 0, counterClockwise: void 0 }; calcCornerArc(previousPoint, currentPoint, nextPoint, radiusMax, isArcRadius); return { cx: x3, cy: y4, radius: cRadius, startX, startY, stopX, stopY, startAngle: v1.ang + Math.PI / 2 * radDirection, endAngle: v22.ang - Math.PI / 2 * radDirection, counterClockwise: drawDirection }; } function getPts(pts2) { var retPts = []; if (pts2 == null) { return; } for (var i2 = 0; i2 < pts2.length; i2 += 2) { var x5 = pts2[i2]; var y6 = pts2[i2 + 1]; retPts.push({ x: x5, y: y6 }); } return retPts; } function pushBezierPts(r2, edge, pts2) { var qbezierAt$1 = /* @__PURE__ */ __name(function qbezierAt$12(p1, p22, p32, t4) { return qbezierAt(p1, p22, p32, t4); }, "qbezierAt$1"); var _p = edge._private; var bpts = _p.rstyle.bezierPts; for (var i2 = 0; i2 < r2.bezierProjPcts.length; i2++) { var p3 = r2.bezierProjPcts[i2]; bpts.push({ x: qbezierAt$1(pts2[0], pts2[2], pts2[4], p3), y: qbezierAt$1(pts2[1], pts2[3], pts2[5], p3) }); } } function polygon(context, points) { for (var i2 = 0; i2 < points.length; i2++) { var pt = points[i2]; context.lineTo(pt.x, pt.y); } } function triangleBackcurve(context, points, controlPoint) { var firstPt; for (var i2 = 0; i2 < points.length; i2++) { var pt = points[i2]; if (i2 === 0) { firstPt = pt; } context.lineTo(pt.x, pt.y); } context.quadraticCurveTo(controlPoint.x, controlPoint.y, firstPt.x, firstPt.y); } function triangleTee(context, trianglePoints, teePoints) { if (context.beginPath) { context.beginPath(); } var triPts = trianglePoints; for (var i2 = 0; i2 < triPts.length; i2++) { var pt = triPts[i2]; context.lineTo(pt.x, pt.y); } var teePts = teePoints; var firstTeePt = teePoints[0]; context.moveTo(firstTeePt.x, firstTeePt.y); for (var i2 = 1; i2 < teePts.length; i2++) { var pt = teePts[i2]; context.lineTo(pt.x, pt.y); } if (context.closePath) { context.closePath(); } } function circleTriangle(context, trianglePoints, rx, ry, r2) { if (context.beginPath) { context.beginPath(); } context.arc(rx, ry, r2, 0, Math.PI * 2, false); var triPts = trianglePoints; var firstTrPt = triPts[0]; context.moveTo(firstTrPt.x, firstTrPt.y); for (var i2 = 0; i2 < triPts.length; i2++) { var pt = triPts[i2]; context.lineTo(pt.x, pt.y); } if (context.closePath) { context.closePath(); } } function circle$1(context, rx, ry, r2) { context.arc(rx, ry, r2, 0, Math.PI * 2, false); } function circle3(ctx, x5, y6, width3, height2) { var diameter = Math.min(width3, height2); var radius2 = diameter / 2; var centerX = x5 + width3 / 2; var centerY = y6 + height2 / 2; ctx.beginPath(); ctx.arc(centerX, centerY, radius2, 0, Math.PI * 2); ctx.closePath(); } function roundRect(ctx, x5, y6, width3, height2) { var radius2 = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : 5; var r2 = Math.min(radius2, width3 / 2, height2 / 2); ctx.beginPath(); ctx.moveTo(x5 + r2, y6); ctx.lineTo(x5 + width3 - r2, y6); ctx.quadraticCurveTo(x5 + width3, y6, x5 + width3, y6 + r2); ctx.lineTo(x5 + width3, y6 + height2 - r2); ctx.quadraticCurveTo(x5 + width3, y6 + height2, x5 + width3 - r2, y6 + height2); ctx.lineTo(x5 + r2, y6 + height2); ctx.quadraticCurveTo(x5, y6 + height2, x5, y6 + height2 - r2); ctx.lineTo(x5, y6 + r2); ctx.quadraticCurveTo(x5, y6, x5 + r2, y6); ctx.closePath(); } function compileShader(gl, type3, source) { var shader = gl.createShader(type3); gl.shaderSource(shader, source); gl.compileShader(shader); if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { throw new Error(gl.getShaderInfoLog(shader)); } return shader; } function createProgram(gl, vertexSource, fragementSource) { var vertexShader = compileShader(gl, gl.VERTEX_SHADER, vertexSource); var fragmentShader = compileShader(gl, gl.FRAGMENT_SHADER, fragementSource); var program = gl.createProgram(); gl.attachShader(program, vertexShader); gl.attachShader(program, fragmentShader); gl.linkProgram(program); if (!gl.getProgramParameter(program, gl.LINK_STATUS)) { throw new Error("Could not initialize shaders"); } return program; } function createTextureCanvas(r2, width3, height2) { if (height2 === void 0) { height2 = width3; } var canvas = r2.makeOffscreenCanvas(width3, height2); var ctx = canvas.context = canvas.getContext("2d"); canvas.clear = function() { return ctx.clearRect(0, 0, canvas.width, canvas.height); }; canvas.clear(); return canvas; } function getEffectivePanZoom(r2) { var pixelRatio = r2.pixelRatio; var zoom2 = r2.cy.zoom(); var pan2 = r2.cy.pan(); return { zoom: zoom2 * pixelRatio, pan: { x: pan2.x * pixelRatio, y: pan2.y * pixelRatio } }; } function getEffectiveZoom(r2) { var pixelRatio = r2.pixelRatio; var zoom2 = r2.cy.zoom(); return zoom2 * pixelRatio; } function modelToRenderedPosition2(r2, pan2, zoom2, x5, y6) { var rx = x5 * zoom2 + pan2.x; var ry = y6 * zoom2 + pan2.y; ry = Math.round(r2.canvasHeight - ry); return [rx, ry]; } function isSimpleShape(node2) { if (node2.pstyle("background-fill").value !== "solid") return false; if (node2.pstyle("background-image").strValue !== "none") return false; if (node2.pstyle("border-width").value === 0) return true; if (node2.pstyle("border-opacity").value === 0) return true; if (node2.pstyle("border-style").value !== "solid") return false; return true; } function arrayEqual(a1, a2) { if (a1.length !== a2.length) { return false; } for (var i2 = 0; i2 < a1.length; i2++) { if (a1[i2] !== a2[i2]) { return false; } } return true; } function toWebGLColor(color2, opacity, outArray) { var r2 = color2[0] / 255; var g2 = color2[1] / 255; var b3 = color2[2] / 255; var a2 = opacity; var arr = outArray || new Array(4); arr[0] = r2 * a2; arr[1] = g2 * a2; arr[2] = b3 * a2; arr[3] = a2; return arr; } function indexToVec4(index, outArray) { var arr = outArray || new Array(4); arr[0] = (index >> 0 & 255) / 255; arr[1] = (index >> 8 & 255) / 255; arr[2] = (index >> 16 & 255) / 255; arr[3] = (index >> 24 & 255) / 255; return arr; } function vec4ToIndex(vec4) { return vec4[0] + (vec4[1] << 8) + (vec4[2] << 16) + (vec4[3] << 24); } function createTexture(gl, debugID) { var texture = gl.createTexture(); texture.buffer = function(offscreenCanvas) { gl.bindTexture(gl.TEXTURE_2D, texture); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST); gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, offscreenCanvas); gl.generateMipmap(gl.TEXTURE_2D); gl.bindTexture(gl.TEXTURE_2D, null); }; texture.deleteTexture = function() { gl.deleteTexture(texture); }; return texture; } function getTypeInfo(gl, glslType) { switch (glslType) { case "float": return [1, gl.FLOAT, 4]; case "vec2": return [2, gl.FLOAT, 4]; case "vec3": return [3, gl.FLOAT, 4]; case "vec4": return [4, gl.FLOAT, 4]; case "int": return [1, gl.INT, 4]; case "ivec2": return [2, gl.INT, 4]; } } function createTypedArray(gl, glType, dataOrSize) { switch (glType) { case gl.FLOAT: return new Float32Array(dataOrSize); case gl.INT: return new Int32Array(dataOrSize); } } function createTypedArrayView(gl, glType, array4, stride, size4, i2) { switch (glType) { case gl.FLOAT: return new Float32Array(array4.buffer, i2 * stride, size4); case gl.INT: return new Int32Array(array4.buffer, i2 * stride, size4); } } function createBufferStaticDraw(gl, type3, attributeLoc, dataArray) { var _getTypeInfo = getTypeInfo(gl, type3), _getTypeInfo2 = _slicedToArray(_getTypeInfo, 2), size4 = _getTypeInfo2[0], glType = _getTypeInfo2[1]; var data5 = createTypedArray(gl, glType, dataArray); var buffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, buffer); gl.bufferData(gl.ARRAY_BUFFER, data5, gl.STATIC_DRAW); if (glType === gl.FLOAT) { gl.vertexAttribPointer(attributeLoc, size4, glType, false, 0, 0); } else if (glType === gl.INT) { gl.vertexAttribIPointer(attributeLoc, size4, glType, 0, 0); } gl.enableVertexAttribArray(attributeLoc); gl.bindBuffer(gl.ARRAY_BUFFER, null); return buffer; } function createBufferDynamicDraw(gl, instances, type3, attributeLoc) { var _getTypeInfo3 = getTypeInfo(gl, type3), _getTypeInfo4 = _slicedToArray(_getTypeInfo3, 3), size4 = _getTypeInfo4[0], glType = _getTypeInfo4[1], bytes = _getTypeInfo4[2]; var dataArray = createTypedArray(gl, glType, instances * size4); var stride = size4 * bytes; var buffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, buffer); gl.bufferData(gl.ARRAY_BUFFER, instances * stride, gl.DYNAMIC_DRAW); gl.enableVertexAttribArray(attributeLoc); if (glType === gl.FLOAT) { gl.vertexAttribPointer(attributeLoc, size4, glType, false, stride, 0); } else if (glType === gl.INT) { gl.vertexAttribIPointer(attributeLoc, size4, glType, stride, 0); } gl.vertexAttribDivisor(attributeLoc, 1); gl.bindBuffer(gl.ARRAY_BUFFER, null); var views = new Array(instances); for (var i2 = 0; i2 < instances; i2++) { views[i2] = createTypedArrayView(gl, glType, dataArray, stride, size4, i2); } buffer.dataArray = dataArray; buffer.stride = stride; buffer.size = size4; buffer.getView = function(i3) { return views[i3]; }; buffer.setPoint = function(i3, x5, y6) { var view = views[i3]; view[0] = x5; view[1] = y6; }; buffer.bufferSubData = function(count2) { gl.bindBuffer(gl.ARRAY_BUFFER, buffer); if (count2) { gl.bufferSubData(gl.ARRAY_BUFFER, 0, dataArray, 0, count2 * size4); } else { gl.bufferSubData(gl.ARRAY_BUFFER, 0, dataArray); } }; return buffer; } function create3x3MatrixBufferDynamicDraw(gl, instances, attributeLoc) { var matrixSize = 9; var matrixData = new Float32Array(instances * matrixSize); var matrixViews = new Array(instances); for (var i2 = 0; i2 < instances; i2++) { var byteOffset = i2 * matrixSize * 4; matrixViews[i2] = new Float32Array(matrixData.buffer, byteOffset, matrixSize); } var buffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, buffer); gl.bufferData(gl.ARRAY_BUFFER, matrixData.byteLength, gl.DYNAMIC_DRAW); for (var _i = 0; _i < 3; _i++) { var loc = attributeLoc + _i; gl.enableVertexAttribArray(loc); gl.vertexAttribPointer(loc, 3, gl.FLOAT, false, 3 * 12, _i * 12); gl.vertexAttribDivisor(loc, 1); } gl.bindBuffer(gl.ARRAY_BUFFER, null); buffer.getMatrixView = function(i3) { return matrixViews[i3]; }; buffer.setData = function(matrix, i3) { matrixViews[i3].set(matrix, 0); }; buffer.bufferSubData = function() { gl.bindBuffer(gl.ARRAY_BUFFER, buffer); gl.bufferSubData(gl.ARRAY_BUFFER, 0, matrixData); }; return buffer; } function createPickingFrameBuffer(gl) { var fb = gl.createFramebuffer(); gl.bindFramebuffer(gl.FRAMEBUFFER, fb); var targetTexture = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, targetTexture); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, targetTexture, 0); gl.bindFramebuffer(gl.FRAMEBUFFER, null); fb.setFramebufferAttachmentSizes = function(width3, height2) { gl.bindTexture(gl.TEXTURE_2D, targetTexture); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width3, height2, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); }; return fb; } function create3() { var out = new ARRAY_TYPE(9); if (ARRAY_TYPE != Float32Array) { out[1] = 0; out[2] = 0; out[3] = 0; out[5] = 0; out[6] = 0; out[7] = 0; } out[0] = 1; out[4] = 1; out[8] = 1; return out; } function identity6(out) { out[0] = 1; out[1] = 0; out[2] = 0; out[3] = 0; out[4] = 1; out[5] = 0; out[6] = 0; out[7] = 0; out[8] = 1; return out; } function multiply(out, a2, b3) { var a00 = a2[0], a01 = a2[1], a02 = a2[2]; var a10 = a2[3], a11 = a2[4], a12 = a2[5]; var a20 = a2[6], a21 = a2[7], a22 = a2[8]; var b00 = b3[0], b01 = b3[1], b02 = b3[2]; var b10 = b3[3], b11 = b3[4], b12 = b3[5]; var b20 = b3[6], b21 = b3[7], b22 = b3[8]; out[0] = b00 * a00 + b01 * a10 + b02 * a20; out[1] = b00 * a01 + b01 * a11 + b02 * a21; out[2] = b00 * a02 + b01 * a12 + b02 * a22; out[3] = b10 * a00 + b11 * a10 + b12 * a20; out[4] = b10 * a01 + b11 * a11 + b12 * a21; out[5] = b10 * a02 + b11 * a12 + b12 * a22; out[6] = b20 * a00 + b21 * a10 + b22 * a20; out[7] = b20 * a01 + b21 * a11 + b22 * a21; out[8] = b20 * a02 + b21 * a12 + b22 * a22; return out; } function translate(out, a2, v3) { var a00 = a2[0], a01 = a2[1], a02 = a2[2], a10 = a2[3], a11 = a2[4], a12 = a2[5], a20 = a2[6], a21 = a2[7], a22 = a2[8], x5 = v3[0], y6 = v3[1]; out[0] = a00; out[1] = a01; out[2] = a02; out[3] = a10; out[4] = a11; out[5] = a12; out[6] = x5 * a00 + y6 * a10 + a20; out[7] = x5 * a01 + y6 * a11 + a21; out[8] = x5 * a02 + y6 * a12 + a22; return out; } function rotate(out, a2, rad) { var a00 = a2[0], a01 = a2[1], a02 = a2[2], a10 = a2[3], a11 = a2[4], a12 = a2[5], a20 = a2[6], a21 = a2[7], a22 = a2[8], s2 = Math.sin(rad), c3 = Math.cos(rad); out[0] = c3 * a00 + s2 * a10; out[1] = c3 * a01 + s2 * a11; out[2] = c3 * a02 + s2 * a12; out[3] = c3 * a10 - s2 * a00; out[4] = c3 * a11 - s2 * a01; out[5] = c3 * a12 - s2 * a02; out[6] = a20; out[7] = a21; out[8] = a22; return out; } function scale(out, a2, v3) { var x5 = v3[0], y6 = v3[1]; out[0] = x5 * a2[0]; out[1] = x5 * a2[1]; out[2] = x5 * a2[2]; out[3] = y6 * a2[3]; out[4] = y6 * a2[4]; out[5] = y6 * a2[5]; out[6] = a2[6]; out[7] = a2[7]; out[8] = a2[8]; return out; } function projection(out, width3, height2) { out[0] = 2 / width3; out[1] = 0; out[2] = 0; out[3] = 0; out[4] = -2 / height2; out[5] = 0; out[6] = -1; out[7] = 1; out[8] = 1; return out; } function intersection2(set1, set22) { if (set1.intersection) return set1.intersection(set22); else return new Set(_toConsumableArray(set1).filter(function(x5) { return set22.has(x5); })); } function getBGColor(r2) { var container2 = r2.cy.container(); var cssColor = container2 && container2.style && container2.style.backgroundColor || "white"; return color2tuple(cssColor); } function getLabelLines(ele, prefix) { var rs = ele._private.rscratch; return getPrefixedProperty(rs, "labelWrapCachedLines", prefix) || []; } function overrideCanvasRendererFunctions(r2) { { var renderCanvas = r2.render; r2.render = function(options2) { options2 = options2 || {}; var cy = r2.cy; if (r2.webgl) { if (cy.zoom() > maxZoom$1) { clearWebgl(r2); renderCanvas.call(r2, options2); } else { clearCanvas(r2); renderWebgl(r2, options2, RENDER_TARGET.SCREEN); } } }; } { var baseFunc = r2.matchCanvasSize; r2.matchCanvasSize = function(container2) { baseFunc.call(r2, container2); r2.pickingFrameBuffer.setFramebufferAttachmentSizes(r2.canvasWidth, r2.canvasHeight); r2.pickingFrameBuffer.needsDraw = true; }; } { r2.findNearestElements = function(x5, y6, interactiveElementsOnly, isTouch) { return findNearestElementsWebgl(r2, x5, y6); }; } { var _baseFunc = r2.invalidateCachedZSortedEles; r2.invalidateCachedZSortedEles = function() { _baseFunc.call(r2); r2.pickingFrameBuffer.needsDraw = true; }; } { var _baseFunc2 = r2.notify; r2.notify = function(eventName, eles) { _baseFunc2.call(r2, eventName, eles); if (eventName === "viewport" || eventName === "bounds") { r2.pickingFrameBuffer.needsDraw = true; } else if (eventName === "background") { r2.drawing.invalidate(eles, { type: "node-body" }); } }; } } function clearWebgl(r2) { var gl = r2.data.contexts[r2.WEBGL]; gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); } function clearCanvas(r2) { var clear19 = /* @__PURE__ */ __name(function clear20(context) { context.save(); context.setTransform(1, 0, 0, 1, 0, 0); context.clearRect(0, 0, r2.canvasWidth, r2.canvasHeight); context.restore(); }, "clear"); clear19(r2.data.contexts[r2.NODE]); clear19(r2.data.contexts[r2.DRAG]); } function createPanZoomMatrix(r2) { var width3 = r2.canvasWidth; var height2 = r2.canvasHeight; var _util$getEffectivePan = getEffectivePanZoom(r2), pan2 = _util$getEffectivePan.pan, zoom2 = _util$getEffectivePan.zoom; var transform8 = create3(); translate(transform8, transform8, [pan2.x, pan2.y]); scale(transform8, transform8, [zoom2, zoom2]); var projection$1 = create3(); projection(projection$1, width3, height2); var product = create3(); multiply(product, projection$1, transform8); return product; } function setContextTransform(r2, context) { var width3 = r2.canvasWidth; var height2 = r2.canvasHeight; var _util$getEffectivePan2 = getEffectivePanZoom(r2), pan2 = _util$getEffectivePan2.pan, zoom2 = _util$getEffectivePan2.zoom; context.setTransform(1, 0, 0, 1, 0, 0); context.clearRect(0, 0, width3, height2); context.translate(pan2.x, pan2.y); context.scale(zoom2, zoom2); } function drawSelectionRectangle(r2, options2) { r2.drawSelectionRectangle(options2, function(context) { return setContextTransform(r2, context); }); } function drawAxes(r2) { var context = r2.data.contexts[r2.NODE]; context.save(); setContextTransform(r2, context); context.strokeStyle = "rgba(0, 0, 0, 0.3)"; context.beginPath(); context.moveTo(-1e3, 0); context.lineTo(1e3, 0); context.stroke(); context.beginPath(); context.moveTo(0, -1e3); context.lineTo(0, 1e3); context.stroke(); context.restore(); } function drawAtlases(r2) { var draw26 = /* @__PURE__ */ __name(function draw27(drawing, name, row) { var collection4 = drawing.atlasManager.getAtlasCollection(name); var context = r2.data.contexts[r2.NODE]; var atlases = collection4.atlases; for (var _i = 0; _i < atlases.length; _i++) { var atlas = atlases[_i]; var canvas = atlas.canvas; if (canvas) { var w4 = canvas.width; var h3 = canvas.height; var x5 = w4 * _i; var y6 = canvas.height * row; var scale2 = 0.4; context.save(); context.scale(scale2, scale2); context.drawImage(canvas, x5, y6); context.strokeStyle = "black"; context.rect(x5, y6, w4, h3); context.stroke(); context.restore(); } } }, "draw"); var i2 = 0; draw26(r2.drawing, "node", i2++); draw26(r2.drawing, "label", i2++); } function getPickingIndexes(r2, mX1, mY1, mX2, mY2) { var x5, y6, w4, h3; var _util$getEffectivePan3 = getEffectivePanZoom(r2), pan2 = _util$getEffectivePan3.pan, zoom2 = _util$getEffectivePan3.zoom; { var _util$modelToRendered = modelToRenderedPosition2(r2, pan2, zoom2, mX1, mY1), _util$modelToRendered2 = _slicedToArray(_util$modelToRendered, 2), cX1 = _util$modelToRendered2[0], cY1 = _util$modelToRendered2[1]; var t4 = 6; x5 = cX1 - t4 / 2; y6 = cY1 - t4 / 2; w4 = t4; h3 = t4; } if (w4 === 0 || h3 === 0) { return []; } var gl = r2.data.contexts[r2.WEBGL]; gl.bindFramebuffer(gl.FRAMEBUFFER, r2.pickingFrameBuffer); if (r2.pickingFrameBuffer.needsDraw) { gl.viewport(0, 0, gl.canvas.width, gl.canvas.height); renderWebgl(r2, null, RENDER_TARGET.PICKING); r2.pickingFrameBuffer.needsDraw = false; } var n2 = w4 * h3; var data5 = new Uint8Array(n2 * 4); gl.readPixels(x5, y6, w4, h3, gl.RGBA, gl.UNSIGNED_BYTE, data5); gl.bindFramebuffer(gl.FRAMEBUFFER, null); var indexes = /* @__PURE__ */ new Set(); for (var i2 = 0; i2 < n2; i2++) { var pixel = data5.slice(i2 * 4, i2 * 4 + 4); var index = vec4ToIndex(pixel) - 1; if (index >= 0) { indexes.add(index); } } return indexes; } function findNearestElementsWebgl(r2, x5, y6) { var indexes = getPickingIndexes(r2, x5, y6); var eles = r2.getCachedZSortedEles(); var node2, edge; var _iterator = _createForOfIteratorHelper(indexes), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done; ) { var index = _step.value; var ele = eles[index]; if (!node2 && ele.isNode()) { node2 = ele; } if (!edge && ele.isEdge()) { edge = ele; } if (node2 && edge) { break; } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } return [node2, edge].filter(Boolean); } function drawEle(r2, index, ele) { var drawing = r2.drawing; index += 1; if (ele.isNode()) { drawing.drawNode(ele, index, "node-underlay"); drawing.drawNode(ele, index, "node-body"); drawing.drawTexture(ele, index, "label"); drawing.drawNode(ele, index, "node-overlay"); } else { drawing.drawEdgeLine(ele, index); drawing.drawEdgeArrow(ele, index, "source"); drawing.drawEdgeArrow(ele, index, "target"); drawing.drawTexture(ele, index, "label"); drawing.drawTexture(ele, index, "edge-source-label"); drawing.drawTexture(ele, index, "edge-target-label"); } } function renderWebgl(r2, options2, renderTarget) { var start3; if (r2.webglDebug) { start3 = performance.now(); } var drawing = r2.drawing; var eleCount = 0; if (renderTarget.screen) { if (r2.data.canvasNeedsRedraw[r2.SELECT_BOX]) { drawSelectionRectangle(r2, options2); } } if (r2.data.canvasNeedsRedraw[r2.NODE] || renderTarget.picking) { var gl = r2.data.contexts[r2.WEBGL]; if (renderTarget.screen) { gl.clearColor(0, 0, 0, 0); gl.enable(gl.BLEND); gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); } else { gl.disable(gl.BLEND); } gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); gl.viewport(0, 0, gl.canvas.width, gl.canvas.height); var panZoomMatrix = createPanZoomMatrix(r2); var eles = r2.getCachedZSortedEles(); eleCount = eles.length; drawing.startFrame(panZoomMatrix, renderTarget); if (renderTarget.screen) { for (var i2 = 0; i2 < eles.nondrag.length; i2++) { drawEle(r2, i2, eles.nondrag[i2]); } for (var _i2 = 0; _i2 < eles.drag.length; _i2++) { drawEle(r2, _i2, eles.drag[_i2]); } } else if (renderTarget.picking) { for (var _i3 = 0; _i3 < eles.length; _i3++) { drawEle(r2, _i3, eles[_i3]); } } drawing.endFrame(); if (renderTarget.screen && r2.webglDebugShowAtlases) { drawAxes(r2); drawAtlases(r2); } r2.data.canvasNeedsRedraw[r2.NODE] = false; r2.data.canvasNeedsRedraw[r2.DRAG] = false; } if (r2.webglDebug) { var end2 = performance.now(); var compact2 = false; var time4 = Math.ceil(end2 - start3); var debugInfo = drawing.getDebugInfo(); var report = ["".concat(eleCount, " elements"), "".concat(debugInfo.totalInstances, " instances"), "".concat(debugInfo.batchCount, " batches"), "".concat(debugInfo.totalAtlases, " atlases"), "".concat(debugInfo.wrappedCount, " wrapped textures"), "".concat(debugInfo.simpleCount, " simple shapes")].join(", "); if (compact2) { console.log("WebGL (".concat(renderTarget.name, ") - time ").concat(time4, "ms, ").concat(report)); } else { console.log("WebGL (".concat(renderTarget.name, ") - frame time ").concat(time4, "ms")); console.log("Totals:"); console.log(" ".concat(report)); console.log("Texture Atlases Used:"); var atlasInfo = debugInfo.atlasInfo; var _iterator2 = _createForOfIteratorHelper(atlasInfo), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) { var info2 = _step2.value; console.log(" ".concat(info2.type, ": ").concat(info2.keyCount, " keys, ").concat(info2.atlasCount, " atlases")); } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } console.log(""); } } if (r2.data.gc) { console.log("Garbage Collect!"); r2.data.gc = false; drawing.gc(); } } function b64ToBlob(b64, mimeType) { var bytes = atob(b64); var buff = new ArrayBuffer(bytes.length); var buffUint8 = new Uint8Array(buff); for (var i2 = 0; i2 < bytes.length; i2++) { buffUint8[i2] = bytes.charCodeAt(i2); } return new Blob([buff], { type: mimeType }); } function b64UriToB64(b64uri) { var i2 = b64uri.indexOf(","); return b64uri.substr(i2 + 1); } function output(options2, canvas, mimeType) { var getB64Uri = /* @__PURE__ */ __name(function getB64Uri2() { return canvas.toDataURL(mimeType, options2.quality); }, "getB64Uri"); switch (options2.output) { case "blob-promise": return new Promise$1(function(resolve2, reject3) { try { canvas.toBlob(function(blob) { if (blob != null) { resolve2(blob); } else { reject3(new Error("`canvas.toBlob()` sent a null value in its callback")); } }, mimeType, options2.quality); } catch (err) { reject3(err); } }); case "blob": return b64ToBlob(b64UriToB64(getB64Uri()), mimeType); case "base64": return b64UriToB64(getB64Uri()); case "base64uri": default: return getB64Uri(); } } function CanvasRenderer(options2) { var r2 = this; var containerWindow = r2.cy.window(); var document2 = containerWindow.document; if (options2.webgl) { CRp.CANVAS_LAYERS = r2.CANVAS_LAYERS = 4; console.log("webgl rendering enabled"); } r2.data = { canvases: new Array(CRp.CANVAS_LAYERS), contexts: new Array(CRp.CANVAS_LAYERS), canvasNeedsRedraw: new Array(CRp.CANVAS_LAYERS), bufferCanvases: new Array(CRp.BUFFER_COUNT), bufferContexts: new Array(CRp.CANVAS_LAYERS) }; var tapHlOffAttr = "-webkit-tap-highlight-color"; var tapHlOffStyle = "rgba(0,0,0,0)"; r2.data.canvasContainer = document2.createElement("div"); var containerStyle = r2.data.canvasContainer.style; r2.data.canvasContainer.style[tapHlOffAttr] = tapHlOffStyle; containerStyle.position = "relative"; containerStyle.zIndex = "0"; containerStyle.overflow = "hidden"; var container2 = options2.cy.container(); container2.appendChild(r2.data.canvasContainer); container2.style[tapHlOffAttr] = tapHlOffStyle; var styleMap2 = { "-webkit-user-select": "none", "-moz-user-select": "-moz-none", "user-select": "none", "-webkit-tap-highlight-color": "rgba(0,0,0,0)", "outline-style": "none" }; if (ms()) { styleMap2["-ms-touch-action"] = "none"; styleMap2["touch-action"] = "none"; } for (var i2 = 0; i2 < CRp.CANVAS_LAYERS; i2++) { var canvas = r2.data.canvases[i2] = document2.createElement("canvas"); var type3 = CRp.CANVAS_TYPES[i2]; r2.data.contexts[i2] = canvas.getContext(type3); if (!r2.data.contexts[i2]) { error("Could not create canvas of type " + type3); } Object.keys(styleMap2).forEach(function(k2) { canvas.style[k2] = styleMap2[k2]; }); canvas.style.position = "absolute"; canvas.setAttribute("data-id", "layer" + i2); canvas.style.zIndex = String(CRp.CANVAS_LAYERS - i2); r2.data.canvasContainer.appendChild(canvas); r2.data.canvasNeedsRedraw[i2] = false; } r2.data.topCanvas = r2.data.canvases[0]; r2.data.canvases[CRp.NODE].setAttribute("data-id", "layer" + CRp.NODE + "-node"); r2.data.canvases[CRp.SELECT_BOX].setAttribute("data-id", "layer" + CRp.SELECT_BOX + "-selectbox"); r2.data.canvases[CRp.DRAG].setAttribute("data-id", "layer" + CRp.DRAG + "-drag"); if (r2.data.canvases[CRp.WEBGL]) { r2.data.canvases[CRp.WEBGL].setAttribute("data-id", "layer" + CRp.WEBGL + "-webgl"); } for (var i2 = 0; i2 < CRp.BUFFER_COUNT; i2++) { r2.data.bufferCanvases[i2] = document2.createElement("canvas"); r2.data.bufferContexts[i2] = r2.data.bufferCanvases[i2].getContext("2d"); r2.data.bufferCanvases[i2].style.position = "absolute"; r2.data.bufferCanvases[i2].setAttribute("data-id", "buffer" + i2); r2.data.bufferCanvases[i2].style.zIndex = String(-i2 - 1); r2.data.bufferCanvases[i2].style.visibility = "hidden"; } r2.pathsEnabled = true; var emptyBb = makeBoundingBox(); var getBoxCenter = /* @__PURE__ */ __name(function getBoxCenter2(bb) { return { x: (bb.x1 + bb.x2) / 2, y: (bb.y1 + bb.y2) / 2 }; }, "getBoxCenter"); var getCenterOffset = /* @__PURE__ */ __name(function getCenterOffset2(bb) { return { x: -bb.w / 2, y: -bb.h / 2 }; }, "getCenterOffset"); var backgroundTimestampHasChanged = /* @__PURE__ */ __name(function backgroundTimestampHasChanged2(ele) { var _p = ele[0]._private; var same2 = _p.oldBackgroundTimestamp === _p.backgroundTimestamp; return !same2; }, "backgroundTimestampHasChanged"); var getStyleKey = /* @__PURE__ */ __name(function getStyleKey2(ele) { return ele[0]._private.nodeKey; }, "getStyleKey"); var getLabelKey = /* @__PURE__ */ __name(function getLabelKey2(ele) { return ele[0]._private.labelStyleKey; }, "getLabelKey"); var getSourceLabelKey = /* @__PURE__ */ __name(function getSourceLabelKey2(ele) { return ele[0]._private.sourceLabelStyleKey; }, "getSourceLabelKey"); var getTargetLabelKey = /* @__PURE__ */ __name(function getTargetLabelKey2(ele) { return ele[0]._private.targetLabelStyleKey; }, "getTargetLabelKey"); var drawElement = /* @__PURE__ */ __name(function drawElement2(context, ele, bb, scaledLabelShown, useEleOpacity) { return r2.drawElement(context, ele, bb, false, false, useEleOpacity); }, "drawElement"); var drawLabel4 = /* @__PURE__ */ __name(function drawLabel5(context, ele, bb, scaledLabelShown, useEleOpacity) { return r2.drawElementText(context, ele, bb, scaledLabelShown, "main", useEleOpacity); }, "drawLabel"); var drawSourceLabel = /* @__PURE__ */ __name(function drawSourceLabel2(context, ele, bb, scaledLabelShown, useEleOpacity) { return r2.drawElementText(context, ele, bb, scaledLabelShown, "source", useEleOpacity); }, "drawSourceLabel"); var drawTargetLabel = /* @__PURE__ */ __name(function drawTargetLabel2(context, ele, bb, scaledLabelShown, useEleOpacity) { return r2.drawElementText(context, ele, bb, scaledLabelShown, "target", useEleOpacity); }, "drawTargetLabel"); var getElementBox = /* @__PURE__ */ __name(function getElementBox2(ele) { ele.boundingBox(); return ele[0]._private.bodyBounds; }, "getElementBox"); var getLabelBox = /* @__PURE__ */ __name(function getLabelBox2(ele) { ele.boundingBox(); return ele[0]._private.labelBounds.main || emptyBb; }, "getLabelBox"); var getSourceLabelBox = /* @__PURE__ */ __name(function getSourceLabelBox2(ele) { ele.boundingBox(); return ele[0]._private.labelBounds.source || emptyBb; }, "getSourceLabelBox"); var getTargetLabelBox = /* @__PURE__ */ __name(function getTargetLabelBox2(ele) { ele.boundingBox(); return ele[0]._private.labelBounds.target || emptyBb; }, "getTargetLabelBox"); var isLabelVisibleAtScale = /* @__PURE__ */ __name(function isLabelVisibleAtScale2(ele, scaledLabelShown) { return scaledLabelShown; }, "isLabelVisibleAtScale"); var getElementRotationPoint = /* @__PURE__ */ __name(function getElementRotationPoint2(ele) { return getBoxCenter(getElementBox(ele)); }, "getElementRotationPoint"); var addTextMargin = /* @__PURE__ */ __name(function addTextMargin2(prefix, pt, ele) { var pre = prefix ? prefix + "-" : ""; return { x: pt.x + ele.pstyle(pre + "text-margin-x").pfValue, y: pt.y + ele.pstyle(pre + "text-margin-y").pfValue }; }, "addTextMargin"); var getRsPt = /* @__PURE__ */ __name(function getRsPt2(ele, x5, y6) { var rs = ele[0]._private.rscratch; return { x: rs[x5], y: rs[y6] }; }, "getRsPt"); var getLabelRotationPoint = /* @__PURE__ */ __name(function getLabelRotationPoint2(ele) { return addTextMargin("", getRsPt(ele, "labelX", "labelY"), ele); }, "getLabelRotationPoint"); var getSourceLabelRotationPoint = /* @__PURE__ */ __name(function getSourceLabelRotationPoint2(ele) { return addTextMargin("source", getRsPt(ele, "sourceLabelX", "sourceLabelY"), ele); }, "getSourceLabelRotationPoint"); var getTargetLabelRotationPoint = /* @__PURE__ */ __name(function getTargetLabelRotationPoint2(ele) { return addTextMargin("target", getRsPt(ele, "targetLabelX", "targetLabelY"), ele); }, "getTargetLabelRotationPoint"); var getElementRotationOffset = /* @__PURE__ */ __name(function getElementRotationOffset2(ele) { return getCenterOffset(getElementBox(ele)); }, "getElementRotationOffset"); var getSourceLabelRotationOffset = /* @__PURE__ */ __name(function getSourceLabelRotationOffset2(ele) { return getCenterOffset(getSourceLabelBox(ele)); }, "getSourceLabelRotationOffset"); var getTargetLabelRotationOffset = /* @__PURE__ */ __name(function getTargetLabelRotationOffset2(ele) { return getCenterOffset(getTargetLabelBox(ele)); }, "getTargetLabelRotationOffset"); var getLabelRotationOffset = /* @__PURE__ */ __name(function getLabelRotationOffset2(ele) { var bb = getLabelBox(ele); var p3 = getCenterOffset(getLabelBox(ele)); if (ele.isNode()) { switch (ele.pstyle("text-halign").value) { case "left": p3.x = -bb.w - (bb.leftPad || 0); break; case "right": p3.x = -(bb.rightPad || 0); break; } switch (ele.pstyle("text-valign").value) { case "top": p3.y = -bb.h - (bb.topPad || 0); break; case "bottom": p3.y = -(bb.botPad || 0); break; } } return p3; }, "getLabelRotationOffset"); var eleTxrCache = r2.data.eleTxrCache = new ElementTextureCache(r2, { getKey: getStyleKey, doesEleInvalidateKey: backgroundTimestampHasChanged, drawElement, getBoundingBox: getElementBox, getRotationPoint: getElementRotationPoint, getRotationOffset: getElementRotationOffset, allowEdgeTxrCaching: false, allowParentTxrCaching: false }); var lblTxrCache = r2.data.lblTxrCache = new ElementTextureCache(r2, { getKey: getLabelKey, drawElement: drawLabel4, getBoundingBox: getLabelBox, getRotationPoint: getLabelRotationPoint, getRotationOffset: getLabelRotationOffset, isVisible: isLabelVisibleAtScale }); var slbTxrCache = r2.data.slbTxrCache = new ElementTextureCache(r2, { getKey: getSourceLabelKey, drawElement: drawSourceLabel, getBoundingBox: getSourceLabelBox, getRotationPoint: getSourceLabelRotationPoint, getRotationOffset: getSourceLabelRotationOffset, isVisible: isLabelVisibleAtScale }); var tlbTxrCache = r2.data.tlbTxrCache = new ElementTextureCache(r2, { getKey: getTargetLabelKey, drawElement: drawTargetLabel, getBoundingBox: getTargetLabelBox, getRotationPoint: getTargetLabelRotationPoint, getRotationOffset: getTargetLabelRotationOffset, isVisible: isLabelVisibleAtScale }); var lyrTxrCache = r2.data.lyrTxrCache = new LayeredTextureCache(r2); r2.onUpdateEleCalcs(/* @__PURE__ */ __name(function invalidateTextureCaches(willDraw, eles) { eleTxrCache.invalidateElements(eles); lblTxrCache.invalidateElements(eles); slbTxrCache.invalidateElements(eles); tlbTxrCache.invalidateElements(eles); lyrTxrCache.invalidateElements(eles); for (var _i = 0; _i < eles.length; _i++) { var _p = eles[_i]._private; _p.oldBackgroundTimestamp = _p.backgroundTimestamp; } }, "invalidateTextureCaches")); var refineInLayers = /* @__PURE__ */ __name(function refineInLayers2(reqs) { for (var i3 = 0; i3 < reqs.length; i3++) { lyrTxrCache.enqueueElementRefinement(reqs[i3].ele); } }, "refineInLayers"); eleTxrCache.onDequeue(refineInLayers); lblTxrCache.onDequeue(refineInLayers); slbTxrCache.onDequeue(refineInLayers); tlbTxrCache.onDequeue(refineInLayers); if (options2.webgl) { r2.initWebgl(options2, { getStyleKey, getLabelKey, getSourceLabelKey, getTargetLabelKey, drawElement, drawLabel: drawLabel4, drawSourceLabel, drawTargetLabel, getElementBox, getLabelBox, getSourceLabelBox, getTargetLabelBox, getElementRotationPoint, getElementRotationOffset, getLabelRotationPoint, getSourceLabelRotationPoint, getTargetLabelRotationPoint, getLabelRotationOffset, getSourceLabelRotationOffset, getTargetLabelRotationOffset }); } } function setExtension(type3, name, registrant) { var ext = registrant; var overrideErr = /* @__PURE__ */ __name(function overrideErr2(field) { warn("Can not register `" + name + "` for `" + type3 + "` since `" + field + "` already exists in the prototype and can not be overridden"); }, "overrideErr"); if (type3 === "core") { if (Core.prototype[name]) { return overrideErr(name); } else { Core.prototype[name] = registrant; } } else if (type3 === "collection") { if (Collection.prototype[name]) { return overrideErr(name); } else { Collection.prototype[name] = registrant; } } else if (type3 === "layout") { var Layout2 = /* @__PURE__ */ __name(function Layout3(options2) { this.options = options2; registrant.call(this, options2); if (!plainObject(this._private)) { this._private = {}; } this._private.cy = options2.cy; this._private.listeners = []; this.createEmitter(); }, "Layout"); var layoutProto = Layout2.prototype = Object.create(registrant.prototype); var optLayoutFns = []; for (var i2 = 0; i2 < optLayoutFns.length; i2++) { var fnName = optLayoutFns[i2]; layoutProto[fnName] = layoutProto[fnName] || function() { return this; }; } if (layoutProto.start && !layoutProto.run) { layoutProto.run = function() { this.start(); return this; }; } else if (!layoutProto.start && layoutProto.run) { layoutProto.start = function() { this.run(); return this; }; } var regStop = registrant.prototype.stop; layoutProto.stop = function() { var opts = this.options; if (opts && opts.animate) { var anis = this.animations; if (anis) { for (var _i = 0; _i < anis.length; _i++) { anis[_i].stop(); } } } if (regStop) { regStop.call(this); } else { this.emit("layoutstop"); } return this; }; if (!layoutProto.destroy) { layoutProto.destroy = function() { return this; }; } layoutProto.cy = function() { return this._private.cy; }; var getCy = /* @__PURE__ */ __name(function getCy2(layout6) { return layout6._private.cy; }, "getCy"); var emitterOpts = { addEventFields: /* @__PURE__ */ __name(function addEventFields4(layout6, evt) { evt.layout = layout6; evt.cy = getCy(layout6); evt.target = layout6; }, "addEventFields"), bubble: /* @__PURE__ */ __name(function bubble3() { return true; }, "bubble"), parent: /* @__PURE__ */ __name(function parent4(layout6) { return getCy(layout6); }, "parent") }; extend4(layoutProto, { createEmitter: /* @__PURE__ */ __name(function createEmitter3() { this._private.emitter = new Emitter(emitterOpts, this); return this; }, "createEmitter"), emitter: /* @__PURE__ */ __name(function emitter3() { return this._private.emitter; }, "emitter"), on: /* @__PURE__ */ __name(function on3(evt, cb) { this.emitter().on(evt, cb); return this; }, "on"), one: /* @__PURE__ */ __name(function one4(evt, cb) { this.emitter().one(evt, cb); return this; }, "one"), once: /* @__PURE__ */ __name(function once3(evt, cb) { this.emitter().one(evt, cb); return this; }, "once"), removeListener: /* @__PURE__ */ __name(function removeListener3(evt, cb) { this.emitter().removeListener(evt, cb); return this; }, "removeListener"), removeAllListeners: /* @__PURE__ */ __name(function removeAllListeners3() { this.emitter().removeAllListeners(); return this; }, "removeAllListeners"), emit: /* @__PURE__ */ __name(function emit3(evt, params) { this.emitter().emit(evt, params); return this; }, "emit") }); define2.eventAliasesOn(layoutProto); ext = Layout2; } else if (type3 === "renderer" && name !== "null" && name !== "base") { var BaseRenderer3 = getExtension("renderer", "base"); var bProto = BaseRenderer3.prototype; var RegistrantRenderer = registrant; var rProto = registrant.prototype; var Renderer = /* @__PURE__ */ __name(function Renderer2() { BaseRenderer3.apply(this, arguments); RegistrantRenderer.apply(this, arguments); }, "Renderer"); var proto = Renderer.prototype; for (var pName in bProto) { var pVal = bProto[pName]; var existsInR = rProto[pName] != null; if (existsInR) { return overrideErr(pName); } proto[pName] = pVal; } for (var _pName in rProto) { proto[_pName] = rProto[_pName]; } bProto.clientFunctions.forEach(function(name2) { proto[name2] = proto[name2] || function() { error("Renderer does not implement `renderer." + name2 + "()` on its prototype"); }; }); ext = Renderer; } else if (type3 === "__proto__" || type3 === "constructor" || type3 === "prototype") { return error(type3 + " is an illegal type to be registered, possibly lead to prototype pollutions"); } return setMap({ map: extensions, keys: [type3, name], value: ext }); } function getExtension(type3, name) { return getMap({ map: extensions, keys: [type3, name] }); } function setModule(type3, name, moduleType, moduleName, registrant) { return setMap({ map: modules, keys: [type3, name, moduleType, moduleName], value: registrant }); } function getModule(type3, name, moduleType, moduleName) { return getMap({ map: modules, keys: [type3, name, moduleType, moduleName] }); } var _window, navigator2, typeofstr, typeofobj, typeoffn, typeofhtmlele, instanceStr, string, fn$6, array2, plainObject, object, number$1, integer, htmlElement, elementOrCollection, element, collection, core2, stylesheet, event, emptyString, domElement, boundingBox, promise, ms, memoize2, camel2dash, dash2camel, prependCamel, capitalize, endsWith, number6, rgba3, rgbaNoBackRefs, hsla2, hslaNoBackRefs, hex3, hex6, ascending3, descending2, extend4, hex2tuple, hsl2tuple, rgb2tuple, colorname2tuple, color2tuple, colors, setMap, getMap, commonjsGlobal, isObject_12, hasRequiredIsObject, _freeGlobal, hasRequired_freeGlobal, _root, hasRequired_root, now_1, hasRequiredNow, _trimmedEndIndex, hasRequired_trimmedEndIndex, _baseTrim, hasRequired_baseTrim, _Symbol, hasRequired_Symbol, _getRawTag, hasRequired_getRawTag, _objectToString, hasRequired_objectToString, _baseGetTag, hasRequired_baseGetTag, isObjectLike_1, hasRequiredIsObjectLike, isSymbol_1, hasRequiredIsSymbol, toNumber_1, hasRequiredToNumber, debounce_1, hasRequiredDebounce, debounceExports, debounce, performance$1, pnow, raf, requestAnimationFrame2, performanceNow, DEFAULT_HASH_SEED, K4, DEFAULT_HASH_SEED_ALT, hashIterableInts, hashInt, hashIntAlt, combineHashes, combineHashesArray, hashArrays, hashIntsArray, hashString, hashStrings, hashStringsArray, movePointByBoxAspect, warningsEnabled, warnSupported, traceSupported, MAX_INT$1, trueify, falsify, zeroify, noop$1, error, warnings, warn, clone3, copy3, copyArray2, uuid, _staticEmptyObject, staticEmptyObject, defaults$g, removeFromArray, clearArray, push, getPrefixedProperty, setPrefixedProperty, ObjectMap, Map$1, undef, ObjectSet, Set$1, Element, defineSearch, elesfn$v, heap$2, heap$1, hasRequiredHeap$1, heap, hasRequiredHeap, heapExports, Heap, dijkstraDefaults, elesfn$u, elesfn$t, aStarDefaults, elesfn$s, floydWarshallDefaults, elesfn$r, bellmanFordDefaults, elesfn$q, sqrt2, collapse, contractUntil, elesfn$p, _Math$hypot, copyPosition, modelToRenderedPosition$1, renderedToModelPosition, array2point, min5, max5, mean, median, deg2rad, getAngleFromDisp, log22, signum, dist, sqdist, inPlaceSumNormalize, qbezierAt, qbezierPtAt, lineAt, bound, makeBoundingBox, copyBoundingBox, clearBoundingBox, updateBoundingBox, expandBoundingBoxByPoint, expandBoundingBox, expandBoundingBoxSides, assignBoundingBox, boundingBoxesIntersect, inBoundingBox, pointInBoundingBox, boundingBoxInBoundingBox, hypot, roundRectangleIntersectLine, inLineVicinity, inBezierVicinity, solveQuadratic, solveCubic, sqdistToQuadraticBezier, sqdistToFiniteLine, pointInsidePolygonPoints, pointInsidePolygon, pointInsideRoundPolygon, joinLines, expandPolygon, intersectLineEllipse, checkInEllipse, intersectLineCircle, midOfThree, finiteLinesIntersect, transformPoints, polygonIntersectLine, roundPolygonIntersectLine, shortenIntersection, generateUnitNgonPointsFitToSquare, fitPolygonToSquare, generateUnitNgonPoints, getRoundRectangleRadius, getRoundPolygonRadius, getCutRectangleCornerLength, bezierPtsToQuadCoeff, getBarrelCurveConstants, pageRankDefaults, elesfn$o, defaults$f, elesfn$n, defaults$e, elesfn$m, defaults$d, elesfn$l, defaults$c, setOptions$3, getSimilarity$1, addLoops, normalize2, mmult, expand, inflate, hasConverged, assign$2, isDuplicate, removeDuplicates, markovClustering, markovClustering$1, identity$1, absDiff, addAbsDiff, addSquaredDiff, sqrt3, maxAbsDiff, getDistance, distances, defaults$b, setOptions$2, getDist, randomCentroids, classify, buildCluster, haveValuesConverged, haveMatricesConverged, seenBefore, randomMedoids, findCost, kMeans, kMedoids, updateCentroids, updateMembership, assign$1, fuzzyCMeans, kClustering, defaults$a, linkageAliases, setOptions$1, mergeClosest, _getAllChildren, _buildDendrogram, _buildClustersFromTree, hierarchicalClustering, hierarchicalClustering$1, defaults$9, setOptions4, getSimilarity2, getPreference, findExemplars, assignClusters, assign4, affinityPropagation, affinityPropagation$1, hierholzerDefaults, elesfn$k, hopcroftTarjanBiconnected, hopcroftTarjanBiconnected$1, tarjanStronglyConnected, tarjanStronglyConnected$1, elesfn$j, STATE_PENDING, STATE_FULFILLED, STATE_REJECTED, _api, deliver, execute, execute_handlers, resolver, _resolve, Promise$1, Animation, anifn, define$3, isArray_1, hasRequiredIsArray, _isKey, hasRequired_isKey, isFunction_1, hasRequiredIsFunction, _coreJsData, hasRequired_coreJsData, _isMasked, hasRequired_isMasked, _toSource, hasRequired_toSource, _baseIsNative, hasRequired_baseIsNative, _getValue, hasRequired_getValue, _getNative, hasRequired_getNative, _nativeCreate, hasRequired_nativeCreate, _hashClear, hasRequired_hashClear, _hashDelete, hasRequired_hashDelete, _hashGet, hasRequired_hashGet, _hashHas, hasRequired_hashHas, _hashSet, hasRequired_hashSet, _Hash, hasRequired_Hash, _listCacheClear, hasRequired_listCacheClear, eq_1, hasRequiredEq, _assocIndexOf, hasRequired_assocIndexOf, _listCacheDelete, hasRequired_listCacheDelete, _listCacheGet, hasRequired_listCacheGet, _listCacheHas, hasRequired_listCacheHas, _listCacheSet, hasRequired_listCacheSet, _ListCache, hasRequired_ListCache, _Map, hasRequired_Map, _mapCacheClear, hasRequired_mapCacheClear, _isKeyable, hasRequired_isKeyable, _getMapData, hasRequired_getMapData, _mapCacheDelete, hasRequired_mapCacheDelete, _mapCacheGet, hasRequired_mapCacheGet, _mapCacheHas, hasRequired_mapCacheHas, _mapCacheSet, hasRequired_mapCacheSet, _MapCache, hasRequired_MapCache, memoize_1, hasRequiredMemoize, _memoizeCapped, hasRequired_memoizeCapped, _stringToPath, hasRequired_stringToPath, _arrayMap, hasRequired_arrayMap, _baseToString, hasRequired_baseToString, toString_1, hasRequiredToString, _castPath, hasRequired_castPath, _toKey, hasRequired_toKey, _baseGet, hasRequired_baseGet, get_1, hasRequiredGet, getExports, get4, _defineProperty, hasRequired_defineProperty, _baseAssignValue, hasRequired_baseAssignValue, _assignValue, hasRequired_assignValue, _isIndex, hasRequired_isIndex, _baseSet, hasRequired_baseSet, set_1, hasRequiredSet, setExports, set4, _copyArray, hasRequired_copyArray, toPath_1, hasRequiredToPath, toPathExports, toPath, define$2, define$1, define2, elesfn$i, elesfn$h, tokens, newQuery, Type2, stateSelectors, lookup, stateSelectorMatches, stateSelectorRegex, cleanMetaChars, replaceLastQuery, exprs, consumeExpr, consumeWhitespace, parse, toString3, parse$1, valCmp, boolCmp, existCmp, data$1, meta, match, matches$1, filter3, matches31, matching, Selector, selfn, elesfn$g, cache, elesfn$f, fn$5, elesfn$e, data3, elesfn$d, fn$4, elesfn$c, beforePositionSet, positionDef, position2, fn$3, elesfn$b, noninf, updateBounds, updateBoundsFromBox, prefixedProperty, updateBoundsFromArrow, updateBoundsFromLabel, updateBoundsFromOutline, updateBoundsFromMiter, updateBoundsFromMiterBorder, boundingBoxImpl, getKey, getBoundingBoxPosKey, cachedBoundingBoxImpl, defBbOpts, defBbOptsKey, filledBbOpts, bounds, fn$2, elesfn$a, defineDimFns, widthHeight, ifEdge, ifEdgeRenderedPosition, ifEdgeRenderedPositions, controlPoints2, segmentPoints, sourceEndpoint, targetEndpoint, midpoint, pts, renderedName, edgePoints, dimensions, Event, eventRegex, universalNamespace, defaults$8, defaultsKeys, emptyOpts, p2, forEachEvent, makeEventObj, forEachEventObj, emitterOptions$1, argSelector$1, elesfn$9, elesfn$8, fn$1, elesfn$7, zIndexSort, elesfn$6, defineSymbolIterator, getLayoutDimensionOptions, elesfn$5, elesfn$4, eleTakesUpSpace, eleInteractive, parentInteractive, eleVisible, edgeVisibleViaNode, elesfn$3, elesfn$2, defineDagExtremity, defineDagOneHop, defineDagAllHops, Collection, elesfn$1, corefn$9, generateSpringRK4, cubicBezier, easings, corefn$8, emitterOptions, argSelector2, elesfn, corefn$7, corefn$6, corefn$5, rendererDefaults, corefn$4, corefn$3, styfn$8, TRUE, FALSE, styfn$7, styfn$6, styfn$5, styfn$4, styfn$3, styfn$2, styfn$1, _Style, styfn, corefn$2, defaultSelectionType, corefn$1, fn2, Core, corefn, defaults$7, deprecatedOptionDefaults, getInfo, setInfo, defaults$6, defaults$5, DEBUG, defaults$4, createLayoutInfo, findLCA, _findLCA_aux, printLayoutInfo, randomizePositions, getScaleInBoundsFn, refreshPositions, step, calculateNodeForces, randomDistance, nodeRepulsion2, nodesOverlap, findClippingPoint, calculateEdgeForces, calculateGravityForces, propagateForces, updatePositions, limitForce, _updateAncestryBoundaries, separateComponents, defaults$3, defaults$2, defaults$1, defaults3, layout4, noop4, throwImgErr, BRp$f, BRp$e, BRp$d, x3, y4, v1, v22, sinA, sinA90, radDirection, drawDirection, angle, halfAngle, cRadius, lenOut, radius, limit, startX, startY, stopX, stopY, lastPoint, asVec, invertVec, calcCornerArc, AVOID_IMPOSSIBLE_BEZIER_CONSTANT, AVOID_IMPOSSIBLE_BEZIER_CONSTANT_L, BRp$c, BRp$b, BRp$a, BRp$9, lineAngleFromDelta, lineAngle, bezierAngle, BRp$8, TOO_SMALL_CUT_RECT, warnedCutRect, BRp$7, BRp$6, BRp$5, BRp$4, BRp$3, BRp$2, BRp$1, beforeRenderCallbacks, BaseRenderer, BR, BRp, fullFpsTime, defs, ElementTextureCacheLookup, minTxrH, txrStepH, minLvl$1, maxLvl$1, maxZoom$1, eleTxrSpacing, defTxrWidth, maxTxrW, maxTxrH, minUtility, maxFullness, maxFullnessChecks, deqCost$1, deqAvgCost$1, deqNoDrawCost$1, deqFastCost$1, deqRedrawThreshold$1, maxDeqSize$1, getTxrReasons, initDefaults, ElementTextureCache, ETCp, defNumLayers, minLvl, maxLvl, maxZoom2, deqRedrawThreshold, refineEleDebounceTime, deqCost, deqAvgCost, deqNoDrawCost, deqFastCost, maxDeqSize, invalidThreshold, maxLayerArea, maxLayerDim, useHighQualityEleTxrReqs, LayeredTextureCache, LTCp, layerIdPool, MAX_INT, CRp$b, impl, CRp$a, getZeroRotation, getLabelRotation, getSourceLabelRotation, getTargetLabelRotation, getOpacity, getTextOpacity, CRp$9, drawEdgeOverlayUnderlay, CRp$8, CRp$7, CRp$6, drawNodeOverlayUnderlay, CRp$5, motionBlurDelay, fpsHeight, ARRAY_TYPE, Atlas, AtlasCollection, AtlasManager, AtlasBatchManager, circleSD, rectangleSD, roundRectangleSD, ellipseSD, RENDER_TARGET, TEX_PICKING_MODE, TEXTURE, EDGE_STRAIGHT, EDGE_CURVE_SEGMENT, EDGE_ARROW, RECTANGLE, ROUND_RECTANGLE, BOTTOM_ROUND_RECTANGLE, ELLIPSE, ElementDrawingWebGL, CRp$4, getStyleKeysForLabel, getBoundingBoxForLabel, CRp$3, sin0, cos0, sin2, cos2, ellipseStepSize, i2, CRp$2, CRp$1, CR, CRp, pathsImpld, renderer2, incExts, extensions, modules, extension2, _Stylesheet, sheetfn, version2, cytoscape2; var init_cytoscape_esm = __esm({ "../../node_modules/.pnpm/cytoscape@3.33.1/node_modules/cytoscape/dist/cytoscape.esm.mjs"() { "use strict"; __name(_arrayLikeToArray, "_arrayLikeToArray"); __name(_arrayWithHoles, "_arrayWithHoles"); __name(_arrayWithoutHoles, "_arrayWithoutHoles"); __name(_classCallCheck, "_classCallCheck"); __name(_defineProperties, "_defineProperties"); __name(_createClass, "_createClass"); __name(_createForOfIteratorHelper, "_createForOfIteratorHelper"); __name(_defineProperty$1, "_defineProperty$1"); __name(_iterableToArray, "_iterableToArray"); __name(_iterableToArrayLimit, "_iterableToArrayLimit"); __name(_nonIterableRest, "_nonIterableRest"); __name(_nonIterableSpread, "_nonIterableSpread"); __name(_slicedToArray, "_slicedToArray"); __name(_toConsumableArray, "_toConsumableArray"); __name(_toPrimitive, "_toPrimitive"); __name(_toPropertyKey, "_toPropertyKey"); __name(_typeof, "_typeof"); __name(_unsupportedIterableToArray, "_unsupportedIterableToArray"); _window = typeof window === "undefined" ? null : window; navigator2 = _window ? _window.navigator : null; _window ? _window.document : null; typeofstr = _typeof(""); typeofobj = _typeof({}); typeoffn = _typeof(function() { }); typeofhtmlele = typeof HTMLElement === "undefined" ? "undefined" : _typeof(HTMLElement); instanceStr = /* @__PURE__ */ __name(function instanceStr2(obj) { return obj && obj.instanceString && fn$6(obj.instanceString) ? obj.instanceString() : null; }, "instanceStr"); string = /* @__PURE__ */ __name(function string2(obj) { return obj != null && _typeof(obj) == typeofstr; }, "string"); fn$6 = /* @__PURE__ */ __name(function fn(obj) { return obj != null && _typeof(obj) === typeoffn; }, "fn"); array2 = /* @__PURE__ */ __name(function array3(obj) { return !elementOrCollection(obj) && (Array.isArray ? Array.isArray(obj) : obj != null && obj instanceof Array); }, "array"); plainObject = /* @__PURE__ */ __name(function plainObject2(obj) { return obj != null && _typeof(obj) === typeofobj && !array2(obj) && obj.constructor === Object; }, "plainObject"); object = /* @__PURE__ */ __name(function object2(obj) { return obj != null && _typeof(obj) === typeofobj; }, "object"); number$1 = /* @__PURE__ */ __name(function number5(obj) { return obj != null && _typeof(obj) === _typeof(1) && !isNaN(obj); }, "number"); integer = /* @__PURE__ */ __name(function integer2(obj) { return number$1(obj) && Math.floor(obj) === obj; }, "integer"); htmlElement = /* @__PURE__ */ __name(function htmlElement2(obj) { if ("undefined" === typeofhtmlele) { return void 0; } else { return null != obj && obj instanceof HTMLElement; } }, "htmlElement"); elementOrCollection = /* @__PURE__ */ __name(function elementOrCollection2(obj) { return element(obj) || collection(obj); }, "elementOrCollection"); element = /* @__PURE__ */ __name(function element2(obj) { return instanceStr(obj) === "collection" && obj._private.single; }, "element"); collection = /* @__PURE__ */ __name(function collection2(obj) { return instanceStr(obj) === "collection" && !obj._private.single; }, "collection"); core2 = /* @__PURE__ */ __name(function core3(obj) { return instanceStr(obj) === "core"; }, "core"); stylesheet = /* @__PURE__ */ __name(function stylesheet2(obj) { return instanceStr(obj) === "stylesheet"; }, "stylesheet"); event = /* @__PURE__ */ __name(function event2(obj) { return instanceStr(obj) === "event"; }, "event"); emptyString = /* @__PURE__ */ __name(function emptyString2(obj) { if (obj === void 0 || obj === null) { return true; } else if (obj === "" || obj.match(/^\s+$/)) { return true; } return false; }, "emptyString"); domElement = /* @__PURE__ */ __name(function domElement2(obj) { if (typeof HTMLElement === "undefined") { return false; } else { return obj instanceof HTMLElement; } }, "domElement"); boundingBox = /* @__PURE__ */ __name(function boundingBox2(obj) { return plainObject(obj) && number$1(obj.x1) && number$1(obj.x2) && number$1(obj.y1) && number$1(obj.y2); }, "boundingBox"); promise = /* @__PURE__ */ __name(function promise2(obj) { return object(obj) && fn$6(obj.then); }, "promise"); ms = /* @__PURE__ */ __name(function ms2() { return navigator2 && navigator2.userAgent.match(/msie|trident|edge/i); }, "ms"); memoize2 = /* @__PURE__ */ __name(function memoize3(fn3, keyFn) { if (!keyFn) { keyFn = /* @__PURE__ */ __name(function keyFn2() { if (arguments.length === 1) { return arguments[0]; } else if (arguments.length === 0) { return "undefined"; } var args = []; for (var i2 = 0; i2 < arguments.length; i2++) { args.push(arguments[i2]); } return args.join("$"); }, "keyFn"); } var _memoizedFn = /* @__PURE__ */ __name(function memoizedFn() { var self2 = this; var args = arguments; var ret; var k2 = keyFn.apply(self2, args); var cache3 = _memoizedFn.cache; if (!(ret = cache3[k2])) { ret = cache3[k2] = fn3.apply(self2, args); } return ret; }, "memoizedFn"); _memoizedFn.cache = {}; return _memoizedFn; }, "memoize"); camel2dash = memoize2(function(str2) { return str2.replace(/([A-Z])/g, function(v3) { return "-" + v3.toLowerCase(); }); }); dash2camel = memoize2(function(str2) { return str2.replace(/(-\w)/g, function(v3) { return v3[1].toUpperCase(); }); }); prependCamel = memoize2(function(prefix, str2) { return prefix + str2[0].toUpperCase() + str2.substring(1); }, function(prefix, str2) { return prefix + "$" + str2; }); capitalize = /* @__PURE__ */ __name(function capitalize2(str2) { if (emptyString(str2)) { return str2; } return str2.charAt(0).toUpperCase() + str2.substring(1); }, "capitalize"); endsWith = /* @__PURE__ */ __name(function endsWith2(string3, suffix) { return string3.slice(-1 * suffix.length) === suffix; }, "endsWith"); number6 = "(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))"; rgba3 = "rgb[a]?\\((" + number6 + "[%]?)\\s*,\\s*(" + number6 + "[%]?)\\s*,\\s*(" + number6 + "[%]?)(?:\\s*,\\s*(" + number6 + "))?\\)"; rgbaNoBackRefs = "rgb[a]?\\((?:" + number6 + "[%]?)\\s*,\\s*(?:" + number6 + "[%]?)\\s*,\\s*(?:" + number6 + "[%]?)(?:\\s*,\\s*(?:" + number6 + "))?\\)"; hsla2 = "hsl[a]?\\((" + number6 + ")\\s*,\\s*(" + number6 + "[%])\\s*,\\s*(" + number6 + "[%])(?:\\s*,\\s*(" + number6 + "))?\\)"; hslaNoBackRefs = "hsl[a]?\\((?:" + number6 + ")\\s*,\\s*(?:" + number6 + "[%])\\s*,\\s*(?:" + number6 + "[%])(?:\\s*,\\s*(?:" + number6 + "))?\\)"; hex3 = "\\#[0-9a-fA-F]{3}"; hex6 = "\\#[0-9a-fA-F]{6}"; ascending3 = /* @__PURE__ */ __name(function ascending4(a2, b3) { if (a2 < b3) { return -1; } else if (a2 > b3) { return 1; } else { return 0; } }, "ascending"); descending2 = /* @__PURE__ */ __name(function descending3(a2, b3) { return -1 * ascending3(a2, b3); }, "descending"); extend4 = Object.assign != null ? Object.assign.bind(Object) : function(tgt) { var args = arguments; for (var i2 = 1; i2 < args.length; i2++) { var obj = args[i2]; if (obj == null) { continue; } var keys2 = Object.keys(obj); for (var j3 = 0; j3 < keys2.length; j3++) { var k2 = keys2[j3]; tgt[k2] = obj[k2]; } } return tgt; }; hex2tuple = /* @__PURE__ */ __name(function hex2tuple2(hex2) { if (!(hex2.length === 4 || hex2.length === 7) || hex2[0] !== "#") { return; } var shortHex = hex2.length === 4; var r2, g2, b3; var base = 16; if (shortHex) { r2 = parseInt(hex2[1] + hex2[1], base); g2 = parseInt(hex2[2] + hex2[2], base); b3 = parseInt(hex2[3] + hex2[3], base); } else { r2 = parseInt(hex2[1] + hex2[2], base); g2 = parseInt(hex2[3] + hex2[4], base); b3 = parseInt(hex2[5] + hex2[6], base); } return [r2, g2, b3]; }, "hex2tuple"); hsl2tuple = /* @__PURE__ */ __name(function hsl2tuple2(hsl2) { var ret; var h3, s2, l4, a2, r2, g2, b3; function hue2rgb(p4, q4, t4) { if (t4 < 0) t4 += 1; if (t4 > 1) t4 -= 1; if (t4 < 1 / 6) return p4 + (q4 - p4) * 6 * t4; if (t4 < 1 / 2) return q4; if (t4 < 2 / 3) return p4 + (q4 - p4) * (2 / 3 - t4) * 6; return p4; } __name(hue2rgb, "hue2rgb"); var m3 = new RegExp("^" + hsla2 + "$").exec(hsl2); if (m3) { h3 = parseInt(m3[1]); if (h3 < 0) { h3 = (360 - -1 * h3 % 360) % 360; } else if (h3 > 360) { h3 = h3 % 360; } h3 /= 360; s2 = parseFloat(m3[2]); if (s2 < 0 || s2 > 100) { return; } s2 = s2 / 100; l4 = parseFloat(m3[3]); if (l4 < 0 || l4 > 100) { return; } l4 = l4 / 100; a2 = m3[4]; if (a2 !== void 0) { a2 = parseFloat(a2); if (a2 < 0 || a2 > 1) { return; } } if (s2 === 0) { r2 = g2 = b3 = Math.round(l4 * 255); } else { var q3 = l4 < 0.5 ? l4 * (1 + s2) : l4 + s2 - l4 * s2; var p3 = 2 * l4 - q3; r2 = Math.round(255 * hue2rgb(p3, q3, h3 + 1 / 3)); g2 = Math.round(255 * hue2rgb(p3, q3, h3)); b3 = Math.round(255 * hue2rgb(p3, q3, h3 - 1 / 3)); } ret = [r2, g2, b3, a2]; } return ret; }, "hsl2tuple"); rgb2tuple = /* @__PURE__ */ __name(function rgb2tuple2(rgb2) { var ret; var m3 = new RegExp("^" + rgba3 + "$").exec(rgb2); if (m3) { ret = []; var isPct = []; for (var i2 = 1; i2 <= 3; i2++) { var channel2 = m3[i2]; if (channel2[channel2.length - 1] === "%") { isPct[i2] = true; } channel2 = parseFloat(channel2); if (isPct[i2]) { channel2 = channel2 / 100 * 255; } if (channel2 < 0 || channel2 > 255) { return; } ret.push(Math.floor(channel2)); } var atLeastOneIsPct = isPct[1] || isPct[2] || isPct[3]; var allArePct = isPct[1] && isPct[2] && isPct[3]; if (atLeastOneIsPct && !allArePct) { return; } var alpha = m3[4]; if (alpha !== void 0) { alpha = parseFloat(alpha); if (alpha < 0 || alpha > 1) { return; } ret.push(alpha); } } return ret; }, "rgb2tuple"); colorname2tuple = /* @__PURE__ */ __name(function colorname2tuple2(color2) { return colors[color2.toLowerCase()]; }, "colorname2tuple"); color2tuple = /* @__PURE__ */ __name(function color2tuple2(color2) { return (array2(color2) ? color2 : null) || colorname2tuple(color2) || hex2tuple(color2) || rgb2tuple(color2) || hsl2tuple(color2); }, "color2tuple"); colors = { // special colour names transparent: [0, 0, 0, 0], // NB alpha === 0 // regular colours aliceblue: [240, 248, 255], antiquewhite: [250, 235, 215], aqua: [0, 255, 255], aquamarine: [127, 255, 212], azure: [240, 255, 255], beige: [245, 245, 220], bisque: [255, 228, 196], black: [0, 0, 0], blanchedalmond: [255, 235, 205], blue: [0, 0, 255], blueviolet: [138, 43, 226], brown: [165, 42, 42], burlywood: [222, 184, 135], cadetblue: [95, 158, 160], chartreuse: [127, 255, 0], chocolate: [210, 105, 30], coral: [255, 127, 80], cornflowerblue: [100, 149, 237], cornsilk: [255, 248, 220], crimson: [220, 20, 60], cyan: [0, 255, 255], darkblue: [0, 0, 139], darkcyan: [0, 139, 139], darkgoldenrod: [184, 134, 11], darkgray: [169, 169, 169], darkgreen: [0, 100, 0], darkgrey: [169, 169, 169], darkkhaki: [189, 183, 107], darkmagenta: [139, 0, 139], darkolivegreen: [85, 107, 47], darkorange: [255, 140, 0], darkorchid: [153, 50, 204], darkred: [139, 0, 0], darksalmon: [233, 150, 122], darkseagreen: [143, 188, 143], darkslateblue: [72, 61, 139], darkslategray: [47, 79, 79], darkslategrey: [47, 79, 79], darkturquoise: [0, 206, 209], darkviolet: [148, 0, 211], deeppink: [255, 20, 147], deepskyblue: [0, 191, 255], dimgray: [105, 105, 105], dimgrey: [105, 105, 105], dodgerblue: [30, 144, 255], firebrick: [178, 34, 34], floralwhite: [255, 250, 240], forestgreen: [34, 139, 34], fuchsia: [255, 0, 255], gainsboro: [220, 220, 220], ghostwhite: [248, 248, 255], gold: [255, 215, 0], goldenrod: [218, 165, 32], gray: [128, 128, 128], grey: [128, 128, 128], green: [0, 128, 0], greenyellow: [173, 255, 47], honeydew: [240, 255, 240], hotpink: [255, 105, 180], indianred: [205, 92, 92], indigo: [75, 0, 130], ivory: [255, 255, 240], khaki: [240, 230, 140], lavender: [230, 230, 250], lavenderblush: [255, 240, 245], lawngreen: [124, 252, 0], lemonchiffon: [255, 250, 205], lightblue: [173, 216, 230], lightcoral: [240, 128, 128], lightcyan: [224, 255, 255], lightgoldenrodyellow: [250, 250, 210], lightgray: [211, 211, 211], lightgreen: [144, 238, 144], lightgrey: [211, 211, 211], lightpink: [255, 182, 193], lightsalmon: [255, 160, 122], lightseagreen: [32, 178, 170], lightskyblue: [135, 206, 250], lightslategray: [119, 136, 153], lightslategrey: [119, 136, 153], lightsteelblue: [176, 196, 222], lightyellow: [255, 255, 224], lime: [0, 255, 0], limegreen: [50, 205, 50], linen: [250, 240, 230], magenta: [255, 0, 255], maroon: [128, 0, 0], mediumaquamarine: [102, 205, 170], mediumblue: [0, 0, 205], mediumorchid: [186, 85, 211], mediumpurple: [147, 112, 219], mediumseagreen: [60, 179, 113], mediumslateblue: [123, 104, 238], mediumspringgreen: [0, 250, 154], mediumturquoise: [72, 209, 204], mediumvioletred: [199, 21, 133], midnightblue: [25, 25, 112], mintcream: [245, 255, 250], mistyrose: [255, 228, 225], moccasin: [255, 228, 181], navajowhite: [255, 222, 173], navy: [0, 0, 128], oldlace: [253, 245, 230], olive: [128, 128, 0], olivedrab: [107, 142, 35], orange: [255, 165, 0], orangered: [255, 69, 0], orchid: [218, 112, 214], palegoldenrod: [238, 232, 170], palegreen: [152, 251, 152], paleturquoise: [175, 238, 238], palevioletred: [219, 112, 147], papayawhip: [255, 239, 213], peachpuff: [255, 218, 185], peru: [205, 133, 63], pink: [255, 192, 203], plum: [221, 160, 221], powderblue: [176, 224, 230], purple: [128, 0, 128], red: [255, 0, 0], rosybrown: [188, 143, 143], royalblue: [65, 105, 225], saddlebrown: [139, 69, 19], salmon: [250, 128, 114], sandybrown: [244, 164, 96], seagreen: [46, 139, 87], seashell: [255, 245, 238], sienna: [160, 82, 45], silver: [192, 192, 192], skyblue: [135, 206, 235], slateblue: [106, 90, 205], slategray: [112, 128, 144], slategrey: [112, 128, 144], snow: [255, 250, 250], springgreen: [0, 255, 127], steelblue: [70, 130, 180], tan: [210, 180, 140], teal: [0, 128, 128], thistle: [216, 191, 216], tomato: [255, 99, 71], turquoise: [64, 224, 208], violet: [238, 130, 238], wheat: [245, 222, 179], white: [255, 255, 255], whitesmoke: [245, 245, 245], yellow: [255, 255, 0], yellowgreen: [154, 205, 50] }; setMap = /* @__PURE__ */ __name(function setMap2(options2) { var obj = options2.map; var keys2 = options2.keys; var l4 = keys2.length; for (var i2 = 0; i2 < l4; i2++) { var key = keys2[i2]; if (plainObject(key)) { throw Error("Tried to set map with object key"); } if (i2 < keys2.length - 1) { if (obj[key] == null) { obj[key] = {}; } obj = obj[key]; } else { obj[key] = options2.value; } } }, "setMap"); getMap = /* @__PURE__ */ __name(function getMap2(options2) { var obj = options2.map; var keys2 = options2.keys; var l4 = keys2.length; for (var i2 = 0; i2 < l4; i2++) { var key = keys2[i2]; if (plainObject(key)) { throw Error("Tried to get map with object key"); } obj = obj[key]; if (obj == null) { return obj; } } return obj; }, "getMap"); commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; __name(getDefaultExportFromCjs, "getDefaultExportFromCjs"); __name(requireIsObject, "requireIsObject"); __name(require_freeGlobal, "require_freeGlobal"); __name(require_root, "require_root"); __name(requireNow, "requireNow"); __name(require_trimmedEndIndex, "require_trimmedEndIndex"); __name(require_baseTrim, "require_baseTrim"); __name(require_Symbol, "require_Symbol"); __name(require_getRawTag, "require_getRawTag"); __name(require_objectToString, "require_objectToString"); __name(require_baseGetTag, "require_baseGetTag"); __name(requireIsObjectLike, "requireIsObjectLike"); __name(requireIsSymbol, "requireIsSymbol"); __name(requireToNumber, "requireToNumber"); __name(requireDebounce, "requireDebounce"); debounceExports = requireDebounce(); debounce = /* @__PURE__ */ getDefaultExportFromCjs(debounceExports); performance$1 = _window ? _window.performance : null; pnow = performance$1 && performance$1.now ? function() { return performance$1.now(); } : function() { return Date.now(); }; raf = (function() { if (_window) { if (_window.requestAnimationFrame) { return function(fn3) { _window.requestAnimationFrame(fn3); }; } else if (_window.mozRequestAnimationFrame) { return function(fn3) { _window.mozRequestAnimationFrame(fn3); }; } else if (_window.webkitRequestAnimationFrame) { return function(fn3) { _window.webkitRequestAnimationFrame(fn3); }; } else if (_window.msRequestAnimationFrame) { return function(fn3) { _window.msRequestAnimationFrame(fn3); }; } } return function(fn3) { if (fn3) { setTimeout(function() { fn3(pnow()); }, 1e3 / 60); } }; })(); requestAnimationFrame2 = /* @__PURE__ */ __name(function requestAnimationFrame3(fn3) { return raf(fn3); }, "requestAnimationFrame"); performanceNow = pnow; DEFAULT_HASH_SEED = 9261; K4 = 65599; DEFAULT_HASH_SEED_ALT = 5381; hashIterableInts = /* @__PURE__ */ __name(function hashIterableInts2(iterator) { var seed = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : DEFAULT_HASH_SEED; var hash = seed; var entry; for (; ; ) { entry = iterator.next(); if (entry.done) { break; } hash = hash * K4 + entry.value | 0; } return hash; }, "hashIterableInts"); hashInt = /* @__PURE__ */ __name(function hashInt2(num) { var seed = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : DEFAULT_HASH_SEED; return seed * K4 + num | 0; }, "hashInt"); hashIntAlt = /* @__PURE__ */ __name(function hashIntAlt2(num) { var seed = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : DEFAULT_HASH_SEED_ALT; return (seed << 5) + seed + num | 0; }, "hashIntAlt"); combineHashes = /* @__PURE__ */ __name(function combineHashes2(hash1, hash2) { return hash1 * 2097152 + hash2; }, "combineHashes"); combineHashesArray = /* @__PURE__ */ __name(function combineHashesArray2(hashes) { return hashes[0] * 2097152 + hashes[1]; }, "combineHashesArray"); hashArrays = /* @__PURE__ */ __name(function hashArrays2(hashes1, hashes2) { return [hashInt(hashes1[0], hashes2[0]), hashIntAlt(hashes1[1], hashes2[1])]; }, "hashArrays"); hashIntsArray = /* @__PURE__ */ __name(function hashIntsArray2(ints, seed) { var entry = { value: 0, done: false }; var i2 = 0; var length2 = ints.length; var iterator = { next: /* @__PURE__ */ __name(function next3() { if (i2 < length2) { entry.value = ints[i2++]; } else { entry.done = true; } return entry; }, "next") }; return hashIterableInts(iterator, seed); }, "hashIntsArray"); hashString = /* @__PURE__ */ __name(function hashString2(str2, seed) { var entry = { value: 0, done: false }; var i2 = 0; var length2 = str2.length; var iterator = { next: /* @__PURE__ */ __name(function next3() { if (i2 < length2) { entry.value = str2.charCodeAt(i2++); } else { entry.done = true; } return entry; }, "next") }; return hashIterableInts(iterator, seed); }, "hashString"); hashStrings = /* @__PURE__ */ __name(function hashStrings2() { return hashStringsArray(arguments); }, "hashStrings"); hashStringsArray = /* @__PURE__ */ __name(function hashStringsArray2(strs) { var hash; for (var i2 = 0; i2 < strs.length; i2++) { var str2 = strs[i2]; if (i2 === 0) { hash = hashString(str2); } else { hash = hashString(str2, hash); } } return hash; }, "hashStringsArray"); __name(rotatePoint, "rotatePoint"); movePointByBoxAspect = /* @__PURE__ */ __name(function movePointByBoxAspect2(x5, y6, boxX, boxY, skewX, skewY) { return { x: (x5 - boxX) * skewX + boxX, y: (y6 - boxY) * skewY + boxY }; }, "movePointByBoxAspect"); __name(rotatePosAndSkewByBox, "rotatePosAndSkewByBox"); warningsEnabled = true; warnSupported = console.warn != null; traceSupported = console.trace != null; MAX_INT$1 = Number.MAX_SAFE_INTEGER || 9007199254740991; trueify = /* @__PURE__ */ __name(function trueify2() { return true; }, "trueify"); falsify = /* @__PURE__ */ __name(function falsify2() { return false; }, "falsify"); zeroify = /* @__PURE__ */ __name(function zeroify2() { return 0; }, "zeroify"); noop$1 = /* @__PURE__ */ __name(function noop3() { }, "noop"); error = /* @__PURE__ */ __name(function error2(msg) { throw new Error(msg); }, "error"); warnings = /* @__PURE__ */ __name(function warnings2(enabled) { if (enabled !== void 0) { warningsEnabled = !!enabled; } else { return warningsEnabled; } }, "warnings"); warn = /* @__PURE__ */ __name(function warn2(msg) { if (!warnings()) { return; } if (warnSupported) { console.warn(msg); } else { console.log(msg); if (traceSupported) { console.trace(); } } }, "warn"); clone3 = /* @__PURE__ */ __name(function clone4(obj) { return extend4({}, obj); }, "clone"); copy3 = /* @__PURE__ */ __name(function copy4(obj) { if (obj == null) { return obj; } if (array2(obj)) { return obj.slice(); } else if (plainObject(obj)) { return clone3(obj); } else { return obj; } }, "copy"); copyArray2 = /* @__PURE__ */ __name(function copyArray3(arr) { return arr.slice(); }, "copyArray"); uuid = /* @__PURE__ */ __name(function uuid2(a2, b3) { for ( // loop :) b3 = a2 = ""; // b - result , a - numeric letiable a2++ < 36; // b3 += a2 * 51 & 52 ? ( // return a random number or 4 (a2 ^ 15 ? ( // generate a random number from 0 to 15 8 ^ Math.random() * (a2 ^ 20 ? 16 : 4) ) : 4).toString(16) ) : "-" ) ; return b3; }, "uuid"); _staticEmptyObject = {}; staticEmptyObject = /* @__PURE__ */ __name(function staticEmptyObject2() { return _staticEmptyObject; }, "staticEmptyObject"); defaults$g = /* @__PURE__ */ __name(function defaults2(_defaults) { var keys2 = Object.keys(_defaults); return function(opts) { var filledOpts = {}; for (var i2 = 0; i2 < keys2.length; i2++) { var key = keys2[i2]; var optVal = opts == null ? void 0 : opts[key]; filledOpts[key] = optVal === void 0 ? _defaults[key] : optVal; } return filledOpts; }; }, "defaults"); removeFromArray = /* @__PURE__ */ __name(function removeFromArray2(arr, ele, oneCopy) { for (var i2 = arr.length - 1; i2 >= 0; i2--) { if (arr[i2] === ele) { arr.splice(i2, 1); } } }, "removeFromArray"); clearArray = /* @__PURE__ */ __name(function clearArray2(arr) { arr.splice(0, arr.length); }, "clearArray"); push = /* @__PURE__ */ __name(function push2(arr, otherArr) { for (var i2 = 0; i2 < otherArr.length; i2++) { var el = otherArr[i2]; arr.push(el); } }, "push"); getPrefixedProperty = /* @__PURE__ */ __name(function getPrefixedProperty2(obj, propName, prefix) { if (prefix) { propName = prependCamel(prefix, propName); } return obj[propName]; }, "getPrefixedProperty"); setPrefixedProperty = /* @__PURE__ */ __name(function setPrefixedProperty2(obj, propName, prefix, value2) { if (prefix) { propName = prependCamel(prefix, propName); } obj[propName] = value2; }, "setPrefixedProperty"); ObjectMap = /* @__PURE__ */ (function() { function ObjectMap2() { _classCallCheck(this, ObjectMap2); this._obj = {}; } __name(ObjectMap2, "ObjectMap"); return _createClass(ObjectMap2, [{ key: "set", value: /* @__PURE__ */ __name(function set5(key, val) { this._obj[key] = val; return this; }, "set") }, { key: "delete", value: /* @__PURE__ */ __name(function _delete(key) { this._obj[key] = void 0; return this; }, "_delete") }, { key: "clear", value: /* @__PURE__ */ __name(function clear19() { this._obj = {}; }, "clear") }, { key: "has", value: /* @__PURE__ */ __name(function has2(key) { return this._obj[key] !== void 0; }, "has") }, { key: "get", value: /* @__PURE__ */ __name(function get5(key) { return this._obj[key]; }, "get") }]); })(); Map$1 = typeof Map !== "undefined" ? Map : ObjectMap; undef = "undefined"; ObjectSet = /* @__PURE__ */ (function() { function ObjectSet2(arrayOrObjectSet) { _classCallCheck(this, ObjectSet2); this._obj = /* @__PURE__ */ Object.create(null); this.size = 0; if (arrayOrObjectSet != null) { var arr; if (arrayOrObjectSet.instanceString != null && arrayOrObjectSet.instanceString() === this.instanceString()) { arr = arrayOrObjectSet.toArray(); } else { arr = arrayOrObjectSet; } for (var i2 = 0; i2 < arr.length; i2++) { this.add(arr[i2]); } } } __name(ObjectSet2, "ObjectSet"); return _createClass(ObjectSet2, [{ key: "instanceString", value: /* @__PURE__ */ __name(function instanceString4() { return "set"; }, "instanceString") }, { key: "add", value: /* @__PURE__ */ __name(function add3(val) { var o2 = this._obj; if (o2[val] !== 1) { o2[val] = 1; this.size++; } }, "add") }, { key: "delete", value: /* @__PURE__ */ __name(function _delete(val) { var o2 = this._obj; if (o2[val] === 1) { o2[val] = 0; this.size--; } }, "_delete") }, { key: "clear", value: /* @__PURE__ */ __name(function clear19() { this._obj = /* @__PURE__ */ Object.create(null); }, "clear") }, { key: "has", value: /* @__PURE__ */ __name(function has2(val) { return this._obj[val] === 1; }, "has") }, { key: "toArray", value: /* @__PURE__ */ __name(function toArray3() { var _this = this; return Object.keys(this._obj).filter(function(key) { return _this.has(key); }); }, "toArray") }, { key: "forEach", value: /* @__PURE__ */ __name(function forEach3(callback, thisArg) { return this.toArray().forEach(callback, thisArg); }, "forEach") }]); })(); Set$1 = (typeof Set === "undefined" ? "undefined" : _typeof(Set)) !== undef ? Set : ObjectSet; Element = /* @__PURE__ */ __name(function Element2(cy, params) { var restore = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true; if (cy === void 0 || params === void 0 || !core2(cy)) { error("An element must have a core reference and parameters set"); return; } var group2 = params.group; if (group2 == null) { if (params.data && params.data.source != null && params.data.target != null) { group2 = "edges"; } else { group2 = "nodes"; } } if (group2 !== "nodes" && group2 !== "edges") { error("An element must be of type `nodes` or `edges`; you specified `" + group2 + "`"); return; } this.length = 1; this[0] = this; var _p = this._private = { cy, single: true, // indicates this is an element data: params.data || {}, // data object position: params.position || { x: 0, y: 0 }, // (x, y) position pair autoWidth: void 0, // width and height of nodes calculated by the renderer when set to special 'auto' value autoHeight: void 0, autoPadding: void 0, compoundBoundsClean: false, // whether the compound dimensions need to be recalculated the next time dimensions are read listeners: [], // array of bound listeners group: group2, // string; 'nodes' or 'edges' style: {}, // properties as set by the style rstyle: {}, // properties for style sent from the renderer to the core styleCxts: [], // applied style contexts from the styler styleKeys: {}, // per-group keys of style property values removed: true, // whether it's inside the vis; true if removed (set true here since we call restore) selected: params.selected ? true : false, // whether it's selected selectable: params.selectable === void 0 ? true : params.selectable ? true : false, // whether it's selectable locked: params.locked ? true : false, // whether the element is locked (cannot be moved) grabbed: false, // whether the element is grabbed by the mouse; renderer sets this privately grabbable: params.grabbable === void 0 ? true : params.grabbable ? true : false, // whether the element can be grabbed pannable: params.pannable === void 0 ? group2 === "edges" ? true : false : params.pannable ? true : false, // whether the element has passthrough panning enabled active: false, // whether the element is active from user interaction classes: new Set$1(), // map ( className => true ) animation: { // object for currently-running animations current: [], queue: [] }, rscratch: {}, // object in which the renderer can store information scratch: params.scratch || {}, // scratch objects edges: [], // array of connected edges children: [], // array of children parent: params.parent && params.parent.isNode() ? params.parent : null, // parent ref traversalCache: {}, // cache of output of traversal functions backgrounding: false, // whether background images are loading bbCache: null, // cache of the current bounding box bbCacheShift: { x: 0, y: 0 }, // shift applied to cached bb to be applied on next get bodyBounds: null, // bounds cache of element body, w/o overlay overlayBounds: null, // bounds cache of element body, including overlay labelBounds: { // bounds cache of labels all: null, source: null, target: null, main: null }, arrowBounds: { // bounds cache of edge arrows source: null, target: null, "mid-source": null, "mid-target": null } }; if (_p.position.x == null) { _p.position.x = 0; } if (_p.position.y == null) { _p.position.y = 0; } if (params.renderedPosition) { var rpos = params.renderedPosition; var pan2 = cy.pan(); var zoom2 = cy.zoom(); _p.position = { x: (rpos.x - pan2.x) / zoom2, y: (rpos.y - pan2.y) / zoom2 }; } var classes3 = []; if (array2(params.classes)) { classes3 = params.classes; } else if (string(params.classes)) { classes3 = params.classes.split(/\s+/); } for (var i2 = 0, l4 = classes3.length; i2 < l4; i2++) { var cls = classes3[i2]; if (!cls || cls === "") { continue; } _p.classes.add(cls); } this.createEmitter(); if (restore === void 0 || restore) { this.restore(); } var bypass = params.style || params.css; if (bypass) { warn("Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead."); this.style(bypass); } }, "Element"); defineSearch = /* @__PURE__ */ __name(function defineSearch2(params) { params = { bfs: params.bfs || !params.dfs, dfs: params.dfs || !params.bfs }; return /* @__PURE__ */ __name(function searchFn(roots, fn3, directed) { var options2; if (plainObject(roots) && !elementOrCollection(roots)) { options2 = roots; roots = options2.roots || options2.root; fn3 = options2.visit; directed = options2.directed; } directed = arguments.length === 2 && !fn$6(fn3) ? fn3 : directed; fn3 = fn$6(fn3) ? fn3 : function() { }; var cy = this._private.cy; var v3 = roots = string(roots) ? this.filter(roots) : roots; var Q3 = []; var connectedNodes = []; var connectedBy = {}; var id2depth = {}; var V3 = {}; var j3 = 0; var found; var _this$byGroup = this.byGroup(), nodes5 = _this$byGroup.nodes, edges3 = _this$byGroup.edges; for (var i2 = 0; i2 < v3.length; i2++) { var vi2 = v3[i2]; var viId = vi2.id(); if (vi2.isNode()) { Q3.unshift(vi2); if (params.bfs) { V3[viId] = true; connectedNodes.push(vi2); } id2depth[viId] = 0; } } var _loop = /* @__PURE__ */ __name(function _loop2() { var v5 = params.bfs ? Q3.shift() : Q3.pop(); var vId = v5.id(); if (params.dfs) { if (V3[vId]) { return 0; } V3[vId] = true; connectedNodes.push(v5); } var depth = id2depth[vId]; var prevEdge = connectedBy[vId]; var src = prevEdge != null ? prevEdge.source() : null; var tgt = prevEdge != null ? prevEdge.target() : null; var prevNode = prevEdge == null ? void 0 : v5.same(src) ? tgt[0] : src[0]; var ret; ret = fn3(v5, prevEdge, prevNode, j3++, depth); if (ret === true) { found = v5; return 1; } if (ret === false) { return 1; } var vwEdges = v5.connectedEdges().filter(function(e4) { return (!directed || e4.source().same(v5)) && edges3.has(e4); }); for (var _i2 = 0; _i2 < vwEdges.length; _i2++) { var e3 = vwEdges[_i2]; var w4 = e3.connectedNodes().filter(function(n2) { return !n2.same(v5) && nodes5.has(n2); }); var wId = w4.id(); if (w4.length !== 0 && !V3[wId]) { w4 = w4[0]; Q3.push(w4); if (params.bfs) { V3[wId] = true; connectedNodes.push(w4); } connectedBy[wId] = e3; id2depth[wId] = id2depth[vId] + 1; } } }, "_loop"), _ret; while (Q3.length !== 0) { _ret = _loop(); if (_ret === 0) continue; if (_ret === 1) break; } var connectedEles = cy.collection(); for (var _i = 0; _i < connectedNodes.length; _i++) { var node2 = connectedNodes[_i]; var edge = connectedBy[node2.id()]; if (edge != null) { connectedEles.push(edge); } connectedEles.push(node2); } return { path: cy.collection(connectedEles), found: cy.collection(found) }; }, "searchFn"); }, "defineSearch"); elesfn$v = { breadthFirstSearch: defineSearch({ bfs: true }), depthFirstSearch: defineSearch({ dfs: true }) }; elesfn$v.bfs = elesfn$v.breadthFirstSearch; elesfn$v.dfs = elesfn$v.depthFirstSearch; heap$2 = { exports: {} }; heap$1 = heap$2.exports; __name(requireHeap$1, "requireHeap$1"); __name(requireHeap, "requireHeap"); heapExports = requireHeap(); Heap = /* @__PURE__ */ getDefaultExportFromCjs(heapExports); dijkstraDefaults = defaults$g({ root: null, weight: /* @__PURE__ */ __name(function weight(edge) { return 1; }, "weight"), directed: false }); elesfn$u = { dijkstra: /* @__PURE__ */ __name(function dijkstra2(options2) { if (!plainObject(options2)) { var args = arguments; options2 = { root: args[0], weight: args[1], directed: args[2] }; } var _dijkstraDefaults = dijkstraDefaults(options2), root3 = _dijkstraDefaults.root, weight8 = _dijkstraDefaults.weight, directed = _dijkstraDefaults.directed; var eles = this; var weightFn = weight8; var source = string(root3) ? this.filter(root3)[0] : root3[0]; var dist3 = {}; var prev2 = {}; var knownDist = {}; var _this$byGroup = this.byGroup(), nodes5 = _this$byGroup.nodes, edges3 = _this$byGroup.edges; edges3.unmergeBy(function(ele) { return ele.isLoop(); }); var getDist3 = /* @__PURE__ */ __name(function getDist4(node3) { return dist3[node3.id()]; }, "getDist"); var setDist = /* @__PURE__ */ __name(function setDist2(node3, d3) { dist3[node3.id()] = d3; Q3.updateItem(node3); }, "setDist"); var Q3 = new Heap(function(a2, b3) { return getDist3(a2) - getDist3(b3); }); for (var i2 = 0; i2 < nodes5.length; i2++) { var node2 = nodes5[i2]; dist3[node2.id()] = node2.same(source) ? 0 : Infinity; Q3.push(node2); } var distBetween = /* @__PURE__ */ __name(function distBetween2(u3, v5) { var uvs = (directed ? u3.edgesTo(v5) : u3.edgesWith(v5)).intersect(edges3); var smallestDistance = Infinity; var smallestEdge; for (var _i = 0; _i < uvs.length; _i++) { var edge = uvs[_i]; var _weight = weightFn(edge); if (_weight < smallestDistance || !smallestEdge) { smallestDistance = _weight; smallestEdge = edge; } } return { edge: smallestEdge, dist: smallestDistance }; }, "distBetween"); while (Q3.size() > 0) { var u2 = Q3.pop(); var smalletsDist = getDist3(u2); var uid = u2.id(); knownDist[uid] = smalletsDist; if (smalletsDist === Infinity) { continue; } var neighbors = u2.neighborhood().intersect(nodes5); for (var _i2 = 0; _i2 < neighbors.length; _i2++) { var v3 = neighbors[_i2]; var vid = v3.id(); var vDist = distBetween(u2, v3); var alt = smalletsDist + vDist.dist; if (alt < getDist3(v3)) { setDist(v3, alt); prev2[vid] = { node: u2, edge: vDist.edge }; } } } return { distanceTo: /* @__PURE__ */ __name(function distanceTo(node3) { var target = string(node3) ? nodes5.filter(node3)[0] : node3[0]; return knownDist[target.id()]; }, "distanceTo"), pathTo: /* @__PURE__ */ __name(function pathTo(node3) { var target = string(node3) ? nodes5.filter(node3)[0] : node3[0]; var S4 = []; var u3 = target; var uid2 = u3.id(); if (target.length > 0) { S4.unshift(target); while (prev2[uid2]) { var p3 = prev2[uid2]; S4.unshift(p3.edge); S4.unshift(p3.node); u3 = p3.node; uid2 = u3.id(); } } return eles.spawn(S4); }, "pathTo") }; }, "dijkstra") }; elesfn$t = { // kruskal's algorithm (finds min spanning tree, assuming undirected graph) // implemented from pseudocode from wikipedia kruskal: /* @__PURE__ */ __name(function kruskal(weightFn) { weightFn = weightFn || function(edge2) { return 1; }; var _this$byGroup = this.byGroup(), nodes5 = _this$byGroup.nodes, edges3 = _this$byGroup.edges; var numNodes = nodes5.length; var forest = new Array(numNodes); var A2 = nodes5; var findSetIndex = /* @__PURE__ */ __name(function findSetIndex2(ele) { for (var i3 = 0; i3 < forest.length; i3++) { var eles = forest[i3]; if (eles.has(ele)) { return i3; } } }, "findSetIndex"); for (var i2 = 0; i2 < numNodes; i2++) { forest[i2] = this.spawn(nodes5[i2]); } var S4 = edges3.sort(function(a2, b3) { return weightFn(a2) - weightFn(b3); }); for (var _i = 0; _i < S4.length; _i++) { var edge = S4[_i]; var u2 = edge.source()[0]; var v3 = edge.target()[0]; var setUIndex = findSetIndex(u2); var setVIndex = findSetIndex(v3); var setU = forest[setUIndex]; var setV = forest[setVIndex]; if (setUIndex !== setVIndex) { A2.merge(edge); setU.merge(setV); forest.splice(setVIndex, 1); } } return A2; }, "kruskal") }; aStarDefaults = defaults$g({ root: null, goal: null, weight: /* @__PURE__ */ __name(function weight2(edge) { return 1; }, "weight"), heuristic: /* @__PURE__ */ __name(function heuristic(edge) { return 0; }, "heuristic"), directed: false }); elesfn$s = { // Implemented from pseudocode from wikipedia aStar: /* @__PURE__ */ __name(function aStar(options2) { var cy = this.cy(); var _aStarDefaults = aStarDefaults(options2), root3 = _aStarDefaults.root, goal = _aStarDefaults.goal, heuristic2 = _aStarDefaults.heuristic, directed = _aStarDefaults.directed, weight8 = _aStarDefaults.weight; root3 = cy.collection(root3)[0]; goal = cy.collection(goal)[0]; var sid = root3.id(); var tid = goal.id(); var gScore = {}; var fScore = {}; var closedSetIds = {}; var openSet = new Heap(function(a2, b3) { return fScore[a2.id()] - fScore[b3.id()]; }); var openSetIds = new Set$1(); var cameFrom = {}; var cameFromEdge = {}; var addToOpenSet = /* @__PURE__ */ __name(function addToOpenSet2(ele, id30) { openSet.push(ele); openSetIds.add(id30); }, "addToOpenSet"); var cMin, cMinId; var popFromOpenSet = /* @__PURE__ */ __name(function popFromOpenSet2() { cMin = openSet.pop(); cMinId = cMin.id(); openSetIds["delete"](cMinId); }, "popFromOpenSet"); var isInOpenSet = /* @__PURE__ */ __name(function isInOpenSet2(id30) { return openSetIds.has(id30); }, "isInOpenSet"); addToOpenSet(root3, sid); gScore[sid] = 0; fScore[sid] = heuristic2(root3); var steps = 0; while (openSet.size() > 0) { popFromOpenSet(); steps++; if (cMinId === tid) { var path4 = []; var pathNode = goal; var pathNodeId = tid; var pathEdge = cameFromEdge[pathNodeId]; for (; ; ) { path4.unshift(pathNode); if (pathEdge != null) { path4.unshift(pathEdge); } pathNode = cameFrom[pathNodeId]; if (pathNode == null) { break; } pathNodeId = pathNode.id(); pathEdge = cameFromEdge[pathNodeId]; } return { found: true, distance: gScore[cMinId], path: this.spawn(path4), steps }; } closedSetIds[cMinId] = true; var vwEdges = cMin._private.edges; for (var i2 = 0; i2 < vwEdges.length; i2++) { var e3 = vwEdges[i2]; if (!this.hasElementWithId(e3.id())) { continue; } if (directed && e3.data("source") !== cMinId) { continue; } var wSrc = e3.source(); var wTgt = e3.target(); var w4 = wSrc.id() !== cMinId ? wSrc : wTgt; var wid = w4.id(); if (!this.hasElementWithId(wid)) { continue; } if (closedSetIds[wid]) { continue; } var tempScore = gScore[cMinId] + weight8(e3); if (!isInOpenSet(wid)) { gScore[wid] = tempScore; fScore[wid] = tempScore + heuristic2(w4); addToOpenSet(w4, wid); cameFrom[wid] = cMin; cameFromEdge[wid] = e3; continue; } if (tempScore < gScore[wid]) { gScore[wid] = tempScore; fScore[wid] = tempScore + heuristic2(w4); cameFrom[wid] = cMin; cameFromEdge[wid] = e3; } } } return { found: false, distance: void 0, path: void 0, steps }; }, "aStar") }; floydWarshallDefaults = defaults$g({ weight: /* @__PURE__ */ __name(function weight3(edge) { return 1; }, "weight"), directed: false }); elesfn$r = { // Implemented from pseudocode from wikipedia floydWarshall: /* @__PURE__ */ __name(function floydWarshall2(options2) { var cy = this.cy(); var _floydWarshallDefault = floydWarshallDefaults(options2), weight8 = _floydWarshallDefault.weight, directed = _floydWarshallDefault.directed; var weightFn = weight8; var _this$byGroup = this.byGroup(), nodes5 = _this$byGroup.nodes, edges3 = _this$byGroup.edges; var N3 = nodes5.length; var Nsq = N3 * N3; var indexOf2 = /* @__PURE__ */ __name(function indexOf3(node2) { return nodes5.indexOf(node2); }, "indexOf"); var atIndex = /* @__PURE__ */ __name(function atIndex2(i3) { return nodes5[i3]; }, "atIndex"); var dist3 = new Array(Nsq); for (var n2 = 0; n2 < Nsq; n2++) { var j3 = n2 % N3; var i2 = (n2 - j3) / N3; if (i2 === j3) { dist3[n2] = 0; } else { dist3[n2] = Infinity; } } var next3 = new Array(Nsq); var edgeNext = new Array(Nsq); for (var _i = 0; _i < edges3.length; _i++) { var edge = edges3[_i]; var src = edge.source()[0]; var tgt = edge.target()[0]; if (src === tgt) { continue; } var s2 = indexOf2(src); var t4 = indexOf2(tgt); var st2 = s2 * N3 + t4; var _weight = weightFn(edge); if (dist3[st2] > _weight) { dist3[st2] = _weight; next3[st2] = t4; edgeNext[st2] = edge; } if (!directed) { var ts = t4 * N3 + s2; if (!directed && dist3[ts] > _weight) { dist3[ts] = _weight; next3[ts] = s2; edgeNext[ts] = edge; } } } for (var k2 = 0; k2 < N3; k2++) { for (var _i2 = 0; _i2 < N3; _i2++) { var ik = _i2 * N3 + k2; for (var _j = 0; _j < N3; _j++) { var ij = _i2 * N3 + _j; var kj = k2 * N3 + _j; if (dist3[ik] + dist3[kj] < dist3[ij]) { dist3[ij] = dist3[ik] + dist3[kj]; next3[ij] = next3[ik]; } } } } var getArgEle = /* @__PURE__ */ __name(function getArgEle2(ele) { return (string(ele) ? cy.filter(ele) : ele)[0]; }, "getArgEle"); var indexOfArgEle = /* @__PURE__ */ __name(function indexOfArgEle2(ele) { return indexOf2(getArgEle(ele)); }, "indexOfArgEle"); var res = { distance: /* @__PURE__ */ __name(function distance2(from2, to) { var i3 = indexOfArgEle(from2); var j4 = indexOfArgEle(to); return dist3[i3 * N3 + j4]; }, "distance"), path: /* @__PURE__ */ __name(function path4(from2, to) { var i3 = indexOfArgEle(from2); var j4 = indexOfArgEle(to); var fromNode = atIndex(i3); if (i3 === j4) { return fromNode.collection(); } if (next3[i3 * N3 + j4] == null) { return cy.collection(); } var path5 = cy.collection(); var prev2 = i3; var edge2; path5.merge(fromNode); while (i3 !== j4) { prev2 = i3; i3 = next3[i3 * N3 + j4]; edge2 = edgeNext[prev2 * N3 + i3]; path5.merge(edge2); path5.merge(atIndex(i3)); } return path5; }, "path") }; return res; }, "floydWarshall") // floydWarshall }; bellmanFordDefaults = defaults$g({ weight: /* @__PURE__ */ __name(function weight4(edge) { return 1; }, "weight"), directed: false, root: null }); elesfn$q = { // Implemented from pseudocode from wikipedia bellmanFord: /* @__PURE__ */ __name(function bellmanFord(options2) { var _this = this; var _bellmanFordDefaults = bellmanFordDefaults(options2), weight8 = _bellmanFordDefaults.weight, directed = _bellmanFordDefaults.directed, root3 = _bellmanFordDefaults.root; var weightFn = weight8; var eles = this; var cy = this.cy(); var _this$byGroup = this.byGroup(), edges3 = _this$byGroup.edges, nodes5 = _this$byGroup.nodes; var numNodes = nodes5.length; var infoMap = new Map$1(); var hasNegativeWeightCycle = false; var negativeWeightCycles = []; root3 = cy.collection(root3)[0]; edges3.unmergeBy(function(edge2) { return edge2.isLoop(); }); var numEdges = edges3.length; var getInfo3 = /* @__PURE__ */ __name(function getInfo4(node3) { var obj = infoMap.get(node3.id()); if (!obj) { obj = {}; infoMap.set(node3.id(), obj); } return obj; }, "getInfo"); var getNodeFromTo = /* @__PURE__ */ __name(function getNodeFromTo2(to) { return (string(to) ? cy.$(to) : to)[0]; }, "getNodeFromTo"); var distanceTo = /* @__PURE__ */ __name(function distanceTo2(to) { return getInfo3(getNodeFromTo(to)).dist; }, "distanceTo"); var pathTo = /* @__PURE__ */ __name(function pathTo2(to) { var thisStart = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : root3; var end2 = getNodeFromTo(to); var path4 = []; var node3 = end2; for (; ; ) { if (node3 == null) { return _this.spawn(); } var _getInfo = getInfo3(node3), edge2 = _getInfo.edge, pred = _getInfo.pred; path4.unshift(node3[0]); if (node3.same(thisStart) && path4.length > 0) { break; } if (edge2 != null) { path4.unshift(edge2); } node3 = pred; } return eles.spawn(path4); }, "pathTo"); for (var i2 = 0; i2 < numNodes; i2++) { var node2 = nodes5[i2]; var info2 = getInfo3(node2); if (node2.same(root3)) { info2.dist = 0; } else { info2.dist = Infinity; } info2.pred = null; info2.edge = null; } var replacedEdge = false; var checkForEdgeReplacement = /* @__PURE__ */ __name(function checkForEdgeReplacement2(node1, node22, edge2, info1, info22, weight9) { var dist3 = info1.dist + weight9; if (dist3 < info22.dist && !edge2.same(info1.edge)) { info22.dist = dist3; info22.pred = node1; info22.edge = edge2; replacedEdge = true; } }, "checkForEdgeReplacement"); for (var _i = 1; _i < numNodes; _i++) { replacedEdge = false; for (var e3 = 0; e3 < numEdges; e3++) { var edge = edges3[e3]; var src = edge.source(); var tgt = edge.target(); var _weight = weightFn(edge); var srcInfo = getInfo3(src); var tgtInfo = getInfo3(tgt); checkForEdgeReplacement(src, tgt, edge, srcInfo, tgtInfo, _weight); if (!directed) { checkForEdgeReplacement(tgt, src, edge, tgtInfo, srcInfo, _weight); } } if (!replacedEdge) { break; } } if (replacedEdge) { var negativeWeightCycleIds = []; for (var _e2 = 0; _e2 < numEdges; _e2++) { var _edge = edges3[_e2]; var _src = _edge.source(); var _tgt = _edge.target(); var _weight2 = weightFn(_edge); var srcDist = getInfo3(_src).dist; var tgtDist = getInfo3(_tgt).dist; if (srcDist + _weight2 < tgtDist || !directed && tgtDist + _weight2 < srcDist) { if (!hasNegativeWeightCycle) { warn("Graph contains a negative weight cycle for Bellman-Ford"); hasNegativeWeightCycle = true; } if (options2.findNegativeWeightCycles !== false) { var negativeNodes = []; if (srcDist + _weight2 < tgtDist) { negativeNodes.push(_src); } if (!directed && tgtDist + _weight2 < srcDist) { negativeNodes.push(_tgt); } var numNegativeNodes = negativeNodes.length; for (var n2 = 0; n2 < numNegativeNodes; n2++) { var start3 = negativeNodes[n2]; var cycle = [start3]; cycle.push(getInfo3(start3).edge); var _node = getInfo3(start3).pred; while (cycle.indexOf(_node) === -1) { cycle.push(_node); cycle.push(getInfo3(_node).edge); _node = getInfo3(_node).pred; } cycle = cycle.slice(cycle.indexOf(_node)); var smallestId = cycle[0].id(); var smallestIndex = 0; for (var c3 = 2; c3 < cycle.length; c3 += 2) { if (cycle[c3].id() < smallestId) { smallestId = cycle[c3].id(); smallestIndex = c3; } } cycle = cycle.slice(smallestIndex).concat(cycle.slice(0, smallestIndex)); cycle.push(cycle[0]); var cycleId = cycle.map(function(el) { return el.id(); }).join(","); if (negativeWeightCycleIds.indexOf(cycleId) === -1) { negativeWeightCycles.push(eles.spawn(cycle)); negativeWeightCycleIds.push(cycleId); } } } else { break; } } } } return { distanceTo, pathTo, hasNegativeWeightCycle, negativeWeightCycles }; }, "bellmanFord") // bellmanFord }; sqrt2 = Math.sqrt(2); collapse = /* @__PURE__ */ __name(function collapse2(edgeIndex, nodeMap, remainingEdges) { if (remainingEdges.length === 0) { error("Karger-Stein must be run on a connected (sub)graph"); } var edgeInfo = remainingEdges[edgeIndex]; var sourceIn = edgeInfo[1]; var targetIn = edgeInfo[2]; var partition1 = nodeMap[sourceIn]; var partition2 = nodeMap[targetIn]; var newEdges = remainingEdges; for (var i2 = newEdges.length - 1; i2 >= 0; i2--) { var edge = newEdges[i2]; var src = edge[1]; var tgt = edge[2]; if (nodeMap[src] === partition1 && nodeMap[tgt] === partition2 || nodeMap[src] === partition2 && nodeMap[tgt] === partition1) { newEdges.splice(i2, 1); } } for (var _i = 0; _i < newEdges.length; _i++) { var _edge = newEdges[_i]; if (_edge[1] === partition2) { newEdges[_i] = _edge.slice(); newEdges[_i][1] = partition1; } else if (_edge[2] === partition2) { newEdges[_i] = _edge.slice(); newEdges[_i][2] = partition1; } } for (var _i2 = 0; _i2 < nodeMap.length; _i2++) { if (nodeMap[_i2] === partition2) { nodeMap[_i2] = partition1; } } return newEdges; }, "collapse"); contractUntil = /* @__PURE__ */ __name(function contractUntil2(metaNodeMap, remainingEdges, size4, sizeLimit) { while (size4 > sizeLimit) { var edgeIndex = Math.floor(Math.random() * remainingEdges.length); remainingEdges = collapse(edgeIndex, metaNodeMap, remainingEdges); size4--; } return remainingEdges; }, "contractUntil"); elesfn$p = { // Computes the minimum cut of an undirected graph // Returns the correct answer with high probability kargerStein: /* @__PURE__ */ __name(function kargerStein() { var _this = this; var _this$byGroup = this.byGroup(), nodes5 = _this$byGroup.nodes, edges3 = _this$byGroup.edges; edges3.unmergeBy(function(edge) { return edge.isLoop(); }); var numNodes = nodes5.length; var numEdges = edges3.length; var numIter = Math.ceil(Math.pow(Math.log(numNodes) / Math.LN2, 2)); var stopSize = Math.floor(numNodes / sqrt2); if (numNodes < 2) { error("At least 2 nodes are required for Karger-Stein algorithm"); return void 0; } var edgeIndexes = []; for (var i2 = 0; i2 < numEdges; i2++) { var e3 = edges3[i2]; edgeIndexes.push([i2, nodes5.indexOf(e3.source()), nodes5.indexOf(e3.target())]); } var minCutSize = Infinity; var minCutEdgeIndexes = []; var minCutNodeMap = new Array(numNodes); var metaNodeMap = new Array(numNodes); var metaNodeMap2 = new Array(numNodes); var copyNodesMap = /* @__PURE__ */ __name(function copyNodesMap2(from2, to) { for (var _i3 = 0; _i3 < numNodes; _i3++) { to[_i3] = from2[_i3]; } }, "copyNodesMap"); for (var iter = 0; iter <= numIter; iter++) { for (var _i4 = 0; _i4 < numNodes; _i4++) { metaNodeMap[_i4] = _i4; } var edgesState = contractUntil(metaNodeMap, edgeIndexes.slice(), numNodes, stopSize); var edgesState2 = edgesState.slice(); copyNodesMap(metaNodeMap, metaNodeMap2); var res1 = contractUntil(metaNodeMap, edgesState, stopSize, 2); var res2 = contractUntil(metaNodeMap2, edgesState2, stopSize, 2); if (res1.length <= res2.length && res1.length < minCutSize) { minCutSize = res1.length; minCutEdgeIndexes = res1; copyNodesMap(metaNodeMap, minCutNodeMap); } else if (res2.length <= res1.length && res2.length < minCutSize) { minCutSize = res2.length; minCutEdgeIndexes = res2; copyNodesMap(metaNodeMap2, minCutNodeMap); } } var cut = this.spawn(minCutEdgeIndexes.map(function(e4) { return edges3[e4[0]]; })); var partition1 = this.spawn(); var partition2 = this.spawn(); var witnessNodePartition = minCutNodeMap[0]; for (var _i5 = 0; _i5 < minCutNodeMap.length; _i5++) { var partitionId = minCutNodeMap[_i5]; var node2 = nodes5[_i5]; if (partitionId === witnessNodePartition) { partition1.merge(node2); } else { partition2.merge(node2); } } var constructComponent = /* @__PURE__ */ __name(function constructComponent2(subset) { var component2 = _this.spawn(); subset.forEach(function(node3) { component2.merge(node3); node3.connectedEdges().forEach(function(edge) { if (_this.contains(edge) && !cut.contains(edge)) { component2.merge(edge); } }); }); return component2; }, "constructComponent"); var components3 = [constructComponent(partition1), constructComponent(partition2)]; var ret = { cut, components: components3, // n.b. partitions are included to be compatible with the old api spec // (could be removed in a future major version) partition1, partition2 }; return ret; }, "kargerStein") }; copyPosition = /* @__PURE__ */ __name(function copyPosition2(p3) { return { x: p3.x, y: p3.y }; }, "copyPosition"); modelToRenderedPosition$1 = /* @__PURE__ */ __name(function modelToRenderedPosition(p3, zoom2, pan2) { return { x: p3.x * zoom2 + pan2.x, y: p3.y * zoom2 + pan2.y }; }, "modelToRenderedPosition"); renderedToModelPosition = /* @__PURE__ */ __name(function renderedToModelPosition2(p3, zoom2, pan2) { return { x: (p3.x - pan2.x) / zoom2, y: (p3.y - pan2.y) / zoom2 }; }, "renderedToModelPosition"); array2point = /* @__PURE__ */ __name(function array2point2(arr) { return { x: arr[0], y: arr[1] }; }, "array2point"); min5 = /* @__PURE__ */ __name(function min6(arr) { var begin = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0; var end2 = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : arr.length; var min9 = Infinity; for (var i2 = begin; i2 < end2; i2++) { var val = arr[i2]; if (isFinite(val)) { min9 = Math.min(val, min9); } } return min9; }, "min"); max5 = /* @__PURE__ */ __name(function max6(arr) { var begin = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0; var end2 = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : arr.length; var max10 = -Infinity; for (var i2 = begin; i2 < end2; i2++) { var val = arr[i2]; if (isFinite(val)) { max10 = Math.max(val, max10); } } return max10; }, "max"); mean = /* @__PURE__ */ __name(function mean2(arr) { var begin = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0; var end2 = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : arr.length; var total = 0; var n2 = 0; for (var i2 = begin; i2 < end2; i2++) { var val = arr[i2]; if (isFinite(val)) { total += val; n2++; } } return total / n2; }, "mean"); median = /* @__PURE__ */ __name(function median2(arr) { var begin = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0; var end2 = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : arr.length; var copy5 = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : true; var sort3 = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : true; var includeHoles = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : true; if (copy5) { arr = arr.slice(begin, end2); } else { if (end2 < arr.length) { arr.splice(end2, arr.length - end2); } if (begin > 0) { arr.splice(0, begin); } } var off = 0; for (var i2 = arr.length - 1; i2 >= 0; i2--) { var v3 = arr[i2]; if (includeHoles) { if (!isFinite(v3)) { arr[i2] = -Infinity; off++; } } else { arr.splice(i2, 1); } } if (sort3) { arr.sort(function(a2, b3) { return a2 - b3; }); } var len = arr.length; var mid = Math.floor(len / 2); if (len % 2 !== 0) { return arr[mid + 1 + off]; } else { return (arr[mid - 1 + off] + arr[mid + off]) / 2; } }, "median"); deg2rad = /* @__PURE__ */ __name(function deg2rad2(deg) { return Math.PI * deg / 180; }, "deg2rad"); getAngleFromDisp = /* @__PURE__ */ __name(function getAngleFromDisp2(dispX, dispY) { return Math.atan2(dispY, dispX) - Math.PI / 2; }, "getAngleFromDisp"); log22 = Math.log2 || function(n2) { return Math.log(n2) / Math.log(2); }; signum = /* @__PURE__ */ __name(function signum2(x5) { if (x5 > 0) { return 1; } else if (x5 < 0) { return -1; } else { return 0; } }, "signum"); dist = /* @__PURE__ */ __name(function dist2(p1, p22) { return Math.sqrt(sqdist(p1, p22)); }, "dist"); sqdist = /* @__PURE__ */ __name(function sqdist2(p1, p22) { var dx = p22.x - p1.x; var dy = p22.y - p1.y; return dx * dx + dy * dy; }, "sqdist"); inPlaceSumNormalize = /* @__PURE__ */ __name(function inPlaceSumNormalize2(v3) { var length2 = v3.length; var total = 0; for (var i2 = 0; i2 < length2; i2++) { total += v3[i2]; } for (var _i = 0; _i < length2; _i++) { v3[_i] = v3[_i] / total; } return v3; }, "inPlaceSumNormalize"); qbezierAt = /* @__PURE__ */ __name(function qbezierAt2(p0, p1, p22, t4) { return (1 - t4) * (1 - t4) * p0 + 2 * (1 - t4) * t4 * p1 + t4 * t4 * p22; }, "qbezierAt"); qbezierPtAt = /* @__PURE__ */ __name(function qbezierPtAt2(p0, p1, p22, t4) { return { x: qbezierAt(p0.x, p1.x, p22.x, t4), y: qbezierAt(p0.y, p1.y, p22.y, t4) }; }, "qbezierPtAt"); lineAt = /* @__PURE__ */ __name(function lineAt2(p0, p1, t4, d3) { var vec = { x: p1.x - p0.x, y: p1.y - p0.y }; var vecDist = dist(p0, p1); var normVec = { x: vec.x / vecDist, y: vec.y / vecDist }; t4 = t4 == null ? 0 : t4; d3 = d3 != null ? d3 : t4 * vecDist; return { x: p0.x + normVec.x * d3, y: p0.y + normVec.y * d3 }; }, "lineAt"); bound = /* @__PURE__ */ __name(function bound2(min9, val, max10) { return Math.max(min9, Math.min(max10, val)); }, "bound"); makeBoundingBox = /* @__PURE__ */ __name(function makeBoundingBox2(bb) { if (bb == null) { return { x1: Infinity, y1: Infinity, x2: -Infinity, y2: -Infinity, w: 0, h: 0 }; } else if (bb.x1 != null && bb.y1 != null) { if (bb.x2 != null && bb.y2 != null && bb.x2 >= bb.x1 && bb.y2 >= bb.y1) { return { x1: bb.x1, y1: bb.y1, x2: bb.x2, y2: bb.y2, w: bb.x2 - bb.x1, h: bb.y2 - bb.y1 }; } else if (bb.w != null && bb.h != null && bb.w >= 0 && bb.h >= 0) { return { x1: bb.x1, y1: bb.y1, x2: bb.x1 + bb.w, y2: bb.y1 + bb.h, w: bb.w, h: bb.h }; } } }, "makeBoundingBox"); copyBoundingBox = /* @__PURE__ */ __name(function copyBoundingBox2(bb) { return { x1: bb.x1, x2: bb.x2, w: bb.w, y1: bb.y1, y2: bb.y2, h: bb.h }; }, "copyBoundingBox"); clearBoundingBox = /* @__PURE__ */ __name(function clearBoundingBox2(bb) { bb.x1 = Infinity; bb.y1 = Infinity; bb.x2 = -Infinity; bb.y2 = -Infinity; bb.w = 0; bb.h = 0; }, "clearBoundingBox"); updateBoundingBox = /* @__PURE__ */ __name(function updateBoundingBox2(bb1, bb2) { bb1.x1 = Math.min(bb1.x1, bb2.x1); bb1.x2 = Math.max(bb1.x2, bb2.x2); bb1.w = bb1.x2 - bb1.x1; bb1.y1 = Math.min(bb1.y1, bb2.y1); bb1.y2 = Math.max(bb1.y2, bb2.y2); bb1.h = bb1.y2 - bb1.y1; }, "updateBoundingBox"); expandBoundingBoxByPoint = /* @__PURE__ */ __name(function expandBoundingBoxByPoint2(bb, x5, y6) { bb.x1 = Math.min(bb.x1, x5); bb.x2 = Math.max(bb.x2, x5); bb.w = bb.x2 - bb.x1; bb.y1 = Math.min(bb.y1, y6); bb.y2 = Math.max(bb.y2, y6); bb.h = bb.y2 - bb.y1; }, "expandBoundingBoxByPoint"); expandBoundingBox = /* @__PURE__ */ __name(function expandBoundingBox2(bb) { var padding2 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0; bb.x1 -= padding2; bb.x2 += padding2; bb.y1 -= padding2; bb.y2 += padding2; bb.w = bb.x2 - bb.x1; bb.h = bb.y2 - bb.y1; return bb; }, "expandBoundingBox"); expandBoundingBoxSides = /* @__PURE__ */ __name(function expandBoundingBoxSides2(bb) { var padding2 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [0]; var top2, right3, bottom2, left3; if (padding2.length === 1) { top2 = right3 = bottom2 = left3 = padding2[0]; } else if (padding2.length === 2) { top2 = bottom2 = padding2[0]; left3 = right3 = padding2[1]; } else if (padding2.length === 4) { var _padding = _slicedToArray(padding2, 4); top2 = _padding[0]; right3 = _padding[1]; bottom2 = _padding[2]; left3 = _padding[3]; } bb.x1 -= left3; bb.x2 += right3; bb.y1 -= top2; bb.y2 += bottom2; bb.w = bb.x2 - bb.x1; bb.h = bb.y2 - bb.y1; return bb; }, "expandBoundingBoxSides"); assignBoundingBox = /* @__PURE__ */ __name(function assignBoundingBox2(bb1, bb2) { bb1.x1 = bb2.x1; bb1.y1 = bb2.y1; bb1.x2 = bb2.x2; bb1.y2 = bb2.y2; bb1.w = bb1.x2 - bb1.x1; bb1.h = bb1.y2 - bb1.y1; }, "assignBoundingBox"); boundingBoxesIntersect = /* @__PURE__ */ __name(function boundingBoxesIntersect2(bb1, bb2) { if (bb1.x1 > bb2.x2) { return false; } if (bb2.x1 > bb1.x2) { return false; } if (bb1.x2 < bb2.x1) { return false; } if (bb2.x2 < bb1.x1) { return false; } if (bb1.y2 < bb2.y1) { return false; } if (bb2.y2 < bb1.y1) { return false; } if (bb1.y1 > bb2.y2) { return false; } if (bb2.y1 > bb1.y2) { return false; } return true; }, "boundingBoxesIntersect"); inBoundingBox = /* @__PURE__ */ __name(function inBoundingBox2(bb, x5, y6) { return bb.x1 <= x5 && x5 <= bb.x2 && bb.y1 <= y6 && y6 <= bb.y2; }, "inBoundingBox"); pointInBoundingBox = /* @__PURE__ */ __name(function pointInBoundingBox2(bb, pt) { return inBoundingBox(bb, pt.x, pt.y); }, "pointInBoundingBox"); boundingBoxInBoundingBox = /* @__PURE__ */ __name(function boundingBoxInBoundingBox2(bb1, bb2) { return inBoundingBox(bb1, bb2.x1, bb2.y1) && inBoundingBox(bb1, bb2.x2, bb2.y2); }, "boundingBoxInBoundingBox"); hypot = (_Math$hypot = Math.hypot) !== null && _Math$hypot !== void 0 ? _Math$hypot : function(x5, y6) { return Math.sqrt(x5 * x5 + y6 * y6); }; __name(inflatePolygon, "inflatePolygon"); __name(miterBox, "miterBox"); roundRectangleIntersectLine = /* @__PURE__ */ __name(function roundRectangleIntersectLine2(x5, y6, nodeX, nodeY, width3, height2, padding2) { var radius2 = arguments.length > 7 && arguments[7] !== void 0 ? arguments[7] : "auto"; var cornerRadius = radius2 === "auto" ? getRoundRectangleRadius(width3, height2) : radius2; var halfWidth = width3 / 2; var halfHeight = height2 / 2; cornerRadius = Math.min(cornerRadius, halfWidth, halfHeight); var doWidth = cornerRadius !== halfWidth, doHeight = cornerRadius !== halfHeight; var straightLineIntersections; if (doWidth) { var topStartX = nodeX - halfWidth + cornerRadius - padding2; var topStartY = nodeY - halfHeight - padding2; var topEndX = nodeX + halfWidth - cornerRadius + padding2; var topEndY = topStartY; straightLineIntersections = finiteLinesIntersect(x5, y6, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false); if (straightLineIntersections.length > 0) { return straightLineIntersections; } } if (doHeight) { var rightStartX = nodeX + halfWidth + padding2; var rightStartY = nodeY - halfHeight + cornerRadius - padding2; var rightEndX = rightStartX; var rightEndY = nodeY + halfHeight - cornerRadius + padding2; straightLineIntersections = finiteLinesIntersect(x5, y6, nodeX, nodeY, rightStartX, rightStartY, rightEndX, rightEndY, false); if (straightLineIntersections.length > 0) { return straightLineIntersections; } } if (doWidth) { var bottomStartX = nodeX - halfWidth + cornerRadius - padding2; var bottomStartY = nodeY + halfHeight + padding2; var bottomEndX = nodeX + halfWidth - cornerRadius + padding2; var bottomEndY = bottomStartY; straightLineIntersections = finiteLinesIntersect(x5, y6, nodeX, nodeY, bottomStartX, bottomStartY, bottomEndX, bottomEndY, false); if (straightLineIntersections.length > 0) { return straightLineIntersections; } } if (doHeight) { var leftStartX = nodeX - halfWidth - padding2; var leftStartY = nodeY - halfHeight + cornerRadius - padding2; var leftEndX = leftStartX; var leftEndY = nodeY + halfHeight - cornerRadius + padding2; straightLineIntersections = finiteLinesIntersect(x5, y6, nodeX, nodeY, leftStartX, leftStartY, leftEndX, leftEndY, false); if (straightLineIntersections.length > 0) { return straightLineIntersections; } } var arcIntersections; { var topLeftCenterX = nodeX - halfWidth + cornerRadius; var topLeftCenterY = nodeY - halfHeight + cornerRadius; arcIntersections = intersectLineCircle(x5, y6, nodeX, nodeY, topLeftCenterX, topLeftCenterY, cornerRadius + padding2); if (arcIntersections.length > 0 && arcIntersections[0] <= topLeftCenterX && arcIntersections[1] <= topLeftCenterY) { return [arcIntersections[0], arcIntersections[1]]; } } { var topRightCenterX = nodeX + halfWidth - cornerRadius; var topRightCenterY = nodeY - halfHeight + cornerRadius; arcIntersections = intersectLineCircle(x5, y6, nodeX, nodeY, topRightCenterX, topRightCenterY, cornerRadius + padding2); if (arcIntersections.length > 0 && arcIntersections[0] >= topRightCenterX && arcIntersections[1] <= topRightCenterY) { return [arcIntersections[0], arcIntersections[1]]; } } { var bottomRightCenterX = nodeX + halfWidth - cornerRadius; var bottomRightCenterY = nodeY + halfHeight - cornerRadius; arcIntersections = intersectLineCircle(x5, y6, nodeX, nodeY, bottomRightCenterX, bottomRightCenterY, cornerRadius + padding2); if (arcIntersections.length > 0 && arcIntersections[0] >= bottomRightCenterX && arcIntersections[1] >= bottomRightCenterY) { return [arcIntersections[0], arcIntersections[1]]; } } { var bottomLeftCenterX = nodeX - halfWidth + cornerRadius; var bottomLeftCenterY = nodeY + halfHeight - cornerRadius; arcIntersections = intersectLineCircle(x5, y6, nodeX, nodeY, bottomLeftCenterX, bottomLeftCenterY, cornerRadius + padding2); if (arcIntersections.length > 0 && arcIntersections[0] <= bottomLeftCenterX && arcIntersections[1] >= bottomLeftCenterY) { return [arcIntersections[0], arcIntersections[1]]; } } return []; }, "roundRectangleIntersectLine"); inLineVicinity = /* @__PURE__ */ __name(function inLineVicinity2(x5, y6, lx1, ly1, lx2, ly2, tolerance) { var t4 = tolerance; var x1 = Math.min(lx1, lx2); var x22 = Math.max(lx1, lx2); var y1 = Math.min(ly1, ly2); var y22 = Math.max(ly1, ly2); return x1 - t4 <= x5 && x5 <= x22 + t4 && y1 - t4 <= y6 && y6 <= y22 + t4; }, "inLineVicinity"); inBezierVicinity = /* @__PURE__ */ __name(function inBezierVicinity2(x5, y6, x1, y1, x22, y22, x32, y32, tolerance) { var bb = { x1: Math.min(x1, x32, x22) - tolerance, x2: Math.max(x1, x32, x22) + tolerance, y1: Math.min(y1, y32, y22) - tolerance, y2: Math.max(y1, y32, y22) + tolerance }; if (x5 < bb.x1 || x5 > bb.x2 || y6 < bb.y1 || y6 > bb.y2) { return false; } else { return true; } }, "inBezierVicinity"); solveQuadratic = /* @__PURE__ */ __name(function solveQuadratic2(a2, b3, c3, val) { c3 -= val; var r2 = b3 * b3 - 4 * a2 * c3; if (r2 < 0) { return []; } var sqrtR = Math.sqrt(r2); var denom = 2 * a2; var root1 = (-b3 + sqrtR) / denom; var root22 = (-b3 - sqrtR) / denom; return [root1, root22]; }, "solveQuadratic"); solveCubic = /* @__PURE__ */ __name(function solveCubic2(a2, b3, c3, d3, result) { var epsilon6 = 1e-5; if (a2 === 0) { a2 = epsilon6; } b3 /= a2; c3 /= a2; d3 /= a2; var discriminant, q3, r2, dum1, s2, t4, term1, r13; q3 = (3 * c3 - b3 * b3) / 9; r2 = -(27 * d3) + b3 * (9 * c3 - 2 * (b3 * b3)); r2 /= 54; discriminant = q3 * q3 * q3 + r2 * r2; result[1] = 0; term1 = b3 / 3; if (discriminant > 0) { s2 = r2 + Math.sqrt(discriminant); s2 = s2 < 0 ? -Math.pow(-s2, 1 / 3) : Math.pow(s2, 1 / 3); t4 = r2 - Math.sqrt(discriminant); t4 = t4 < 0 ? -Math.pow(-t4, 1 / 3) : Math.pow(t4, 1 / 3); result[0] = -term1 + s2 + t4; term1 += (s2 + t4) / 2; result[4] = result[2] = -term1; term1 = Math.sqrt(3) * (-t4 + s2) / 2; result[3] = term1; result[5] = -term1; return; } result[5] = result[3] = 0; if (discriminant === 0) { r13 = r2 < 0 ? -Math.pow(-r2, 1 / 3) : Math.pow(r2, 1 / 3); result[0] = -term1 + 2 * r13; result[4] = result[2] = -(r13 + term1); return; } q3 = -q3; dum1 = q3 * q3 * q3; dum1 = Math.acos(r2 / Math.sqrt(dum1)); r13 = 2 * Math.sqrt(q3); result[0] = -term1 + r13 * Math.cos(dum1 / 3); result[2] = -term1 + r13 * Math.cos((dum1 + 2 * Math.PI) / 3); result[4] = -term1 + r13 * Math.cos((dum1 + 4 * Math.PI) / 3); return; }, "solveCubic"); sqdistToQuadraticBezier = /* @__PURE__ */ __name(function sqdistToQuadraticBezier2(x5, y6, x1, y1, x22, y22, x32, y32) { var a2 = 1 * x1 * x1 - 4 * x1 * x22 + 2 * x1 * x32 + 4 * x22 * x22 - 4 * x22 * x32 + x32 * x32 + y1 * y1 - 4 * y1 * y22 + 2 * y1 * y32 + 4 * y22 * y22 - 4 * y22 * y32 + y32 * y32; var b3 = 1 * 9 * x1 * x22 - 3 * x1 * x1 - 3 * x1 * x32 - 6 * x22 * x22 + 3 * x22 * x32 + 9 * y1 * y22 - 3 * y1 * y1 - 3 * y1 * y32 - 6 * y22 * y22 + 3 * y22 * y32; var c3 = 1 * 3 * x1 * x1 - 6 * x1 * x22 + x1 * x32 - x1 * x5 + 2 * x22 * x22 + 2 * x22 * x5 - x32 * x5 + 3 * y1 * y1 - 6 * y1 * y22 + y1 * y32 - y1 * y6 + 2 * y22 * y22 + 2 * y22 * y6 - y32 * y6; var d3 = 1 * x1 * x22 - x1 * x1 + x1 * x5 - x22 * x5 + y1 * y22 - y1 * y1 + y1 * y6 - y22 * y6; var roots = []; solveCubic(a2, b3, c3, d3, roots); var zeroThreshold = 1e-7; var params = []; for (var index = 0; index < 6; index += 2) { if (Math.abs(roots[index + 1]) < zeroThreshold && roots[index] >= 0 && roots[index] <= 1) { params.push(roots[index]); } } params.push(1); params.push(0); var minDistanceSquared = -1; var curX, curY, distSquared; for (var i2 = 0; i2 < params.length; i2++) { curX = Math.pow(1 - params[i2], 2) * x1 + 2 * (1 - params[i2]) * params[i2] * x22 + params[i2] * params[i2] * x32; curY = Math.pow(1 - params[i2], 2) * y1 + 2 * (1 - params[i2]) * params[i2] * y22 + params[i2] * params[i2] * y32; distSquared = Math.pow(curX - x5, 2) + Math.pow(curY - y6, 2); if (minDistanceSquared >= 0) { if (distSquared < minDistanceSquared) { minDistanceSquared = distSquared; } } else { minDistanceSquared = distSquared; } } return minDistanceSquared; }, "sqdistToQuadraticBezier"); sqdistToFiniteLine = /* @__PURE__ */ __name(function sqdistToFiniteLine2(x5, y6, x1, y1, x22, y22) { var offset = [x5 - x1, y6 - y1]; var line2 = [x22 - x1, y22 - y1]; var lineSq = line2[0] * line2[0] + line2[1] * line2[1]; var hypSq = offset[0] * offset[0] + offset[1] * offset[1]; var dotProduct = offset[0] * line2[0] + offset[1] * line2[1]; var adjSq = dotProduct * dotProduct / lineSq; if (dotProduct < 0) { return hypSq; } if (adjSq > lineSq) { return (x5 - x22) * (x5 - x22) + (y6 - y22) * (y6 - y22); } return hypSq - adjSq; }, "sqdistToFiniteLine"); pointInsidePolygonPoints = /* @__PURE__ */ __name(function pointInsidePolygonPoints2(x5, y6, points) { var x1, y1, x22, y22; var y32; var up = 0; for (var i2 = 0; i2 < points.length / 2; i2++) { x1 = points[i2 * 2]; y1 = points[i2 * 2 + 1]; if (i2 + 1 < points.length / 2) { x22 = points[(i2 + 1) * 2]; y22 = points[(i2 + 1) * 2 + 1]; } else { x22 = points[(i2 + 1 - points.length / 2) * 2]; y22 = points[(i2 + 1 - points.length / 2) * 2 + 1]; } if (x1 == x5 && x22 == x5) ; else if (x1 >= x5 && x5 >= x22 || x1 <= x5 && x5 <= x22) { y32 = (x5 - x1) / (x22 - x1) * (y22 - y1) + y1; if (y32 > y6) { up++; } } else { continue; } } if (up % 2 === 0) { return false; } else { return true; } }, "pointInsidePolygonPoints"); pointInsidePolygon = /* @__PURE__ */ __name(function pointInsidePolygon2(x5, y6, basePoints, centerX, centerY, width3, height2, direction, padding2) { var transformedPoints = new Array(basePoints.length); var angle2; if (direction[0] != null) { angle2 = Math.atan(direction[1] / direction[0]); if (direction[0] < 0) { angle2 = angle2 + Math.PI / 2; } else { angle2 = -angle2 - Math.PI / 2; } } else { angle2 = direction; } var cos3 = Math.cos(-angle2); var sin3 = Math.sin(-angle2); for (var i2 = 0; i2 < transformedPoints.length / 2; i2++) { transformedPoints[i2 * 2] = width3 / 2 * (basePoints[i2 * 2] * cos3 - basePoints[i2 * 2 + 1] * sin3); transformedPoints[i2 * 2 + 1] = height2 / 2 * (basePoints[i2 * 2 + 1] * cos3 + basePoints[i2 * 2] * sin3); transformedPoints[i2 * 2] += centerX; transformedPoints[i2 * 2 + 1] += centerY; } var points; if (padding2 > 0) { var expandedLineSet = expandPolygon(transformedPoints, -padding2); points = joinLines(expandedLineSet); } else { points = transformedPoints; } return pointInsidePolygonPoints(x5, y6, points); }, "pointInsidePolygon"); pointInsideRoundPolygon = /* @__PURE__ */ __name(function pointInsideRoundPolygon2(x5, y6, basePoints, centerX, centerY, width3, height2, corners) { var cutPolygonPoints = new Array(basePoints.length * 2); for (var i2 = 0; i2 < corners.length; i2++) { var corner = corners[i2]; cutPolygonPoints[i2 * 4 + 0] = corner.startX; cutPolygonPoints[i2 * 4 + 1] = corner.startY; cutPolygonPoints[i2 * 4 + 2] = corner.stopX; cutPolygonPoints[i2 * 4 + 3] = corner.stopY; var squaredDistance = Math.pow(corner.cx - x5, 2) + Math.pow(corner.cy - y6, 2); if (squaredDistance <= Math.pow(corner.radius, 2)) { return true; } } return pointInsidePolygonPoints(x5, y6, cutPolygonPoints); }, "pointInsideRoundPolygon"); joinLines = /* @__PURE__ */ __name(function joinLines2(lineSet) { var vertices = new Array(lineSet.length / 2); var currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY; var nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY; for (var i2 = 0; i2 < lineSet.length / 4; i2++) { currentLineStartX = lineSet[i2 * 4]; currentLineStartY = lineSet[i2 * 4 + 1]; currentLineEndX = lineSet[i2 * 4 + 2]; currentLineEndY = lineSet[i2 * 4 + 3]; if (i2 < lineSet.length / 4 - 1) { nextLineStartX = lineSet[(i2 + 1) * 4]; nextLineStartY = lineSet[(i2 + 1) * 4 + 1]; nextLineEndX = lineSet[(i2 + 1) * 4 + 2]; nextLineEndY = lineSet[(i2 + 1) * 4 + 3]; } else { nextLineStartX = lineSet[0]; nextLineStartY = lineSet[1]; nextLineEndX = lineSet[2]; nextLineEndY = lineSet[3]; } var intersection4 = finiteLinesIntersect(currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY, nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY, true); vertices[i2 * 2] = intersection4[0]; vertices[i2 * 2 + 1] = intersection4[1]; } return vertices; }, "joinLines"); expandPolygon = /* @__PURE__ */ __name(function expandPolygon2(points, pad3) { var expandedLineSet = new Array(points.length * 2); var currentPointX, currentPointY, nextPointX, nextPointY; for (var i2 = 0; i2 < points.length / 2; i2++) { currentPointX = points[i2 * 2]; currentPointY = points[i2 * 2 + 1]; if (i2 < points.length / 2 - 1) { nextPointX = points[(i2 + 1) * 2]; nextPointY = points[(i2 + 1) * 2 + 1]; } else { nextPointX = points[0]; nextPointY = points[1]; } var offsetX = nextPointY - currentPointY; var offsetY = -(nextPointX - currentPointX); var offsetLength = Math.sqrt(offsetX * offsetX + offsetY * offsetY); var normalizedOffsetX = offsetX / offsetLength; var normalizedOffsetY = offsetY / offsetLength; expandedLineSet[i2 * 4] = currentPointX + normalizedOffsetX * pad3; expandedLineSet[i2 * 4 + 1] = currentPointY + normalizedOffsetY * pad3; expandedLineSet[i2 * 4 + 2] = nextPointX + normalizedOffsetX * pad3; expandedLineSet[i2 * 4 + 3] = nextPointY + normalizedOffsetY * pad3; } return expandedLineSet; }, "expandPolygon"); intersectLineEllipse = /* @__PURE__ */ __name(function intersectLineEllipse2(x5, y6, centerX, centerY, ellipseWradius, ellipseHradius) { var dispX = centerX - x5; var dispY = centerY - y6; dispX /= ellipseWradius; dispY /= ellipseHradius; var len = Math.sqrt(dispX * dispX + dispY * dispY); var newLength = len - 1; if (newLength < 0) { return []; } var lenProportion = newLength / len; return [(centerX - x5) * lenProportion + x5, (centerY - y6) * lenProportion + y6]; }, "intersectLineEllipse"); checkInEllipse = /* @__PURE__ */ __name(function checkInEllipse2(x5, y6, width3, height2, centerX, centerY, padding2) { x5 -= centerX; y6 -= centerY; x5 /= width3 / 2 + padding2; y6 /= height2 / 2 + padding2; return x5 * x5 + y6 * y6 <= 1; }, "checkInEllipse"); intersectLineCircle = /* @__PURE__ */ __name(function intersectLineCircle2(x1, y1, x22, y22, centerX, centerY, radius2) { var d3 = [x22 - x1, y22 - y1]; var f2 = [x1 - centerX, y1 - centerY]; var a2 = d3[0] * d3[0] + d3[1] * d3[1]; var b3 = 2 * (f2[0] * d3[0] + f2[1] * d3[1]); var c3 = f2[0] * f2[0] + f2[1] * f2[1] - radius2 * radius2; var discriminant = b3 * b3 - 4 * a2 * c3; if (discriminant < 0) { return []; } var t13 = (-b3 + Math.sqrt(discriminant)) / (2 * a2); var t22 = (-b3 - Math.sqrt(discriminant)) / (2 * a2); var tMin = Math.min(t13, t22); var tMax = Math.max(t13, t22); var inRangeParams = []; if (tMin >= 0 && tMin <= 1) { inRangeParams.push(tMin); } if (tMax >= 0 && tMax <= 1) { inRangeParams.push(tMax); } if (inRangeParams.length === 0) { return []; } var nearIntersectionX = inRangeParams[0] * d3[0] + x1; var nearIntersectionY = inRangeParams[0] * d3[1] + y1; if (inRangeParams.length > 1) { if (inRangeParams[0] == inRangeParams[1]) { return [nearIntersectionX, nearIntersectionY]; } else { var farIntersectionX = inRangeParams[1] * d3[0] + x1; var farIntersectionY = inRangeParams[1] * d3[1] + y1; return [nearIntersectionX, nearIntersectionY, farIntersectionX, farIntersectionY]; } } else { return [nearIntersectionX, nearIntersectionY]; } }, "intersectLineCircle"); midOfThree = /* @__PURE__ */ __name(function midOfThree2(a2, b3, c3) { if (b3 <= a2 && a2 <= c3 || c3 <= a2 && a2 <= b3) { return a2; } else if (a2 <= b3 && b3 <= c3 || c3 <= b3 && b3 <= a2) { return b3; } else { return c3; } }, "midOfThree"); finiteLinesIntersect = /* @__PURE__ */ __name(function finiteLinesIntersect2(x1, y1, x22, y22, x32, y32, x42, y42, infiniteLines) { var dx13 = x1 - x32; var dx21 = x22 - x1; var dx43 = x42 - x32; var dy13 = y1 - y32; var dy21 = y22 - y1; var dy43 = y42 - y32; var ua_t = dx43 * dy13 - dy43 * dx13; var ub_t = dx21 * dy13 - dy21 * dx13; var u_b = dy43 * dx21 - dx43 * dy21; if (u_b !== 0) { var ua = ua_t / u_b; var ub = ub_t / u_b; var flptThreshold = 1e-3; var _min = 0 - flptThreshold; var _max = 1 + flptThreshold; if (_min <= ua && ua <= _max && _min <= ub && ub <= _max) { return [x1 + ua * dx21, y1 + ua * dy21]; } else { if (!infiniteLines) { return []; } else { return [x1 + ua * dx21, y1 + ua * dy21]; } } } else { if (ua_t === 0 || ub_t === 0) { if (midOfThree(x1, x22, x42) === x42) { return [x42, y42]; } if (midOfThree(x1, x22, x32) === x32) { return [x32, y32]; } if (midOfThree(x32, x42, x22) === x22) { return [x22, y22]; } return []; } else { return []; } } }, "finiteLinesIntersect"); transformPoints = /* @__PURE__ */ __name(function transformPoints2(points, centerX, centerY, width3, height2) { var ret = []; var halfW = width3 / 2; var halfH = height2 / 2; var x5 = centerX; var y6 = centerY; ret.push({ x: x5 + halfW * points[0], y: y6 + halfH * points[1] }); for (var i2 = 1; i2 < points.length / 2; i2++) { ret.push({ x: x5 + halfW * points[i2 * 2], y: y6 + halfH * points[i2 * 2 + 1] }); } return ret; }, "transformPoints"); polygonIntersectLine = /* @__PURE__ */ __name(function polygonIntersectLine2(x5, y6, basePoints, centerX, centerY, width3, height2, padding2) { var intersections = []; var intersection4; var transformedPoints = new Array(basePoints.length); var doTransform = true; if (width3 == null) { doTransform = false; } var points; if (doTransform) { for (var i2 = 0; i2 < transformedPoints.length / 2; i2++) { transformedPoints[i2 * 2] = basePoints[i2 * 2] * width3 + centerX; transformedPoints[i2 * 2 + 1] = basePoints[i2 * 2 + 1] * height2 + centerY; } if (padding2 > 0) { var expandedLineSet = expandPolygon(transformedPoints, -padding2); points = joinLines(expandedLineSet); } else { points = transformedPoints; } } else { points = basePoints; } var currentX, currentY, nextX, nextY; for (var _i3 = 0; _i3 < points.length / 2; _i3++) { currentX = points[_i3 * 2]; currentY = points[_i3 * 2 + 1]; if (_i3 < points.length / 2 - 1) { nextX = points[(_i3 + 1) * 2]; nextY = points[(_i3 + 1) * 2 + 1]; } else { nextX = points[0]; nextY = points[1]; } intersection4 = finiteLinesIntersect(x5, y6, centerX, centerY, currentX, currentY, nextX, nextY); if (intersection4.length !== 0) { intersections.push(intersection4[0], intersection4[1]); } } return intersections; }, "polygonIntersectLine"); roundPolygonIntersectLine = /* @__PURE__ */ __name(function roundPolygonIntersectLine2(x5, y6, basePoints, centerX, centerY, width3, height2, padding2, corners) { var intersections = []; var intersection4; var lines = new Array(basePoints.length * 2); corners.forEach(function(corner, i3) { if (i3 === 0) { lines[lines.length - 2] = corner.startX; lines[lines.length - 1] = corner.startY; } else { lines[i3 * 4 - 2] = corner.startX; lines[i3 * 4 - 1] = corner.startY; } lines[i3 * 4] = corner.stopX; lines[i3 * 4 + 1] = corner.stopY; intersection4 = intersectLineCircle(x5, y6, centerX, centerY, corner.cx, corner.cy, corner.radius); if (intersection4.length !== 0) { intersections.push(intersection4[0], intersection4[1]); } }); for (var i2 = 0; i2 < lines.length / 4; i2++) { intersection4 = finiteLinesIntersect(x5, y6, centerX, centerY, lines[i2 * 4], lines[i2 * 4 + 1], lines[i2 * 4 + 2], lines[i2 * 4 + 3], false); if (intersection4.length !== 0) { intersections.push(intersection4[0], intersection4[1]); } } if (intersections.length > 2) { var lowestIntersection = [intersections[0], intersections[1]]; var lowestSquaredDistance = Math.pow(lowestIntersection[0] - x5, 2) + Math.pow(lowestIntersection[1] - y6, 2); for (var _i4 = 1; _i4 < intersections.length / 2; _i4++) { var squaredDistance = Math.pow(intersections[_i4 * 2] - x5, 2) + Math.pow(intersections[_i4 * 2 + 1] - y6, 2); if (squaredDistance <= lowestSquaredDistance) { lowestIntersection[0] = intersections[_i4 * 2]; lowestIntersection[1] = intersections[_i4 * 2 + 1]; lowestSquaredDistance = squaredDistance; } } return lowestIntersection; } return intersections; }, "roundPolygonIntersectLine"); shortenIntersection = /* @__PURE__ */ __name(function shortenIntersection2(intersection4, offset, amount) { var disp = [intersection4[0] - offset[0], intersection4[1] - offset[1]]; var length2 = Math.sqrt(disp[0] * disp[0] + disp[1] * disp[1]); var lenRatio = (length2 - amount) / length2; if (lenRatio < 0) { lenRatio = 1e-5; } return [offset[0] + lenRatio * disp[0], offset[1] + lenRatio * disp[1]]; }, "shortenIntersection"); generateUnitNgonPointsFitToSquare = /* @__PURE__ */ __name(function generateUnitNgonPointsFitToSquare2(sides, rotationRadians) { var points = generateUnitNgonPoints(sides, rotationRadians); points = fitPolygonToSquare(points); return points; }, "generateUnitNgonPointsFitToSquare"); fitPolygonToSquare = /* @__PURE__ */ __name(function fitPolygonToSquare2(points) { var x5, y6; var sides = points.length / 2; var minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity; for (var i2 = 0; i2 < sides; i2++) { x5 = points[2 * i2]; y6 = points[2 * i2 + 1]; minX = Math.min(minX, x5); maxX = Math.max(maxX, x5); minY = Math.min(minY, y6); maxY = Math.max(maxY, y6); } var sx = 2 / (maxX - minX); var sy = 2 / (maxY - minY); for (var _i5 = 0; _i5 < sides; _i5++) { x5 = points[2 * _i5] = points[2 * _i5] * sx; y6 = points[2 * _i5 + 1] = points[2 * _i5 + 1] * sy; minX = Math.min(minX, x5); maxX = Math.max(maxX, x5); minY = Math.min(minY, y6); maxY = Math.max(maxY, y6); } if (minY < -1) { for (var _i6 = 0; _i6 < sides; _i6++) { y6 = points[2 * _i6 + 1] = points[2 * _i6 + 1] + (-1 - minY); } } return points; }, "fitPolygonToSquare"); generateUnitNgonPoints = /* @__PURE__ */ __name(function generateUnitNgonPoints2(sides, rotationRadians) { var increment = 1 / sides * 2 * Math.PI; var startAngle = sides % 2 === 0 ? Math.PI / 2 + increment / 2 : Math.PI / 2; startAngle += rotationRadians; var points = new Array(sides * 2); var currentAngle; for (var i2 = 0; i2 < sides; i2++) { currentAngle = i2 * increment + startAngle; points[2 * i2] = Math.cos(currentAngle); points[2 * i2 + 1] = Math.sin(-currentAngle); } return points; }, "generateUnitNgonPoints"); getRoundRectangleRadius = /* @__PURE__ */ __name(function getRoundRectangleRadius2(width3, height2) { return Math.min(width3 / 4, height2 / 4, 8); }, "getRoundRectangleRadius"); getRoundPolygonRadius = /* @__PURE__ */ __name(function getRoundPolygonRadius2(width3, height2) { return Math.min(width3 / 10, height2 / 10, 8); }, "getRoundPolygonRadius"); getCutRectangleCornerLength = /* @__PURE__ */ __name(function getCutRectangleCornerLength2() { return 8; }, "getCutRectangleCornerLength"); bezierPtsToQuadCoeff = /* @__PURE__ */ __name(function bezierPtsToQuadCoeff2(p0, p1, p22) { return [p0 - 2 * p1 + p22, 2 * (p1 - p0), p0]; }, "bezierPtsToQuadCoeff"); getBarrelCurveConstants = /* @__PURE__ */ __name(function getBarrelCurveConstants2(width3, height2) { return { heightOffset: Math.min(15, 0.05 * height2), widthOffset: Math.min(100, 0.25 * width3), ctrlPtOffsetPct: 0.05 }; }, "getBarrelCurveConstants"); __name(satPolygonIntersection, "satPolygonIntersection"); pageRankDefaults = defaults$g({ dampingFactor: 0.8, precision: 1e-6, iterations: 200, weight: /* @__PURE__ */ __name(function weight5(edge) { return 1; }, "weight") }); elesfn$o = { pageRank: /* @__PURE__ */ __name(function pageRank(options2) { var _pageRankDefaults = pageRankDefaults(options2), dampingFactor = _pageRankDefaults.dampingFactor, precision = _pageRankDefaults.precision, iterations = _pageRankDefaults.iterations, weight8 = _pageRankDefaults.weight; var cy = this._private.cy; var _this$byGroup = this.byGroup(), nodes5 = _this$byGroup.nodes, edges3 = _this$byGroup.edges; var numNodes = nodes5.length; var numNodesSqd = numNodes * numNodes; var numEdges = edges3.length; var matrix = new Array(numNodesSqd); var columnSum = new Array(numNodes); var additionalProb = (1 - dampingFactor) / numNodes; for (var i2 = 0; i2 < numNodes; i2++) { for (var j3 = 0; j3 < numNodes; j3++) { var n2 = i2 * numNodes + j3; matrix[n2] = 0; } columnSum[i2] = 0; } for (var _i = 0; _i < numEdges; _i++) { var edge = edges3[_i]; var srcId = edge.data("source"); var tgtId = edge.data("target"); if (srcId === tgtId) { continue; } var s2 = nodes5.indexOfId(srcId); var t4 = nodes5.indexOfId(tgtId); var w4 = weight8(edge); var _n = t4 * numNodes + s2; matrix[_n] += w4; columnSum[s2] += w4; } var p3 = 1 / numNodes + additionalProb; for (var _j = 0; _j < numNodes; _j++) { if (columnSum[_j] === 0) { for (var _i2 = 0; _i2 < numNodes; _i2++) { var _n2 = _i2 * numNodes + _j; matrix[_n2] = p3; } } else { for (var _i3 = 0; _i3 < numNodes; _i3++) { var _n3 = _i3 * numNodes + _j; matrix[_n3] = matrix[_n3] / columnSum[_j] + additionalProb; } } } var eigenvector = new Array(numNodes); var temp = new Array(numNodes); var previous; for (var _i4 = 0; _i4 < numNodes; _i4++) { eigenvector[_i4] = 1; } for (var iter = 0; iter < iterations; iter++) { for (var _i5 = 0; _i5 < numNodes; _i5++) { temp[_i5] = 0; } for (var _i6 = 0; _i6 < numNodes; _i6++) { for (var _j2 = 0; _j2 < numNodes; _j2++) { var _n4 = _i6 * numNodes + _j2; temp[_i6] += matrix[_n4] * eigenvector[_j2]; } } inPlaceSumNormalize(temp); previous = eigenvector; eigenvector = temp; temp = previous; var diff2 = 0; for (var _i7 = 0; _i7 < numNodes; _i7++) { var delta = previous[_i7] - eigenvector[_i7]; diff2 += delta * delta; } if (diff2 < precision) { break; } } var res = { rank: /* @__PURE__ */ __name(function rank2(node2) { node2 = cy.collection(node2)[0]; return eigenvector[nodes5.indexOf(node2)]; }, "rank") }; return res; }, "pageRank") // pageRank }; defaults$f = defaults$g({ root: null, weight: /* @__PURE__ */ __name(function weight6(edge) { return 1; }, "weight"), directed: false, alpha: 0 }); elesfn$n = { degreeCentralityNormalized: /* @__PURE__ */ __name(function degreeCentralityNormalized(options2) { options2 = defaults$f(options2); var cy = this.cy(); var nodes5 = this.nodes(); var numNodes = nodes5.length; if (!options2.directed) { var degrees3 = {}; var maxDegree = 0; for (var i2 = 0; i2 < numNodes; i2++) { var node2 = nodes5[i2]; options2.root = node2; var currDegree = this.degreeCentrality(options2); if (maxDegree < currDegree.degree) { maxDegree = currDegree.degree; } degrees3[node2.id()] = currDegree.degree; } return { degree: /* @__PURE__ */ __name(function degree(node3) { if (maxDegree === 0) { return 0; } if (string(node3)) { node3 = cy.filter(node3); } return degrees3[node3.id()] / maxDegree; }, "degree") }; } else { var indegrees = {}; var outdegrees = {}; var maxIndegree = 0; var maxOutdegree = 0; for (var _i = 0; _i < numNodes; _i++) { var _node = nodes5[_i]; var id30 = _node.id(); options2.root = _node; var _currDegree = this.degreeCentrality(options2); if (maxIndegree < _currDegree.indegree) maxIndegree = _currDegree.indegree; if (maxOutdegree < _currDegree.outdegree) maxOutdegree = _currDegree.outdegree; indegrees[id30] = _currDegree.indegree; outdegrees[id30] = _currDegree.outdegree; } return { indegree: /* @__PURE__ */ __name(function indegree(node3) { if (maxIndegree == 0) { return 0; } if (string(node3)) { node3 = cy.filter(node3); } return indegrees[node3.id()] / maxIndegree; }, "indegree"), outdegree: /* @__PURE__ */ __name(function outdegree(node3) { if (maxOutdegree === 0) { return 0; } if (string(node3)) { node3 = cy.filter(node3); } return outdegrees[node3.id()] / maxOutdegree; }, "outdegree") }; } }, "degreeCentralityNormalized"), // degreeCentralityNormalized // Implemented from the algorithm in Opsahl's paper // "Node centrality in weighted networks: Generalizing degree and shortest paths" // check the heading 2 "Degree" degreeCentrality: /* @__PURE__ */ __name(function degreeCentrality(options2) { options2 = defaults$f(options2); var cy = this.cy(); var callingEles = this; var _options = options2, root3 = _options.root, weight8 = _options.weight, directed = _options.directed, alpha = _options.alpha; root3 = cy.collection(root3)[0]; if (!directed) { var connEdges = root3.connectedEdges().intersection(callingEles); var k2 = connEdges.length; var s2 = 0; for (var i2 = 0; i2 < connEdges.length; i2++) { s2 += weight8(connEdges[i2]); } return { degree: Math.pow(k2, 1 - alpha) * Math.pow(s2, alpha) }; } else { var edges3 = root3.connectedEdges(); var incoming = edges3.filter(function(edge) { return edge.target().same(root3) && callingEles.has(edge); }); var outgoing = edges3.filter(function(edge) { return edge.source().same(root3) && callingEles.has(edge); }); var k_in = incoming.length; var k_out = outgoing.length; var s_in = 0; var s_out = 0; for (var _i2 = 0; _i2 < incoming.length; _i2++) { s_in += weight8(incoming[_i2]); } for (var _i3 = 0; _i3 < outgoing.length; _i3++) { s_out += weight8(outgoing[_i3]); } return { indegree: Math.pow(k_in, 1 - alpha) * Math.pow(s_in, alpha), outdegree: Math.pow(k_out, 1 - alpha) * Math.pow(s_out, alpha) }; } }, "degreeCentrality") // degreeCentrality }; elesfn$n.dc = elesfn$n.degreeCentrality; elesfn$n.dcn = elesfn$n.degreeCentralityNormalised = elesfn$n.degreeCentralityNormalized; defaults$e = defaults$g({ harmonic: true, weight: /* @__PURE__ */ __name(function weight7() { return 1; }, "weight"), directed: false, root: null }); elesfn$m = { closenessCentralityNormalized: /* @__PURE__ */ __name(function closenessCentralityNormalized(options2) { var _defaults = defaults$e(options2), harmonic = _defaults.harmonic, weight8 = _defaults.weight, directed = _defaults.directed; var cy = this.cy(); var closenesses = {}; var maxCloseness = 0; var nodes5 = this.nodes(); var fw = this.floydWarshall({ weight: weight8, directed }); for (var i2 = 0; i2 < nodes5.length; i2++) { var currCloseness = 0; var node_i = nodes5[i2]; for (var j3 = 0; j3 < nodes5.length; j3++) { if (i2 !== j3) { var d3 = fw.distance(node_i, nodes5[j3]); if (harmonic) { currCloseness += 1 / d3; } else { currCloseness += d3; } } } if (!harmonic) { currCloseness = 1 / currCloseness; } if (maxCloseness < currCloseness) { maxCloseness = currCloseness; } closenesses[node_i.id()] = currCloseness; } return { closeness: /* @__PURE__ */ __name(function closeness(node2) { if (maxCloseness == 0) { return 0; } if (string(node2)) { node2 = cy.filter(node2)[0].id(); } else { node2 = node2.id(); } return closenesses[node2] / maxCloseness; }, "closeness") }; }, "closenessCentralityNormalized"), // Implemented from pseudocode from wikipedia closenessCentrality: /* @__PURE__ */ __name(function closenessCentrality(options2) { var _defaults2 = defaults$e(options2), root3 = _defaults2.root, weight8 = _defaults2.weight, directed = _defaults2.directed, harmonic = _defaults2.harmonic; root3 = this.filter(root3)[0]; var dijkstra3 = this.dijkstra({ root: root3, weight: weight8, directed }); var totalDistance = 0; var nodes5 = this.nodes(); for (var i2 = 0; i2 < nodes5.length; i2++) { var n2 = nodes5[i2]; if (!n2.same(root3)) { var d3 = dijkstra3.distanceTo(n2); if (harmonic) { totalDistance += 1 / d3; } else { totalDistance += d3; } } } return harmonic ? totalDistance : 1 / totalDistance; }, "closenessCentrality") // closenessCentrality }; elesfn$m.cc = elesfn$m.closenessCentrality; elesfn$m.ccn = elesfn$m.closenessCentralityNormalised = elesfn$m.closenessCentralityNormalized; defaults$d = defaults$g({ weight: null, directed: false }); elesfn$l = { // Implemented from the algorithm in the paper "On Variants of Shortest-Path Betweenness Centrality and their Generic Computation" by Ulrik Brandes betweennessCentrality: /* @__PURE__ */ __name(function betweennessCentrality(options2) { var _defaults = defaults$d(options2), directed = _defaults.directed, weight8 = _defaults.weight; var weighted = weight8 != null; var cy = this.cy(); var V3 = this.nodes(); var A2 = {}; var _C = {}; var max10 = 0; var C3 = { set: /* @__PURE__ */ __name(function set5(key, val) { _C[key] = val; if (val > max10) { max10 = val; } }, "set"), get: /* @__PURE__ */ __name(function get5(key) { return _C[key]; }, "get") }; for (var i2 = 0; i2 < V3.length; i2++) { var v3 = V3[i2]; var vid = v3.id(); if (directed) { A2[vid] = v3.outgoers().nodes(); } else { A2[vid] = v3.openNeighborhood().nodes(); } C3.set(vid, 0); } var _loop = /* @__PURE__ */ __name(function _loop2() { var sid = V3[s2].id(); var S4 = []; var P3 = {}; var g2 = {}; var d3 = {}; var Q3 = new Heap(function(a2, b3) { return d3[a2] - d3[b3]; }); for (var _i = 0; _i < V3.length; _i++) { var _vid = V3[_i].id(); P3[_vid] = []; g2[_vid] = 0; d3[_vid] = Infinity; } g2[sid] = 1; d3[sid] = 0; Q3.push(sid); while (!Q3.empty()) { var _v = Q3.pop(); S4.push(_v); if (weighted) { for (var j3 = 0; j3 < A2[_v].length; j3++) { var w4 = A2[_v][j3]; var vEle = cy.getElementById(_v); var edge = void 0; if (vEle.edgesTo(w4).length > 0) { edge = vEle.edgesTo(w4)[0]; } else { edge = w4.edgesTo(vEle)[0]; } var edgeWeight = weight8(edge); w4 = w4.id(); if (d3[w4] > d3[_v] + edgeWeight) { d3[w4] = d3[_v] + edgeWeight; if (Q3.nodes.indexOf(w4) < 0) { Q3.push(w4); } else { Q3.updateItem(w4); } g2[w4] = 0; P3[w4] = []; } if (d3[w4] == d3[_v] + edgeWeight) { g2[w4] = g2[w4] + g2[_v]; P3[w4].push(_v); } } } else { for (var _j = 0; _j < A2[_v].length; _j++) { var _w = A2[_v][_j].id(); if (d3[_w] == Infinity) { Q3.push(_w); d3[_w] = d3[_v] + 1; } if (d3[_w] == d3[_v] + 1) { g2[_w] = g2[_w] + g2[_v]; P3[_w].push(_v); } } } } var e3 = {}; for (var _i2 = 0; _i2 < V3.length; _i2++) { e3[V3[_i2].id()] = 0; } while (S4.length > 0) { var _w2 = S4.pop(); for (var _j2 = 0; _j2 < P3[_w2].length; _j2++) { var _v2 = P3[_w2][_j2]; e3[_v2] = e3[_v2] + g2[_v2] / g2[_w2] * (1 + e3[_w2]); } if (_w2 != V3[s2].id()) { C3.set(_w2, C3.get(_w2) + e3[_w2]); } } }, "_loop"); for (var s2 = 0; s2 < V3.length; s2++) { _loop(); } var ret = { betweenness: /* @__PURE__ */ __name(function betweenness(node2) { var id30 = cy.collection(node2).id(); return C3.get(id30); }, "betweenness"), betweennessNormalized: /* @__PURE__ */ __name(function betweennessNormalized(node2) { if (max10 == 0) { return 0; } var id30 = cy.collection(node2).id(); return C3.get(id30) / max10; }, "betweennessNormalized") }; ret.betweennessNormalised = ret.betweennessNormalized; return ret; }, "betweennessCentrality") // betweennessCentrality }; elesfn$l.bc = elesfn$l.betweennessCentrality; defaults$c = defaults$g({ expandFactor: 2, // affects time of computation and cluster granularity to some extent: M * M inflateFactor: 2, // affects cluster granularity (the greater the value, the more clusters): M(i,j) / E(j) multFactor: 1, // optional self loops for each node. Use a neutral value to improve cluster computations. maxIterations: 20, // maximum number of iterations of the MCL algorithm in a single run attributes: [ // attributes/features used to group nodes, ie. similarity values between nodes function(edge) { return 1; } ] }); setOptions$3 = /* @__PURE__ */ __name(function setOptions(options2) { return defaults$c(options2); }, "setOptions"); getSimilarity$1 = /* @__PURE__ */ __name(function getSimilarity(edge, attributes) { var total = 0; for (var i2 = 0; i2 < attributes.length; i2++) { total += attributes[i2](edge); } return total; }, "getSimilarity"); addLoops = /* @__PURE__ */ __name(function addLoops2(M3, n2, val) { for (var i2 = 0; i2 < n2; i2++) { M3[i2 * n2 + i2] = val; } }, "addLoops"); normalize2 = /* @__PURE__ */ __name(function normalize3(M3, n2) { var sum2; for (var col = 0; col < n2; col++) { sum2 = 0; for (var row = 0; row < n2; row++) { sum2 += M3[row * n2 + col]; } for (var _row = 0; _row < n2; _row++) { M3[_row * n2 + col] = M3[_row * n2 + col] / sum2; } } }, "normalize"); mmult = /* @__PURE__ */ __name(function mmult2(A2, B3, n2) { var C3 = new Array(n2 * n2); for (var i2 = 0; i2 < n2; i2++) { for (var j3 = 0; j3 < n2; j3++) { C3[i2 * n2 + j3] = 0; } for (var k2 = 0; k2 < n2; k2++) { for (var _j = 0; _j < n2; _j++) { C3[i2 * n2 + _j] += A2[i2 * n2 + k2] * B3[k2 * n2 + _j]; } } } return C3; }, "mmult"); expand = /* @__PURE__ */ __name(function expand2(M3, n2, expandFactor) { var _M = M3.slice(0); for (var p3 = 1; p3 < expandFactor; p3++) { M3 = mmult(M3, _M, n2); } return M3; }, "expand"); inflate = /* @__PURE__ */ __name(function inflate2(M3, n2, inflateFactor) { var _M = new Array(n2 * n2); for (var i2 = 0; i2 < n2 * n2; i2++) { _M[i2] = Math.pow(M3[i2], inflateFactor); } normalize2(_M, n2); return _M; }, "inflate"); hasConverged = /* @__PURE__ */ __name(function hasConverged2(M3, _M, n2, roundFactor) { for (var i2 = 0; i2 < n2; i2++) { var v12 = Math.round(M3[i2] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor); var v23 = Math.round(_M[i2] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor); if (v12 !== v23) { return false; } } return true; }, "hasConverged"); assign$2 = /* @__PURE__ */ __name(function assign2(M3, n2, nodes5, cy) { var clusters = []; for (var i2 = 0; i2 < n2; i2++) { var cluster = []; for (var j3 = 0; j3 < n2; j3++) { if (Math.round(M3[i2 * n2 + j3] * 1e3) / 1e3 > 0) { cluster.push(nodes5[j3]); } } if (cluster.length !== 0) { clusters.push(cy.collection(cluster)); } } return clusters; }, "assign"); isDuplicate = /* @__PURE__ */ __name(function isDuplicate2(c1, c22) { for (var i2 = 0; i2 < c1.length; i2++) { if (!c22[i2] || c1[i2].id() !== c22[i2].id()) { return false; } } return true; }, "isDuplicate"); removeDuplicates = /* @__PURE__ */ __name(function removeDuplicates2(clusters) { for (var i2 = 0; i2 < clusters.length; i2++) { for (var j3 = 0; j3 < clusters.length; j3++) { if (i2 != j3 && isDuplicate(clusters[i2], clusters[j3])) { clusters.splice(j3, 1); } } } return clusters; }, "removeDuplicates"); markovClustering = /* @__PURE__ */ __name(function markovClustering2(options2) { var nodes5 = this.nodes(); var edges3 = this.edges(); var cy = this.cy(); var opts = setOptions$3(options2); var id2position = {}; for (var i2 = 0; i2 < nodes5.length; i2++) { id2position[nodes5[i2].id()] = i2; } var n2 = nodes5.length, n22 = n2 * n2; var M3 = new Array(n22), _M; for (var _i = 0; _i < n22; _i++) { M3[_i] = 0; } for (var e3 = 0; e3 < edges3.length; e3++) { var edge = edges3[e3]; var _i2 = id2position[edge.source().id()]; var j3 = id2position[edge.target().id()]; var sim = getSimilarity$1(edge, opts.attributes); M3[_i2 * n2 + j3] += sim; M3[j3 * n2 + _i2] += sim; } addLoops(M3, n2, opts.multFactor); normalize2(M3, n2); var isStillMoving = true; var iterations = 0; while (isStillMoving && iterations < opts.maxIterations) { isStillMoving = false; _M = expand(M3, n2, opts.expandFactor); M3 = inflate(_M, n2, opts.inflateFactor); if (!hasConverged(M3, _M, n22, 4)) { isStillMoving = true; } iterations++; } var clusters = assign$2(M3, n2, nodes5, cy); clusters = removeDuplicates(clusters); return clusters; }, "markovClustering"); markovClustering$1 = { markovClustering, mcl: markovClustering }; identity$1 = /* @__PURE__ */ __name(function identity5(x5) { return x5; }, "identity"); absDiff = /* @__PURE__ */ __name(function absDiff2(p3, q3) { return Math.abs(q3 - p3); }, "absDiff"); addAbsDiff = /* @__PURE__ */ __name(function addAbsDiff2(total, p3, q3) { return total + absDiff(p3, q3); }, "addAbsDiff"); addSquaredDiff = /* @__PURE__ */ __name(function addSquaredDiff2(total, p3, q3) { return total + Math.pow(q3 - p3, 2); }, "addSquaredDiff"); sqrt3 = /* @__PURE__ */ __name(function sqrt4(x5) { return Math.sqrt(x5); }, "sqrt"); maxAbsDiff = /* @__PURE__ */ __name(function maxAbsDiff2(currentMax, p3, q3) { return Math.max(currentMax, absDiff(p3, q3)); }, "maxAbsDiff"); getDistance = /* @__PURE__ */ __name(function getDistance2(length2, getP, getQ, init3, visit) { var post = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : identity$1; var ret = init3; var p3, q3; for (var dim = 0; dim < length2; dim++) { p3 = getP(dim); q3 = getQ(dim); ret = visit(ret, p3, q3); } return post(ret); }, "getDistance"); distances = { euclidean: /* @__PURE__ */ __name(function euclidean(length2, getP, getQ) { if (length2 >= 2) { return getDistance(length2, getP, getQ, 0, addSquaredDiff, sqrt3); } else { return getDistance(length2, getP, getQ, 0, addAbsDiff); } }, "euclidean"), squaredEuclidean: /* @__PURE__ */ __name(function squaredEuclidean(length2, getP, getQ) { return getDistance(length2, getP, getQ, 0, addSquaredDiff); }, "squaredEuclidean"), manhattan: /* @__PURE__ */ __name(function manhattan(length2, getP, getQ) { return getDistance(length2, getP, getQ, 0, addAbsDiff); }, "manhattan"), max: /* @__PURE__ */ __name(function max7(length2, getP, getQ) { return getDistance(length2, getP, getQ, -Infinity, maxAbsDiff); }, "max") }; distances["squared-euclidean"] = distances["squaredEuclidean"]; distances["squaredeuclidean"] = distances["squaredEuclidean"]; __name(clusteringDistance, "clusteringDistance"); defaults$b = defaults$g({ k: 2, m: 2, sensitivityThreshold: 1e-4, distance: "euclidean", maxIterations: 10, attributes: [], testMode: false, testCentroids: null }); setOptions$2 = /* @__PURE__ */ __name(function setOptions2(options2) { return defaults$b(options2); }, "setOptions"); getDist = /* @__PURE__ */ __name(function getDist2(type3, node2, centroid, attributes, mode) { var noNodeP = mode !== "kMedoids"; var getP = noNodeP ? function(i2) { return centroid[i2]; } : function(i2) { return attributes[i2](centroid); }; var getQ = /* @__PURE__ */ __name(function getQ2(i2) { return attributes[i2](node2); }, "getQ"); var nodeP = centroid; var nodeQ = node2; return clusteringDistance(type3, attributes.length, getP, getQ, nodeP, nodeQ); }, "getDist"); randomCentroids = /* @__PURE__ */ __name(function randomCentroids2(nodes5, k2, attributes) { var ndim = attributes.length; var min9 = new Array(ndim); var max10 = new Array(ndim); var centroids = new Array(k2); var centroid = null; for (var i2 = 0; i2 < ndim; i2++) { min9[i2] = nodes5.min(attributes[i2]).value; max10[i2] = nodes5.max(attributes[i2]).value; } for (var c3 = 0; c3 < k2; c3++) { centroid = []; for (var _i = 0; _i < ndim; _i++) { centroid[_i] = Math.random() * (max10[_i] - min9[_i]) + min9[_i]; } centroids[c3] = centroid; } return centroids; }, "randomCentroids"); classify = /* @__PURE__ */ __name(function classify2(node2, centroids, distance2, attributes, type3) { var min9 = Infinity; var index = 0; for (var i2 = 0; i2 < centroids.length; i2++) { var dist3 = getDist(distance2, node2, centroids[i2], attributes, type3); if (dist3 < min9) { min9 = dist3; index = i2; } } return index; }, "classify"); buildCluster = /* @__PURE__ */ __name(function buildCluster2(centroid, nodes5, assignment) { var cluster = []; var node2 = null; for (var n2 = 0; n2 < nodes5.length; n2++) { node2 = nodes5[n2]; if (assignment[node2.id()] === centroid) { cluster.push(node2); } } return cluster; }, "buildCluster"); haveValuesConverged = /* @__PURE__ */ __name(function haveValuesConverged2(v12, v23, sensitivityThreshold) { return Math.abs(v23 - v12) <= sensitivityThreshold; }, "haveValuesConverged"); haveMatricesConverged = /* @__PURE__ */ __name(function haveMatricesConverged2(v12, v23, sensitivityThreshold) { for (var i2 = 0; i2 < v12.length; i2++) { for (var j3 = 0; j3 < v12[i2].length; j3++) { var diff2 = Math.abs(v12[i2][j3] - v23[i2][j3]); if (diff2 > sensitivityThreshold) { return false; } } } return true; }, "haveMatricesConverged"); seenBefore = /* @__PURE__ */ __name(function seenBefore2(node2, medoids, n2) { for (var i2 = 0; i2 < n2; i2++) { if (node2 === medoids[i2]) return true; } return false; }, "seenBefore"); randomMedoids = /* @__PURE__ */ __name(function randomMedoids2(nodes5, k2) { var medoids = new Array(k2); if (nodes5.length < 50) { for (var i2 = 0; i2 < k2; i2++) { var node2 = nodes5[Math.floor(Math.random() * nodes5.length)]; while (seenBefore(node2, medoids, i2)) { node2 = nodes5[Math.floor(Math.random() * nodes5.length)]; } medoids[i2] = node2; } } else { for (var _i2 = 0; _i2 < k2; _i2++) { medoids[_i2] = nodes5[Math.floor(Math.random() * nodes5.length)]; } } return medoids; }, "randomMedoids"); findCost = /* @__PURE__ */ __name(function findCost2(potentialNewMedoid, cluster, attributes) { var cost = 0; for (var n2 = 0; n2 < cluster.length; n2++) { cost += getDist("manhattan", cluster[n2], potentialNewMedoid, attributes, "kMedoids"); } return cost; }, "findCost"); kMeans = /* @__PURE__ */ __name(function kMeans2(options2) { var cy = this.cy(); var nodes5 = this.nodes(); var node2 = null; var opts = setOptions$2(options2); var clusters = new Array(opts.k); var assignment = {}; var centroids; if (opts.testMode) { if (typeof opts.testCentroids === "number") { opts.testCentroids; centroids = randomCentroids(nodes5, opts.k, opts.attributes); } else if (_typeof(opts.testCentroids) === "object") { centroids = opts.testCentroids; } else { centroids = randomCentroids(nodes5, opts.k, opts.attributes); } } else { centroids = randomCentroids(nodes5, opts.k, opts.attributes); } var isStillMoving = true; var iterations = 0; while (isStillMoving && iterations < opts.maxIterations) { for (var n2 = 0; n2 < nodes5.length; n2++) { node2 = nodes5[n2]; assignment[node2.id()] = classify(node2, centroids, opts.distance, opts.attributes, "kMeans"); } isStillMoving = false; for (var c3 = 0; c3 < opts.k; c3++) { var cluster = buildCluster(c3, nodes5, assignment); if (cluster.length === 0) { continue; } var ndim = opts.attributes.length; var centroid = centroids[c3]; var newCentroid = new Array(ndim); var sum2 = new Array(ndim); for (var d3 = 0; d3 < ndim; d3++) { sum2[d3] = 0; for (var i2 = 0; i2 < cluster.length; i2++) { node2 = cluster[i2]; sum2[d3] += opts.attributes[d3](node2); } newCentroid[d3] = sum2[d3] / cluster.length; if (!haveValuesConverged(newCentroid[d3], centroid[d3], opts.sensitivityThreshold)) { isStillMoving = true; } } centroids[c3] = newCentroid; clusters[c3] = cy.collection(cluster); } iterations++; } return clusters; }, "kMeans"); kMedoids = /* @__PURE__ */ __name(function kMedoids2(options2) { var cy = this.cy(); var nodes5 = this.nodes(); var node2 = null; var opts = setOptions$2(options2); var clusters = new Array(opts.k); var medoids; var assignment = {}; var curCost; var minCosts = new Array(opts.k); if (opts.testMode) { if (typeof opts.testCentroids === "number") ; else if (_typeof(opts.testCentroids) === "object") { medoids = opts.testCentroids; } else { medoids = randomMedoids(nodes5, opts.k); } } else { medoids = randomMedoids(nodes5, opts.k); } var isStillMoving = true; var iterations = 0; while (isStillMoving && iterations < opts.maxIterations) { for (var n2 = 0; n2 < nodes5.length; n2++) { node2 = nodes5[n2]; assignment[node2.id()] = classify(node2, medoids, opts.distance, opts.attributes, "kMedoids"); } isStillMoving = false; for (var m3 = 0; m3 < medoids.length; m3++) { var cluster = buildCluster(m3, nodes5, assignment); if (cluster.length === 0) { continue; } minCosts[m3] = findCost(medoids[m3], cluster, opts.attributes); for (var _n = 0; _n < cluster.length; _n++) { curCost = findCost(cluster[_n], cluster, opts.attributes); if (curCost < minCosts[m3]) { minCosts[m3] = curCost; medoids[m3] = cluster[_n]; isStillMoving = true; } } clusters[m3] = cy.collection(cluster); } iterations++; } return clusters; }, "kMedoids"); updateCentroids = /* @__PURE__ */ __name(function updateCentroids2(centroids, nodes5, U3, weight8, opts) { var numerator, denominator; for (var n2 = 0; n2 < nodes5.length; n2++) { for (var c3 = 0; c3 < centroids.length; c3++) { weight8[n2][c3] = Math.pow(U3[n2][c3], opts.m); } } for (var _c = 0; _c < centroids.length; _c++) { for (var dim = 0; dim < opts.attributes.length; dim++) { numerator = 0; denominator = 0; for (var _n2 = 0; _n2 < nodes5.length; _n2++) { numerator += weight8[_n2][_c] * opts.attributes[dim](nodes5[_n2]); denominator += weight8[_n2][_c]; } centroids[_c][dim] = numerator / denominator; } } }, "updateCentroids"); updateMembership = /* @__PURE__ */ __name(function updateMembership2(U3, _U, centroids, nodes5, opts) { for (var i2 = 0; i2 < U3.length; i2++) { _U[i2] = U3[i2].slice(); } var sum2, numerator, denominator; var pow = 2 / (opts.m - 1); for (var c3 = 0; c3 < centroids.length; c3++) { for (var n2 = 0; n2 < nodes5.length; n2++) { sum2 = 0; for (var k2 = 0; k2 < centroids.length; k2++) { numerator = getDist(opts.distance, nodes5[n2], centroids[c3], opts.attributes, "cmeans"); denominator = getDist(opts.distance, nodes5[n2], centroids[k2], opts.attributes, "cmeans"); sum2 += Math.pow(numerator / denominator, pow); } U3[n2][c3] = 1 / sum2; } } }, "updateMembership"); assign$1 = /* @__PURE__ */ __name(function assign3(nodes5, U3, opts, cy) { var clusters = new Array(opts.k); for (var c3 = 0; c3 < clusters.length; c3++) { clusters[c3] = []; } var max10; var index; for (var n2 = 0; n2 < U3.length; n2++) { max10 = -Infinity; index = -1; for (var _c2 = 0; _c2 < U3[0].length; _c2++) { if (U3[n2][_c2] > max10) { max10 = U3[n2][_c2]; index = _c2; } } clusters[index].push(nodes5[n2]); } for (var _c3 = 0; _c3 < clusters.length; _c3++) { clusters[_c3] = cy.collection(clusters[_c3]); } return clusters; }, "assign"); fuzzyCMeans = /* @__PURE__ */ __name(function fuzzyCMeans2(options2) { var cy = this.cy(); var nodes5 = this.nodes(); var opts = setOptions$2(options2); var clusters; var centroids; var U3; var _U; var weight8; _U = new Array(nodes5.length); for (var i2 = 0; i2 < nodes5.length; i2++) { _U[i2] = new Array(opts.k); } U3 = new Array(nodes5.length); for (var _i3 = 0; _i3 < nodes5.length; _i3++) { U3[_i3] = new Array(opts.k); } for (var _i4 = 0; _i4 < nodes5.length; _i4++) { var total = 0; for (var j3 = 0; j3 < opts.k; j3++) { U3[_i4][j3] = Math.random(); total += U3[_i4][j3]; } for (var _j = 0; _j < opts.k; _j++) { U3[_i4][_j] = U3[_i4][_j] / total; } } centroids = new Array(opts.k); for (var _i5 = 0; _i5 < opts.k; _i5++) { centroids[_i5] = new Array(opts.attributes.length); } weight8 = new Array(nodes5.length); for (var _i6 = 0; _i6 < nodes5.length; _i6++) { weight8[_i6] = new Array(opts.k); } var isStillMoving = true; var iterations = 0; while (isStillMoving && iterations < opts.maxIterations) { isStillMoving = false; updateCentroids(centroids, nodes5, U3, weight8, opts); updateMembership(U3, _U, centroids, nodes5, opts); if (!haveMatricesConverged(U3, _U, opts.sensitivityThreshold)) { isStillMoving = true; } iterations++; } clusters = assign$1(nodes5, U3, opts, cy); return { clusters, degreeOfMembership: U3 }; }, "fuzzyCMeans"); kClustering = { kMeans, kMedoids, fuzzyCMeans, fcm: fuzzyCMeans }; defaults$a = defaults$g({ distance: "euclidean", // distance metric to compare nodes linkage: "min", // linkage criterion : how to determine the distance between clusters of nodes mode: "threshold", // mode:'threshold' => clusters must be threshold distance apart threshold: Infinity, // the distance threshold // mode:'dendrogram' => the nodes are organised as leaves in a tree (siblings are close), merging makes clusters addDendrogram: false, // whether to add the dendrogram to the graph for viz dendrogramDepth: 0, // depth at which dendrogram branches are merged into the returned clusters attributes: [] // array of attr functions }); linkageAliases = { "single": "min", "complete": "max" }; setOptions$1 = /* @__PURE__ */ __name(function setOptions3(options2) { var opts = defaults$a(options2); var preferredAlias = linkageAliases[opts.linkage]; if (preferredAlias != null) { opts.linkage = preferredAlias; } return opts; }, "setOptions"); mergeClosest = /* @__PURE__ */ __name(function mergeClosest2(clusters, index, dists, mins, opts) { var minKey = 0; var min9 = Infinity; var dist3; var attrs = opts.attributes; var getDist3 = /* @__PURE__ */ __name(function getDist4(n1, n2) { return clusteringDistance(opts.distance, attrs.length, function(i3) { return attrs[i3](n1); }, function(i3) { return attrs[i3](n2); }, n1, n2); }, "getDist"); for (var i2 = 0; i2 < clusters.length; i2++) { var key = clusters[i2].key; var _dist = dists[key][mins[key]]; if (_dist < min9) { minKey = key; min9 = _dist; } } if (opts.mode === "threshold" && min9 >= opts.threshold || opts.mode === "dendrogram" && clusters.length === 1) { return false; } var c1 = index[minKey]; var c22 = index[mins[minKey]]; var merged; if (opts.mode === "dendrogram") { merged = { left: c1, right: c22, key: c1.key }; } else { merged = { value: c1.value.concat(c22.value), key: c1.key }; } clusters[c1.index] = merged; clusters.splice(c22.index, 1); index[c1.key] = merged; for (var _i = 0; _i < clusters.length; _i++) { var cur = clusters[_i]; if (c1.key === cur.key) { dist3 = Infinity; } else if (opts.linkage === "min") { dist3 = dists[c1.key][cur.key]; if (dists[c1.key][cur.key] > dists[c22.key][cur.key]) { dist3 = dists[c22.key][cur.key]; } } else if (opts.linkage === "max") { dist3 = dists[c1.key][cur.key]; if (dists[c1.key][cur.key] < dists[c22.key][cur.key]) { dist3 = dists[c22.key][cur.key]; } } else if (opts.linkage === "mean") { dist3 = (dists[c1.key][cur.key] * c1.size + dists[c22.key][cur.key] * c22.size) / (c1.size + c22.size); } else { if (opts.mode === "dendrogram") dist3 = getDist3(cur.value, c1.value); else dist3 = getDist3(cur.value[0], c1.value[0]); } dists[c1.key][cur.key] = dists[cur.key][c1.key] = dist3; } for (var _i2 = 0; _i2 < clusters.length; _i2++) { var key1 = clusters[_i2].key; if (mins[key1] === c1.key || mins[key1] === c22.key) { var _min = key1; for (var j3 = 0; j3 < clusters.length; j3++) { var key2 = clusters[j3].key; if (dists[key1][key2] < dists[key1][_min]) { _min = key2; } } mins[key1] = _min; } clusters[_i2].index = _i2; } c1.key = c22.key = c1.index = c22.index = null; return true; }, "mergeClosest"); _getAllChildren = /* @__PURE__ */ __name(function getAllChildren(root3, arr, cy) { if (!root3) return; if (root3.value) { arr.push(root3.value); } else { if (root3.left) _getAllChildren(root3.left, arr); if (root3.right) _getAllChildren(root3.right, arr); } }, "getAllChildren"); _buildDendrogram = /* @__PURE__ */ __name(function buildDendrogram(root3, cy) { if (!root3) return ""; if (root3.left && root3.right) { var leftStr = _buildDendrogram(root3.left, cy); var rightStr = _buildDendrogram(root3.right, cy); var node2 = cy.add({ group: "nodes", data: { id: leftStr + "," + rightStr } }); cy.add({ group: "edges", data: { source: leftStr, target: node2.id() } }); cy.add({ group: "edges", data: { source: rightStr, target: node2.id() } }); return node2.id(); } else if (root3.value) { return root3.value.id(); } }, "buildDendrogram"); _buildClustersFromTree = /* @__PURE__ */ __name(function buildClustersFromTree(root3, k2, cy) { if (!root3) return []; var left3 = [], right3 = [], leaves = []; if (k2 === 0) { if (root3.left) _getAllChildren(root3.left, left3); if (root3.right) _getAllChildren(root3.right, right3); leaves = left3.concat(right3); return [cy.collection(leaves)]; } else if (k2 === 1) { if (root3.value) { return [cy.collection(root3.value)]; } else { if (root3.left) _getAllChildren(root3.left, left3); if (root3.right) _getAllChildren(root3.right, right3); return [cy.collection(left3), cy.collection(right3)]; } } else { if (root3.value) { return [cy.collection(root3.value)]; } else { if (root3.left) left3 = _buildClustersFromTree(root3.left, k2 - 1, cy); if (root3.right) right3 = _buildClustersFromTree(root3.right, k2 - 1, cy); return left3.concat(right3); } } }, "buildClustersFromTree"); hierarchicalClustering = /* @__PURE__ */ __name(function hierarchicalClustering2(options2) { var cy = this.cy(); var nodes5 = this.nodes(); var opts = setOptions$1(options2); var attrs = opts.attributes; var getDist3 = /* @__PURE__ */ __name(function getDist4(n1, n22) { return clusteringDistance(opts.distance, attrs.length, function(i3) { return attrs[i3](n1); }, function(i3) { return attrs[i3](n22); }, n1, n22); }, "getDist"); var clusters = []; var dists = []; var mins = []; var index = []; for (var n2 = 0; n2 < nodes5.length; n2++) { var cluster = { value: opts.mode === "dendrogram" ? nodes5[n2] : [nodes5[n2]], key: n2, index: n2 }; clusters[n2] = cluster; index[n2] = cluster; dists[n2] = []; mins[n2] = 0; } for (var i2 = 0; i2 < clusters.length; i2++) { for (var j3 = 0; j3 <= i2; j3++) { var dist3 = void 0; if (opts.mode === "dendrogram") { dist3 = i2 === j3 ? Infinity : getDist3(clusters[i2].value, clusters[j3].value); } else { dist3 = i2 === j3 ? Infinity : getDist3(clusters[i2].value[0], clusters[j3].value[0]); } dists[i2][j3] = dist3; dists[j3][i2] = dist3; if (dist3 < dists[i2][mins[i2]]) { mins[i2] = j3; } } } var merged = mergeClosest(clusters, index, dists, mins, opts); while (merged) { merged = mergeClosest(clusters, index, dists, mins, opts); } var retClusters; if (opts.mode === "dendrogram") { retClusters = _buildClustersFromTree(clusters[0], opts.dendrogramDepth, cy); if (opts.addDendrogram) _buildDendrogram(clusters[0], cy); } else { retClusters = new Array(clusters.length); clusters.forEach(function(cluster2, i3) { cluster2.key = cluster2.index = null; retClusters[i3] = cy.collection(cluster2.value); }); } return retClusters; }, "hierarchicalClustering"); hierarchicalClustering$1 = { hierarchicalClustering, hca: hierarchicalClustering }; defaults$9 = defaults$g({ distance: "euclidean", // distance metric to compare attributes between two nodes preference: "median", // suitability of a data point to serve as an exemplar damping: 0.8, // damping factor between [0.5, 1) maxIterations: 1e3, // max number of iterations to run minIterations: 100, // min number of iterations to run in order for clustering to stop attributes: [ // functions to quantify the similarity between any two points // e.g. node => node.data('weight') ] }); setOptions4 = /* @__PURE__ */ __name(function setOptions5(options2) { var dmp = options2.damping; var pref = options2.preference; if (!(0.5 <= dmp && dmp < 1)) { error("Damping must range on [0.5, 1). Got: ".concat(dmp)); } var validPrefs = ["median", "mean", "min", "max"]; if (!(validPrefs.some(function(v3) { return v3 === pref; }) || number$1(pref))) { error("Preference must be one of [".concat(validPrefs.map(function(p3) { return "'".concat(p3, "'"); }).join(", "), "] or a number. Got: ").concat(pref)); } return defaults$9(options2); }, "setOptions"); getSimilarity2 = /* @__PURE__ */ __name(function getSimilarity3(type3, n1, n2, attributes) { var attr = /* @__PURE__ */ __name(function attr2(n3, i2) { return attributes[i2](n3); }, "attr"); return -clusteringDistance(type3, attributes.length, function(i2) { return attr(n1, i2); }, function(i2) { return attr(n2, i2); }, n1, n2); }, "getSimilarity"); getPreference = /* @__PURE__ */ __name(function getPreference2(S4, preference) { var p3 = null; if (preference === "median") { p3 = median(S4); } else if (preference === "mean") { p3 = mean(S4); } else if (preference === "min") { p3 = min5(S4); } else if (preference === "max") { p3 = max5(S4); } else { p3 = preference; } return p3; }, "getPreference"); findExemplars = /* @__PURE__ */ __name(function findExemplars2(n2, R3, A2) { var indices = []; for (var i2 = 0; i2 < n2; i2++) { if (R3[i2 * n2 + i2] + A2[i2 * n2 + i2] > 0) { indices.push(i2); } } return indices; }, "findExemplars"); assignClusters = /* @__PURE__ */ __name(function assignClusters2(n2, S4, exemplars) { var clusters = []; for (var i2 = 0; i2 < n2; i2++) { var index = -1; var max10 = -Infinity; for (var ei = 0; ei < exemplars.length; ei++) { var e3 = exemplars[ei]; if (S4[i2 * n2 + e3] > max10) { index = e3; max10 = S4[i2 * n2 + e3]; } } if (index > 0) { clusters.push(index); } } for (var _ei = 0; _ei < exemplars.length; _ei++) { clusters[exemplars[_ei]] = exemplars[_ei]; } return clusters; }, "assignClusters"); assign4 = /* @__PURE__ */ __name(function assign5(n2, S4, exemplars) { var clusters = assignClusters(n2, S4, exemplars); for (var ei = 0; ei < exemplars.length; ei++) { var ii = []; for (var c3 = 0; c3 < clusters.length; c3++) { if (clusters[c3] === exemplars[ei]) { ii.push(c3); } } var maxI = -1; var maxSum = -Infinity; for (var i2 = 0; i2 < ii.length; i2++) { var sum2 = 0; for (var j3 = 0; j3 < ii.length; j3++) { sum2 += S4[ii[j3] * n2 + ii[i2]]; } if (sum2 > maxSum) { maxI = i2; maxSum = sum2; } } exemplars[ei] = ii[maxI]; } clusters = assignClusters(n2, S4, exemplars); return clusters; }, "assign"); affinityPropagation = /* @__PURE__ */ __name(function affinityPropagation2(options2) { var cy = this.cy(); var nodes5 = this.nodes(); var opts = setOptions4(options2); var id2position = {}; for (var i2 = 0; i2 < nodes5.length; i2++) { id2position[nodes5[i2].id()] = i2; } var n2; var n22; var S4; var p3; var R3; var A2; n2 = nodes5.length; n22 = n2 * n2; S4 = new Array(n22); for (var _i = 0; _i < n22; _i++) { S4[_i] = -Infinity; } for (var _i2 = 0; _i2 < n2; _i2++) { for (var j3 = 0; j3 < n2; j3++) { if (_i2 !== j3) { S4[_i2 * n2 + j3] = getSimilarity2(opts.distance, nodes5[_i2], nodes5[j3], opts.attributes); } } } p3 = getPreference(S4, opts.preference); for (var _i3 = 0; _i3 < n2; _i3++) { S4[_i3 * n2 + _i3] = p3; } R3 = new Array(n22); for (var _i4 = 0; _i4 < n22; _i4++) { R3[_i4] = 0; } A2 = new Array(n22); for (var _i5 = 0; _i5 < n22; _i5++) { A2[_i5] = 0; } var old = new Array(n2); var Rp = new Array(n2); var se2 = new Array(n2); for (var _i6 = 0; _i6 < n2; _i6++) { old[_i6] = 0; Rp[_i6] = 0; se2[_i6] = 0; } var e3 = new Array(n2 * opts.minIterations); for (var _i7 = 0; _i7 < e3.length; _i7++) { e3[_i7] = 0; } var iter; for (iter = 0; iter < opts.maxIterations; iter++) { for (var _i8 = 0; _i8 < n2; _i8++) { var max10 = -Infinity, max22 = -Infinity, maxI = -1, AS = 0; for (var _j = 0; _j < n2; _j++) { old[_j] = R3[_i8 * n2 + _j]; AS = A2[_i8 * n2 + _j] + S4[_i8 * n2 + _j]; if (AS >= max10) { max22 = max10; max10 = AS; maxI = _j; } else if (AS > max22) { max22 = AS; } } for (var _j2 = 0; _j2 < n2; _j2++) { R3[_i8 * n2 + _j2] = (1 - opts.damping) * (S4[_i8 * n2 + _j2] - max10) + opts.damping * old[_j2]; } R3[_i8 * n2 + maxI] = (1 - opts.damping) * (S4[_i8 * n2 + maxI] - max22) + opts.damping * old[maxI]; } for (var _i9 = 0; _i9 < n2; _i9++) { var sum2 = 0; for (var _j3 = 0; _j3 < n2; _j3++) { old[_j3] = A2[_j3 * n2 + _i9]; Rp[_j3] = Math.max(0, R3[_j3 * n2 + _i9]); sum2 += Rp[_j3]; } sum2 -= Rp[_i9]; Rp[_i9] = R3[_i9 * n2 + _i9]; sum2 += Rp[_i9]; for (var _j4 = 0; _j4 < n2; _j4++) { A2[_j4 * n2 + _i9] = (1 - opts.damping) * Math.min(0, sum2 - Rp[_j4]) + opts.damping * old[_j4]; } A2[_i9 * n2 + _i9] = (1 - opts.damping) * (sum2 - Rp[_i9]) + opts.damping * old[_i9]; } var K5 = 0; for (var _i10 = 0; _i10 < n2; _i10++) { var E3 = A2[_i10 * n2 + _i10] + R3[_i10 * n2 + _i10] > 0 ? 1 : 0; e3[iter % opts.minIterations * n2 + _i10] = E3; K5 += E3; } if (K5 > 0 && (iter >= opts.minIterations - 1 || iter == opts.maxIterations - 1)) { var _sum = 0; for (var _i11 = 0; _i11 < n2; _i11++) { se2[_i11] = 0; for (var _j5 = 0; _j5 < opts.minIterations; _j5++) { se2[_i11] += e3[_j5 * n2 + _i11]; } if (se2[_i11] === 0 || se2[_i11] === opts.minIterations) { _sum++; } } if (_sum === n2) { break; } } } var exemplarsIndices = findExemplars(n2, R3, A2); var clusterIndices = assign4(n2, S4, exemplarsIndices); var clusters = {}; for (var c3 = 0; c3 < exemplarsIndices.length; c3++) { clusters[exemplarsIndices[c3]] = []; } for (var _i12 = 0; _i12 < nodes5.length; _i12++) { var pos = id2position[nodes5[_i12].id()]; var clusterIndex = clusterIndices[pos]; if (clusterIndex != null) { clusters[clusterIndex].push(nodes5[_i12]); } } var retClusters = new Array(exemplarsIndices.length); for (var _c = 0; _c < exemplarsIndices.length; _c++) { retClusters[_c] = cy.collection(clusters[exemplarsIndices[_c]]); } return retClusters; }, "affinityPropagation"); affinityPropagation$1 = { affinityPropagation, ap: affinityPropagation }; hierholzerDefaults = defaults$g({ root: void 0, directed: false }); elesfn$k = { hierholzer: /* @__PURE__ */ __name(function hierholzer(options2) { if (!plainObject(options2)) { var args = arguments; options2 = { root: args[0], directed: args[1] }; } var _hierholzerDefaults = hierholzerDefaults(options2), root3 = _hierholzerDefaults.root, directed = _hierholzerDefaults.directed; var eles = this; var dflag = false; var oddIn; var oddOut; var startVertex; if (root3) startVertex = string(root3) ? this.filter(root3)[0].id() : root3[0].id(); var nodes5 = {}; var edges3 = {}; if (directed) { eles.forEach(function(ele) { var id30 = ele.id(); if (ele.isNode()) { var ind = ele.indegree(true); var outd = ele.outdegree(true); var d1 = ind - outd; var d22 = outd - ind; if (d1 == 1) { if (oddIn) dflag = true; else oddIn = id30; } else if (d22 == 1) { if (oddOut) dflag = true; else oddOut = id30; } else if (d22 > 1 || d1 > 1) { dflag = true; } nodes5[id30] = []; ele.outgoers().forEach(function(e3) { if (e3.isEdge()) nodes5[id30].push(e3.id()); }); } else { edges3[id30] = [void 0, ele.target().id()]; } }); } else { eles.forEach(function(ele) { var id30 = ele.id(); if (ele.isNode()) { var d4 = ele.degree(true); if (d4 % 2) { if (!oddIn) oddIn = id30; else if (!oddOut) oddOut = id30; else dflag = true; } nodes5[id30] = []; ele.connectedEdges().forEach(function(e3) { return nodes5[id30].push(e3.id()); }); } else { edges3[id30] = [ele.source().id(), ele.target().id()]; } }); } var result = { found: false, trail: void 0 }; if (dflag) return result; else if (oddOut && oddIn) { if (directed) { if (startVertex && oddOut != startVertex) { return result; } startVertex = oddOut; } else { if (startVertex && oddOut != startVertex && oddIn != startVertex) { return result; } else if (!startVertex) { startVertex = oddOut; } } } else { if (!startVertex) startVertex = eles[0].id(); } var walk = /* @__PURE__ */ __name(function walk2(v3) { var currentNode = v3; var subtour2 = [v3]; var adj, adjTail, adjHead; while (nodes5[currentNode].length) { adj = nodes5[currentNode].shift(); adjTail = edges3[adj][0]; adjHead = edges3[adj][1]; if (currentNode != adjHead) { nodes5[adjHead] = nodes5[adjHead].filter(function(e3) { return e3 != adj; }); currentNode = adjHead; } else if (!directed && currentNode != adjTail) { nodes5[adjTail] = nodes5[adjTail].filter(function(e3) { return e3 != adj; }); currentNode = adjTail; } subtour2.unshift(adj); subtour2.unshift(currentNode); } return subtour2; }, "walk"); var trail = []; var subtour = []; subtour = walk(startVertex); while (subtour.length != 1) { if (nodes5[subtour[0]].length == 0) { trail.unshift(eles.getElementById(subtour.shift())); trail.unshift(eles.getElementById(subtour.shift())); } else { subtour = walk(subtour.shift()).concat(subtour); } } trail.unshift(eles.getElementById(subtour.shift())); for (var d3 in nodes5) { if (nodes5[d3].length) { return result; } } result.found = true; result.trail = this.spawn(trail, true); return result; }, "hierholzer") }; hopcroftTarjanBiconnected = /* @__PURE__ */ __name(function hopcroftTarjanBiconnected2() { var eles = this; var nodes5 = {}; var id30 = 0; var edgeCount3 = 0; var components3 = []; var stack = []; var visitedEdges = {}; var buildComponent = /* @__PURE__ */ __name(function buildComponent2(x5, y6) { var i2 = stack.length - 1; var cutset = []; var component2 = eles.spawn(); while (stack[i2].x != x5 || stack[i2].y != y6) { cutset.push(stack.pop().edge); i2--; } cutset.push(stack.pop().edge); cutset.forEach(function(edge) { var connectedNodes = edge.connectedNodes().intersection(eles); component2.merge(edge); connectedNodes.forEach(function(node2) { var nodeId = node2.id(); var connectedEdges = node2.connectedEdges().intersection(eles); component2.merge(node2); if (!nodes5[nodeId].cutVertex) { component2.merge(connectedEdges); } else { component2.merge(connectedEdges.filter(function(edge2) { return edge2.isLoop(); })); } }); }); components3.push(component2); }, "buildComponent"); var _biconnectedSearch = /* @__PURE__ */ __name(function biconnectedSearch(root3, currentNode, parent4) { if (root3 === parent4) edgeCount3 += 1; nodes5[currentNode] = { id: id30, low: id30++, cutVertex: false }; var edges3 = eles.getElementById(currentNode).connectedEdges().intersection(eles); if (edges3.size() === 0) { components3.push(eles.spawn(eles.getElementById(currentNode))); } else { var sourceId, targetId, otherNodeId, edgeId; edges3.forEach(function(edge) { sourceId = edge.source().id(); targetId = edge.target().id(); otherNodeId = sourceId === currentNode ? targetId : sourceId; if (otherNodeId !== parent4) { edgeId = edge.id(); if (!visitedEdges[edgeId]) { visitedEdges[edgeId] = true; stack.push({ x: currentNode, y: otherNodeId, edge }); } if (!(otherNodeId in nodes5)) { _biconnectedSearch(root3, otherNodeId, currentNode); nodes5[currentNode].low = Math.min(nodes5[currentNode].low, nodes5[otherNodeId].low); if (nodes5[currentNode].id <= nodes5[otherNodeId].low) { nodes5[currentNode].cutVertex = true; buildComponent(currentNode, otherNodeId); } } else { nodes5[currentNode].low = Math.min(nodes5[currentNode].low, nodes5[otherNodeId].id); } } }); } }, "biconnectedSearch"); eles.forEach(function(ele) { if (ele.isNode()) { var nodeId = ele.id(); if (!(nodeId in nodes5)) { edgeCount3 = 0; _biconnectedSearch(nodeId, nodeId); nodes5[nodeId].cutVertex = edgeCount3 > 1; } } }); var cutVertices = Object.keys(nodes5).filter(function(id31) { return nodes5[id31].cutVertex; }).map(function(id31) { return eles.getElementById(id31); }); return { cut: eles.spawn(cutVertices), components: components3 }; }, "hopcroftTarjanBiconnected"); hopcroftTarjanBiconnected$1 = { hopcroftTarjanBiconnected, htbc: hopcroftTarjanBiconnected, htb: hopcroftTarjanBiconnected, hopcroftTarjanBiconnectedComponents: hopcroftTarjanBiconnected }; tarjanStronglyConnected = /* @__PURE__ */ __name(function tarjanStronglyConnected2() { var eles = this; var nodes5 = {}; var index = 0; var components3 = []; var stack = []; var cut = eles.spawn(eles); var _stronglyConnectedSearch = /* @__PURE__ */ __name(function stronglyConnectedSearch(sourceNodeId) { stack.push(sourceNodeId); nodes5[sourceNodeId] = { index, low: index++, explored: false }; var connectedEdges = eles.getElementById(sourceNodeId).connectedEdges().intersection(eles); connectedEdges.forEach(function(edge) { var targetNodeId = edge.target().id(); if (targetNodeId !== sourceNodeId) { if (!(targetNodeId in nodes5)) { _stronglyConnectedSearch(targetNodeId); } if (!nodes5[targetNodeId].explored) { nodes5[sourceNodeId].low = Math.min(nodes5[sourceNodeId].low, nodes5[targetNodeId].low); } } }); if (nodes5[sourceNodeId].index === nodes5[sourceNodeId].low) { var componentNodes = eles.spawn(); for (; ; ) { var nodeId = stack.pop(); componentNodes.merge(eles.getElementById(nodeId)); nodes5[nodeId].low = nodes5[sourceNodeId].index; nodes5[nodeId].explored = true; if (nodeId === sourceNodeId) { break; } } var componentEdges = componentNodes.edgesWith(componentNodes); var component2 = componentNodes.merge(componentEdges); components3.push(component2); cut = cut.difference(component2); } }, "stronglyConnectedSearch"); eles.forEach(function(ele) { if (ele.isNode()) { var nodeId = ele.id(); if (!(nodeId in nodes5)) { _stronglyConnectedSearch(nodeId); } } }); return { cut, components: components3 }; }, "tarjanStronglyConnected"); tarjanStronglyConnected$1 = { tarjanStronglyConnected, tsc: tarjanStronglyConnected, tscc: tarjanStronglyConnected, tarjanStronglyConnectedComponents: tarjanStronglyConnected }; elesfn$j = {}; [elesfn$v, elesfn$u, elesfn$t, elesfn$s, elesfn$r, elesfn$q, elesfn$p, elesfn$o, elesfn$n, elesfn$m, elesfn$l, markovClustering$1, kClustering, hierarchicalClustering$1, affinityPropagation$1, elesfn$k, hopcroftTarjanBiconnected$1, tarjanStronglyConnected$1].forEach(function(props) { extend4(elesfn$j, props); }); STATE_PENDING = 0; STATE_FULFILLED = 1; STATE_REJECTED = 2; _api = /* @__PURE__ */ __name(function api(executor) { if (!(this instanceof _api)) return new _api(executor); this.id = "Thenable/1.0.7"; this.state = STATE_PENDING; this.fulfillValue = void 0; this.rejectReason = void 0; this.onFulfilled = []; this.onRejected = []; this.proxy = { then: this.then.bind(this) }; if (typeof executor === "function") executor.call(this, this.fulfill.bind(this), this.reject.bind(this)); }, "api"); _api.prototype = { /* promise resolving methods */ fulfill: /* @__PURE__ */ __name(function fulfill(value2) { return deliver(this, STATE_FULFILLED, "fulfillValue", value2); }, "fulfill"), reject: /* @__PURE__ */ __name(function reject2(value2) { return deliver(this, STATE_REJECTED, "rejectReason", value2); }, "reject"), /* "The then Method" [Promises/A+ 1.1, 1.2, 2.2] */ then: /* @__PURE__ */ __name(function then(onFulfilled, onRejected) { var curr = this; var next3 = new _api(); curr.onFulfilled.push(resolver(onFulfilled, next3, "fulfill")); curr.onRejected.push(resolver(onRejected, next3, "reject")); execute(curr); return next3.proxy; }, "then") }; deliver = /* @__PURE__ */ __name(function deliver2(curr, state3, name, value2) { if (curr.state === STATE_PENDING) { curr.state = state3; curr[name] = value2; execute(curr); } return curr; }, "deliver"); execute = /* @__PURE__ */ __name(function execute2(curr) { if (curr.state === STATE_FULFILLED) execute_handlers(curr, "onFulfilled", curr.fulfillValue); else if (curr.state === STATE_REJECTED) execute_handlers(curr, "onRejected", curr.rejectReason); }, "execute"); execute_handlers = /* @__PURE__ */ __name(function execute_handlers2(curr, name, value2) { if (curr[name].length === 0) return; var handlers = curr[name]; curr[name] = []; var func = /* @__PURE__ */ __name(function func2() { for (var i2 = 0; i2 < handlers.length; i2++) handlers[i2](value2); }, "func"); if (typeof setImmediate === "function") setImmediate(func); else setTimeout(func, 0); }, "execute_handlers"); resolver = /* @__PURE__ */ __name(function resolver2(cb, next3, method) { return function(value2) { if (typeof cb !== "function") next3[method].call(next3, value2); else { var result; try { result = cb(value2); } catch (e3) { next3.reject(e3); return; } _resolve(next3, result); } }; }, "resolver"); _resolve = /* @__PURE__ */ __name(function resolve(promise4, x5) { if (promise4 === x5 || promise4.proxy === x5) { promise4.reject(new TypeError("cannot resolve promise with itself")); return; } var then2; if (_typeof(x5) === "object" && x5 !== null || typeof x5 === "function") { try { then2 = x5.then; } catch (e3) { promise4.reject(e3); return; } } if (typeof then2 === "function") { var resolved = false; try { then2.call( x5, /* resolvePromise */ /* [Promises/A+ 2.3.3.3.1] */ function(y6) { if (resolved) return; resolved = true; if (y6 === x5) promise4.reject(new TypeError("circular thenable chain")); else _resolve(promise4, y6); }, /* rejectPromise */ /* [Promises/A+ 2.3.3.3.2] */ function(r2) { if (resolved) return; resolved = true; promise4.reject(r2); } ); } catch (e3) { if (!resolved) promise4.reject(e3); } return; } promise4.fulfill(x5); }, "resolve"); _api.all = function(ps) { return new _api(function(resolveAll, rejectAll) { var vals = new Array(ps.length); var doneCount = 0; var fulfill2 = /* @__PURE__ */ __name(function fulfill3(i3, val) { vals[i3] = val; doneCount++; if (doneCount === ps.length) { resolveAll(vals); } }, "fulfill"); for (var i2 = 0; i2 < ps.length; i2++) { (function(i3) { var p3 = ps[i3]; var isPromise = p3 != null && p3.then != null; if (isPromise) { p3.then(function(val2) { fulfill2(i3, val2); }, function(err) { rejectAll(err); }); } else { var val = p3; fulfill2(i3, val); } })(i2); } }); }; _api.resolve = function(val) { return new _api(function(resolve2, reject3) { resolve2(val); }); }; _api.reject = function(val) { return new _api(function(resolve2, reject3) { reject3(val); }); }; Promise$1 = typeof Promise !== "undefined" ? Promise : _api; Animation = /* @__PURE__ */ __name(function Animation2(target, opts, opts2) { var isCore = core2(target); var isEle = !isCore; var _p = this._private = extend4({ duration: 1e3 }, opts, opts2); _p.target = target; _p.style = _p.style || _p.css; _p.started = false; _p.playing = false; _p.hooked = false; _p.applying = false; _p.progress = 0; _p.completes = []; _p.frames = []; if (_p.complete && fn$6(_p.complete)) { _p.completes.push(_p.complete); } if (isEle) { var pos = target.position(); _p.startPosition = _p.startPosition || { x: pos.x, y: pos.y }; _p.startStyle = _p.startStyle || target.cy().style().getAnimationStartStyle(target, _p.style); } if (isCore) { var pan2 = target.pan(); _p.startPan = { x: pan2.x, y: pan2.y }; _p.startZoom = target.zoom(); } this.length = 1; this[0] = this; }, "Animation"); anifn = Animation.prototype; extend4(anifn, { instanceString: /* @__PURE__ */ __name(function instanceString() { return "animation"; }, "instanceString"), hook: /* @__PURE__ */ __name(function hook() { var _p = this._private; if (!_p.hooked) { var q3; var tAni = _p.target._private.animation; if (_p.queue) { q3 = tAni.queue; } else { q3 = tAni.current; } q3.push(this); if (elementOrCollection(_p.target)) { _p.target.cy().addToAnimationPool(_p.target); } _p.hooked = true; } return this; }, "hook"), play: /* @__PURE__ */ __name(function play() { var _p = this._private; if (_p.progress === 1) { _p.progress = 0; } _p.playing = true; _p.started = false; _p.stopped = false; this.hook(); return this; }, "play"), playing: /* @__PURE__ */ __name(function playing() { return this._private.playing; }, "playing"), apply: /* @__PURE__ */ __name(function apply3() { var _p = this._private; _p.applying = true; _p.started = false; _p.stopped = false; this.hook(); return this; }, "apply"), applying: /* @__PURE__ */ __name(function applying() { return this._private.applying; }, "applying"), pause: /* @__PURE__ */ __name(function pause() { var _p = this._private; _p.playing = false; _p.started = false; return this; }, "pause"), stop: /* @__PURE__ */ __name(function stop() { var _p = this._private; _p.playing = false; _p.started = false; _p.stopped = true; return this; }, "stop"), rewind: /* @__PURE__ */ __name(function rewind() { return this.progress(0); }, "rewind"), fastforward: /* @__PURE__ */ __name(function fastforward() { return this.progress(1); }, "fastforward"), time: /* @__PURE__ */ __name(function time3(t4) { var _p = this._private; if (t4 === void 0) { return _p.progress * _p.duration; } else { return this.progress(t4 / _p.duration); } }, "time"), progress: /* @__PURE__ */ __name(function progress(p3) { var _p = this._private; var wasPlaying = _p.playing; if (p3 === void 0) { return _p.progress; } else { if (wasPlaying) { this.pause(); } _p.progress = p3; _p.started = false; if (wasPlaying) { this.play(); } } return this; }, "progress"), completed: /* @__PURE__ */ __name(function completed() { return this._private.progress === 1; }, "completed"), reverse: /* @__PURE__ */ __name(function reverse() { var _p = this._private; var wasPlaying = _p.playing; if (wasPlaying) { this.pause(); } _p.progress = 1 - _p.progress; _p.started = false; var swap = /* @__PURE__ */ __name(function swap2(a2, b3) { var _pa = _p[a2]; if (_pa == null) { return; } _p[a2] = _p[b3]; _p[b3] = _pa; }, "swap"); swap("zoom", "startZoom"); swap("pan", "startPan"); swap("position", "startPosition"); if (_p.style) { for (var i2 = 0; i2 < _p.style.length; i2++) { var prop = _p.style[i2]; var name = prop.name; var startStyleProp = _p.startStyle[name]; _p.startStyle[name] = prop; _p.style[i2] = startStyleProp; } } if (wasPlaying) { this.play(); } return this; }, "reverse"), promise: /* @__PURE__ */ __name(function promise3(type3) { var _p = this._private; var arr; switch (type3) { case "frame": arr = _p.frames; break; default: case "complete": case "completed": arr = _p.completes; } return new Promise$1(function(resolve2, reject3) { arr.push(function() { resolve2(); }); }); }, "promise") }); anifn.complete = anifn.completed; anifn.run = anifn.play; anifn.running = anifn.playing; define$3 = { animated: /* @__PURE__ */ __name(function animated() { return /* @__PURE__ */ __name(function animatedImpl() { var self2 = this; var selfIsArrayLike = self2.length !== void 0; var all = selfIsArrayLike ? self2 : [self2]; var cy = this._private.cy || this; if (!cy.styleEnabled()) { return false; } var ele = all[0]; if (ele) { return ele._private.animation.current.length > 0; } }, "animatedImpl"); }, "animated"), // animated clearQueue: /* @__PURE__ */ __name(function clearQueue() { return /* @__PURE__ */ __name(function clearQueueImpl() { var self2 = this; var selfIsArrayLike = self2.length !== void 0; var all = selfIsArrayLike ? self2 : [self2]; var cy = this._private.cy || this; if (!cy.styleEnabled()) { return this; } for (var i2 = 0; i2 < all.length; i2++) { var ele = all[i2]; ele._private.animation.queue = []; } return this; }, "clearQueueImpl"); }, "clearQueue"), // clearQueue delay: /* @__PURE__ */ __name(function delay() { return /* @__PURE__ */ __name(function delayImpl(time4, complete) { var cy = this._private.cy || this; if (!cy.styleEnabled()) { return this; } return this.animate({ delay: time4, duration: time4, complete }); }, "delayImpl"); }, "delay"), // delay delayAnimation: /* @__PURE__ */ __name(function delayAnimation() { return /* @__PURE__ */ __name(function delayAnimationImpl(time4, complete) { var cy = this._private.cy || this; if (!cy.styleEnabled()) { return this; } return this.animation({ delay: time4, duration: time4, complete }); }, "delayAnimationImpl"); }, "delayAnimation"), // delay animation: /* @__PURE__ */ __name(function animation() { return /* @__PURE__ */ __name(function animationImpl(properties, params) { var self2 = this; var selfIsArrayLike = self2.length !== void 0; var all = selfIsArrayLike ? self2 : [self2]; var cy = this._private.cy || this; var isCore = !selfIsArrayLike; var isEles = !isCore; if (!cy.styleEnabled()) { return this; } var style3 = cy.style(); properties = extend4({}, properties, params); var propertiesEmpty = Object.keys(properties).length === 0; if (propertiesEmpty) { return new Animation(all[0], properties); } if (properties.duration === void 0) { properties.duration = 400; } switch (properties.duration) { case "slow": properties.duration = 600; break; case "fast": properties.duration = 200; break; } if (isEles) { properties.style = style3.getPropsList(properties.style || properties.css); properties.css = void 0; } if (isEles && properties.renderedPosition != null) { var rpos = properties.renderedPosition; var pan2 = cy.pan(); var zoom2 = cy.zoom(); properties.position = renderedToModelPosition(rpos, zoom2, pan2); } if (isCore && properties.panBy != null) { var panBy2 = properties.panBy; var cyPan = cy.pan(); properties.pan = { x: cyPan.x + panBy2.x, y: cyPan.y + panBy2.y }; } var center4 = properties.center || properties.centre; if (isCore && center4 != null) { var centerPan = cy.getCenterPan(center4.eles, properties.zoom); if (centerPan != null) { properties.pan = centerPan; } } if (isCore && properties.fit != null) { var fit2 = properties.fit; var fitVp = cy.getFitViewport(fit2.eles || fit2.boundingBox, fit2.padding); if (fitVp != null) { properties.pan = fitVp.pan; properties.zoom = fitVp.zoom; } } if (isCore && plainObject(properties.zoom)) { var vp = cy.getZoomedViewport(properties.zoom); if (vp != null) { if (vp.zoomed) { properties.zoom = vp.zoom; } if (vp.panned) { properties.pan = vp.pan; } } else { properties.zoom = null; } } return new Animation(all[0], properties); }, "animationImpl"); }, "animation"), // animate animate: /* @__PURE__ */ __name(function animate() { return /* @__PURE__ */ __name(function animateImpl(properties, params) { var self2 = this; var selfIsArrayLike = self2.length !== void 0; var all = selfIsArrayLike ? self2 : [self2]; var cy = this._private.cy || this; if (!cy.styleEnabled()) { return this; } if (params) { properties = extend4({}, properties, params); } for (var i2 = 0; i2 < all.length; i2++) { var ele = all[i2]; var queue = ele.animated() && (properties.queue === void 0 || properties.queue); var ani = ele.animation(properties, queue ? { queue: true } : void 0); ani.play(); } return this; }, "animateImpl"); }, "animate"), // animate stop: /* @__PURE__ */ __name(function stop2() { return /* @__PURE__ */ __name(function stopImpl(clearQueue2, jumpToEnd) { var self2 = this; var selfIsArrayLike = self2.length !== void 0; var all = selfIsArrayLike ? self2 : [self2]; var cy = this._private.cy || this; if (!cy.styleEnabled()) { return this; } for (var i2 = 0; i2 < all.length; i2++) { var ele = all[i2]; var _p = ele._private; var anis = _p.animation.current; for (var j3 = 0; j3 < anis.length; j3++) { var ani = anis[j3]; var ani_p = ani._private; if (jumpToEnd) { ani_p.duration = 0; } } if (clearQueue2) { _p.animation.queue = []; } if (!jumpToEnd) { _p.animation.current = []; } } cy.notify("draw"); return this; }, "stopImpl"); }, "stop") // stop }; __name(requireIsArray, "requireIsArray"); __name(require_isKey, "require_isKey"); __name(requireIsFunction, "requireIsFunction"); __name(require_coreJsData, "require_coreJsData"); __name(require_isMasked, "require_isMasked"); __name(require_toSource, "require_toSource"); __name(require_baseIsNative, "require_baseIsNative"); __name(require_getValue, "require_getValue"); __name(require_getNative, "require_getNative"); __name(require_nativeCreate, "require_nativeCreate"); __name(require_hashClear, "require_hashClear"); __name(require_hashDelete, "require_hashDelete"); __name(require_hashGet, "require_hashGet"); __name(require_hashHas, "require_hashHas"); __name(require_hashSet, "require_hashSet"); __name(require_Hash, "require_Hash"); __name(require_listCacheClear, "require_listCacheClear"); __name(requireEq, "requireEq"); __name(require_assocIndexOf, "require_assocIndexOf"); __name(require_listCacheDelete, "require_listCacheDelete"); __name(require_listCacheGet, "require_listCacheGet"); __name(require_listCacheHas, "require_listCacheHas"); __name(require_listCacheSet, "require_listCacheSet"); __name(require_ListCache, "require_ListCache"); __name(require_Map, "require_Map"); __name(require_mapCacheClear, "require_mapCacheClear"); __name(require_isKeyable, "require_isKeyable"); __name(require_getMapData, "require_getMapData"); __name(require_mapCacheDelete, "require_mapCacheDelete"); __name(require_mapCacheGet, "require_mapCacheGet"); __name(require_mapCacheHas, "require_mapCacheHas"); __name(require_mapCacheSet, "require_mapCacheSet"); __name(require_MapCache, "require_MapCache"); __name(requireMemoize, "requireMemoize"); __name(require_memoizeCapped, "require_memoizeCapped"); __name(require_stringToPath, "require_stringToPath"); __name(require_arrayMap, "require_arrayMap"); __name(require_baseToString, "require_baseToString"); __name(requireToString, "requireToString"); __name(require_castPath, "require_castPath"); __name(require_toKey, "require_toKey"); __name(require_baseGet, "require_baseGet"); __name(requireGet, "requireGet"); getExports = requireGet(); get4 = /* @__PURE__ */ getDefaultExportFromCjs(getExports); __name(require_defineProperty, "require_defineProperty"); __name(require_baseAssignValue, "require_baseAssignValue"); __name(require_assignValue, "require_assignValue"); __name(require_isIndex, "require_isIndex"); __name(require_baseSet, "require_baseSet"); __name(requireSet, "requireSet"); setExports = requireSet(); set4 = /* @__PURE__ */ getDefaultExportFromCjs(setExports); __name(require_copyArray, "require_copyArray"); __name(requireToPath, "requireToPath"); toPathExports = requireToPath(); toPath = /* @__PURE__ */ getDefaultExportFromCjs(toPathExports); define$2 = { // access data field data: /* @__PURE__ */ __name(function data(params) { var defaults4 = { field: "data", bindingEvent: "data", allowBinding: false, allowSetting: false, allowGetting: false, settingEvent: "data", settingTriggersEvent: false, triggerFnName: "trigger", immutableKeys: {}, // key => true if immutable updateStyle: false, beforeGet: /* @__PURE__ */ __name(function beforeGet2(self2) { }, "beforeGet"), beforeSet: /* @__PURE__ */ __name(function beforeSet3(self2, obj) { }, "beforeSet"), onSet: /* @__PURE__ */ __name(function onSet3(self2) { }, "onSet"), canSet: /* @__PURE__ */ __name(function canSet2(self2) { return true; }, "canSet") }; params = extend4({}, defaults4, params); return /* @__PURE__ */ __name(function dataImpl(name, value2) { var p3 = params; var self2 = this; var selfIsArrayLike = self2.length !== void 0; var all = selfIsArrayLike ? self2 : [self2]; var single = selfIsArrayLike ? self2[0] : self2; if (string(name)) { var isPathLike = name.indexOf(".") !== -1; var path4 = isPathLike && toPath(name); if (p3.allowGetting && value2 === void 0) { var ret; if (single) { p3.beforeGet(single); if (path4 && single._private[p3.field][name] === void 0) { ret = get4(single._private[p3.field], path4); } else { ret = single._private[p3.field][name]; } } return ret; } else if (p3.allowSetting && value2 !== void 0) { var valid2 = !p3.immutableKeys[name]; if (valid2) { var change2 = _defineProperty$1({}, name, value2); p3.beforeSet(self2, change2); for (var i2 = 0, l4 = all.length; i2 < l4; i2++) { var ele = all[i2]; if (p3.canSet(ele)) { if (path4 && single._private[p3.field][name] === void 0) { set4(ele._private[p3.field], path4, value2); } else { ele._private[p3.field][name] = value2; } } } if (p3.updateStyle) { self2.updateStyle(); } p3.onSet(self2); if (p3.settingTriggersEvent) { self2[p3.triggerFnName](p3.settingEvent); } } } } else if (p3.allowSetting && plainObject(name)) { var obj = name; var k2, v3; var keys2 = Object.keys(obj); p3.beforeSet(self2, obj); for (var _i = 0; _i < keys2.length; _i++) { k2 = keys2[_i]; v3 = obj[k2]; var _valid = !p3.immutableKeys[k2]; if (_valid) { for (var j3 = 0; j3 < all.length; j3++) { var _ele = all[j3]; if (p3.canSet(_ele)) { _ele._private[p3.field][k2] = v3; } } } } if (p3.updateStyle) { self2.updateStyle(); } p3.onSet(self2); if (p3.settingTriggersEvent) { self2[p3.triggerFnName](p3.settingEvent); } } else if (p3.allowBinding && fn$6(name)) { var fn3 = name; self2.on(p3.bindingEvent, fn3); } else if (p3.allowGetting && name === void 0) { var _ret; if (single) { p3.beforeGet(single); _ret = single._private[p3.field]; } return _ret; } return self2; }, "dataImpl"); }, "data"), // data // remove data field removeData: /* @__PURE__ */ __name(function removeData(params) { var defaults4 = { field: "data", event: "data", triggerFnName: "trigger", triggerEvent: false, immutableKeys: {} // key => true if immutable }; params = extend4({}, defaults4, params); return /* @__PURE__ */ __name(function removeDataImpl(names) { var p3 = params; var self2 = this; var selfIsArrayLike = self2.length !== void 0; var all = selfIsArrayLike ? self2 : [self2]; if (string(names)) { var keys2 = names.split(/\s+/); var l4 = keys2.length; for (var i2 = 0; i2 < l4; i2++) { var key = keys2[i2]; if (emptyString(key)) { continue; } var valid2 = !p3.immutableKeys[key]; if (valid2) { for (var i_a = 0, l_a = all.length; i_a < l_a; i_a++) { all[i_a]._private[p3.field][key] = void 0; } } } if (p3.triggerEvent) { self2[p3.triggerFnName](p3.event); } } else if (names === void 0) { for (var _i_a = 0, _l_a = all.length; _i_a < _l_a; _i_a++) { var _privateFields = all[_i_a]._private[p3.field]; var _keys = Object.keys(_privateFields); for (var _i2 = 0; _i2 < _keys.length; _i2++) { var _key = _keys[_i2]; var validKeyToDelete = !p3.immutableKeys[_key]; if (validKeyToDelete) { _privateFields[_key] = void 0; } } } if (p3.triggerEvent) { self2[p3.triggerFnName](p3.event); } } return self2; }, "removeDataImpl"); }, "removeData") // removeData }; define$1 = { eventAliasesOn: /* @__PURE__ */ __name(function eventAliasesOn(proto) { var p3 = proto; p3.addListener = p3.listen = p3.bind = p3.on; p3.unlisten = p3.unbind = p3.off = p3.removeListener; p3.trigger = p3.emit; p3.pon = p3.promiseOn = function(events, selector) { var self2 = this; var args = Array.prototype.slice.call(arguments, 0); return new Promise$1(function(resolve2, reject3) { var callback = /* @__PURE__ */ __name(function callback2(e3) { self2.off.apply(self2, offArgs); resolve2(e3); }, "callback"); var onArgs = args.concat([callback]); var offArgs = onArgs.concat([]); self2.on.apply(self2, onArgs); }); }; }, "eventAliasesOn") }; define2 = {}; [define$3, define$2, define$1].forEach(function(m3) { extend4(define2, m3); }); elesfn$i = { animate: define2.animate(), animation: define2.animation(), animated: define2.animated(), clearQueue: define2.clearQueue(), delay: define2.delay(), delayAnimation: define2.delayAnimation(), stop: define2.stop() }; elesfn$h = { classes: /* @__PURE__ */ __name(function classes(_classes) { var self2 = this; if (_classes === void 0) { var ret = []; self2[0]._private.classes.forEach(function(cls2) { return ret.push(cls2); }); return ret; } else if (!array2(_classes)) { _classes = (_classes || "").match(/\S+/g) || []; } var changed = []; var classesSet = new Set$1(_classes); for (var j3 = 0; j3 < self2.length; j3++) { var ele = self2[j3]; var _p = ele._private; var eleClasses = _p.classes; var changedEle = false; for (var i2 = 0; i2 < _classes.length; i2++) { var cls = _classes[i2]; var eleHasClass = eleClasses.has(cls); if (!eleHasClass) { changedEle = true; break; } } if (!changedEle) { changedEle = eleClasses.size !== _classes.length; } if (changedEle) { _p.classes = classesSet; changed.push(ele); } } if (changed.length > 0) { this.spawn(changed).updateStyle().emit("class"); } return self2; }, "classes"), addClass: /* @__PURE__ */ __name(function addClass(classes3) { return this.toggleClass(classes3, true); }, "addClass"), hasClass: /* @__PURE__ */ __name(function hasClass(className) { var ele = this[0]; return ele != null && ele._private.classes.has(className); }, "hasClass"), toggleClass: /* @__PURE__ */ __name(function toggleClass(classes3, toggle) { if (!array2(classes3)) { classes3 = classes3.match(/\S+/g) || []; } var self2 = this; var toggleUndefd = toggle === void 0; var changed = []; for (var i2 = 0, il = self2.length; i2 < il; i2++) { var ele = self2[i2]; var eleClasses = ele._private.classes; var changedEle = false; for (var j3 = 0; j3 < classes3.length; j3++) { var cls = classes3[j3]; var hasClass2 = eleClasses.has(cls); var changedNow = false; if (toggle || toggleUndefd && !hasClass2) { eleClasses.add(cls); changedNow = true; } else if (!toggle || toggleUndefd && hasClass2) { eleClasses["delete"](cls); changedNow = true; } if (!changedEle && changedNow) { changed.push(ele); changedEle = true; } } } if (changed.length > 0) { this.spawn(changed).updateStyle().emit("class"); } return self2; }, "toggleClass"), removeClass: /* @__PURE__ */ __name(function removeClass(classes3) { return this.toggleClass(classes3, false); }, "removeClass"), flashClass: /* @__PURE__ */ __name(function flashClass(classes3, duration) { var self2 = this; if (duration == null) { duration = 250; } else if (duration === 0) { return self2; } self2.addClass(classes3); setTimeout(function() { self2.removeClass(classes3); }, duration); return self2; }, "flashClass") }; elesfn$h.className = elesfn$h.classNames = elesfn$h.classes; tokens = { metaChar: "[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]", // chars we need to escape in let names, etc comparatorOp: "=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=", // binary comparison op (used in data selectors) boolOp: "\\?|\\!|\\^", // boolean (unary) operators (used in data selectors) string: `"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`, // string literals (used in data selectors) -- doublequotes | singlequotes number: number6, // number literal (used in data selectors) --- e.g. 0.1234, 1234, 12e123 meta: "degree|indegree|outdegree", // allowed metadata fields (i.e. allowed functions to use from Collection) separator: "\\s*,\\s*", // queries are separated by commas, e.g. edge[foo = 'bar'], node.someClass descendant: "\\s+", child: "\\s+>\\s+", subject: "\\$", group: "node|edge|\\*", directedEdge: "\\s+->\\s+", undirectedEdge: "\\s+<->\\s+" }; tokens.variable = "(?:[\\w-.]|(?:\\\\" + tokens.metaChar + "))+"; tokens.className = "(?:[\\w-]|(?:\\\\" + tokens.metaChar + "))+"; tokens.value = tokens.string + "|" + tokens.number; tokens.id = tokens.variable; (function() { var ops, op2, i2; ops = tokens.comparatorOp.split("|"); for (i2 = 0; i2 < ops.length; i2++) { op2 = ops[i2]; tokens.comparatorOp += "|@" + op2; } ops = tokens.comparatorOp.split("|"); for (i2 = 0; i2 < ops.length; i2++) { op2 = ops[i2]; if (op2.indexOf("!") >= 0) { continue; } if (op2 === "=") { continue; } tokens.comparatorOp += "|\\!" + op2; } })(); newQuery = /* @__PURE__ */ __name(function newQuery2() { return { checks: [] }; }, "newQuery"); Type2 = { /** E.g. node */ GROUP: 0, /** A collection of elements */ COLLECTION: 1, /** A filter(ele) function */ FILTER: 2, /** E.g. [foo > 1] */ DATA_COMPARE: 3, /** E.g. [foo] */ DATA_EXIST: 4, /** E.g. [?foo] */ DATA_BOOL: 5, /** E.g. [[degree > 2]] */ META_COMPARE: 6, /** E.g. :selected */ STATE: 7, /** E.g. #foo */ ID: 8, /** E.g. .foo */ CLASS: 9, /** E.g. #foo <-> #bar */ UNDIRECTED_EDGE: 10, /** E.g. #foo -> #bar */ DIRECTED_EDGE: 11, /** E.g. $#foo -> #bar */ NODE_SOURCE: 12, /** E.g. #foo -> $#bar */ NODE_TARGET: 13, /** E.g. $#foo <-> #bar */ NODE_NEIGHBOR: 14, /** E.g. #foo > #bar */ CHILD: 15, /** E.g. #foo #bar */ DESCENDANT: 16, /** E.g. $#foo > #bar */ PARENT: 17, /** E.g. $#foo #bar */ ANCESTOR: 18, /** E.g. #foo > $bar > #baz */ COMPOUND_SPLIT: 19, /** Always matches, useful placeholder for subject in `COMPOUND_SPLIT` */ TRUE: 20 }; stateSelectors = [{ selector: ":selected", matches: /* @__PURE__ */ __name(function matches(ele) { return ele.selected(); }, "matches") }, { selector: ":unselected", matches: /* @__PURE__ */ __name(function matches2(ele) { return !ele.selected(); }, "matches") }, { selector: ":selectable", matches: /* @__PURE__ */ __name(function matches3(ele) { return ele.selectable(); }, "matches") }, { selector: ":unselectable", matches: /* @__PURE__ */ __name(function matches4(ele) { return !ele.selectable(); }, "matches") }, { selector: ":locked", matches: /* @__PURE__ */ __name(function matches5(ele) { return ele.locked(); }, "matches") }, { selector: ":unlocked", matches: /* @__PURE__ */ __name(function matches6(ele) { return !ele.locked(); }, "matches") }, { selector: ":visible", matches: /* @__PURE__ */ __name(function matches7(ele) { return ele.visible(); }, "matches") }, { selector: ":hidden", matches: /* @__PURE__ */ __name(function matches8(ele) { return !ele.visible(); }, "matches") }, { selector: ":transparent", matches: /* @__PURE__ */ __name(function matches9(ele) { return ele.transparent(); }, "matches") }, { selector: ":grabbed", matches: /* @__PURE__ */ __name(function matches10(ele) { return ele.grabbed(); }, "matches") }, { selector: ":free", matches: /* @__PURE__ */ __name(function matches11(ele) { return !ele.grabbed(); }, "matches") }, { selector: ":removed", matches: /* @__PURE__ */ __name(function matches12(ele) { return ele.removed(); }, "matches") }, { selector: ":inside", matches: /* @__PURE__ */ __name(function matches13(ele) { return !ele.removed(); }, "matches") }, { selector: ":grabbable", matches: /* @__PURE__ */ __name(function matches14(ele) { return ele.grabbable(); }, "matches") }, { selector: ":ungrabbable", matches: /* @__PURE__ */ __name(function matches15(ele) { return !ele.grabbable(); }, "matches") }, { selector: ":animated", matches: /* @__PURE__ */ __name(function matches16(ele) { return ele.animated(); }, "matches") }, { selector: ":unanimated", matches: /* @__PURE__ */ __name(function matches17(ele) { return !ele.animated(); }, "matches") }, { selector: ":parent", matches: /* @__PURE__ */ __name(function matches18(ele) { return ele.isParent(); }, "matches") }, { selector: ":childless", matches: /* @__PURE__ */ __name(function matches19(ele) { return ele.isChildless(); }, "matches") }, { selector: ":child", matches: /* @__PURE__ */ __name(function matches20(ele) { return ele.isChild(); }, "matches") }, { selector: ":orphan", matches: /* @__PURE__ */ __name(function matches21(ele) { return ele.isOrphan(); }, "matches") }, { selector: ":nonorphan", matches: /* @__PURE__ */ __name(function matches22(ele) { return ele.isChild(); }, "matches") }, { selector: ":compound", matches: /* @__PURE__ */ __name(function matches23(ele) { if (ele.isNode()) { return ele.isParent(); } else { return ele.source().isParent() || ele.target().isParent(); } }, "matches") }, { selector: ":loop", matches: /* @__PURE__ */ __name(function matches24(ele) { return ele.isLoop(); }, "matches") }, { selector: ":simple", matches: /* @__PURE__ */ __name(function matches25(ele) { return ele.isSimple(); }, "matches") }, { selector: ":active", matches: /* @__PURE__ */ __name(function matches26(ele) { return ele.active(); }, "matches") }, { selector: ":inactive", matches: /* @__PURE__ */ __name(function matches27(ele) { return !ele.active(); }, "matches") }, { selector: ":backgrounding", matches: /* @__PURE__ */ __name(function matches28(ele) { return ele.backgrounding(); }, "matches") }, { selector: ":nonbackgrounding", matches: /* @__PURE__ */ __name(function matches29(ele) { return !ele.backgrounding(); }, "matches") }].sort(function(a2, b3) { return descending2(a2.selector, b3.selector); }); lookup = (function() { var selToFn = {}; var s2; for (var i2 = 0; i2 < stateSelectors.length; i2++) { s2 = stateSelectors[i2]; selToFn[s2.selector] = s2.matches; } return selToFn; })(); stateSelectorMatches = /* @__PURE__ */ __name(function stateSelectorMatches2(sel, ele) { return lookup[sel](ele); }, "stateSelectorMatches"); stateSelectorRegex = "(" + stateSelectors.map(function(s2) { return s2.selector; }).join("|") + ")"; cleanMetaChars = /* @__PURE__ */ __name(function cleanMetaChars2(str2) { return str2.replace(new RegExp("\\\\(" + tokens.metaChar + ")", "g"), function(match2, $1) { return $1; }); }, "cleanMetaChars"); replaceLastQuery = /* @__PURE__ */ __name(function replaceLastQuery2(selector, examiningQuery, replacementQuery) { selector[selector.length - 1] = replacementQuery; }, "replaceLastQuery"); exprs = [{ name: "group", // just used for identifying when debugging query: true, regex: "(" + tokens.group + ")", populate: /* @__PURE__ */ __name(function populate(selector, query, _ref) { var _ref2 = _slicedToArray(_ref, 1), group2 = _ref2[0]; query.checks.push({ type: Type2.GROUP, value: group2 === "*" ? group2 : group2 + "s" }); }, "populate") }, { name: "state", query: true, regex: stateSelectorRegex, populate: /* @__PURE__ */ __name(function populate2(selector, query, _ref3) { var _ref4 = _slicedToArray(_ref3, 1), state3 = _ref4[0]; query.checks.push({ type: Type2.STATE, value: state3 }); }, "populate") }, { name: "id", query: true, regex: "\\#(" + tokens.id + ")", populate: /* @__PURE__ */ __name(function populate3(selector, query, _ref5) { var _ref6 = _slicedToArray(_ref5, 1), id30 = _ref6[0]; query.checks.push({ type: Type2.ID, value: cleanMetaChars(id30) }); }, "populate") }, { name: "className", query: true, regex: "\\.(" + tokens.className + ")", populate: /* @__PURE__ */ __name(function populate4(selector, query, _ref7) { var _ref8 = _slicedToArray(_ref7, 1), className = _ref8[0]; query.checks.push({ type: Type2.CLASS, value: cleanMetaChars(className) }); }, "populate") }, { name: "dataExists", query: true, regex: "\\[\\s*(" + tokens.variable + ")\\s*\\]", populate: /* @__PURE__ */ __name(function populate5(selector, query, _ref9) { var _ref10 = _slicedToArray(_ref9, 1), variable = _ref10[0]; query.checks.push({ type: Type2.DATA_EXIST, field: cleanMetaChars(variable) }); }, "populate") }, { name: "dataCompare", query: true, regex: "\\[\\s*(" + tokens.variable + ")\\s*(" + tokens.comparatorOp + ")\\s*(" + tokens.value + ")\\s*\\]", populate: /* @__PURE__ */ __name(function populate6(selector, query, _ref11) { var _ref12 = _slicedToArray(_ref11, 3), variable = _ref12[0], comparatorOp = _ref12[1], value2 = _ref12[2]; var valueIsString = new RegExp("^" + tokens.string + "$").exec(value2) != null; if (valueIsString) { value2 = value2.substring(1, value2.length - 1); } else { value2 = parseFloat(value2); } query.checks.push({ type: Type2.DATA_COMPARE, field: cleanMetaChars(variable), operator: comparatorOp, value: value2 }); }, "populate") }, { name: "dataBool", query: true, regex: "\\[\\s*(" + tokens.boolOp + ")\\s*(" + tokens.variable + ")\\s*\\]", populate: /* @__PURE__ */ __name(function populate7(selector, query, _ref13) { var _ref14 = _slicedToArray(_ref13, 2), boolOp = _ref14[0], variable = _ref14[1]; query.checks.push({ type: Type2.DATA_BOOL, field: cleanMetaChars(variable), operator: boolOp }); }, "populate") }, { name: "metaCompare", query: true, regex: "\\[\\[\\s*(" + tokens.meta + ")\\s*(" + tokens.comparatorOp + ")\\s*(" + tokens.number + ")\\s*\\]\\]", populate: /* @__PURE__ */ __name(function populate8(selector, query, _ref15) { var _ref16 = _slicedToArray(_ref15, 3), meta3 = _ref16[0], comparatorOp = _ref16[1], number7 = _ref16[2]; query.checks.push({ type: Type2.META_COMPARE, field: cleanMetaChars(meta3), operator: comparatorOp, value: parseFloat(number7) }); }, "populate") }, { name: "nextQuery", separator: true, regex: tokens.separator, populate: /* @__PURE__ */ __name(function populate9(selector, query) { var currentSubject = selector.currentSubject; var edgeCount3 = selector.edgeCount; var compoundCount = selector.compoundCount; var lastQ = selector[selector.length - 1]; if (currentSubject != null) { lastQ.subject = currentSubject; selector.currentSubject = null; } lastQ.edgeCount = edgeCount3; lastQ.compoundCount = compoundCount; selector.edgeCount = 0; selector.compoundCount = 0; var nextQuery = selector[selector.length++] = newQuery(); return nextQuery; }, "populate") }, { name: "directedEdge", separator: true, regex: tokens.directedEdge, populate: /* @__PURE__ */ __name(function populate10(selector, query) { if (selector.currentSubject == null) { var edgeQuery = newQuery(); var source = query; var target = newQuery(); edgeQuery.checks.push({ type: Type2.DIRECTED_EDGE, source, target }); replaceLastQuery(selector, query, edgeQuery); selector.edgeCount++; return target; } else { var srcTgtQ = newQuery(); var _source = query; var _target = newQuery(); srcTgtQ.checks.push({ type: Type2.NODE_SOURCE, source: _source, target: _target }); replaceLastQuery(selector, query, srcTgtQ); selector.edgeCount++; return _target; } }, "populate") }, { name: "undirectedEdge", separator: true, regex: tokens.undirectedEdge, populate: /* @__PURE__ */ __name(function populate11(selector, query) { if (selector.currentSubject == null) { var edgeQuery = newQuery(); var source = query; var target = newQuery(); edgeQuery.checks.push({ type: Type2.UNDIRECTED_EDGE, nodes: [source, target] }); replaceLastQuery(selector, query, edgeQuery); selector.edgeCount++; return target; } else { var nhoodQ = newQuery(); var node2 = query; var neighbor = newQuery(); nhoodQ.checks.push({ type: Type2.NODE_NEIGHBOR, node: node2, neighbor }); replaceLastQuery(selector, query, nhoodQ); return neighbor; } }, "populate") }, { name: "child", separator: true, regex: tokens.child, populate: /* @__PURE__ */ __name(function populate12(selector, query) { if (selector.currentSubject == null) { var parentChildQuery = newQuery(); var child = newQuery(); var parent4 = selector[selector.length - 1]; parentChildQuery.checks.push({ type: Type2.CHILD, parent: parent4, child }); replaceLastQuery(selector, query, parentChildQuery); selector.compoundCount++; return child; } else if (selector.currentSubject === query) { var compound = newQuery(); var left3 = selector[selector.length - 1]; var right3 = newQuery(); var subject = newQuery(); var _child = newQuery(); var _parent = newQuery(); compound.checks.push({ type: Type2.COMPOUND_SPLIT, left: left3, right: right3, subject }); subject.checks = query.checks; query.checks = [{ type: Type2.TRUE }]; _parent.checks.push({ type: Type2.TRUE }); right3.checks.push({ type: Type2.PARENT, // type is swapped on right side queries parent: _parent, child: _child // empty for now }); replaceLastQuery(selector, left3, compound); selector.currentSubject = subject; selector.compoundCount++; return _child; } else { var _parent2 = newQuery(); var _child2 = newQuery(); var pcQChecks = [{ type: Type2.PARENT, parent: _parent2, child: _child2 }]; _parent2.checks = query.checks; query.checks = pcQChecks; selector.compoundCount++; return _child2; } }, "populate") }, { name: "descendant", separator: true, regex: tokens.descendant, populate: /* @__PURE__ */ __name(function populate13(selector, query) { if (selector.currentSubject == null) { var ancChQuery = newQuery(); var descendant = newQuery(); var ancestor = selector[selector.length - 1]; ancChQuery.checks.push({ type: Type2.DESCENDANT, ancestor, descendant }); replaceLastQuery(selector, query, ancChQuery); selector.compoundCount++; return descendant; } else if (selector.currentSubject === query) { var compound = newQuery(); var left3 = selector[selector.length - 1]; var right3 = newQuery(); var subject = newQuery(); var _descendant = newQuery(); var _ancestor = newQuery(); compound.checks.push({ type: Type2.COMPOUND_SPLIT, left: left3, right: right3, subject }); subject.checks = query.checks; query.checks = [{ type: Type2.TRUE }]; _ancestor.checks.push({ type: Type2.TRUE }); right3.checks.push({ type: Type2.ANCESTOR, // type is swapped on right side queries ancestor: _ancestor, descendant: _descendant // empty for now }); replaceLastQuery(selector, left3, compound); selector.currentSubject = subject; selector.compoundCount++; return _descendant; } else { var _ancestor2 = newQuery(); var _descendant2 = newQuery(); var adQChecks = [{ type: Type2.ANCESTOR, ancestor: _ancestor2, descendant: _descendant2 }]; _ancestor2.checks = query.checks; query.checks = adQChecks; selector.compoundCount++; return _descendant2; } }, "populate") }, { name: "subject", modifier: true, regex: tokens.subject, populate: /* @__PURE__ */ __name(function populate14(selector, query) { if (selector.currentSubject != null && selector.currentSubject !== query) { warn("Redefinition of subject in selector `" + selector.toString() + "`"); return false; } selector.currentSubject = query; var topQ = selector[selector.length - 1]; var topChk = topQ.checks[0]; var topType = topChk == null ? null : topChk.type; if (topType === Type2.DIRECTED_EDGE) { topChk.type = Type2.NODE_TARGET; } else if (topType === Type2.UNDIRECTED_EDGE) { topChk.type = Type2.NODE_NEIGHBOR; topChk.node = topChk.nodes[1]; topChk.neighbor = topChk.nodes[0]; topChk.nodes = null; } }, "populate") }]; exprs.forEach(function(e3) { return e3.regexObj = new RegExp("^" + e3.regex); }); consumeExpr = /* @__PURE__ */ __name(function consumeExpr2(remaining) { var expr; var match2; var name; for (var j3 = 0; j3 < exprs.length; j3++) { var e3 = exprs[j3]; var n2 = e3.name; var m3 = remaining.match(e3.regexObj); if (m3 != null) { match2 = m3; expr = e3; name = n2; var consumed = m3[0]; remaining = remaining.substring(consumed.length); break; } } return { expr, match: match2, name, remaining }; }, "consumeExpr"); consumeWhitespace = /* @__PURE__ */ __name(function consumeWhitespace2(remaining) { var match2 = remaining.match(/^\s+/); if (match2) { var consumed = match2[0]; remaining = remaining.substring(consumed.length); } return remaining; }, "consumeWhitespace"); parse = /* @__PURE__ */ __name(function parse2(selector) { var self2 = this; var remaining = self2.inputText = selector; var currentQuery = self2[0] = newQuery(); self2.length = 1; remaining = consumeWhitespace(remaining); for (; ; ) { var exprInfo = consumeExpr(remaining); if (exprInfo.expr == null) { warn("The selector `" + selector + "`is invalid"); return false; } else { var args = exprInfo.match.slice(1); var ret = exprInfo.expr.populate(self2, currentQuery, args); if (ret === false) { return false; } else if (ret != null) { currentQuery = ret; } } remaining = exprInfo.remaining; if (remaining.match(/^\s*$/)) { break; } } var lastQ = self2[self2.length - 1]; if (self2.currentSubject != null) { lastQ.subject = self2.currentSubject; } lastQ.edgeCount = self2.edgeCount; lastQ.compoundCount = self2.compoundCount; for (var i2 = 0; i2 < self2.length; i2++) { var q3 = self2[i2]; if (q3.compoundCount > 0 && q3.edgeCount > 0) { warn("The selector `" + selector + "` is invalid because it uses both a compound selector and an edge selector"); return false; } if (q3.edgeCount > 1) { warn("The selector `" + selector + "` is invalid because it uses multiple edge selectors"); return false; } else if (q3.edgeCount === 1) { warn("The selector `" + selector + "` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes."); } } return true; }, "parse"); toString3 = /* @__PURE__ */ __name(function toString4() { if (this.toStringCache != null) { return this.toStringCache; } var clean = /* @__PURE__ */ __name(function clean2(obj) { if (obj == null) { return ""; } else { return obj; } }, "clean"); var cleanVal = /* @__PURE__ */ __name(function cleanVal2(val) { if (string(val)) { return '"' + val + '"'; } else { return clean(val); } }, "cleanVal"); var space = /* @__PURE__ */ __name(function space2(val) { return " " + val + " "; }, "space"); var checkToString = /* @__PURE__ */ __name(function checkToString2(check, subject) { var type3 = check.type, value2 = check.value; switch (type3) { case Type2.GROUP: { var group2 = clean(value2); return group2.substring(0, group2.length - 1); } case Type2.DATA_COMPARE: { var field = check.field, operator = check.operator; return "[" + field + space(clean(operator)) + cleanVal(value2) + "]"; } case Type2.DATA_BOOL: { var _operator = check.operator, _field = check.field; return "[" + clean(_operator) + _field + "]"; } case Type2.DATA_EXIST: { var _field2 = check.field; return "[" + _field2 + "]"; } case Type2.META_COMPARE: { var _operator2 = check.operator, _field3 = check.field; return "[[" + _field3 + space(clean(_operator2)) + cleanVal(value2) + "]]"; } case Type2.STATE: { return value2; } case Type2.ID: { return "#" + value2; } case Type2.CLASS: { return "." + value2; } case Type2.PARENT: case Type2.CHILD: { return queryToString(check.parent, subject) + space(">") + queryToString(check.child, subject); } case Type2.ANCESTOR: case Type2.DESCENDANT: { return queryToString(check.ancestor, subject) + " " + queryToString(check.descendant, subject); } case Type2.COMPOUND_SPLIT: { var lhs = queryToString(check.left, subject); var sub2 = queryToString(check.subject, subject); var rhs = queryToString(check.right, subject); return lhs + (lhs.length > 0 ? " " : "") + sub2 + rhs; } case Type2.TRUE: { return ""; } } }, "checkToString"); var queryToString = /* @__PURE__ */ __name(function queryToString2(query2, subject) { return query2.checks.reduce(function(str3, chk, i3) { return str3 + (subject === query2 && i3 === 0 ? "$" : "") + checkToString(chk, subject); }, ""); }, "queryToString"); var str2 = ""; for (var i2 = 0; i2 < this.length; i2++) { var query = this[i2]; str2 += queryToString(query, query.subject); if (this.length > 1 && i2 < this.length - 1) { str2 += ", "; } } this.toStringCache = str2; return str2; }, "toString"); parse$1 = { parse, toString: toString3 }; valCmp = /* @__PURE__ */ __name(function valCmp2(fieldVal, operator, value2) { var matches33; var isFieldStr = string(fieldVal); var isFieldNum = number$1(fieldVal); var isValStr = string(value2); var fieldStr, valStr; var caseInsensitive = false; var notExpr = false; var isIneqCmp = false; if (operator.indexOf("!") >= 0) { operator = operator.replace("!", ""); notExpr = true; } if (operator.indexOf("@") >= 0) { operator = operator.replace("@", ""); caseInsensitive = true; } if (isFieldStr || isValStr || caseInsensitive) { fieldStr = !isFieldStr && !isFieldNum ? "" : "" + fieldVal; valStr = "" + value2; } if (caseInsensitive) { fieldVal = fieldStr = fieldStr.toLowerCase(); value2 = valStr = valStr.toLowerCase(); } switch (operator) { case "*=": matches33 = fieldStr.indexOf(valStr) >= 0; break; case "$=": matches33 = fieldStr.indexOf(valStr, fieldStr.length - valStr.length) >= 0; break; case "^=": matches33 = fieldStr.indexOf(valStr) === 0; break; case "=": matches33 = fieldVal === value2; break; case ">": isIneqCmp = true; matches33 = fieldVal > value2; break; case ">=": isIneqCmp = true; matches33 = fieldVal >= value2; break; case "<": isIneqCmp = true; matches33 = fieldVal < value2; break; case "<=": isIneqCmp = true; matches33 = fieldVal <= value2; break; default: matches33 = false; break; } if (notExpr && (fieldVal != null || !isIneqCmp)) { matches33 = !matches33; } return matches33; }, "valCmp"); boolCmp = /* @__PURE__ */ __name(function boolCmp2(fieldVal, operator) { switch (operator) { case "?": return fieldVal ? true : false; case "!": return fieldVal ? false : true; case "^": return fieldVal === void 0; } }, "boolCmp"); existCmp = /* @__PURE__ */ __name(function existCmp2(fieldVal) { return fieldVal !== void 0; }, "existCmp"); data$1 = /* @__PURE__ */ __name(function data2(ele, field) { return ele.data(field); }, "data"); meta = /* @__PURE__ */ __name(function meta2(ele, field) { return ele[field](); }, "meta"); match = []; matches$1 = /* @__PURE__ */ __name(function matches30(query, ele) { return query.checks.every(function(chk) { return match[chk.type](chk, ele); }); }, "matches"); match[Type2.GROUP] = function(check, ele) { var group2 = check.value; return group2 === "*" || group2 === ele.group(); }; match[Type2.STATE] = function(check, ele) { var stateSelector = check.value; return stateSelectorMatches(stateSelector, ele); }; match[Type2.ID] = function(check, ele) { var id30 = check.value; return ele.id() === id30; }; match[Type2.CLASS] = function(check, ele) { var cls = check.value; return ele.hasClass(cls); }; match[Type2.META_COMPARE] = function(check, ele) { var field = check.field, operator = check.operator, value2 = check.value; return valCmp(meta(ele, field), operator, value2); }; match[Type2.DATA_COMPARE] = function(check, ele) { var field = check.field, operator = check.operator, value2 = check.value; return valCmp(data$1(ele, field), operator, value2); }; match[Type2.DATA_BOOL] = function(check, ele) { var field = check.field, operator = check.operator; return boolCmp(data$1(ele, field), operator); }; match[Type2.DATA_EXIST] = function(check, ele) { var field = check.field; check.operator; return existCmp(data$1(ele, field)); }; match[Type2.UNDIRECTED_EDGE] = function(check, ele) { var qA = check.nodes[0]; var qB = check.nodes[1]; var src = ele.source(); var tgt = ele.target(); return matches$1(qA, src) && matches$1(qB, tgt) || matches$1(qB, src) && matches$1(qA, tgt); }; match[Type2.NODE_NEIGHBOR] = function(check, ele) { return matches$1(check.node, ele) && ele.neighborhood().some(function(n2) { return n2.isNode() && matches$1(check.neighbor, n2); }); }; match[Type2.DIRECTED_EDGE] = function(check, ele) { return matches$1(check.source, ele.source()) && matches$1(check.target, ele.target()); }; match[Type2.NODE_SOURCE] = function(check, ele) { return matches$1(check.source, ele) && ele.outgoers().some(function(n2) { return n2.isNode() && matches$1(check.target, n2); }); }; match[Type2.NODE_TARGET] = function(check, ele) { return matches$1(check.target, ele) && ele.incomers().some(function(n2) { return n2.isNode() && matches$1(check.source, n2); }); }; match[Type2.CHILD] = function(check, ele) { return matches$1(check.child, ele) && matches$1(check.parent, ele.parent()); }; match[Type2.PARENT] = function(check, ele) { return matches$1(check.parent, ele) && ele.children().some(function(c3) { return matches$1(check.child, c3); }); }; match[Type2.DESCENDANT] = function(check, ele) { return matches$1(check.descendant, ele) && ele.ancestors().some(function(a2) { return matches$1(check.ancestor, a2); }); }; match[Type2.ANCESTOR] = function(check, ele) { return matches$1(check.ancestor, ele) && ele.descendants().some(function(d3) { return matches$1(check.descendant, d3); }); }; match[Type2.COMPOUND_SPLIT] = function(check, ele) { return matches$1(check.subject, ele) && matches$1(check.left, ele) && matches$1(check.right, ele); }; match[Type2.TRUE] = function() { return true; }; match[Type2.COLLECTION] = function(check, ele) { var collection4 = check.value; return collection4.has(ele); }; match[Type2.FILTER] = function(check, ele) { var filter6 = check.value; return filter6(ele); }; filter3 = /* @__PURE__ */ __name(function filter4(collection4) { var self2 = this; if (self2.length === 1 && self2[0].checks.length === 1 && self2[0].checks[0].type === Type2.ID) { return collection4.getElementById(self2[0].checks[0].value).collection(); } var selectorFunction = /* @__PURE__ */ __name(function selectorFunction2(element3) { for (var j3 = 0; j3 < self2.length; j3++) { var query = self2[j3]; if (matches$1(query, element3)) { return true; } } return false; }, "selectorFunction"); if (self2.text() == null) { selectorFunction = /* @__PURE__ */ __name(function selectorFunction2() { return true; }, "selectorFunction"); } return collection4.filter(selectorFunction); }, "filter"); matches31 = /* @__PURE__ */ __name(function matches32(ele) { var self2 = this; for (var j3 = 0; j3 < self2.length; j3++) { var query = self2[j3]; if (matches$1(query, ele)) { return true; } } return false; }, "matches"); matching = { matches: matches31, filter: filter3 }; Selector = /* @__PURE__ */ __name(function Selector2(selector) { this.inputText = selector; this.currentSubject = null; this.compoundCount = 0; this.edgeCount = 0; this.length = 0; if (selector == null || string(selector) && selector.match(/^\s*$/)) ; else if (elementOrCollection(selector)) { this.addQuery({ checks: [{ type: Type2.COLLECTION, value: selector.collection() }] }); } else if (fn$6(selector)) { this.addQuery({ checks: [{ type: Type2.FILTER, value: selector }] }); } else if (string(selector)) { if (!this.parse(selector)) { this.invalid = true; } } else { error("A selector must be created from a string; found "); } }, "Selector"); selfn = Selector.prototype; [parse$1, matching].forEach(function(p3) { return extend4(selfn, p3); }); selfn.text = function() { return this.inputText; }; selfn.size = function() { return this.length; }; selfn.eq = function(i2) { return this[i2]; }; selfn.sameText = function(otherSel) { return !this.invalid && !otherSel.invalid && this.text() === otherSel.text(); }; selfn.addQuery = function(q3) { this[this.length++] = q3; }; selfn.selector = selfn.toString; elesfn$g = { allAre: /* @__PURE__ */ __name(function allAre(selector) { var selObj = new Selector(selector); return this.every(function(ele) { return selObj.matches(ele); }); }, "allAre"), is: /* @__PURE__ */ __name(function is(selector) { var selObj = new Selector(selector); return this.some(function(ele) { return selObj.matches(ele); }); }, "is"), some: /* @__PURE__ */ __name(function some2(fn3, thisArg) { for (var i2 = 0; i2 < this.length; i2++) { var ret = !thisArg ? fn3(this[i2], i2, this) : fn3.apply(thisArg, [this[i2], i2, this]); if (ret) { return true; } } return false; }, "some"), every: /* @__PURE__ */ __name(function every2(fn3, thisArg) { for (var i2 = 0; i2 < this.length; i2++) { var ret = !thisArg ? fn3(this[i2], i2, this) : fn3.apply(thisArg, [this[i2], i2, this]); if (!ret) { return false; } } return true; }, "every"), same: /* @__PURE__ */ __name(function same(collection4) { if (this === collection4) { return true; } collection4 = this.cy().collection(collection4); var thisLength = this.length; var collectionLength = collection4.length; if (thisLength !== collectionLength) { return false; } if (thisLength === 1) { return this[0] === collection4[0]; } return this.every(function(ele) { return collection4.hasElementWithId(ele.id()); }); }, "same"), anySame: /* @__PURE__ */ __name(function anySame(collection4) { collection4 = this.cy().collection(collection4); return this.some(function(ele) { return collection4.hasElementWithId(ele.id()); }); }, "anySame"), allAreNeighbors: /* @__PURE__ */ __name(function allAreNeighbors(collection4) { collection4 = this.cy().collection(collection4); var nhood = this.neighborhood(); return collection4.every(function(ele) { return nhood.hasElementWithId(ele.id()); }); }, "allAreNeighbors"), contains: /* @__PURE__ */ __name(function contains3(collection4) { collection4 = this.cy().collection(collection4); var self2 = this; return collection4.every(function(ele) { return self2.hasElementWithId(ele.id()); }); }, "contains") }; elesfn$g.allAreNeighbours = elesfn$g.allAreNeighbors; elesfn$g.has = elesfn$g.contains; elesfn$g.equal = elesfn$g.equals = elesfn$g.same; cache = /* @__PURE__ */ __name(function cache2(fn3, name) { return /* @__PURE__ */ __name(function traversalCache(arg1, arg2, arg3, arg4) { var selectorOrEles = arg1; var eles = this; var key; if (selectorOrEles == null) { key = ""; } else if (elementOrCollection(selectorOrEles) && selectorOrEles.length === 1) { key = selectorOrEles.id(); } if (eles.length === 1 && key) { var _p = eles[0]._private; var tch = _p.traversalCache = _p.traversalCache || {}; var ch = tch[name] = tch[name] || []; var hash = hashString(key); var cacheHit = ch[hash]; if (cacheHit) { return cacheHit; } else { return ch[hash] = fn3.call(eles, arg1, arg2, arg3, arg4); } } else { return fn3.call(eles, arg1, arg2, arg3, arg4); } }, "traversalCache"); }, "cache"); elesfn$f = { parent: /* @__PURE__ */ __name(function parent(selector) { var parents3 = []; if (this.length === 1) { var parent4 = this[0]._private.parent; if (parent4) { return parent4; } } for (var i2 = 0; i2 < this.length; i2++) { var ele = this[i2]; var _parent = ele._private.parent; if (_parent) { parents3.push(_parent); } } return this.spawn(parents3, true).filter(selector); }, "parent"), parents: /* @__PURE__ */ __name(function parents2(selector) { var parents3 = []; var eles = this.parent(); while (eles.nonempty()) { for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; parents3.push(ele); } eles = eles.parent(); } return this.spawn(parents3, true).filter(selector); }, "parents"), commonAncestors: /* @__PURE__ */ __name(function commonAncestors(selector) { var ancestors; for (var i2 = 0; i2 < this.length; i2++) { var ele = this[i2]; var parents3 = ele.parents(); ancestors = ancestors || parents3; ancestors = ancestors.intersect(parents3); } return ancestors.filter(selector); }, "commonAncestors"), orphans: /* @__PURE__ */ __name(function orphans(selector) { return this.stdFilter(function(ele) { return ele.isOrphan(); }).filter(selector); }, "orphans"), nonorphans: /* @__PURE__ */ __name(function nonorphans(selector) { return this.stdFilter(function(ele) { return ele.isChild(); }).filter(selector); }, "nonorphans"), children: cache(function(selector) { var children2 = []; for (var i2 = 0; i2 < this.length; i2++) { var ele = this[i2]; var eleChildren = ele._private.children; for (var j3 = 0; j3 < eleChildren.length; j3++) { children2.push(eleChildren[j3]); } } return this.spawn(children2, true).filter(selector); }, "children"), siblings: /* @__PURE__ */ __name(function siblings(selector) { return this.parent().children().not(this).filter(selector); }, "siblings"), isParent: /* @__PURE__ */ __name(function isParent() { var ele = this[0]; if (ele) { return ele.isNode() && ele._private.children.length !== 0; } }, "isParent"), isChildless: /* @__PURE__ */ __name(function isChildless() { var ele = this[0]; if (ele) { return ele.isNode() && ele._private.children.length === 0; } }, "isChildless"), isChild: /* @__PURE__ */ __name(function isChild() { var ele = this[0]; if (ele) { return ele.isNode() && ele._private.parent != null; } }, "isChild"), isOrphan: /* @__PURE__ */ __name(function isOrphan() { var ele = this[0]; if (ele) { return ele.isNode() && ele._private.parent == null; } }, "isOrphan"), descendants: /* @__PURE__ */ __name(function descendants2(selector) { var elements2 = []; function add3(eles) { for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; elements2.push(ele); if (ele.children().nonempty()) { add3(ele.children()); } } } __name(add3, "add"); add3(this.children()); return this.spawn(elements2, true).filter(selector); }, "descendants") }; __name(forEachCompound, "forEachCompound"); __name(addChildren, "addChildren"); elesfn$f.forEachDown = function(fn3) { var includeSelf = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true; return forEachCompound(this, fn3, includeSelf, addChildren); }; __name(addParent, "addParent"); elesfn$f.forEachUp = function(fn3) { var includeSelf = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true; return forEachCompound(this, fn3, includeSelf, addParent); }; __name(addParentAndChildren, "addParentAndChildren"); elesfn$f.forEachUpAndDown = function(fn3) { var includeSelf = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true; return forEachCompound(this, fn3, includeSelf, addParentAndChildren); }; elesfn$f.ancestors = elesfn$f.parents; fn$5 = elesfn$e = { data: define2.data({ field: "data", bindingEvent: "data", allowBinding: true, allowSetting: true, settingEvent: "data", settingTriggersEvent: true, triggerFnName: "trigger", allowGetting: true, immutableKeys: { "id": true, "source": true, "target": true, "parent": true }, updateStyle: true }), removeData: define2.removeData({ field: "data", event: "data", triggerFnName: "trigger", triggerEvent: true, immutableKeys: { "id": true, "source": true, "target": true, "parent": true }, updateStyle: true }), scratch: define2.data({ field: "scratch", bindingEvent: "scratch", allowBinding: true, allowSetting: true, settingEvent: "scratch", settingTriggersEvent: true, triggerFnName: "trigger", allowGetting: true, updateStyle: true }), removeScratch: define2.removeData({ field: "scratch", event: "scratch", triggerFnName: "trigger", triggerEvent: true, updateStyle: true }), rscratch: define2.data({ field: "rscratch", allowBinding: false, allowSetting: true, settingTriggersEvent: false, allowGetting: true }), removeRscratch: define2.removeData({ field: "rscratch", triggerEvent: false }), id: /* @__PURE__ */ __name(function id3() { var ele = this[0]; if (ele) { return ele._private.data.id; } }, "id") }; fn$5.attr = fn$5.data; fn$5.removeAttr = fn$5.removeData; data3 = elesfn$e; elesfn$d = {}; __name(defineDegreeFunction, "defineDegreeFunction"); extend4(elesfn$d, { degree: defineDegreeFunction(function(node2, edge) { if (edge.source().same(edge.target())) { return 2; } else { return 1; } }), indegree: defineDegreeFunction(function(node2, edge) { if (edge.target().same(node2)) { return 1; } else { return 0; } }), outdegree: defineDegreeFunction(function(node2, edge) { if (edge.source().same(node2)) { return 1; } else { return 0; } }) }); __name(defineDegreeBoundsFunction, "defineDegreeBoundsFunction"); extend4(elesfn$d, { minDegree: defineDegreeBoundsFunction("degree", function(degree, min9) { return degree < min9; }), maxDegree: defineDegreeBoundsFunction("degree", function(degree, max10) { return degree > max10; }), minIndegree: defineDegreeBoundsFunction("indegree", function(degree, min9) { return degree < min9; }), maxIndegree: defineDegreeBoundsFunction("indegree", function(degree, max10) { return degree > max10; }), minOutdegree: defineDegreeBoundsFunction("outdegree", function(degree, min9) { return degree < min9; }), maxOutdegree: defineDegreeBoundsFunction("outdegree", function(degree, max10) { return degree > max10; }) }); extend4(elesfn$d, { totalDegree: /* @__PURE__ */ __name(function totalDegree(includeLoops) { var total = 0; var nodes5 = this.nodes(); for (var i2 = 0; i2 < nodes5.length; i2++) { total += nodes5[i2].degree(includeLoops); } return total; }, "totalDegree") }); beforePositionSet = /* @__PURE__ */ __name(function beforePositionSet2(eles, newPos, silent) { for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; if (!ele.locked()) { var oldPos = ele._private.position; var delta = { x: newPos.x != null ? newPos.x - oldPos.x : 0, y: newPos.y != null ? newPos.y - oldPos.y : 0 }; if (ele.isParent() && !(delta.x === 0 && delta.y === 0)) { ele.children().shift(delta, silent); } ele.dirtyBoundingBoxCache(); } } }, "beforePositionSet"); positionDef = { field: "position", bindingEvent: "position", allowBinding: true, allowSetting: true, settingEvent: "position", settingTriggersEvent: true, triggerFnName: "emitAndNotify", allowGetting: true, validKeys: ["x", "y"], beforeGet: /* @__PURE__ */ __name(function beforeGet(ele) { ele.updateCompoundBounds(); }, "beforeGet"), beforeSet: /* @__PURE__ */ __name(function beforeSet(eles, newPos) { beforePositionSet(eles, newPos, false); }, "beforeSet"), onSet: /* @__PURE__ */ __name(function onSet(eles) { eles.dirtyCompoundBoundsCache(); }, "onSet"), canSet: /* @__PURE__ */ __name(function canSet(ele) { return !ele.locked(); }, "canSet") }; fn$4 = elesfn$c = { position: define2.data(positionDef), // position but no notification to renderer silentPosition: define2.data(extend4({}, positionDef, { allowBinding: false, allowSetting: true, settingTriggersEvent: false, allowGetting: false, beforeSet: /* @__PURE__ */ __name(function beforeSet2(eles, newPos) { beforePositionSet(eles, newPos, true); }, "beforeSet"), onSet: /* @__PURE__ */ __name(function onSet2(eles) { eles.dirtyCompoundBoundsCache(); }, "onSet") })), positions: /* @__PURE__ */ __name(function positions(pos, silent) { if (plainObject(pos)) { if (silent) { this.silentPosition(pos); } else { this.position(pos); } } else if (fn$6(pos)) { var _fn = pos; var cy = this.cy(); cy.startBatch(); for (var i2 = 0; i2 < this.length; i2++) { var ele = this[i2]; var _pos = void 0; if (_pos = _fn(ele, i2)) { if (silent) { ele.silentPosition(_pos); } else { ele.position(_pos); } } } cy.endBatch(); } return this; }, "positions"), silentPositions: /* @__PURE__ */ __name(function silentPositions(pos) { return this.positions(pos, true); }, "silentPositions"), shift: /* @__PURE__ */ __name(function shift(dim, val, silent) { var delta; if (plainObject(dim)) { delta = { x: number$1(dim.x) ? dim.x : 0, y: number$1(dim.y) ? dim.y : 0 }; silent = val; } else if (string(dim) && number$1(val)) { delta = { x: 0, y: 0 }; delta[dim] = val; } if (delta != null) { var cy = this.cy(); cy.startBatch(); for (var i2 = 0; i2 < this.length; i2++) { var ele = this[i2]; if (cy.hasCompoundNodes() && ele.isChild() && ele.ancestors().anySame(this)) { continue; } var pos = ele.position(); var newPos = { x: pos.x + delta.x, y: pos.y + delta.y }; if (silent) { ele.silentPosition(newPos); } else { ele.position(newPos); } } cy.endBatch(); } return this; }, "shift"), silentShift: /* @__PURE__ */ __name(function silentShift(dim, val) { if (plainObject(dim)) { this.shift(dim, true); } else if (string(dim) && number$1(val)) { this.shift(dim, val, true); } return this; }, "silentShift"), // get/set the rendered (i.e. on screen) positon of the element renderedPosition: /* @__PURE__ */ __name(function renderedPosition(dim, val) { var ele = this[0]; var cy = this.cy(); var zoom2 = cy.zoom(); var pan2 = cy.pan(); var rpos = plainObject(dim) ? dim : void 0; var setting = rpos !== void 0 || val !== void 0 && string(dim); if (ele && ele.isNode()) { if (setting) { for (var i2 = 0; i2 < this.length; i2++) { var _ele = this[i2]; if (val !== void 0) { _ele.position(dim, (val - pan2[dim]) / zoom2); } else if (rpos !== void 0) { _ele.position(renderedToModelPosition(rpos, zoom2, pan2)); } } } else { var pos = ele.position(); rpos = modelToRenderedPosition$1(pos, zoom2, pan2); if (dim === void 0) { return rpos; } else { return rpos[dim]; } } } else if (!setting) { return void 0; } return this; }, "renderedPosition"), // get/set the position relative to the parent relativePosition: /* @__PURE__ */ __name(function relativePosition(dim, val) { var ele = this[0]; var cy = this.cy(); var ppos = plainObject(dim) ? dim : void 0; var setting = ppos !== void 0 || val !== void 0 && string(dim); var hasCompoundNodes2 = cy.hasCompoundNodes(); if (ele && ele.isNode()) { if (setting) { for (var i2 = 0; i2 < this.length; i2++) { var _ele2 = this[i2]; var parent4 = hasCompoundNodes2 ? _ele2.parent() : null; var hasParent = parent4 && parent4.length > 0; var relativeToParent = hasParent; if (hasParent) { parent4 = parent4[0]; } var origin = relativeToParent ? parent4.position() : { x: 0, y: 0 }; if (val !== void 0) { _ele2.position(dim, val + origin[dim]); } else if (ppos !== void 0) { _ele2.position({ x: ppos.x + origin.x, y: ppos.y + origin.y }); } } } else { var pos = ele.position(); var _parent = hasCompoundNodes2 ? ele.parent() : null; var _hasParent = _parent && _parent.length > 0; var _relativeToParent = _hasParent; if (_hasParent) { _parent = _parent[0]; } var _origin = _relativeToParent ? _parent.position() : { x: 0, y: 0 }; ppos = { x: pos.x - _origin.x, y: pos.y - _origin.y }; if (dim === void 0) { return ppos; } else { return ppos[dim]; } } } else if (!setting) { return void 0; } return this; }, "relativePosition") }; fn$4.modelPosition = fn$4.point = fn$4.position; fn$4.modelPositions = fn$4.points = fn$4.positions; fn$4.renderedPoint = fn$4.renderedPosition; fn$4.relativePoint = fn$4.relativePosition; position2 = elesfn$c; fn$3 = elesfn$b = {}; elesfn$b.renderedBoundingBox = function(options2) { var bb = this.boundingBox(options2); var cy = this.cy(); var zoom2 = cy.zoom(); var pan2 = cy.pan(); var x1 = bb.x1 * zoom2 + pan2.x; var x22 = bb.x2 * zoom2 + pan2.x; var y1 = bb.y1 * zoom2 + pan2.y; var y22 = bb.y2 * zoom2 + pan2.y; return { x1, x2: x22, y1, y2: y22, w: x22 - x1, h: y22 - y1 }; }; elesfn$b.dirtyCompoundBoundsCache = function() { var silent = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false; var cy = this.cy(); if (!cy.styleEnabled() || !cy.hasCompoundNodes()) { return this; } this.forEachUp(function(ele) { if (ele.isParent()) { var _p = ele._private; _p.compoundBoundsClean = false; _p.bbCache = null; if (!silent) { ele.emitAndNotify("bounds"); } } }); return this; }; elesfn$b.updateCompoundBounds = function() { var force = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false; var cy = this.cy(); if (!cy.styleEnabled() || !cy.hasCompoundNodes()) { return this; } if (!force && cy.batching()) { return this; } function update2(parent4) { if (!parent4.isParent()) { return; } var _p2 = parent4._private; var children2 = parent4.children(); var includeLabels = parent4.pstyle("compound-sizing-wrt-labels").value === "include"; var min9 = { width: { val: parent4.pstyle("min-width").pfValue, left: parent4.pstyle("min-width-bias-left"), right: parent4.pstyle("min-width-bias-right") }, height: { val: parent4.pstyle("min-height").pfValue, top: parent4.pstyle("min-height-bias-top"), bottom: parent4.pstyle("min-height-bias-bottom") } }; var bb = children2.boundingBox({ includeLabels, includeOverlays: false, // updating the compound bounds happens outside of the regular // cache cycle (i.e. before fired events) useCache: false }); var pos = _p2.position; if (bb.w === 0 || bb.h === 0) { bb = { w: parent4.pstyle("width").pfValue, h: parent4.pstyle("height").pfValue }; bb.x1 = pos.x - bb.w / 2; bb.x2 = pos.x + bb.w / 2; bb.y1 = pos.y - bb.h / 2; bb.y2 = pos.y + bb.h / 2; } function computeBiasValues(propDiff, propBias, propBiasComplement) { var biasDiff = 0; var biasComplementDiff = 0; var biasTotal = propBias + propBiasComplement; if (propDiff > 0 && biasTotal > 0) { biasDiff = propBias / biasTotal * propDiff; biasComplementDiff = propBiasComplement / biasTotal * propDiff; } return { biasDiff, biasComplementDiff }; } __name(computeBiasValues, "computeBiasValues"); function computePaddingValues(width3, height2, paddingObject, relativeTo) { if (paddingObject.units === "%") { switch (relativeTo) { case "width": return width3 > 0 ? paddingObject.pfValue * width3 : 0; case "height": return height2 > 0 ? paddingObject.pfValue * height2 : 0; case "average": return width3 > 0 && height2 > 0 ? paddingObject.pfValue * (width3 + height2) / 2 : 0; case "min": return width3 > 0 && height2 > 0 ? width3 > height2 ? paddingObject.pfValue * height2 : paddingObject.pfValue * width3 : 0; case "max": return width3 > 0 && height2 > 0 ? width3 > height2 ? paddingObject.pfValue * width3 : paddingObject.pfValue * height2 : 0; default: return 0; } } else if (paddingObject.units === "px") { return paddingObject.pfValue; } else { return 0; } } __name(computePaddingValues, "computePaddingValues"); var leftVal = min9.width.left.value; if (min9.width.left.units === "px" && min9.width.val > 0) { leftVal = leftVal * 100 / min9.width.val; } var rightVal = min9.width.right.value; if (min9.width.right.units === "px" && min9.width.val > 0) { rightVal = rightVal * 100 / min9.width.val; } var topVal = min9.height.top.value; if (min9.height.top.units === "px" && min9.height.val > 0) { topVal = topVal * 100 / min9.height.val; } var bottomVal = min9.height.bottom.value; if (min9.height.bottom.units === "px" && min9.height.val > 0) { bottomVal = bottomVal * 100 / min9.height.val; } var widthBiasDiffs = computeBiasValues(min9.width.val - bb.w, leftVal, rightVal); var diffLeft = widthBiasDiffs.biasDiff; var diffRight = widthBiasDiffs.biasComplementDiff; var heightBiasDiffs = computeBiasValues(min9.height.val - bb.h, topVal, bottomVal); var diffTop = heightBiasDiffs.biasDiff; var diffBottom = heightBiasDiffs.biasComplementDiff; _p2.autoPadding = computePaddingValues(bb.w, bb.h, parent4.pstyle("padding"), parent4.pstyle("padding-relative-to").value); _p2.autoWidth = Math.max(bb.w, min9.width.val); pos.x = (-diffLeft + bb.x1 + bb.x2 + diffRight) / 2; _p2.autoHeight = Math.max(bb.h, min9.height.val); pos.y = (-diffTop + bb.y1 + bb.y2 + diffBottom) / 2; } __name(update2, "update"); for (var i2 = 0; i2 < this.length; i2++) { var ele = this[i2]; var _p = ele._private; if (!_p.compoundBoundsClean || force) { update2(ele); if (!cy.batching()) { _p.compoundBoundsClean = true; } } } return this; }; noninf = /* @__PURE__ */ __name(function noninf2(x5) { if (x5 === Infinity || x5 === -Infinity) { return 0; } return x5; }, "noninf"); updateBounds = /* @__PURE__ */ __name(function updateBounds2(b3, x1, y1, x22, y22) { if (x22 - x1 === 0 || y22 - y1 === 0) { return; } if (x1 == null || y1 == null || x22 == null || y22 == null) { return; } b3.x1 = x1 < b3.x1 ? x1 : b3.x1; b3.x2 = x22 > b3.x2 ? x22 : b3.x2; b3.y1 = y1 < b3.y1 ? y1 : b3.y1; b3.y2 = y22 > b3.y2 ? y22 : b3.y2; b3.w = b3.x2 - b3.x1; b3.h = b3.y2 - b3.y1; }, "updateBounds"); updateBoundsFromBox = /* @__PURE__ */ __name(function updateBoundsFromBox2(b3, b22) { if (b22 == null) { return b3; } return updateBounds(b3, b22.x1, b22.y1, b22.x2, b22.y2); }, "updateBoundsFromBox"); prefixedProperty = /* @__PURE__ */ __name(function prefixedProperty2(obj, field, prefix) { return getPrefixedProperty(obj, field, prefix); }, "prefixedProperty"); updateBoundsFromArrow = /* @__PURE__ */ __name(function updateBoundsFromArrow2(bounds4, ele, prefix) { if (ele.cy().headless()) { return; } var _p = ele._private; var rstyle = _p.rstyle; var halfArW = rstyle.arrowWidth / 2; var arrowType = ele.pstyle(prefix + "-arrow-shape").value; var x5; var y6; if (arrowType !== "none") { if (prefix === "source") { x5 = rstyle.srcX; y6 = rstyle.srcY; } else if (prefix === "target") { x5 = rstyle.tgtX; y6 = rstyle.tgtY; } else { x5 = rstyle.midX; y6 = rstyle.midY; } var bbs = _p.arrowBounds = _p.arrowBounds || {}; var bb = bbs[prefix] = bbs[prefix] || {}; bb.x1 = x5 - halfArW; bb.y1 = y6 - halfArW; bb.x2 = x5 + halfArW; bb.y2 = y6 + halfArW; bb.w = bb.x2 - bb.x1; bb.h = bb.y2 - bb.y1; expandBoundingBox(bb, 1); updateBounds(bounds4, bb.x1, bb.y1, bb.x2, bb.y2); } }, "updateBoundsFromArrow"); updateBoundsFromLabel = /* @__PURE__ */ __name(function updateBoundsFromLabel2(bounds4, ele, prefix) { if (ele.cy().headless()) { return; } var prefixDash; if (prefix) { prefixDash = prefix + "-"; } else { prefixDash = ""; } var _p = ele._private; var rstyle = _p.rstyle; var label = ele.pstyle(prefixDash + "label").strValue; if (label) { var halign = ele.pstyle("text-halign"); var valign = ele.pstyle("text-valign"); var labelWidth = prefixedProperty(rstyle, "labelWidth", prefix); var labelHeight = prefixedProperty(rstyle, "labelHeight", prefix); var labelX = prefixedProperty(rstyle, "labelX", prefix); var labelY = prefixedProperty(rstyle, "labelY", prefix); var marginX = ele.pstyle(prefixDash + "text-margin-x").pfValue; var marginY = ele.pstyle(prefixDash + "text-margin-y").pfValue; var isEdge2 = ele.isEdge(); var rotation = ele.pstyle(prefixDash + "text-rotation"); var outlineWidth = ele.pstyle("text-outline-width").pfValue; var borderWidth = ele.pstyle("text-border-width").pfValue; var halfBorderWidth = borderWidth / 2; var padding2 = ele.pstyle("text-background-padding").pfValue; var marginOfError = 2; var lh = labelHeight; var lw = labelWidth; var lw_2 = lw / 2; var lh_2 = lh / 2; var lx1, lx2, ly1, ly2; if (isEdge2) { lx1 = labelX - lw_2; lx2 = labelX + lw_2; ly1 = labelY - lh_2; ly2 = labelY + lh_2; } else { switch (halign.value) { case "left": lx1 = labelX - lw; lx2 = labelX; break; case "center": lx1 = labelX - lw_2; lx2 = labelX + lw_2; break; case "right": lx1 = labelX; lx2 = labelX + lw; break; } switch (valign.value) { case "top": ly1 = labelY - lh; ly2 = labelY; break; case "center": ly1 = labelY - lh_2; ly2 = labelY + lh_2; break; case "bottom": ly1 = labelY; ly2 = labelY + lh; break; } } var leftPad = marginX - Math.max(outlineWidth, halfBorderWidth) - padding2 - marginOfError; var rightPad = marginX + Math.max(outlineWidth, halfBorderWidth) + padding2 + marginOfError; var topPad = marginY - Math.max(outlineWidth, halfBorderWidth) - padding2 - marginOfError; var botPad = marginY + Math.max(outlineWidth, halfBorderWidth) + padding2 + marginOfError; lx1 += leftPad; lx2 += rightPad; ly1 += topPad; ly2 += botPad; var bbPrefix = prefix || "main"; var bbs = _p.labelBounds; var bb = bbs[bbPrefix] = bbs[bbPrefix] || {}; bb.x1 = lx1; bb.y1 = ly1; bb.x2 = lx2; bb.y2 = ly2; bb.w = lx2 - lx1; bb.h = ly2 - ly1; bb.leftPad = leftPad; bb.rightPad = rightPad; bb.topPad = topPad; bb.botPad = botPad; var isAutorotate = isEdge2 && rotation.strValue === "autorotate"; var isPfValue = rotation.pfValue != null && rotation.pfValue !== 0; if (isAutorotate || isPfValue) { var theta = isAutorotate ? prefixedProperty(_p.rstyle, "labelAngle", prefix) : rotation.pfValue; var cos3 = Math.cos(theta); var sin3 = Math.sin(theta); var xo = (lx1 + lx2) / 2; var yo = (ly1 + ly2) / 2; if (!isEdge2) { switch (halign.value) { case "left": xo = lx2; break; case "right": xo = lx1; break; } switch (valign.value) { case "top": yo = ly2; break; case "bottom": yo = ly1; break; } } var rotate2 = /* @__PURE__ */ __name(function rotate3(x5, y6) { x5 = x5 - xo; y6 = y6 - yo; return { x: x5 * cos3 - y6 * sin3 + xo, y: x5 * sin3 + y6 * cos3 + yo }; }, "rotate"); var px1y1 = rotate2(lx1, ly1); var px1y2 = rotate2(lx1, ly2); var px2y1 = rotate2(lx2, ly1); var px2y2 = rotate2(lx2, ly2); lx1 = Math.min(px1y1.x, px1y2.x, px2y1.x, px2y2.x); lx2 = Math.max(px1y1.x, px1y2.x, px2y1.x, px2y2.x); ly1 = Math.min(px1y1.y, px1y2.y, px2y1.y, px2y2.y); ly2 = Math.max(px1y1.y, px1y2.y, px2y1.y, px2y2.y); } var bbPrefixRot = bbPrefix + "Rot"; var bbRot = bbs[bbPrefixRot] = bbs[bbPrefixRot] || {}; bbRot.x1 = lx1; bbRot.y1 = ly1; bbRot.x2 = lx2; bbRot.y2 = ly2; bbRot.w = lx2 - lx1; bbRot.h = ly2 - ly1; updateBounds(bounds4, lx1, ly1, lx2, ly2); updateBounds(_p.labelBounds.all, lx1, ly1, lx2, ly2); } return bounds4; }, "updateBoundsFromLabel"); updateBoundsFromOutline = /* @__PURE__ */ __name(function updateBoundsFromOutline2(bounds4, ele) { if (ele.cy().headless()) { return; } var outlineOpacity = ele.pstyle("outline-opacity").value; var outlineWidth = ele.pstyle("outline-width").value; var outlineOffset = ele.pstyle("outline-offset").value; var expansion = outlineWidth + outlineOffset; updateBoundsFromMiter(bounds4, ele, outlineOpacity, expansion, "outside", expansion / 2); }, "updateBoundsFromOutline"); updateBoundsFromMiter = /* @__PURE__ */ __name(function updateBoundsFromMiter2(bounds4, ele, opacity, expansionSize, expansionPosition, useFallbackValue) { if (opacity === 0 || expansionSize <= 0 || expansionPosition === "inside") { return; } var cy = ele.cy(); var shape = ele.pstyle("shape").value; var rshape = cy.renderer().nodeShapes[shape]; var _ele$position = ele.position(), x5 = _ele$position.x, y6 = _ele$position.y; var w4 = ele.width(); var h3 = ele.height(); if (rshape.hasMiterBounds) { if (expansionPosition === "center") { expansionSize /= 2; } var mbb = rshape.miterBounds(x5, y6, w4, h3, expansionSize); updateBoundsFromBox(bounds4, mbb); } else if (useFallbackValue != null && useFallbackValue > 0) { expandBoundingBoxSides(bounds4, [useFallbackValue, useFallbackValue, useFallbackValue, useFallbackValue]); } }, "updateBoundsFromMiter"); updateBoundsFromMiterBorder = /* @__PURE__ */ __name(function updateBoundsFromMiterBorder2(bounds4, ele) { if (ele.cy().headless()) { return; } var borderOpacity = ele.pstyle("border-opacity").value; var borderWidth = ele.pstyle("border-width").pfValue; var borderPosition = ele.pstyle("border-position").value; updateBoundsFromMiter(bounds4, ele, borderOpacity, borderWidth, borderPosition); }, "updateBoundsFromMiterBorder"); boundingBoxImpl = /* @__PURE__ */ __name(function boundingBoxImpl2(ele, options2) { var cy = ele._private.cy; var styleEnabled2 = cy.styleEnabled(); var headless2 = cy.headless(); var bounds4 = makeBoundingBox(); var _p = ele._private; var isNode2 = ele.isNode(); var isEdge2 = ele.isEdge(); var ex1, ex2, ey1, ey2; var x5, y6; var rstyle = _p.rstyle; var manualExpansion = isNode2 && styleEnabled2 ? ele.pstyle("bounds-expansion").pfValue : [0]; var isDisplayed = /* @__PURE__ */ __name(function isDisplayed2(ele2) { return ele2.pstyle("display").value !== "none"; }, "isDisplayed"); var displayed = !styleEnabled2 || isDisplayed(ele) && (!isEdge2 || isDisplayed(ele.source()) && isDisplayed(ele.target())); if (displayed) { var overlayOpacity = 0; var overlayPadding = 0; if (styleEnabled2 && options2.includeOverlays) { overlayOpacity = ele.pstyle("overlay-opacity").value; if (overlayOpacity !== 0) { overlayPadding = ele.pstyle("overlay-padding").value; } } var underlayOpacity = 0; var underlayPadding = 0; if (styleEnabled2 && options2.includeUnderlays) { underlayOpacity = ele.pstyle("underlay-opacity").value; if (underlayOpacity !== 0) { underlayPadding = ele.pstyle("underlay-padding").value; } } var padding2 = Math.max(overlayPadding, underlayPadding); var w4 = 0; var wHalf = 0; if (styleEnabled2) { w4 = ele.pstyle("width").pfValue; wHalf = w4 / 2; } if (isNode2 && options2.includeNodes) { var pos = ele.position(); x5 = pos.x; y6 = pos.y; var _w = ele.outerWidth(); var halfW = _w / 2; var h3 = ele.outerHeight(); var halfH = h3 / 2; ex1 = x5 - halfW; ex2 = x5 + halfW; ey1 = y6 - halfH; ey2 = y6 + halfH; updateBounds(bounds4, ex1, ey1, ex2, ey2); if (styleEnabled2) { updateBoundsFromOutline(bounds4, ele); } if (styleEnabled2 && options2.includeOutlines && !headless2) { updateBoundsFromOutline(bounds4, ele); } if (styleEnabled2) { updateBoundsFromMiterBorder(bounds4, ele); } } else if (isEdge2 && options2.includeEdges) { if (styleEnabled2 && !headless2) { var curveStyle = ele.pstyle("curve-style").strValue; ex1 = Math.min(rstyle.srcX, rstyle.midX, rstyle.tgtX); ex2 = Math.max(rstyle.srcX, rstyle.midX, rstyle.tgtX); ey1 = Math.min(rstyle.srcY, rstyle.midY, rstyle.tgtY); ey2 = Math.max(rstyle.srcY, rstyle.midY, rstyle.tgtY); ex1 -= wHalf; ex2 += wHalf; ey1 -= wHalf; ey2 += wHalf; updateBounds(bounds4, ex1, ey1, ex2, ey2); if (curveStyle === "haystack") { var hpts = rstyle.haystackPts; if (hpts && hpts.length === 2) { ex1 = hpts[0].x; ey1 = hpts[0].y; ex2 = hpts[1].x; ey2 = hpts[1].y; if (ex1 > ex2) { var temp = ex1; ex1 = ex2; ex2 = temp; } if (ey1 > ey2) { var _temp = ey1; ey1 = ey2; ey2 = _temp; } updateBounds(bounds4, ex1 - wHalf, ey1 - wHalf, ex2 + wHalf, ey2 + wHalf); } } else if (curveStyle === "bezier" || curveStyle === "unbundled-bezier" || endsWith(curveStyle, "segments") || endsWith(curveStyle, "taxi")) { var pts2; switch (curveStyle) { case "bezier": case "unbundled-bezier": pts2 = rstyle.bezierPts; break; case "segments": case "taxi": case "round-segments": case "round-taxi": pts2 = rstyle.linePts; break; } if (pts2 != null) { for (var j3 = 0; j3 < pts2.length; j3++) { var pt = pts2[j3]; ex1 = pt.x - wHalf; ex2 = pt.x + wHalf; ey1 = pt.y - wHalf; ey2 = pt.y + wHalf; updateBounds(bounds4, ex1, ey1, ex2, ey2); } } } } else { var n1 = ele.source(); var n1pos = n1.position(); var n2 = ele.target(); var n2pos = n2.position(); ex1 = n1pos.x; ex2 = n2pos.x; ey1 = n1pos.y; ey2 = n2pos.y; if (ex1 > ex2) { var _temp2 = ex1; ex1 = ex2; ex2 = _temp2; } if (ey1 > ey2) { var _temp3 = ey1; ey1 = ey2; ey2 = _temp3; } ex1 -= wHalf; ex2 += wHalf; ey1 -= wHalf; ey2 += wHalf; updateBounds(bounds4, ex1, ey1, ex2, ey2); } } if (styleEnabled2 && options2.includeEdges && isEdge2) { updateBoundsFromArrow(bounds4, ele, "mid-source"); updateBoundsFromArrow(bounds4, ele, "mid-target"); updateBoundsFromArrow(bounds4, ele, "source"); updateBoundsFromArrow(bounds4, ele, "target"); } if (styleEnabled2) { var ghost = ele.pstyle("ghost").value === "yes"; if (ghost) { var gx = ele.pstyle("ghost-offset-x").pfValue; var gy = ele.pstyle("ghost-offset-y").pfValue; updateBounds(bounds4, bounds4.x1 + gx, bounds4.y1 + gy, bounds4.x2 + gx, bounds4.y2 + gy); } } var bbBody = _p.bodyBounds = _p.bodyBounds || {}; assignBoundingBox(bbBody, bounds4); expandBoundingBoxSides(bbBody, manualExpansion); expandBoundingBox(bbBody, 1); if (styleEnabled2) { ex1 = bounds4.x1; ex2 = bounds4.x2; ey1 = bounds4.y1; ey2 = bounds4.y2; updateBounds(bounds4, ex1 - padding2, ey1 - padding2, ex2 + padding2, ey2 + padding2); } var bbOverlay = _p.overlayBounds = _p.overlayBounds || {}; assignBoundingBox(bbOverlay, bounds4); expandBoundingBoxSides(bbOverlay, manualExpansion); expandBoundingBox(bbOverlay, 1); var bbLabels = _p.labelBounds = _p.labelBounds || {}; if (bbLabels.all != null) { clearBoundingBox(bbLabels.all); } else { bbLabels.all = makeBoundingBox(); } if (styleEnabled2 && options2.includeLabels) { if (options2.includeMainLabels) { updateBoundsFromLabel(bounds4, ele, null); } if (isEdge2) { if (options2.includeSourceLabels) { updateBoundsFromLabel(bounds4, ele, "source"); } if (options2.includeTargetLabels) { updateBoundsFromLabel(bounds4, ele, "target"); } } } } bounds4.x1 = noninf(bounds4.x1); bounds4.y1 = noninf(bounds4.y1); bounds4.x2 = noninf(bounds4.x2); bounds4.y2 = noninf(bounds4.y2); bounds4.w = noninf(bounds4.x2 - bounds4.x1); bounds4.h = noninf(bounds4.y2 - bounds4.y1); if (bounds4.w > 0 && bounds4.h > 0 && displayed) { expandBoundingBoxSides(bounds4, manualExpansion); expandBoundingBox(bounds4, 1); } return bounds4; }, "boundingBoxImpl"); getKey = /* @__PURE__ */ __name(function getKey2(opts) { var i2 = 0; var tf = /* @__PURE__ */ __name(function tf2(val) { return (val ? 1 : 0) << i2++; }, "tf"); var key = 0; key += tf(opts.incudeNodes); key += tf(opts.includeEdges); key += tf(opts.includeLabels); key += tf(opts.includeMainLabels); key += tf(opts.includeSourceLabels); key += tf(opts.includeTargetLabels); key += tf(opts.includeOverlays); key += tf(opts.includeOutlines); return key; }, "getKey"); getBoundingBoxPosKey = /* @__PURE__ */ __name(function getBoundingBoxPosKey2(ele) { var r2 = /* @__PURE__ */ __name(function r3(x5) { return Math.round(x5); }, "r"); if (ele.isEdge()) { var p1 = ele.source().position(); var p22 = ele.target().position(); return hashIntsArray([r2(p1.x), r2(p1.y), r2(p22.x), r2(p22.y)]); } else { var p3 = ele.position(); return hashIntsArray([r2(p3.x), r2(p3.y)]); } }, "getBoundingBoxPosKey"); cachedBoundingBoxImpl = /* @__PURE__ */ __name(function cachedBoundingBoxImpl2(ele, opts) { var _p = ele._private; var bb; var isEdge2 = ele.isEdge(); var key = opts == null ? defBbOptsKey : getKey(opts); var usingDefOpts = key === defBbOptsKey; if (_p.bbCache == null) { bb = boundingBoxImpl(ele, defBbOpts); _p.bbCache = bb; _p.bbCachePosKey = getBoundingBoxPosKey(ele); } else { bb = _p.bbCache; } if (!usingDefOpts) { var isNode2 = ele.isNode(); bb = makeBoundingBox(); if (opts.includeNodes && isNode2 || opts.includeEdges && !isNode2) { if (opts.includeOverlays) { updateBoundsFromBox(bb, _p.overlayBounds); } else { updateBoundsFromBox(bb, _p.bodyBounds); } } if (opts.includeLabels) { if (opts.includeMainLabels && (!isEdge2 || opts.includeSourceLabels && opts.includeTargetLabels)) { updateBoundsFromBox(bb, _p.labelBounds.all); } else { if (opts.includeMainLabels) { updateBoundsFromBox(bb, _p.labelBounds.mainRot); } if (opts.includeSourceLabels) { updateBoundsFromBox(bb, _p.labelBounds.sourceRot); } if (opts.includeTargetLabels) { updateBoundsFromBox(bb, _p.labelBounds.targetRot); } } } bb.w = bb.x2 - bb.x1; bb.h = bb.y2 - bb.y1; } return bb; }, "cachedBoundingBoxImpl"); defBbOpts = { includeNodes: true, includeEdges: true, includeLabels: true, includeMainLabels: true, includeSourceLabels: true, includeTargetLabels: true, includeOverlays: true, includeUnderlays: true, includeOutlines: true, useCache: true }; defBbOptsKey = getKey(defBbOpts); filledBbOpts = defaults$g(defBbOpts); elesfn$b.boundingBox = function(options2) { var bounds4; var useCache = options2 === void 0 || options2.useCache === void 0 || options2.useCache === true; var isDirty = memoize2(function(ele2) { var _p = ele2._private; return _p.bbCache == null || _p.styleDirty || _p.bbCachePosKey !== getBoundingBoxPosKey(ele2); }, function(ele2) { return ele2.id(); }); if (useCache && this.length === 1 && !isDirty(this[0])) { if (options2 === void 0) { options2 = defBbOpts; } else { options2 = filledBbOpts(options2); } bounds4 = cachedBoundingBoxImpl(this[0], options2); } else { bounds4 = makeBoundingBox(); options2 = options2 || defBbOpts; var opts = filledBbOpts(options2); var eles = this; var cy = eles.cy(); var styleEnabled2 = cy.styleEnabled(); this.edges().forEach(isDirty); this.nodes().forEach(isDirty); if (styleEnabled2) { this.recalculateRenderedStyle(useCache); } this.updateCompoundBounds(!useCache); for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; if (isDirty(ele)) { ele.dirtyBoundingBoxCache(); } updateBoundsFromBox(bounds4, cachedBoundingBoxImpl(ele, opts)); } } bounds4.x1 = noninf(bounds4.x1); bounds4.y1 = noninf(bounds4.y1); bounds4.x2 = noninf(bounds4.x2); bounds4.y2 = noninf(bounds4.y2); bounds4.w = noninf(bounds4.x2 - bounds4.x1); bounds4.h = noninf(bounds4.y2 - bounds4.y1); return bounds4; }; elesfn$b.dirtyBoundingBoxCache = function() { for (var i2 = 0; i2 < this.length; i2++) { var _p = this[i2]._private; _p.bbCache = null; _p.bbCachePosKey = null; _p.bodyBounds = null; _p.overlayBounds = null; _p.labelBounds.all = null; _p.labelBounds.source = null; _p.labelBounds.target = null; _p.labelBounds.main = null; _p.labelBounds.sourceRot = null; _p.labelBounds.targetRot = null; _p.labelBounds.mainRot = null; _p.arrowBounds.source = null; _p.arrowBounds.target = null; _p.arrowBounds["mid-source"] = null; _p.arrowBounds["mid-target"] = null; } this.emitAndNotify("bounds"); return this; }; elesfn$b.boundingBoxAt = function(fn3) { var nodes5 = this.nodes(); var cy = this.cy(); var hasCompoundNodes2 = cy.hasCompoundNodes(); var parents3 = cy.collection(); if (hasCompoundNodes2) { parents3 = nodes5.filter(function(node2) { return node2.isParent(); }); nodes5 = nodes5.not(parents3); } if (plainObject(fn3)) { var obj = fn3; fn3 = /* @__PURE__ */ __name(function fn4() { return obj; }, "fn"); } var storeOldPos = /* @__PURE__ */ __name(function storeOldPos2(node2, i2) { return node2._private.bbAtOldPos = fn3(node2, i2); }, "storeOldPos"); var getOldPos = /* @__PURE__ */ __name(function getOldPos2(node2) { return node2._private.bbAtOldPos; }, "getOldPos"); cy.startBatch(); nodes5.forEach(storeOldPos).silentPositions(fn3); if (hasCompoundNodes2) { parents3.dirtyCompoundBoundsCache(); parents3.dirtyBoundingBoxCache(); parents3.updateCompoundBounds(true); } var bb = copyBoundingBox(this.boundingBox({ useCache: false })); nodes5.silentPositions(getOldPos); if (hasCompoundNodes2) { parents3.dirtyCompoundBoundsCache(); parents3.dirtyBoundingBoxCache(); parents3.updateCompoundBounds(true); } cy.endBatch(); return bb; }; fn$3.boundingbox = fn$3.bb = fn$3.boundingBox; fn$3.renderedBoundingbox = fn$3.renderedBoundingBox; bounds = elesfn$b; fn$2 = elesfn$a = {}; defineDimFns = /* @__PURE__ */ __name(function defineDimFns2(opts) { opts.uppercaseName = capitalize(opts.name); opts.autoName = "auto" + opts.uppercaseName; opts.labelName = "label" + opts.uppercaseName; opts.outerName = "outer" + opts.uppercaseName; opts.uppercaseOuterName = capitalize(opts.outerName); fn$2[opts.name] = /* @__PURE__ */ __name(function dimImpl() { var ele = this[0]; var _p = ele._private; var cy = _p.cy; var styleEnabled2 = cy._private.styleEnabled; if (ele) { if (styleEnabled2) { if (ele.isParent()) { ele.updateCompoundBounds(); return _p[opts.autoName] || 0; } var d3 = ele.pstyle(opts.name); switch (d3.strValue) { case "label": ele.recalculateRenderedStyle(); return _p.rstyle[opts.labelName] || 0; default: return d3.pfValue; } } else { return 1; } } }, "dimImpl"); fn$2["outer" + opts.uppercaseName] = /* @__PURE__ */ __name(function outerDimImpl() { var ele = this[0]; var _p = ele._private; var cy = _p.cy; var styleEnabled2 = cy._private.styleEnabled; if (ele) { if (styleEnabled2) { var dim = ele[opts.name](); var borderPos = ele.pstyle("border-position").value; var border; if (borderPos === "center") { border = ele.pstyle("border-width").pfValue; } else if (borderPos === "outside") { border = 2 * ele.pstyle("border-width").pfValue; } else { border = 0; } var padding2 = 2 * ele.padding(); return dim + border + padding2; } else { return 1; } } }, "outerDimImpl"); fn$2["rendered" + opts.uppercaseName] = /* @__PURE__ */ __name(function renderedDimImpl() { var ele = this[0]; if (ele) { var d3 = ele[opts.name](); return d3 * this.cy().zoom(); } }, "renderedDimImpl"); fn$2["rendered" + opts.uppercaseOuterName] = /* @__PURE__ */ __name(function renderedOuterDimImpl() { var ele = this[0]; if (ele) { var od = ele[opts.outerName](); return od * this.cy().zoom(); } }, "renderedOuterDimImpl"); }, "defineDimFns"); defineDimFns({ name: "width" }); defineDimFns({ name: "height" }); elesfn$a.padding = function() { var ele = this[0]; var _p = ele._private; if (ele.isParent()) { ele.updateCompoundBounds(); if (_p.autoPadding !== void 0) { return _p.autoPadding; } else { return ele.pstyle("padding").pfValue; } } else { return ele.pstyle("padding").pfValue; } }; elesfn$a.paddedHeight = function() { var ele = this[0]; return ele.height() + 2 * ele.padding(); }; elesfn$a.paddedWidth = function() { var ele = this[0]; return ele.width() + 2 * ele.padding(); }; widthHeight = elesfn$a; ifEdge = /* @__PURE__ */ __name(function ifEdge2(ele, getValue3) { if (ele.isEdge() && ele.takesUpSpace()) { return getValue3(ele); } }, "ifEdge"); ifEdgeRenderedPosition = /* @__PURE__ */ __name(function ifEdgeRenderedPosition2(ele, getPoint) { if (ele.isEdge() && ele.takesUpSpace()) { var cy = ele.cy(); return modelToRenderedPosition$1(getPoint(ele), cy.zoom(), cy.pan()); } }, "ifEdgeRenderedPosition"); ifEdgeRenderedPositions = /* @__PURE__ */ __name(function ifEdgeRenderedPositions2(ele, getPoints) { if (ele.isEdge() && ele.takesUpSpace()) { var cy = ele.cy(); var pan2 = cy.pan(); var zoom2 = cy.zoom(); return getPoints(ele).map(function(p3) { return modelToRenderedPosition$1(p3, zoom2, pan2); }); } }, "ifEdgeRenderedPositions"); controlPoints2 = /* @__PURE__ */ __name(function controlPoints3(ele) { return ele.renderer().getControlPoints(ele); }, "controlPoints"); segmentPoints = /* @__PURE__ */ __name(function segmentPoints2(ele) { return ele.renderer().getSegmentPoints(ele); }, "segmentPoints"); sourceEndpoint = /* @__PURE__ */ __name(function sourceEndpoint2(ele) { return ele.renderer().getSourceEndpoint(ele); }, "sourceEndpoint"); targetEndpoint = /* @__PURE__ */ __name(function targetEndpoint2(ele) { return ele.renderer().getTargetEndpoint(ele); }, "targetEndpoint"); midpoint = /* @__PURE__ */ __name(function midpoint2(ele) { return ele.renderer().getEdgeMidpoint(ele); }, "midpoint"); pts = { controlPoints: { get: controlPoints2, mult: true }, segmentPoints: { get: segmentPoints, mult: true }, sourceEndpoint: { get: sourceEndpoint }, targetEndpoint: { get: targetEndpoint }, midpoint: { get: midpoint } }; renderedName = /* @__PURE__ */ __name(function renderedName2(name) { return "rendered" + name[0].toUpperCase() + name.substr(1); }, "renderedName"); edgePoints = Object.keys(pts).reduce(function(obj, name) { var spec = pts[name]; var rName = renderedName(name); obj[name] = function() { return ifEdge(this, spec.get); }; if (spec.mult) { obj[rName] = function() { return ifEdgeRenderedPositions(this, spec.get); }; } else { obj[rName] = function() { return ifEdgeRenderedPosition(this, spec.get); }; } return obj; }, {}); dimensions = extend4({}, position2, bounds, widthHeight, edgePoints); Event = /* @__PURE__ */ __name(function Event2(src, props) { this.recycle(src, props); }, "Event"); __name(returnFalse, "returnFalse"); __name(returnTrue, "returnTrue"); Event.prototype = { instanceString: /* @__PURE__ */ __name(function instanceString2() { return "event"; }, "instanceString"), recycle: /* @__PURE__ */ __name(function recycle(src, props) { this.isImmediatePropagationStopped = this.isPropagationStopped = this.isDefaultPrevented = returnFalse; if (src != null && src.preventDefault) { this.type = src.type; this.isDefaultPrevented = src.defaultPrevented ? returnTrue : returnFalse; } else if (src != null && src.type) { props = src; } else { this.type = src; } if (props != null) { this.originalEvent = props.originalEvent; this.type = props.type != null ? props.type : this.type; this.cy = props.cy; this.target = props.target; this.position = props.position; this.renderedPosition = props.renderedPosition; this.namespace = props.namespace; this.layout = props.layout; } if (this.cy != null && this.position != null && this.renderedPosition == null) { var pos = this.position; var zoom2 = this.cy.zoom(); var pan2 = this.cy.pan(); this.renderedPosition = { x: pos.x * zoom2 + pan2.x, y: pos.y * zoom2 + pan2.y }; } this.timeStamp = src && src.timeStamp || Date.now(); }, "recycle"), preventDefault: /* @__PURE__ */ __name(function preventDefault() { this.isDefaultPrevented = returnTrue; var e3 = this.originalEvent; if (!e3) { return; } if (e3.preventDefault) { e3.preventDefault(); } }, "preventDefault"), stopPropagation: /* @__PURE__ */ __name(function stopPropagation() { this.isPropagationStopped = returnTrue; var e3 = this.originalEvent; if (!e3) { return; } if (e3.stopPropagation) { e3.stopPropagation(); } }, "stopPropagation"), stopImmediatePropagation: /* @__PURE__ */ __name(function stopImmediatePropagation() { this.isImmediatePropagationStopped = returnTrue; this.stopPropagation(); }, "stopImmediatePropagation"), isDefaultPrevented: returnFalse, isPropagationStopped: returnFalse, isImmediatePropagationStopped: returnFalse }; eventRegex = /^([^.]+)(\.(?:[^.]+))?$/; universalNamespace = ".*"; defaults$8 = { qualifierCompare: /* @__PURE__ */ __name(function qualifierCompare(q1, q22) { return q1 === q22; }, "qualifierCompare"), eventMatches: /* @__PURE__ */ __name(function eventMatches() { return true; }, "eventMatches"), addEventFields: /* @__PURE__ */ __name(function addEventFields() { }, "addEventFields"), callbackContext: /* @__PURE__ */ __name(function callbackContext(context) { return context; }, "callbackContext"), beforeEmit: /* @__PURE__ */ __name(function beforeEmit() { }, "beforeEmit"), afterEmit: /* @__PURE__ */ __name(function afterEmit() { }, "afterEmit"), bubble: /* @__PURE__ */ __name(function bubble() { return false; }, "bubble"), parent: /* @__PURE__ */ __name(function parent2() { return null; }, "parent"), context: null }; defaultsKeys = Object.keys(defaults$8); emptyOpts = {}; __name(Emitter, "Emitter"); p2 = Emitter.prototype; forEachEvent = /* @__PURE__ */ __name(function forEachEvent2(self2, handler, events, qualifier, callback, conf5, confOverrides) { if (fn$6(qualifier)) { callback = qualifier; qualifier = null; } if (confOverrides) { if (conf5 == null) { conf5 = confOverrides; } else { conf5 = extend4({}, conf5, confOverrides); } } var eventList = array2(events) ? events : events.split(/\s+/); for (var i2 = 0; i2 < eventList.length; i2++) { var evt = eventList[i2]; if (emptyString(evt)) { continue; } var match2 = evt.match(eventRegex); if (match2) { var type3 = match2[1]; var namespace = match2[2] ? match2[2] : null; var ret = handler(self2, evt, type3, namespace, qualifier, callback, conf5); if (ret === false) { break; } } } }, "forEachEvent"); makeEventObj = /* @__PURE__ */ __name(function makeEventObj2(self2, obj) { self2.addEventFields(self2.context, obj); return new Event(obj.type, obj); }, "makeEventObj"); forEachEventObj = /* @__PURE__ */ __name(function forEachEventObj2(self2, handler, events) { if (event(events)) { handler(self2, events); return; } else if (plainObject(events)) { handler(self2, makeEventObj(self2, events)); return; } var eventList = array2(events) ? events : events.split(/\s+/); for (var i2 = 0; i2 < eventList.length; i2++) { var evt = eventList[i2]; if (emptyString(evt)) { continue; } var match2 = evt.match(eventRegex); if (match2) { var type3 = match2[1]; var namespace = match2[2] ? match2[2] : null; var eventObj = makeEventObj(self2, { type: type3, namespace, target: self2.context }); handler(self2, eventObj); } } }, "forEachEventObj"); p2.on = p2.addListener = function(events, qualifier, callback, conf5, confOverrides) { forEachEvent(this, function(self2, event3, type3, namespace, qualifier2, callback2, conf6) { if (fn$6(callback2)) { self2.listeners.push({ event: event3, // full event string callback: callback2, // callback to run type: type3, // the event type (e.g. 'click') namespace, // the event namespace (e.g. ".foo") qualifier: qualifier2, // a restriction on whether to match this emitter conf: conf6 // additional configuration }); } }, events, qualifier, callback, conf5, confOverrides); return this; }; p2.one = function(events, qualifier, callback, conf5) { return this.on(events, qualifier, callback, conf5, { one: true }); }; p2.removeListener = p2.off = function(events, qualifier, callback, conf5) { var _this = this; if (this.emitting !== 0) { this.listeners = copyArray2(this.listeners); } var listeners = this.listeners; var _loop = /* @__PURE__ */ __name(function _loop2(i3) { var listener = listeners[i3]; forEachEvent(_this, function(self2, event3, type3, namespace, qualifier2, callback2) { if ((listener.type === type3 || events === "*") && (!namespace && listener.namespace !== ".*" || listener.namespace === namespace) && (!qualifier2 || self2.qualifierCompare(listener.qualifier, qualifier2)) && (!callback2 || listener.callback === callback2)) { listeners.splice(i3, 1); return false; } }, events, qualifier, callback, conf5); }, "_loop"); for (var i2 = listeners.length - 1; i2 >= 0; i2--) { _loop(i2); } return this; }; p2.removeAllListeners = function() { return this.removeListener("*"); }; p2.emit = p2.trigger = function(events, extraParams, manualCallback) { var listeners = this.listeners; var numListenersBeforeEmit = listeners.length; this.emitting++; if (!array2(extraParams)) { extraParams = [extraParams]; } forEachEventObj(this, function(self2, eventObj) { if (manualCallback != null) { listeners = [{ event: eventObj.event, type: eventObj.type, namespace: eventObj.namespace, callback: manualCallback }]; numListenersBeforeEmit = listeners.length; } var _loop2 = /* @__PURE__ */ __name(function _loop22() { var listener = listeners[i2]; if (listener.type === eventObj.type && (!listener.namespace || listener.namespace === eventObj.namespace || listener.namespace === universalNamespace) && self2.eventMatches(self2.context, listener, eventObj)) { var args = [eventObj]; if (extraParams != null) { push(args, extraParams); } self2.beforeEmit(self2.context, listener, eventObj); if (listener.conf && listener.conf.one) { self2.listeners = self2.listeners.filter(function(l4) { return l4 !== listener; }); } var context = self2.callbackContext(self2.context, listener, eventObj); var ret = listener.callback.apply(context, args); self2.afterEmit(self2.context, listener, eventObj); if (ret === false) { eventObj.stopPropagation(); eventObj.preventDefault(); } } }, "_loop2"); for (var i2 = 0; i2 < numListenersBeforeEmit; i2++) { _loop2(); } if (self2.bubble(self2.context) && !eventObj.isPropagationStopped()) { self2.parent(self2.context).emit(eventObj, extraParams); } }, events); this.emitting--; return this; }; emitterOptions$1 = { qualifierCompare: /* @__PURE__ */ __name(function qualifierCompare2(selector1, selector2) { if (selector1 == null || selector2 == null) { return selector1 == null && selector2 == null; } else { return selector1.sameText(selector2); } }, "qualifierCompare"), eventMatches: /* @__PURE__ */ __name(function eventMatches2(ele, listener, eventObj) { var selector = listener.qualifier; if (selector != null) { return ele !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target); } return true; }, "eventMatches"), addEventFields: /* @__PURE__ */ __name(function addEventFields2(ele, evt) { evt.cy = ele.cy(); evt.target = ele; }, "addEventFields"), callbackContext: /* @__PURE__ */ __name(function callbackContext2(ele, listener, eventObj) { return listener.qualifier != null ? eventObj.target : ele; }, "callbackContext"), beforeEmit: /* @__PURE__ */ __name(function beforeEmit2(context, listener) { if (listener.conf && listener.conf.once) { listener.conf.onceCollection.removeListener(listener.event, listener.qualifier, listener.callback); } }, "beforeEmit"), bubble: /* @__PURE__ */ __name(function bubble2() { return true; }, "bubble"), parent: /* @__PURE__ */ __name(function parent3(ele) { return ele.isChild() ? ele.parent() : ele.cy(); }, "parent") }; argSelector$1 = /* @__PURE__ */ __name(function argSelector(arg) { if (string(arg)) { return new Selector(arg); } else { return arg; } }, "argSelector"); elesfn$9 = { createEmitter: /* @__PURE__ */ __name(function createEmitter() { for (var i2 = 0; i2 < this.length; i2++) { var ele = this[i2]; var _p = ele._private; if (!_p.emitter) { _p.emitter = new Emitter(emitterOptions$1, ele); } } return this; }, "createEmitter"), emitter: /* @__PURE__ */ __name(function emitter() { return this._private.emitter; }, "emitter"), on: /* @__PURE__ */ __name(function on(events, selector, callback) { var argSel = argSelector$1(selector); for (var i2 = 0; i2 < this.length; i2++) { var ele = this[i2]; ele.emitter().on(events, argSel, callback); } return this; }, "on"), removeListener: /* @__PURE__ */ __name(function removeListener(events, selector, callback) { var argSel = argSelector$1(selector); for (var i2 = 0; i2 < this.length; i2++) { var ele = this[i2]; ele.emitter().removeListener(events, argSel, callback); } return this; }, "removeListener"), removeAllListeners: /* @__PURE__ */ __name(function removeAllListeners() { for (var i2 = 0; i2 < this.length; i2++) { var ele = this[i2]; ele.emitter().removeAllListeners(); } return this; }, "removeAllListeners"), one: /* @__PURE__ */ __name(function one2(events, selector, callback) { var argSel = argSelector$1(selector); for (var i2 = 0; i2 < this.length; i2++) { var ele = this[i2]; ele.emitter().one(events, argSel, callback); } return this; }, "one"), once: /* @__PURE__ */ __name(function once(events, selector, callback) { var argSel = argSelector$1(selector); for (var i2 = 0; i2 < this.length; i2++) { var ele = this[i2]; ele.emitter().on(events, argSel, callback, { once: true, onceCollection: this }); } }, "once"), emit: /* @__PURE__ */ __name(function emit(events, extraParams) { for (var i2 = 0; i2 < this.length; i2++) { var ele = this[i2]; ele.emitter().emit(events, extraParams); } return this; }, "emit"), emitAndNotify: /* @__PURE__ */ __name(function emitAndNotify(event3, extraParams) { if (this.length === 0) { return; } this.cy().notify(event3, this); this.emit(event3, extraParams); return this; }, "emitAndNotify") }; define2.eventAliasesOn(elesfn$9); elesfn$8 = { nodes: /* @__PURE__ */ __name(function nodes(selector) { return this.filter(function(ele) { return ele.isNode(); }).filter(selector); }, "nodes"), edges: /* @__PURE__ */ __name(function edges(selector) { return this.filter(function(ele) { return ele.isEdge(); }).filter(selector); }, "edges"), // internal helper to get nodes and edges as separate collections with single iteration over elements byGroup: /* @__PURE__ */ __name(function byGroup() { var nodes5 = this.spawn(); var edges3 = this.spawn(); for (var i2 = 0; i2 < this.length; i2++) { var ele = this[i2]; if (ele.isNode()) { nodes5.push(ele); } else { edges3.push(ele); } } return { nodes: nodes5, edges: edges3 }; }, "byGroup"), filter: /* @__PURE__ */ __name(function filter5(_filter, thisArg) { if (_filter === void 0) { return this; } else if (string(_filter) || elementOrCollection(_filter)) { return new Selector(_filter).filter(this); } else if (fn$6(_filter)) { var filterEles = this.spawn(); var eles = this; for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; var include = thisArg ? _filter.apply(thisArg, [ele, i2, eles]) : _filter(ele, i2, eles); if (include) { filterEles.push(ele); } } return filterEles; } return this.spawn(); }, "filter"), not: /* @__PURE__ */ __name(function not(toRemove) { if (!toRemove) { return this; } else { if (string(toRemove)) { toRemove = this.filter(toRemove); } var elements2 = this.spawn(); for (var i2 = 0; i2 < this.length; i2++) { var element3 = this[i2]; var remove3 = toRemove.has(element3); if (!remove3) { elements2.push(element3); } } return elements2; } }, "not"), absoluteComplement: /* @__PURE__ */ __name(function absoluteComplement() { var cy = this.cy(); return cy.mutableElements().not(this); }, "absoluteComplement"), intersect: /* @__PURE__ */ __name(function intersect2(other) { if (string(other)) { var selector = other; return this.filter(selector); } var elements2 = this.spawn(); var col1 = this; var col2 = other; var col1Smaller = this.length < other.length; var colS = col1Smaller ? col1 : col2; var colL = col1Smaller ? col2 : col1; for (var i2 = 0; i2 < colS.length; i2++) { var ele = colS[i2]; if (colL.has(ele)) { elements2.push(ele); } } return elements2; }, "intersect"), xor: /* @__PURE__ */ __name(function xor(other) { var cy = this._private.cy; if (string(other)) { other = cy.$(other); } var elements2 = this.spawn(); var col1 = this; var col2 = other; var add3 = /* @__PURE__ */ __name(function add4(col, other2) { for (var i2 = 0; i2 < col.length; i2++) { var ele = col[i2]; var id30 = ele._private.data.id; var inOther = other2.hasElementWithId(id30); if (!inOther) { elements2.push(ele); } } }, "add"); add3(col1, col2); add3(col2, col1); return elements2; }, "xor"), diff: /* @__PURE__ */ __name(function diff(other) { var cy = this._private.cy; if (string(other)) { other = cy.$(other); } var left3 = this.spawn(); var right3 = this.spawn(); var both = this.spawn(); var col1 = this; var col2 = other; var add3 = /* @__PURE__ */ __name(function add4(col, other2, retEles) { for (var i2 = 0; i2 < col.length; i2++) { var ele = col[i2]; var id30 = ele._private.data.id; var inOther = other2.hasElementWithId(id30); if (inOther) { both.merge(ele); } else { retEles.push(ele); } } }, "add"); add3(col1, col2, left3); add3(col2, col1, right3); return { left: left3, right: right3, both }; }, "diff"), add: /* @__PURE__ */ __name(function add(toAdd) { var cy = this._private.cy; if (!toAdd) { return this; } if (string(toAdd)) { var selector = toAdd; toAdd = cy.mutableElements().filter(selector); } var elements2 = this.spawnSelf(); for (var i2 = 0; i2 < toAdd.length; i2++) { var ele = toAdd[i2]; var add3 = !this.has(ele); if (add3) { elements2.push(ele); } } return elements2; }, "add"), // in place merge on calling collection merge: /* @__PURE__ */ __name(function merge3(toAdd) { var _p = this._private; var cy = _p.cy; if (!toAdd) { return this; } if (toAdd && string(toAdd)) { var selector = toAdd; toAdd = cy.mutableElements().filter(selector); } var map5 = _p.map; for (var i2 = 0; i2 < toAdd.length; i2++) { var toAddEle = toAdd[i2]; var id30 = toAddEle._private.data.id; var add3 = !map5.has(id30); if (add3) { var index = this.length++; this[index] = toAddEle; map5.set(id30, { ele: toAddEle, index }); } } return this; }, "merge"), unmergeAt: /* @__PURE__ */ __name(function unmergeAt(i2) { var ele = this[i2]; var id30 = ele.id(); var _p = this._private; var map5 = _p.map; this[i2] = void 0; map5["delete"](id30); var unmergedLastEle = i2 === this.length - 1; if (this.length > 1 && !unmergedLastEle) { var lastEleI = this.length - 1; var lastEle = this[lastEleI]; var lastEleId = lastEle._private.data.id; this[lastEleI] = void 0; this[i2] = lastEle; map5.set(lastEleId, { ele: lastEle, index: i2 }); } this.length--; return this; }, "unmergeAt"), // remove single ele in place in calling collection unmergeOne: /* @__PURE__ */ __name(function unmergeOne(ele) { ele = ele[0]; var _p = this._private; var id30 = ele._private.data.id; var map5 = _p.map; var entry = map5.get(id30); if (!entry) { return this; } var i2 = entry.index; this.unmergeAt(i2); return this; }, "unmergeOne"), // remove eles in place on calling collection unmerge: /* @__PURE__ */ __name(function unmerge(toRemove) { var cy = this._private.cy; if (!toRemove) { return this; } if (toRemove && string(toRemove)) { var selector = toRemove; toRemove = cy.mutableElements().filter(selector); } for (var i2 = 0; i2 < toRemove.length; i2++) { this.unmergeOne(toRemove[i2]); } return this; }, "unmerge"), unmergeBy: /* @__PURE__ */ __name(function unmergeBy(toRmFn) { for (var i2 = this.length - 1; i2 >= 0; i2--) { var ele = this[i2]; if (toRmFn(ele)) { this.unmergeAt(i2); } } return this; }, "unmergeBy"), map: /* @__PURE__ */ __name(function map4(mapFn, thisArg) { var arr = []; var eles = this; for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; var ret = thisArg ? mapFn.apply(thisArg, [ele, i2, eles]) : mapFn(ele, i2, eles); arr.push(ret); } return arr; }, "map"), reduce: /* @__PURE__ */ __name(function reduce2(fn3, initialValue) { var val = initialValue; var eles = this; for (var i2 = 0; i2 < eles.length; i2++) { val = fn3(val, eles[i2], i2, eles); } return val; }, "reduce"), max: /* @__PURE__ */ __name(function max8(valFn, thisArg) { var max10 = -Infinity; var maxEle; var eles = this; for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; var val = thisArg ? valFn.apply(thisArg, [ele, i2, eles]) : valFn(ele, i2, eles); if (val > max10) { max10 = val; maxEle = ele; } } return { value: max10, ele: maxEle }; }, "max"), min: /* @__PURE__ */ __name(function min7(valFn, thisArg) { var min9 = Infinity; var minEle; var eles = this; for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; var val = thisArg ? valFn.apply(thisArg, [ele, i2, eles]) : valFn(ele, i2, eles); if (val < min9) { min9 = val; minEle = ele; } } return { value: min9, ele: minEle }; }, "min") }; fn$1 = elesfn$8; fn$1["u"] = fn$1["|"] = fn$1["+"] = fn$1.union = fn$1.or = fn$1.add; fn$1["\\"] = fn$1["!"] = fn$1["-"] = fn$1.difference = fn$1.relativeComplement = fn$1.subtract = fn$1.not; fn$1["n"] = fn$1["&"] = fn$1["."] = fn$1.and = fn$1.intersection = fn$1.intersect; fn$1["^"] = fn$1["(+)"] = fn$1["(-)"] = fn$1.symmetricDifference = fn$1.symdiff = fn$1.xor; fn$1.fnFilter = fn$1.filterFn = fn$1.stdFilter = fn$1.filter; fn$1.complement = fn$1.abscomp = fn$1.absoluteComplement; elesfn$7 = { isNode: /* @__PURE__ */ __name(function isNode() { return this.group() === "nodes"; }, "isNode"), isEdge: /* @__PURE__ */ __name(function isEdge() { return this.group() === "edges"; }, "isEdge"), isLoop: /* @__PURE__ */ __name(function isLoop() { return this.isEdge() && this.source()[0] === this.target()[0]; }, "isLoop"), isSimple: /* @__PURE__ */ __name(function isSimple() { return this.isEdge() && this.source()[0] !== this.target()[0]; }, "isSimple"), group: /* @__PURE__ */ __name(function group() { var ele = this[0]; if (ele) { return ele._private.group; } }, "group") }; zIndexSort = /* @__PURE__ */ __name(function zIndexSort2(a2, b3) { var cy = a2.cy(); var hasCompoundNodes2 = cy.hasCompoundNodes(); function getDepth(ele) { var style3 = ele.pstyle("z-compound-depth"); if (style3.value === "auto") { return hasCompoundNodes2 ? ele.zDepth() : 0; } else if (style3.value === "bottom") { return -1; } else if (style3.value === "top") { return MAX_INT$1; } return 0; } __name(getDepth, "getDepth"); var depthDiff = getDepth(a2) - getDepth(b3); if (depthDiff !== 0) { return depthDiff; } function getEleDepth(ele) { var style3 = ele.pstyle("z-index-compare"); if (style3.value === "auto") { return ele.isNode() ? 1 : 0; } return 0; } __name(getEleDepth, "getEleDepth"); var eleDiff = getEleDepth(a2) - getEleDepth(b3); if (eleDiff !== 0) { return eleDiff; } var zDiff = a2.pstyle("z-index").value - b3.pstyle("z-index").value; if (zDiff !== 0) { return zDiff; } return a2.poolIndex() - b3.poolIndex(); }, "zIndexSort"); elesfn$6 = { forEach: /* @__PURE__ */ __name(function forEach2(fn3, thisArg) { if (fn$6(fn3)) { var N3 = this.length; for (var i2 = 0; i2 < N3; i2++) { var ele = this[i2]; var ret = thisArg ? fn3.apply(thisArg, [ele, i2, this]) : fn3(ele, i2, this); if (ret === false) { break; } } } return this; }, "forEach"), toArray: /* @__PURE__ */ __name(function toArray2() { var array4 = []; for (var i2 = 0; i2 < this.length; i2++) { array4.push(this[i2]); } return array4; }, "toArray"), slice: /* @__PURE__ */ __name(function slice2(start3, end2) { var array4 = []; var thisSize = this.length; if (end2 == null) { end2 = thisSize; } if (start3 == null) { start3 = 0; } if (start3 < 0) { start3 = thisSize + start3; } if (end2 < 0) { end2 = thisSize + end2; } for (var i2 = start3; i2 >= 0 && i2 < end2 && i2 < thisSize; i2++) { array4.push(this[i2]); } return this.spawn(array4); }, "slice"), size: /* @__PURE__ */ __name(function size2() { return this.length; }, "size"), eq: /* @__PURE__ */ __name(function eq2(i2) { return this[i2] || this.spawn(); }, "eq"), first: /* @__PURE__ */ __name(function first() { return this[0] || this.spawn(); }, "first"), last: /* @__PURE__ */ __name(function last2() { return this[this.length - 1] || this.spawn(); }, "last"), empty: /* @__PURE__ */ __name(function empty2() { return this.length === 0; }, "empty"), nonempty: /* @__PURE__ */ __name(function nonempty() { return !this.empty(); }, "nonempty"), sort: /* @__PURE__ */ __name(function sort2(sortFn) { if (!fn$6(sortFn)) { return this; } var sorted = this.toArray().sort(sortFn); return this.spawn(sorted); }, "sort"), sortByZIndex: /* @__PURE__ */ __name(function sortByZIndex() { return this.sort(zIndexSort); }, "sortByZIndex"), zDepth: /* @__PURE__ */ __name(function zDepth() { var ele = this[0]; if (!ele) { return void 0; } var _p = ele._private; var group2 = _p.group; if (group2 === "nodes") { var depth = _p.data.parent ? ele.parents().size() : 0; if (!ele.isParent()) { return MAX_INT$1 - 1; } return depth; } else { var src = _p.source; var tgt = _p.target; var srcDepth = src.zDepth(); var tgtDepth = tgt.zDepth(); return Math.max(srcDepth, tgtDepth, 0); } }, "zDepth") }; elesfn$6.each = elesfn$6.forEach; defineSymbolIterator = /* @__PURE__ */ __name(function defineSymbolIterator2() { var typeofUndef = "undefined"; var isIteratorSupported = (typeof Symbol === "undefined" ? "undefined" : _typeof(Symbol)) != typeofUndef && _typeof(Symbol.iterator) != typeofUndef; if (isIteratorSupported) { elesfn$6[Symbol.iterator] = function() { var _this = this; var entry = { value: void 0, done: false }; var i2 = 0; var length2 = this.length; return _defineProperty$1({ next: /* @__PURE__ */ __name(function next3() { if (i2 < length2) { entry.value = _this[i2++]; } else { entry.value = void 0; entry.done = true; } return entry; }, "next") }, Symbol.iterator, function() { return this; }); }; } }, "defineSymbolIterator"); defineSymbolIterator(); getLayoutDimensionOptions = defaults$g({ nodeDimensionsIncludeLabels: false }); elesfn$5 = { // Calculates and returns node dimensions { x, y } based on options given layoutDimensions: /* @__PURE__ */ __name(function layoutDimensions(options2) { options2 = getLayoutDimensionOptions(options2); var dims; if (!this.takesUpSpace()) { dims = { w: 0, h: 0 }; } else if (options2.nodeDimensionsIncludeLabels) { var bbDim = this.boundingBox(); dims = { w: bbDim.w, h: bbDim.h }; } else { dims = { w: this.outerWidth(), h: this.outerHeight() }; } if (dims.w === 0 || dims.h === 0) { dims.w = dims.h = 1; } return dims; }, "layoutDimensions"), // using standard layout options, apply position function (w/ or w/o animation) layoutPositions: /* @__PURE__ */ __name(function layoutPositions(layout6, options2, fn3) { var nodes5 = this.nodes().filter(function(n2) { return !n2.isParent(); }); var cy = this.cy(); var layoutEles = options2.eles; var getMemoizeKey = /* @__PURE__ */ __name(function getMemoizeKey2(node3) { return node3.id(); }, "getMemoizeKey"); var fnMem = memoize2(fn3, getMemoizeKey); layout6.emit({ type: "layoutstart", layout: layout6 }); layout6.animations = []; var calculateSpacing = /* @__PURE__ */ __name(function calculateSpacing2(spacing2, nodesBb, pos) { var center4 = { x: nodesBb.x1 + nodesBb.w / 2, y: nodesBb.y1 + nodesBb.h / 2 }; var spacingVector = { // scale from center of bounding box (not necessarily 0,0) x: (pos.x - center4.x) * spacing2, y: (pos.y - center4.y) * spacing2 }; return { x: center4.x + spacingVector.x, y: center4.y + spacingVector.y }; }, "calculateSpacing"); var useSpacingFactor = options2.spacingFactor && options2.spacingFactor !== 1; var spacingBb = /* @__PURE__ */ __name(function spacingBb2() { if (!useSpacingFactor) { return null; } var bb2 = makeBoundingBox(); for (var i3 = 0; i3 < nodes5.length; i3++) { var node3 = nodes5[i3]; var pos = fnMem(node3, i3); expandBoundingBoxByPoint(bb2, pos.x, pos.y); } return bb2; }, "spacingBb"); var bb = spacingBb(); var getFinalPos = memoize2(function(node3, i3) { var newPos2 = fnMem(node3, i3); if (useSpacingFactor) { var spacing2 = Math.abs(options2.spacingFactor); newPos2 = calculateSpacing(spacing2, bb, newPos2); } if (options2.transform != null) { newPos2 = options2.transform(node3, newPos2); } return newPos2; }, getMemoizeKey); if (options2.animate) { for (var i2 = 0; i2 < nodes5.length; i2++) { var node2 = nodes5[i2]; var newPos = getFinalPos(node2, i2); var animateNode = options2.animateFilter == null || options2.animateFilter(node2, i2); if (animateNode) { var ani = node2.animation({ position: newPos, duration: options2.animationDuration, easing: options2.animationEasing }); layout6.animations.push(ani); } else { node2.position(newPos); } } if (options2.fit) { var fitAni = cy.animation({ fit: { boundingBox: layoutEles.boundingBoxAt(getFinalPos), padding: options2.padding }, duration: options2.animationDuration, easing: options2.animationEasing }); layout6.animations.push(fitAni); } else if (options2.zoom !== void 0 && options2.pan !== void 0) { var zoomPanAni = cy.animation({ zoom: options2.zoom, pan: options2.pan, duration: options2.animationDuration, easing: options2.animationEasing }); layout6.animations.push(zoomPanAni); } layout6.animations.forEach(function(ani2) { return ani2.play(); }); layout6.one("layoutready", options2.ready); layout6.emit({ type: "layoutready", layout: layout6 }); Promise$1.all(layout6.animations.map(function(ani2) { return ani2.promise(); })).then(function() { layout6.one("layoutstop", options2.stop); layout6.emit({ type: "layoutstop", layout: layout6 }); }); } else { nodes5.positions(getFinalPos); if (options2.fit) { cy.fit(options2.eles, options2.padding); } if (options2.zoom != null) { cy.zoom(options2.zoom); } if (options2.pan) { cy.pan(options2.pan); } layout6.one("layoutready", options2.ready); layout6.emit({ type: "layoutready", layout: layout6 }); layout6.one("layoutstop", options2.stop); layout6.emit({ type: "layoutstop", layout: layout6 }); } return this; }, "layoutPositions"), layout: /* @__PURE__ */ __name(function layout2(options2) { var cy = this.cy(); return cy.makeLayout(extend4({}, options2, { eles: this })); }, "layout") }; elesfn$5.createLayout = elesfn$5.makeLayout = elesfn$5.layout; __name(styleCache, "styleCache"); __name(cacheStyleFunction, "cacheStyleFunction"); __name(cachePrototypeStyleFunction, "cachePrototypeStyleFunction"); elesfn$4 = { recalculateRenderedStyle: /* @__PURE__ */ __name(function recalculateRenderedStyle(useCache) { var cy = this.cy(); var renderer10 = cy.renderer(); var styleEnabled2 = cy.styleEnabled(); if (renderer10 && styleEnabled2) { renderer10.recalculateRenderedStyle(this, useCache); } return this; }, "recalculateRenderedStyle"), dirtyStyleCache: /* @__PURE__ */ __name(function dirtyStyleCache() { var cy = this.cy(); var dirty = /* @__PURE__ */ __name(function dirty2(ele) { return ele._private.styleCache = null; }, "dirty"); if (cy.hasCompoundNodes()) { var eles; eles = this.spawnSelf().merge(this.descendants()).merge(this.parents()); eles.merge(eles.connectedEdges()); eles.forEach(dirty); } else { this.forEach(function(ele) { dirty(ele); ele.connectedEdges().forEach(dirty); }); } return this; }, "dirtyStyleCache"), // fully updates (recalculates) the style for the elements updateStyle: /* @__PURE__ */ __name(function updateStyle(notifyRenderer) { var cy = this._private.cy; if (!cy.styleEnabled()) { return this; } if (cy.batching()) { var bEles = cy._private.batchStyleEles; bEles.merge(this); return this; } var hasCompounds = cy.hasCompoundNodes(); var updatedEles = this; notifyRenderer = notifyRenderer || notifyRenderer === void 0 ? true : false; if (hasCompounds) { updatedEles = this.spawnSelf().merge(this.descendants()).merge(this.parents()); } var changedEles = updatedEles; if (notifyRenderer) { changedEles.emitAndNotify("style"); } else { changedEles.emit("style"); } updatedEles.forEach(function(ele) { return ele._private.styleDirty = true; }); return this; }, "updateStyle"), // private: clears dirty flag and recalculates style cleanStyle: /* @__PURE__ */ __name(function cleanStyle() { var cy = this.cy(); if (!cy.styleEnabled()) { return; } for (var i2 = 0; i2 < this.length; i2++) { var ele = this[i2]; if (ele._private.styleDirty) { ele._private.styleDirty = false; cy.style().apply(ele); } } }, "cleanStyle"), // get the internal parsed style object for the specified property parsedStyle: /* @__PURE__ */ __name(function parsedStyle(property2) { var includeNonDefault = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true; var ele = this[0]; var cy = ele.cy(); if (!cy.styleEnabled()) { return; } if (ele) { if (ele._private.styleDirty) { ele._private.styleDirty = false; cy.style().apply(ele); } var overriddenStyle = ele._private.style[property2]; if (overriddenStyle != null) { return overriddenStyle; } else if (includeNonDefault) { return cy.style().getDefaultProperty(property2); } else { return null; } } }, "parsedStyle"), numericStyle: /* @__PURE__ */ __name(function numericStyle(property2) { var ele = this[0]; if (!ele.cy().styleEnabled()) { return; } if (ele) { var pstyle = ele.pstyle(property2); return pstyle.pfValue !== void 0 ? pstyle.pfValue : pstyle.value; } }, "numericStyle"), numericStyleUnits: /* @__PURE__ */ __name(function numericStyleUnits(property2) { var ele = this[0]; if (!ele.cy().styleEnabled()) { return; } if (ele) { return ele.pstyle(property2).units; } }, "numericStyleUnits"), // get the specified css property as a rendered value (i.e. on-screen value) // or get the whole rendered style if no property specified (NB doesn't allow setting) renderedStyle: /* @__PURE__ */ __name(function renderedStyle(property2) { var cy = this.cy(); if (!cy.styleEnabled()) { return this; } var ele = this[0]; if (ele) { return cy.style().getRenderedStyle(ele, property2); } }, "renderedStyle"), // read the calculated css style of the element or override the style (via a bypass) style: /* @__PURE__ */ __name(function style(name, value2) { var cy = this.cy(); if (!cy.styleEnabled()) { return this; } var updateTransitions = false; var style3 = cy.style(); if (plainObject(name)) { var props = name; style3.applyBypass(this, props, updateTransitions); this.emitAndNotify("style"); } else if (string(name)) { if (value2 === void 0) { var ele = this[0]; if (ele) { return style3.getStylePropertyValue(ele, name); } else { return; } } else { style3.applyBypass(this, name, value2, updateTransitions); this.emitAndNotify("style"); } } else if (name === void 0) { var _ele = this[0]; if (_ele) { return style3.getRawStyle(_ele); } else { return; } } return this; }, "style"), removeStyle: /* @__PURE__ */ __name(function removeStyle(names) { var cy = this.cy(); if (!cy.styleEnabled()) { return this; } var updateTransitions = false; var style3 = cy.style(); var eles = this; if (names === void 0) { for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; style3.removeAllBypasses(ele, updateTransitions); } } else { names = names.split(/\s+/); for (var _i = 0; _i < eles.length; _i++) { var _ele2 = eles[_i]; style3.removeBypasses(_ele2, names, updateTransitions); } } this.emitAndNotify("style"); return this; }, "removeStyle"), show: /* @__PURE__ */ __name(function show() { this.css("display", "element"); return this; }, "show"), hide: /* @__PURE__ */ __name(function hide() { this.css("display", "none"); return this; }, "hide"), effectiveOpacity: /* @__PURE__ */ __name(function effectiveOpacity() { var cy = this.cy(); if (!cy.styleEnabled()) { return 1; } var hasCompoundNodes2 = cy.hasCompoundNodes(); var ele = this[0]; if (ele) { var _p = ele._private; var parentOpacity = ele.pstyle("opacity").value; if (!hasCompoundNodes2) { return parentOpacity; } var parents3 = !_p.data.parent ? null : ele.parents(); if (parents3) { for (var i2 = 0; i2 < parents3.length; i2++) { var parent4 = parents3[i2]; var opacity = parent4.pstyle("opacity").value; parentOpacity = opacity * parentOpacity; } } return parentOpacity; } }, "effectiveOpacity"), transparent: /* @__PURE__ */ __name(function transparent() { var cy = this.cy(); if (!cy.styleEnabled()) { return false; } var ele = this[0]; var hasCompoundNodes2 = ele.cy().hasCompoundNodes(); if (ele) { if (!hasCompoundNodes2) { return ele.pstyle("opacity").value === 0; } else { return ele.effectiveOpacity() === 0; } } }, "transparent"), backgrounding: /* @__PURE__ */ __name(function backgrounding() { var cy = this.cy(); if (!cy.styleEnabled()) { return false; } var ele = this[0]; return ele._private.backgrounding ? true : false; }, "backgrounding") }; __name(checkCompound, "checkCompound"); __name(defineDerivedStateFunction, "defineDerivedStateFunction"); eleTakesUpSpace = cacheStyleFunction("eleTakesUpSpace", function(ele) { return ele.pstyle("display").value === "element" && ele.width() !== 0 && (ele.isNode() ? ele.height() !== 0 : true); }); elesfn$4.takesUpSpace = cachePrototypeStyleFunction("takesUpSpace", defineDerivedStateFunction({ ok: eleTakesUpSpace })); eleInteractive = cacheStyleFunction("eleInteractive", function(ele) { return ele.pstyle("events").value === "yes" && ele.pstyle("visibility").value === "visible" && eleTakesUpSpace(ele); }); parentInteractive = cacheStyleFunction("parentInteractive", function(parent4) { return parent4.pstyle("visibility").value === "visible" && eleTakesUpSpace(parent4); }); elesfn$4.interactive = cachePrototypeStyleFunction("interactive", defineDerivedStateFunction({ ok: eleInteractive, parentOk: parentInteractive, edgeOkViaNode: eleTakesUpSpace })); elesfn$4.noninteractive = function() { var ele = this[0]; if (ele) { return !ele.interactive(); } }; eleVisible = cacheStyleFunction("eleVisible", function(ele) { return ele.pstyle("visibility").value === "visible" && ele.pstyle("opacity").pfValue !== 0 && eleTakesUpSpace(ele); }); edgeVisibleViaNode = eleTakesUpSpace; elesfn$4.visible = cachePrototypeStyleFunction("visible", defineDerivedStateFunction({ ok: eleVisible, edgeOkViaNode: edgeVisibleViaNode })); elesfn$4.hidden = function() { var ele = this[0]; if (ele) { return !ele.visible(); } }; elesfn$4.isBundledBezier = cachePrototypeStyleFunction("isBundledBezier", function() { if (!this.cy().styleEnabled()) { return false; } return !this.removed() && this.pstyle("curve-style").value === "bezier" && this.takesUpSpace(); }); elesfn$4.bypass = elesfn$4.css = elesfn$4.style; elesfn$4.renderedCss = elesfn$4.renderedStyle; elesfn$4.removeBypass = elesfn$4.removeCss = elesfn$4.removeStyle; elesfn$4.pstyle = elesfn$4.parsedStyle; elesfn$3 = {}; __name(defineSwitchFunction, "defineSwitchFunction"); __name(defineSwitchSet, "defineSwitchSet"); defineSwitchSet({ field: "locked", overrideField: /* @__PURE__ */ __name(function overrideField(ele) { return ele.cy().autolock() ? true : void 0; }, "overrideField"), on: "lock", off: "unlock" }); defineSwitchSet({ field: "grabbable", overrideField: /* @__PURE__ */ __name(function overrideField2(ele) { return ele.cy().autoungrabify() || ele.pannable() ? false : void 0; }, "overrideField"), on: "grabify", off: "ungrabify" }); defineSwitchSet({ field: "selected", ableField: "selectable", overrideAble: /* @__PURE__ */ __name(function overrideAble(ele) { return ele.cy().autounselectify() ? false : void 0; }, "overrideAble"), on: "select", off: "unselect" }); defineSwitchSet({ field: "selectable", overrideField: /* @__PURE__ */ __name(function overrideField3(ele) { return ele.cy().autounselectify() ? false : void 0; }, "overrideField"), on: "selectify", off: "unselectify" }); elesfn$3.deselect = elesfn$3.unselect; elesfn$3.grabbed = function() { var ele = this[0]; if (ele) { return ele._private.grabbed; } }; defineSwitchSet({ field: "active", on: "activate", off: "unactivate" }); defineSwitchSet({ field: "pannable", on: "panify", off: "unpanify" }); elesfn$3.inactive = function() { var ele = this[0]; if (ele) { return !ele._private.active; } }; elesfn$2 = {}; defineDagExtremity = /* @__PURE__ */ __name(function defineDagExtremity2(params) { return /* @__PURE__ */ __name(function dagExtremityImpl(selector) { var eles = this; var ret = []; for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; if (!ele.isNode()) { continue; } var disqualified = false; var edges3 = ele.connectedEdges(); for (var j3 = 0; j3 < edges3.length; j3++) { var edge = edges3[j3]; var src = edge.source(); var tgt = edge.target(); if (params.noIncomingEdges && tgt === ele && src !== ele || params.noOutgoingEdges && src === ele && tgt !== ele) { disqualified = true; break; } } if (!disqualified) { ret.push(ele); } } return this.spawn(ret, true).filter(selector); }, "dagExtremityImpl"); }, "defineDagExtremity"); defineDagOneHop = /* @__PURE__ */ __name(function defineDagOneHop2(params) { return function(selector) { var eles = this; var oEles = []; for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; if (!ele.isNode()) { continue; } var edges3 = ele.connectedEdges(); for (var j3 = 0; j3 < edges3.length; j3++) { var edge = edges3[j3]; var src = edge.source(); var tgt = edge.target(); if (params.outgoing && src === ele) { oEles.push(edge); oEles.push(tgt); } else if (params.incoming && tgt === ele) { oEles.push(edge); oEles.push(src); } } } return this.spawn(oEles, true).filter(selector); }; }, "defineDagOneHop"); defineDagAllHops = /* @__PURE__ */ __name(function defineDagAllHops2(params) { return function(selector) { var eles = this; var sEles = []; var sElesIds = {}; for (; ; ) { var next3 = params.outgoing ? eles.outgoers() : eles.incomers(); if (next3.length === 0) { break; } var newNext = false; for (var i2 = 0; i2 < next3.length; i2++) { var n2 = next3[i2]; var nid = n2.id(); if (!sElesIds[nid]) { sElesIds[nid] = true; sEles.push(n2); newNext = true; } } if (!newNext) { break; } eles = next3; } return this.spawn(sEles, true).filter(selector); }; }, "defineDagAllHops"); elesfn$2.clearTraversalCache = function() { for (var i2 = 0; i2 < this.length; i2++) { this[i2]._private.traversalCache = null; } }; extend4(elesfn$2, { // get the root nodes in the DAG roots: defineDagExtremity({ noIncomingEdges: true }), // get the leaf nodes in the DAG leaves: defineDagExtremity({ noOutgoingEdges: true }), // normally called children in graph theory // these nodes =edges=> outgoing nodes outgoers: cache(defineDagOneHop({ outgoing: true }), "outgoers"), // aka DAG descendants successors: defineDagAllHops({ outgoing: true }), // normally called parents in graph theory // these nodes <=edges= incoming nodes incomers: cache(defineDagOneHop({ incoming: true }), "incomers"), // aka DAG ancestors predecessors: defineDagAllHops({}) }); extend4(elesfn$2, { neighborhood: cache(function(selector) { var elements2 = []; var nodes5 = this.nodes(); for (var i2 = 0; i2 < nodes5.length; i2++) { var node2 = nodes5[i2]; var connectedEdges = node2.connectedEdges(); for (var j3 = 0; j3 < connectedEdges.length; j3++) { var edge = connectedEdges[j3]; var src = edge.source(); var tgt = edge.target(); var otherNode = node2 === src ? tgt : src; if (otherNode.length > 0) { elements2.push(otherNode[0]); } elements2.push(edge[0]); } } return this.spawn(elements2, true).filter(selector); }, "neighborhood"), closedNeighborhood: /* @__PURE__ */ __name(function closedNeighborhood(selector) { return this.neighborhood().add(this).filter(selector); }, "closedNeighborhood"), openNeighborhood: /* @__PURE__ */ __name(function openNeighborhood(selector) { return this.neighborhood(selector); }, "openNeighborhood") }); elesfn$2.neighbourhood = elesfn$2.neighborhood; elesfn$2.closedNeighbourhood = elesfn$2.closedNeighborhood; elesfn$2.openNeighbourhood = elesfn$2.openNeighborhood; extend4(elesfn$2, { source: cache(/* @__PURE__ */ __name(function sourceImpl(selector) { var ele = this[0]; var src; if (ele) { src = ele._private.source || ele.cy().collection(); } return src && selector ? src.filter(selector) : src; }, "sourceImpl"), "source"), target: cache(/* @__PURE__ */ __name(function targetImpl(selector) { var ele = this[0]; var tgt; if (ele) { tgt = ele._private.target || ele.cy().collection(); } return tgt && selector ? tgt.filter(selector) : tgt; }, "targetImpl"), "target"), sources: defineSourceFunction({ attr: "source" }), targets: defineSourceFunction({ attr: "target" }) }); __name(defineSourceFunction, "defineSourceFunction"); extend4(elesfn$2, { edgesWith: cache(defineEdgesWithFunction(), "edgesWith"), edgesTo: cache(defineEdgesWithFunction({ thisIsSrc: true }), "edgesTo") }); __name(defineEdgesWithFunction, "defineEdgesWithFunction"); extend4(elesfn$2, { connectedEdges: cache(function(selector) { var retEles = []; var eles = this; for (var i2 = 0; i2 < eles.length; i2++) { var node2 = eles[i2]; if (!node2.isNode()) { continue; } var edges3 = node2._private.edges; for (var j3 = 0; j3 < edges3.length; j3++) { var edge = edges3[j3]; retEles.push(edge); } } return this.spawn(retEles, true).filter(selector); }, "connectedEdges"), connectedNodes: cache(function(selector) { var retEles = []; var eles = this; for (var i2 = 0; i2 < eles.length; i2++) { var edge = eles[i2]; if (!edge.isEdge()) { continue; } retEles.push(edge.source()[0]); retEles.push(edge.target()[0]); } return this.spawn(retEles, true).filter(selector); }, "connectedNodes"), parallelEdges: cache(defineParallelEdgesFunction(), "parallelEdges"), codirectedEdges: cache(defineParallelEdgesFunction({ codirected: true }), "codirectedEdges") }); __name(defineParallelEdgesFunction, "defineParallelEdgesFunction"); extend4(elesfn$2, { components: /* @__PURE__ */ __name(function components2(root3) { var self2 = this; var cy = self2.cy(); var visited = cy.collection(); var unvisited = root3 == null ? self2.nodes() : root3.nodes(); var components3 = []; if (root3 != null && unvisited.empty()) { unvisited = root3.sources(); } var visitInComponent = /* @__PURE__ */ __name(function visitInComponent2(node2, component2) { visited.merge(node2); unvisited.unmerge(node2); component2.merge(node2); }, "visitInComponent"); if (unvisited.empty()) { return self2.spawn(); } var _loop = /* @__PURE__ */ __name(function _loop2() { var cmpt = cy.collection(); components3.push(cmpt); var root4 = unvisited[0]; visitInComponent(root4, cmpt); self2.bfs({ directed: false, roots: root4, visit: /* @__PURE__ */ __name(function visit(v3) { return visitInComponent(v3, cmpt); }, "visit") }); cmpt.forEach(function(node2) { node2.connectedEdges().forEach(function(e3) { if (self2.has(e3) && cmpt.has(e3.source()) && cmpt.has(e3.target())) { cmpt.merge(e3); } }); }); }, "_loop"); do { _loop(); } while (unvisited.length > 0); return components3; }, "components"), component: /* @__PURE__ */ __name(function component() { var ele = this[0]; return ele.cy().mutableElements().components(ele)[0]; }, "component") }); elesfn$2.componentsOf = elesfn$2.components; Collection = /* @__PURE__ */ __name(function Collection2(cy, elements2) { var unique = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false; var removed = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : false; if (cy === void 0) { error("A collection must have a reference to the core"); return; } var map5 = new Map$1(); var createdElements = false; if (!elements2) { elements2 = []; } else if (elements2.length > 0 && plainObject(elements2[0]) && !element(elements2[0])) { createdElements = true; var eles = []; var elesIds = new Set$1(); for (var i2 = 0, l4 = elements2.length; i2 < l4; i2++) { var json3 = elements2[i2]; if (json3.data == null) { json3.data = {}; } var _data = json3.data; if (_data.id == null) { _data.id = uuid(); } else if (cy.hasElementWithId(_data.id) || elesIds.has(_data.id)) { continue; } var ele = new Element(cy, json3, false); eles.push(ele); elesIds.add(_data.id); } elements2 = eles; } this.length = 0; for (var _i = 0, _l = elements2.length; _i < _l; _i++) { var element$1 = elements2[_i][0]; if (element$1 == null) { continue; } var id30 = element$1._private.data.id; if (!unique || !map5.has(id30)) { if (unique) { map5.set(id30, { index: this.length, ele: element$1 }); } this[this.length] = element$1; this.length++; } } this._private = { eles: this, cy, get map() { if (this.lazyMap == null) { this.rebuildMap(); } return this.lazyMap; }, set map(m3) { this.lazyMap = m3; }, rebuildMap: /* @__PURE__ */ __name(function rebuildMap() { var m3 = this.lazyMap = new Map$1(); var eles2 = this.eles; for (var _i2 = 0; _i2 < eles2.length; _i2++) { var _ele = eles2[_i2]; m3.set(_ele.id(), { index: _i2, ele: _ele }); } }, "rebuildMap") }; if (unique) { this._private.map = map5; } if (createdElements && !removed) { this.restore(); } }, "Collection"); elesfn$1 = Element.prototype = Collection.prototype = Object.create(Array.prototype); elesfn$1.instanceString = function() { return "collection"; }; elesfn$1.spawn = function(eles, unique) { return new Collection(this.cy(), eles, unique); }; elesfn$1.spawnSelf = function() { return this.spawn(this); }; elesfn$1.cy = function() { return this._private.cy; }; elesfn$1.renderer = function() { return this._private.cy.renderer(); }; elesfn$1.element = function() { return this[0]; }; elesfn$1.collection = function() { if (collection(this)) { return this; } else { return new Collection(this._private.cy, [this]); } }; elesfn$1.unique = function() { return new Collection(this._private.cy, this, true); }; elesfn$1.hasElementWithId = function(id30) { id30 = "" + id30; return this._private.map.has(id30); }; elesfn$1.getElementById = function(id30) { id30 = "" + id30; var cy = this._private.cy; var entry = this._private.map.get(id30); return entry ? entry.ele : new Collection(cy); }; elesfn$1.$id = elesfn$1.getElementById; elesfn$1.poolIndex = function() { var cy = this._private.cy; var eles = cy._private.elements; var id30 = this[0]._private.data.id; return eles._private.map.get(id30).index; }; elesfn$1.indexOf = function(ele) { var id30 = ele[0]._private.data.id; return this._private.map.get(id30).index; }; elesfn$1.indexOfId = function(id30) { id30 = "" + id30; return this._private.map.get(id30).index; }; elesfn$1.json = function(obj) { var ele = this.element(); var cy = this.cy(); if (ele == null && obj) { return this; } if (ele == null) { return void 0; } var p3 = ele._private; if (plainObject(obj)) { cy.startBatch(); if (obj.data) { ele.data(obj.data); var _data2 = p3.data; if (ele.isEdge()) { var move = false; var spec = {}; var src = obj.data.source; var tgt = obj.data.target; if (src != null && src != _data2.source) { spec.source = "" + src; move = true; } if (tgt != null && tgt != _data2.target) { spec.target = "" + tgt; move = true; } if (move) { ele = ele.move(spec); } } else { var newParentValSpecd = "parent" in obj.data; var parent4 = obj.data.parent; if (newParentValSpecd && (parent4 != null || _data2.parent != null) && parent4 != _data2.parent) { if (parent4 === void 0) { parent4 = null; } if (parent4 != null) { parent4 = "" + parent4; } ele = ele.move({ parent: parent4 }); } } } if (obj.position) { ele.position(obj.position); } var checkSwitch = /* @__PURE__ */ __name(function checkSwitch2(k2, trueFnName, falseFnName) { var obj_k = obj[k2]; if (obj_k != null && obj_k !== p3[k2]) { if (obj_k) { ele[trueFnName](); } else { ele[falseFnName](); } } }, "checkSwitch"); checkSwitch("removed", "remove", "restore"); checkSwitch("selected", "select", "unselect"); checkSwitch("selectable", "selectify", "unselectify"); checkSwitch("locked", "lock", "unlock"); checkSwitch("grabbable", "grabify", "ungrabify"); checkSwitch("pannable", "panify", "unpanify"); if (obj.classes != null) { ele.classes(obj.classes); } cy.endBatch(); return this; } else if (obj === void 0) { var json3 = { data: copy3(p3.data), position: copy3(p3.position), group: p3.group, removed: p3.removed, selected: p3.selected, selectable: p3.selectable, locked: p3.locked, grabbable: p3.grabbable, pannable: p3.pannable, classes: null }; json3.classes = ""; var i2 = 0; p3.classes.forEach(function(cls) { return json3.classes += i2++ === 0 ? cls : " " + cls; }); return json3; } }; elesfn$1.jsons = function() { var jsons = []; for (var i2 = 0; i2 < this.length; i2++) { var ele = this[i2]; var json3 = ele.json(); jsons.push(json3); } return jsons; }; elesfn$1.clone = function() { var cy = this.cy(); var elesArr = []; for (var i2 = 0; i2 < this.length; i2++) { var ele = this[i2]; var json3 = ele.json(); var clone6 = new Element(cy, json3, false); elesArr.push(clone6); } return new Collection(cy, elesArr); }; elesfn$1.copy = elesfn$1.clone; elesfn$1.restore = function() { var notifyRenderer = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true; var addToPool2 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true; var self2 = this; var cy = self2.cy(); var cy_p = cy._private; var nodes5 = []; var edges3 = []; var elements2; for (var _i3 = 0, l4 = self2.length; _i3 < l4; _i3++) { var ele = self2[_i3]; if (addToPool2 && !ele.removed()) { continue; } if (ele.isNode()) { nodes5.push(ele); } else { edges3.push(ele); } } elements2 = nodes5.concat(edges3); var i2; var removeFromElements = /* @__PURE__ */ __name(function removeFromElements2() { elements2.splice(i2, 1); i2--; }, "removeFromElements"); for (i2 = 0; i2 < elements2.length; i2++) { var _ele2 = elements2[i2]; var _private = _ele2._private; var _data3 = _private.data; _ele2.clearTraversalCache(); if (!addToPool2 && !_private.removed) ; else if (_data3.id === void 0) { _data3.id = uuid(); } else if (number$1(_data3.id)) { _data3.id = "" + _data3.id; } else if (emptyString(_data3.id) || !string(_data3.id)) { error("Can not create element with invalid string ID `" + _data3.id + "`"); removeFromElements(); continue; } else if (cy.hasElementWithId(_data3.id)) { error("Can not create second element with ID `" + _data3.id + "`"); removeFromElements(); continue; } var id30 = _data3.id; if (_ele2.isNode()) { var pos = _private.position; if (pos.x == null) { pos.x = 0; } if (pos.y == null) { pos.y = 0; } } if (_ele2.isEdge()) { var edge = _ele2; var fields = ["source", "target"]; var fieldsLength = fields.length; var badSourceOrTarget = false; for (var j3 = 0; j3 < fieldsLength; j3++) { var field = fields[j3]; var val = _data3[field]; if (number$1(val)) { val = _data3[field] = "" + _data3[field]; } if (val == null || val === "") { error("Can not create edge `" + id30 + "` with unspecified " + field); badSourceOrTarget = true; } else if (!cy.hasElementWithId(val)) { error("Can not create edge `" + id30 + "` with nonexistant " + field + " `" + val + "`"); badSourceOrTarget = true; } } if (badSourceOrTarget) { removeFromElements(); continue; } var src = cy.getElementById(_data3.source); var tgt = cy.getElementById(_data3.target); if (src.same(tgt)) { src._private.edges.push(edge); } else { src._private.edges.push(edge); tgt._private.edges.push(edge); } edge._private.source = src; edge._private.target = tgt; } _private.map = new Map$1(); _private.map.set(id30, { ele: _ele2, index: 0 }); _private.removed = false; if (addToPool2) { cy.addToPool(_ele2); } } for (var _i4 = 0; _i4 < nodes5.length; _i4++) { var node2 = nodes5[_i4]; var _data4 = node2._private.data; if (number$1(_data4.parent)) { _data4.parent = "" + _data4.parent; } var parentId = _data4.parent; var specifiedParent = parentId != null; if (specifiedParent || node2._private.parent) { var parent4 = node2._private.parent ? cy.collection().merge(node2._private.parent) : cy.getElementById(parentId); if (parent4.empty()) { _data4.parent = void 0; } else if (parent4[0].removed()) { warn("Node added with missing parent, reference to parent removed"); _data4.parent = void 0; node2._private.parent = null; } else { var selfAsParent = false; var ancestor = parent4; while (!ancestor.empty()) { if (node2.same(ancestor)) { selfAsParent = true; _data4.parent = void 0; break; } ancestor = ancestor.parent(); } if (!selfAsParent) { parent4[0]._private.children.push(node2); node2._private.parent = parent4[0]; cy_p.hasCompoundNodes = true; } } } } if (elements2.length > 0) { var restored = elements2.length === self2.length ? self2 : new Collection(cy, elements2); for (var _i5 = 0; _i5 < restored.length; _i5++) { var _ele3 = restored[_i5]; if (_ele3.isNode()) { continue; } _ele3.parallelEdges().clearTraversalCache(); _ele3.source().clearTraversalCache(); _ele3.target().clearTraversalCache(); } var toUpdateStyle; if (cy_p.hasCompoundNodes) { toUpdateStyle = cy.collection().merge(restored).merge(restored.connectedNodes()).merge(restored.parent()); } else { toUpdateStyle = restored; } toUpdateStyle.dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(notifyRenderer); if (notifyRenderer) { restored.emitAndNotify("add"); } else if (addToPool2) { restored.emit("add"); } } return self2; }; elesfn$1.removed = function() { var ele = this[0]; return ele && ele._private.removed; }; elesfn$1.inside = function() { var ele = this[0]; return ele && !ele._private.removed; }; elesfn$1.remove = function() { var notifyRenderer = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true; var removeFromPool2 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true; var self2 = this; var elesToRemove = []; var elesToRemoveIds = {}; var cy = self2._private.cy; function addConnectedEdges(node2) { var edges3 = node2._private.edges; for (var i3 = 0; i3 < edges3.length; i3++) { add3(edges3[i3]); } } __name(addConnectedEdges, "addConnectedEdges"); function addChildren2(node2) { var children2 = node2._private.children; for (var i3 = 0; i3 < children2.length; i3++) { add3(children2[i3]); } } __name(addChildren2, "addChildren"); function add3(ele2) { var alreadyAdded = elesToRemoveIds[ele2.id()]; if (removeFromPool2 && ele2.removed() || alreadyAdded) { return; } else { elesToRemoveIds[ele2.id()] = true; } if (ele2.isNode()) { elesToRemove.push(ele2); addConnectedEdges(ele2); addChildren2(ele2); } else { elesToRemove.unshift(ele2); } } __name(add3, "add"); for (var i2 = 0, l4 = self2.length; i2 < l4; i2++) { var ele = self2[i2]; add3(ele); } function removeEdgeRef(node2, edge) { var connectedEdges = node2._private.edges; removeFromArray(connectedEdges, edge); node2.clearTraversalCache(); } __name(removeEdgeRef, "removeEdgeRef"); function removeParallelRef(pllEdge2) { pllEdge2.clearTraversalCache(); } __name(removeParallelRef, "removeParallelRef"); var alteredParents = []; alteredParents.ids = {}; function removeChildRef(parent5, ele2) { ele2 = ele2[0]; parent5 = parent5[0]; var children2 = parent5._private.children; var pid = parent5.id(); removeFromArray(children2, ele2); ele2._private.parent = null; if (!alteredParents.ids[pid]) { alteredParents.ids[pid] = true; alteredParents.push(parent5); } } __name(removeChildRef, "removeChildRef"); self2.dirtyCompoundBoundsCache(); if (removeFromPool2) { cy.removeFromPool(elesToRemove); } for (var _i6 = 0; _i6 < elesToRemove.length; _i6++) { var _ele4 = elesToRemove[_i6]; if (_ele4.isEdge()) { var src = _ele4.source()[0]; var tgt = _ele4.target()[0]; removeEdgeRef(src, _ele4); removeEdgeRef(tgt, _ele4); var pllEdges = _ele4.parallelEdges(); for (var j3 = 0; j3 < pllEdges.length; j3++) { var pllEdge = pllEdges[j3]; removeParallelRef(pllEdge); if (pllEdge.isBundledBezier()) { pllEdge.dirtyBoundingBoxCache(); } } } else { var parent4 = _ele4.parent(); if (parent4.length !== 0) { removeChildRef(parent4, _ele4); } } if (removeFromPool2) { _ele4._private.removed = true; } } var elesStillInside = cy._private.elements; cy._private.hasCompoundNodes = false; for (var _i7 = 0; _i7 < elesStillInside.length; _i7++) { var _ele5 = elesStillInside[_i7]; if (_ele5.isParent()) { cy._private.hasCompoundNodes = true; break; } } var removedElements = new Collection(this.cy(), elesToRemove); if (removedElements.size() > 0) { if (notifyRenderer) { removedElements.emitAndNotify("remove"); } else if (removeFromPool2) { removedElements.emit("remove"); } } for (var _i8 = 0; _i8 < alteredParents.length; _i8++) { var _ele6 = alteredParents[_i8]; if (!removeFromPool2 || !_ele6.removed()) { _ele6.updateStyle(); } } return removedElements; }; elesfn$1.move = function(struct) { var cy = this._private.cy; var eles = this; var notifyRenderer = false; var modifyPool = false; var toString6 = /* @__PURE__ */ __name(function toString7(id30) { return id30 == null ? id30 : "" + id30; }, "toString"); if (struct.source !== void 0 || struct.target !== void 0) { var srcId = toString6(struct.source); var tgtId = toString6(struct.target); var srcExists = srcId != null && cy.hasElementWithId(srcId); var tgtExists = tgtId != null && cy.hasElementWithId(tgtId); if (srcExists || tgtExists) { cy.batch(function() { eles.remove(notifyRenderer, modifyPool); eles.emitAndNotify("moveout"); for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; var _data5 = ele._private.data; if (ele.isEdge()) { if (srcExists) { _data5.source = srcId; } if (tgtExists) { _data5.target = tgtId; } } } eles.restore(notifyRenderer, modifyPool); }); eles.emitAndNotify("move"); } } else if (struct.parent !== void 0) { var parentId = toString6(struct.parent); var parentExists = parentId === null || cy.hasElementWithId(parentId); if (parentExists) { var pidToAssign = parentId === null ? void 0 : parentId; cy.batch(function() { var updated = eles.remove(notifyRenderer, modifyPool); updated.emitAndNotify("moveout"); for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; var _data6 = ele._private.data; if (ele.isNode()) { _data6.parent = pidToAssign; } } updated.restore(notifyRenderer, modifyPool); }); eles.emitAndNotify("move"); } } return this; }; [elesfn$j, elesfn$i, elesfn$h, elesfn$g, elesfn$f, data3, elesfn$d, dimensions, elesfn$9, elesfn$8, elesfn$7, elesfn$6, elesfn$5, elesfn$4, elesfn$3, elesfn$2].forEach(function(props) { extend4(elesfn$1, props); }); corefn$9 = { add: /* @__PURE__ */ __name(function add2(opts) { var elements2; var cy = this; if (elementOrCollection(opts)) { var eles = opts; if (eles._private.cy === cy) { elements2 = eles.restore(); } else { var jsons = []; for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; jsons.push(ele.json()); } elements2 = new Collection(cy, jsons); } } else if (array2(opts)) { var _jsons = opts; elements2 = new Collection(cy, _jsons); } else if (plainObject(opts) && (array2(opts.nodes) || array2(opts.edges))) { var elesByGroup = opts; var _jsons2 = []; var grs = ["nodes", "edges"]; for (var _i = 0, il = grs.length; _i < il; _i++) { var group2 = grs[_i]; var elesArray = elesByGroup[group2]; if (array2(elesArray)) { for (var j3 = 0, jl = elesArray.length; j3 < jl; j3++) { var json3 = extend4({ group: group2 }, elesArray[j3]); _jsons2.push(json3); } } } elements2 = new Collection(cy, _jsons2); } else { var _json = opts; elements2 = new Element(cy, _json).collection(); } return elements2; }, "add"), remove: /* @__PURE__ */ __name(function remove2(collection4) { if (elementOrCollection(collection4)) ; else if (string(collection4)) { var selector = collection4; collection4 = this.$(selector); } return collection4.remove(); }, "remove") }; __name(generateCubicBezier, "generateCubicBezier"); generateSpringRK4 = /* @__PURE__ */ (function() { function springAccelerationForState(state3) { return -state3.tension * state3.x - state3.friction * state3.v; } __name(springAccelerationForState, "springAccelerationForState"); function springEvaluateStateWithDerivative(initialState, dt, derivative) { var state3 = { x: initialState.x + derivative.dx * dt, v: initialState.v + derivative.dv * dt, tension: initialState.tension, friction: initialState.friction }; return { dx: state3.v, dv: springAccelerationForState(state3) }; } __name(springEvaluateStateWithDerivative, "springEvaluateStateWithDerivative"); function springIntegrateState(state3, dt) { var a2 = { dx: state3.v, dv: springAccelerationForState(state3) }, b3 = springEvaluateStateWithDerivative(state3, dt * 0.5, a2), c3 = springEvaluateStateWithDerivative(state3, dt * 0.5, b3), d3 = springEvaluateStateWithDerivative(state3, dt, c3), dxdt = 1 / 6 * (a2.dx + 2 * (b3.dx + c3.dx) + d3.dx), dvdt = 1 / 6 * (a2.dv + 2 * (b3.dv + c3.dv) + d3.dv); state3.x = state3.x + dxdt * dt; state3.v = state3.v + dvdt * dt; return state3; } __name(springIntegrateState, "springIntegrateState"); return /* @__PURE__ */ __name(function springRK4Factory(tension, friction, duration) { var initState = { x: -1, v: 0, tension: null, friction: null }, path4 = [0], time_lapsed = 0, tolerance = 1 / 1e4, DT = 16 / 1e3, have_duration, dt, last_state; tension = parseFloat(tension) || 500; friction = parseFloat(friction) || 20; duration = duration || null; initState.tension = tension; initState.friction = friction; have_duration = duration !== null; if (have_duration) { time_lapsed = springRK4Factory(tension, friction); dt = time_lapsed / duration * DT; } else { dt = DT; } for (; ; ) { last_state = springIntegrateState(last_state || initState, dt); path4.push(1 + last_state.x); time_lapsed += 16; if (!(Math.abs(last_state.x) > tolerance && Math.abs(last_state.v) > tolerance)) { break; } } return !have_duration ? time_lapsed : function(percentComplete) { return path4[percentComplete * (path4.length - 1) | 0]; }; }, "springRK4Factory"); })(); cubicBezier = /* @__PURE__ */ __name(function cubicBezier2(t13, p1, t22, p22) { var bezier = generateCubicBezier(t13, p1, t22, p22); return function(start3, end2, percent) { return start3 + (end2 - start3) * bezier(percent); }; }, "cubicBezier"); easings = { "linear": /* @__PURE__ */ __name(function linear3(start3, end2, percent) { return start3 + (end2 - start3) * percent; }, "linear"), // default easings "ease": cubicBezier(0.25, 0.1, 0.25, 1), "ease-in": cubicBezier(0.42, 0, 1, 1), "ease-out": cubicBezier(0, 0, 0.58, 1), "ease-in-out": cubicBezier(0.42, 0, 0.58, 1), // sine "ease-in-sine": cubicBezier(0.47, 0, 0.745, 0.715), "ease-out-sine": cubicBezier(0.39, 0.575, 0.565, 1), "ease-in-out-sine": cubicBezier(0.445, 0.05, 0.55, 0.95), // quad "ease-in-quad": cubicBezier(0.55, 0.085, 0.68, 0.53), "ease-out-quad": cubicBezier(0.25, 0.46, 0.45, 0.94), "ease-in-out-quad": cubicBezier(0.455, 0.03, 0.515, 0.955), // cubic "ease-in-cubic": cubicBezier(0.55, 0.055, 0.675, 0.19), "ease-out-cubic": cubicBezier(0.215, 0.61, 0.355, 1), "ease-in-out-cubic": cubicBezier(0.645, 0.045, 0.355, 1), // quart "ease-in-quart": cubicBezier(0.895, 0.03, 0.685, 0.22), "ease-out-quart": cubicBezier(0.165, 0.84, 0.44, 1), "ease-in-out-quart": cubicBezier(0.77, 0, 0.175, 1), // quint "ease-in-quint": cubicBezier(0.755, 0.05, 0.855, 0.06), "ease-out-quint": cubicBezier(0.23, 1, 0.32, 1), "ease-in-out-quint": cubicBezier(0.86, 0, 0.07, 1), // expo "ease-in-expo": cubicBezier(0.95, 0.05, 0.795, 0.035), "ease-out-expo": cubicBezier(0.19, 1, 0.22, 1), "ease-in-out-expo": cubicBezier(1, 0, 0, 1), // circ "ease-in-circ": cubicBezier(0.6, 0.04, 0.98, 0.335), "ease-out-circ": cubicBezier(0.075, 0.82, 0.165, 1), "ease-in-out-circ": cubicBezier(0.785, 0.135, 0.15, 0.86), // user param easings... "spring": /* @__PURE__ */ __name(function spring(tension, friction, duration) { if (duration === 0) { return easings.linear; } var spring2 = generateSpringRK4(tension, friction, duration); return function(start3, end2, percent) { return start3 + (end2 - start3) * spring2(percent); }; }, "spring"), "cubic-bezier": cubicBezier }; __name(getEasedValue, "getEasedValue"); __name(getValue2, "getValue"); __name(ease, "ease"); __name(step$1, "step$1"); __name(valid, "valid"); __name(startAnimation, "startAnimation"); __name(stepAll, "stepAll"); corefn$8 = { // pull in animation functions animate: define2.animate(), animation: define2.animation(), animated: define2.animated(), clearQueue: define2.clearQueue(), delay: define2.delay(), delayAnimation: define2.delayAnimation(), stop: define2.stop(), addToAnimationPool: /* @__PURE__ */ __name(function addToAnimationPool(eles) { var cy = this; if (!cy.styleEnabled()) { return; } cy._private.aniEles.merge(eles); }, "addToAnimationPool"), stopAnimationLoop: /* @__PURE__ */ __name(function stopAnimationLoop() { this._private.animationsRunning = false; }, "stopAnimationLoop"), startAnimationLoop: /* @__PURE__ */ __name(function startAnimationLoop() { var cy = this; cy._private.animationsRunning = true; if (!cy.styleEnabled()) { return; } function headlessStep() { if (!cy._private.animationsRunning) { return; } requestAnimationFrame2(/* @__PURE__ */ __name(function animationStep(now3) { stepAll(now3, cy); headlessStep(); }, "animationStep")); } __name(headlessStep, "headlessStep"); var renderer10 = cy.renderer(); if (renderer10 && renderer10.beforeRender) { renderer10.beforeRender(/* @__PURE__ */ __name(function rendererAnimationStep(willDraw, now3) { stepAll(now3, cy); }, "rendererAnimationStep"), renderer10.beforeRenderPriorities.animations); } else { headlessStep(); } }, "startAnimationLoop") }; emitterOptions = { qualifierCompare: /* @__PURE__ */ __name(function qualifierCompare3(selector1, selector2) { if (selector1 == null || selector2 == null) { return selector1 == null && selector2 == null; } else { return selector1.sameText(selector2); } }, "qualifierCompare"), eventMatches: /* @__PURE__ */ __name(function eventMatches3(cy, listener, eventObj) { var selector = listener.qualifier; if (selector != null) { return cy !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target); } return true; }, "eventMatches"), addEventFields: /* @__PURE__ */ __name(function addEventFields3(cy, evt) { evt.cy = cy; evt.target = cy; }, "addEventFields"), callbackContext: /* @__PURE__ */ __name(function callbackContext3(cy, listener, eventObj) { return listener.qualifier != null ? eventObj.target : cy; }, "callbackContext") }; argSelector2 = /* @__PURE__ */ __name(function argSelector3(arg) { if (string(arg)) { return new Selector(arg); } else { return arg; } }, "argSelector"); elesfn = { createEmitter: /* @__PURE__ */ __name(function createEmitter2() { var _p = this._private; if (!_p.emitter) { _p.emitter = new Emitter(emitterOptions, this); } return this; }, "createEmitter"), emitter: /* @__PURE__ */ __name(function emitter2() { return this._private.emitter; }, "emitter"), on: /* @__PURE__ */ __name(function on2(events, selector, callback) { this.emitter().on(events, argSelector2(selector), callback); return this; }, "on"), removeListener: /* @__PURE__ */ __name(function removeListener2(events, selector, callback) { this.emitter().removeListener(events, argSelector2(selector), callback); return this; }, "removeListener"), removeAllListeners: /* @__PURE__ */ __name(function removeAllListeners2() { this.emitter().removeAllListeners(); return this; }, "removeAllListeners"), one: /* @__PURE__ */ __name(function one3(events, selector, callback) { this.emitter().one(events, argSelector2(selector), callback); return this; }, "one"), once: /* @__PURE__ */ __name(function once2(events, selector, callback) { this.emitter().one(events, argSelector2(selector), callback); return this; }, "once"), emit: /* @__PURE__ */ __name(function emit2(events, extraParams) { this.emitter().emit(events, extraParams); return this; }, "emit"), emitAndNotify: /* @__PURE__ */ __name(function emitAndNotify2(event3, eles) { this.emit(event3); this.notify(event3, eles); return this; }, "emitAndNotify") }; define2.eventAliasesOn(elesfn); corefn$7 = { png: /* @__PURE__ */ __name(function png(options2) { var renderer10 = this._private.renderer; options2 = options2 || {}; return renderer10.png(options2); }, "png"), jpg: /* @__PURE__ */ __name(function jpg(options2) { var renderer10 = this._private.renderer; options2 = options2 || {}; options2.bg = options2.bg || "#fff"; return renderer10.jpg(options2); }, "jpg") }; corefn$7.jpeg = corefn$7.jpg; corefn$6 = { layout: /* @__PURE__ */ __name(function layout3(options2) { var cy = this; if (options2 == null) { error("Layout options must be specified to make a layout"); return; } if (options2.name == null) { error("A `name` must be specified to make a layout"); return; } var name = options2.name; var Layout2 = cy.extension("layout", name); if (Layout2 == null) { error("No such layout `" + name + "` found. Did you forget to import it and `cytoscape.use()` it?"); return; } var eles; if (string(options2.eles)) { eles = cy.$(options2.eles); } else { eles = options2.eles != null ? options2.eles : cy.$(); } var layout6 = new Layout2(extend4({}, options2, { cy, eles })); return layout6; }, "layout") }; corefn$6.createLayout = corefn$6.makeLayout = corefn$6.layout; corefn$5 = { notify: /* @__PURE__ */ __name(function notify(eventName, eventEles) { var _p = this._private; if (this.batching()) { _p.batchNotifications = _p.batchNotifications || {}; var eles = _p.batchNotifications[eventName] = _p.batchNotifications[eventName] || this.collection(); if (eventEles != null) { eles.merge(eventEles); } return; } if (!_p.notificationsEnabled) { return; } var renderer10 = this.renderer(); if (this.destroyed() || !renderer10) { return; } renderer10.notify(eventName, eventEles); }, "notify"), notifications: /* @__PURE__ */ __name(function notifications(bool2) { var p3 = this._private; if (bool2 === void 0) { return p3.notificationsEnabled; } else { p3.notificationsEnabled = bool2 ? true : false; } return this; }, "notifications"), noNotifications: /* @__PURE__ */ __name(function noNotifications(callback) { this.notifications(false); callback(); this.notifications(true); }, "noNotifications"), batching: /* @__PURE__ */ __name(function batching() { return this._private.batchCount > 0; }, "batching"), startBatch: /* @__PURE__ */ __name(function startBatch() { var _p = this._private; if (_p.batchCount == null) { _p.batchCount = 0; } if (_p.batchCount === 0) { _p.batchStyleEles = this.collection(); _p.batchNotifications = {}; } _p.batchCount++; return this; }, "startBatch"), endBatch: /* @__PURE__ */ __name(function endBatch() { var _p = this._private; if (_p.batchCount === 0) { return this; } _p.batchCount--; if (_p.batchCount === 0) { _p.batchStyleEles.updateStyle(); var renderer10 = this.renderer(); Object.keys(_p.batchNotifications).forEach(function(eventName) { var eles = _p.batchNotifications[eventName]; if (eles.empty()) { renderer10.notify(eventName); } else { renderer10.notify(eventName, eles); } }); } return this; }, "endBatch"), batch: /* @__PURE__ */ __name(function batch(callback) { this.startBatch(); callback(); this.endBatch(); return this; }, "batch"), // for backwards compatibility batchData: /* @__PURE__ */ __name(function batchData(map5) { var cy = this; return this.batch(function() { var ids = Object.keys(map5); for (var i2 = 0; i2 < ids.length; i2++) { var id30 = ids[i2]; var data5 = map5[id30]; var ele = cy.getElementById(id30); ele.data(data5); } }); }, "batchData") }; rendererDefaults = defaults$g({ hideEdgesOnViewport: false, textureOnViewport: false, motionBlur: false, motionBlurOpacity: 0.05, pixelRatio: void 0, desktopTapThreshold: 4, touchTapThreshold: 8, wheelSensitivity: 1, debug: false, showFps: false, // webgl options webgl: false, webglDebug: false, webglDebugShowAtlases: false, // defaults good for mobile webglTexSize: 2048, webglTexRows: 36, webglTexRowsNodes: 18, webglBatchSize: 2048, webglTexPerBatch: 14, webglBgColor: [255, 255, 255] }); corefn$4 = { renderTo: /* @__PURE__ */ __name(function renderTo(context, zoom2, pan2, pxRatio) { var r2 = this._private.renderer; r2.renderTo(context, zoom2, pan2, pxRatio); return this; }, "renderTo"), renderer: /* @__PURE__ */ __name(function renderer() { return this._private.renderer; }, "renderer"), forceRender: /* @__PURE__ */ __name(function forceRender() { this.notify("draw"); return this; }, "forceRender"), resize: /* @__PURE__ */ __name(function resize() { this.invalidateSize(); this.emitAndNotify("resize"); return this; }, "resize"), initRenderer: /* @__PURE__ */ __name(function initRenderer(options2) { var cy = this; var RendererProto = cy.extension("renderer", options2.name); if (RendererProto == null) { error("Can not initialise: No such renderer `".concat(options2.name, "` found. Did you forget to import it and `cytoscape.use()` it?")); return; } if (options2.wheelSensitivity !== void 0) { warn("You have set a custom wheel sensitivity. This will make your app zoom unnaturally when using mainstream mice. You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine."); } var rOpts = rendererDefaults(options2); rOpts.cy = cy; cy._private.renderer = new RendererProto(rOpts); this.notify("init"); }, "initRenderer"), destroyRenderer: /* @__PURE__ */ __name(function destroyRenderer() { var cy = this; cy.notify("destroy"); var domEle = cy.container(); if (domEle) { domEle._cyreg = null; while (domEle.childNodes.length > 0) { domEle.removeChild(domEle.childNodes[0]); } } cy._private.renderer = null; cy.mutableElements().forEach(function(ele) { var _p = ele._private; _p.rscratch = {}; _p.rstyle = {}; _p.animation.current = []; _p.animation.queue = []; }); }, "destroyRenderer"), onRender: /* @__PURE__ */ __name(function onRender(fn3) { return this.on("render", fn3); }, "onRender"), offRender: /* @__PURE__ */ __name(function offRender(fn3) { return this.off("render", fn3); }, "offRender") }; corefn$4.invalidateDimensions = corefn$4.resize; corefn$3 = { // get a collection // - empty collection on no args // - collection of elements in the graph on selector arg // - guarantee a returned collection when elements or collection specified collection: /* @__PURE__ */ __name(function collection3(eles, opts) { if (string(eles)) { return this.$(eles); } else if (elementOrCollection(eles)) { return eles.collection(); } else if (array2(eles)) { if (!opts) { opts = {}; } return new Collection(this, eles, opts.unique, opts.removed); } return new Collection(this); }, "collection"), nodes: /* @__PURE__ */ __name(function nodes2(selector) { var nodes5 = this.$(function(ele) { return ele.isNode(); }); if (selector) { return nodes5.filter(selector); } return nodes5; }, "nodes"), edges: /* @__PURE__ */ __name(function edges2(selector) { var edges3 = this.$(function(ele) { return ele.isEdge(); }); if (selector) { return edges3.filter(selector); } return edges3; }, "edges"), // search the graph like jQuery $: /* @__PURE__ */ __name(function $3(selector) { var eles = this._private.elements; if (selector) { return eles.filter(selector); } else { return eles.spawnSelf(); } }, "$"), mutableElements: /* @__PURE__ */ __name(function mutableElements() { return this._private.elements; }, "mutableElements") }; corefn$3.elements = corefn$3.filter = corefn$3.$; styfn$8 = {}; TRUE = "t"; FALSE = "f"; styfn$8.apply = function(eles) { var self2 = this; var _p = self2._private; var cy = _p.cy; var updatedEles = cy.collection(); for (var ie2 = 0; ie2 < eles.length; ie2++) { var ele = eles[ie2]; var cxtMeta = self2.getContextMeta(ele); if (cxtMeta.empty) { continue; } var cxtStyle = self2.getContextStyle(cxtMeta); var app = self2.applyContextStyle(cxtMeta, cxtStyle, ele); if (ele._private.appliedInitStyle) { self2.updateTransitions(ele, app.diffProps); } else { ele._private.appliedInitStyle = true; } var hintsDiff = self2.updateStyleHints(ele); if (hintsDiff) { updatedEles.push(ele); } } return updatedEles; }; styfn$8.getPropertiesDiff = function(oldCxtKey, newCxtKey) { var self2 = this; var cache3 = self2._private.propDiffs = self2._private.propDiffs || {}; var dualCxtKey = oldCxtKey + "-" + newCxtKey; var cachedVal = cache3[dualCxtKey]; if (cachedVal) { return cachedVal; } var diffProps = []; var addedProp = {}; for (var i2 = 0; i2 < self2.length; i2++) { var cxt = self2[i2]; var oldHasCxt = oldCxtKey[i2] === TRUE; var newHasCxt = newCxtKey[i2] === TRUE; var cxtHasDiffed = oldHasCxt !== newHasCxt; var cxtHasMappedProps = cxt.mappedProperties.length > 0; if (cxtHasDiffed || newHasCxt && cxtHasMappedProps) { var props = void 0; if (cxtHasDiffed && cxtHasMappedProps) { props = cxt.properties; } else if (cxtHasDiffed) { props = cxt.properties; } else if (cxtHasMappedProps) { props = cxt.mappedProperties; } for (var j3 = 0; j3 < props.length; j3++) { var prop = props[j3]; var name = prop.name; var laterCxtOverrides = false; for (var k2 = i2 + 1; k2 < self2.length; k2++) { var laterCxt = self2[k2]; var hasLaterCxt = newCxtKey[k2] === TRUE; if (!hasLaterCxt) { continue; } laterCxtOverrides = laterCxt.properties[prop.name] != null; if (laterCxtOverrides) { break; } } if (!addedProp[name] && !laterCxtOverrides) { addedProp[name] = true; diffProps.push(name); } } } } cache3[dualCxtKey] = diffProps; return diffProps; }; styfn$8.getContextMeta = function(ele) { var self2 = this; var cxtKey = ""; var diffProps; var prevKey = ele._private.styleCxtKey || ""; for (var i2 = 0; i2 < self2.length; i2++) { var context = self2[i2]; var contextSelectorMatches = context.selector && context.selector.matches(ele); if (contextSelectorMatches) { cxtKey += TRUE; } else { cxtKey += FALSE; } } diffProps = self2.getPropertiesDiff(prevKey, cxtKey); ele._private.styleCxtKey = cxtKey; return { key: cxtKey, diffPropNames: diffProps, empty: diffProps.length === 0 }; }; styfn$8.getContextStyle = function(cxtMeta) { var cxtKey = cxtMeta.key; var self2 = this; var cxtStyles = this._private.contextStyles = this._private.contextStyles || {}; if (cxtStyles[cxtKey]) { return cxtStyles[cxtKey]; } var style3 = { _private: { key: cxtKey } }; for (var i2 = 0; i2 < self2.length; i2++) { var cxt = self2[i2]; var hasCxt = cxtKey[i2] === TRUE; if (!hasCxt) { continue; } for (var j3 = 0; j3 < cxt.properties.length; j3++) { var prop = cxt.properties[j3]; style3[prop.name] = prop; } } cxtStyles[cxtKey] = style3; return style3; }; styfn$8.applyContextStyle = function(cxtMeta, cxtStyle, ele) { var self2 = this; var diffProps = cxtMeta.diffPropNames; var retDiffProps = {}; var types = self2.types; for (var i2 = 0; i2 < diffProps.length; i2++) { var diffPropName = diffProps[i2]; var cxtProp = cxtStyle[diffPropName]; var eleProp = ele.pstyle(diffPropName); if (!cxtProp) { if (!eleProp) { continue; } else if (eleProp.bypass) { cxtProp = { name: diffPropName, deleteBypassed: true }; } else { cxtProp = { name: diffPropName, "delete": true }; } } if (eleProp === cxtProp) { continue; } if (cxtProp.mapped === types.fn && eleProp != null && eleProp.mapping != null && eleProp.mapping.value === cxtProp.value) { var mapping = eleProp.mapping; var fnValue = mapping.fnValue = cxtProp.value(ele); if (fnValue === mapping.prevFnValue) { continue; } } var retDiffProp = retDiffProps[diffPropName] = { prev: eleProp }; self2.applyParsedProperty(ele, cxtProp); retDiffProp.next = ele.pstyle(diffPropName); if (retDiffProp.next && retDiffProp.next.bypass) { retDiffProp.next = retDiffProp.next.bypassed; } } return { diffProps: retDiffProps }; }; styfn$8.updateStyleHints = function(ele) { var _p = ele._private; var self2 = this; var propNames = self2.propertyGroupNames; var propGrKeys = self2.propertyGroupKeys; var propHash = /* @__PURE__ */ __name(function propHash2(ele2, propNames2, seedKey) { return self2.getPropertiesHash(ele2, propNames2, seedKey); }, "propHash"); var oldStyleKey = _p.styleKey; if (ele.removed()) { return false; } var isNode2 = _p.group === "nodes"; var overriddenStyles = ele._private.style; propNames = Object.keys(overriddenStyles); for (var i2 = 0; i2 < propGrKeys.length; i2++) { var grKey = propGrKeys[i2]; _p.styleKeys[grKey] = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]; } var updateGrKey1 = /* @__PURE__ */ __name(function updateGrKey12(val, grKey2) { return _p.styleKeys[grKey2][0] = hashInt(val, _p.styleKeys[grKey2][0]); }, "updateGrKey1"); var updateGrKey2 = /* @__PURE__ */ __name(function updateGrKey22(val, grKey2) { return _p.styleKeys[grKey2][1] = hashIntAlt(val, _p.styleKeys[grKey2][1]); }, "updateGrKey2"); var updateGrKey = /* @__PURE__ */ __name(function updateGrKey3(val, grKey2) { updateGrKey1(val, grKey2); updateGrKey2(val, grKey2); }, "updateGrKey"); var updateGrKeyWStr = /* @__PURE__ */ __name(function updateGrKeyWStr2(strVal, grKey2) { for (var j3 = 0; j3 < strVal.length; j3++) { var ch = strVal.charCodeAt(j3); updateGrKey1(ch, grKey2); updateGrKey2(ch, grKey2); } }, "updateGrKeyWStr"); var N3 = 2e9; var cleanNum = /* @__PURE__ */ __name(function cleanNum2(val) { return -128 < val && val < 128 && Math.floor(val) !== val ? N3 - (val * 1024 | 0) : val; }, "cleanNum"); for (var _i = 0; _i < propNames.length; _i++) { var name = propNames[_i]; var parsedProp = overriddenStyles[name]; if (parsedProp == null) { continue; } var propInfo = this.properties[name]; var type3 = propInfo.type; var _grKey = propInfo.groupKey; var normalizedNumberVal = void 0; if (propInfo.hashOverride != null) { normalizedNumberVal = propInfo.hashOverride(ele, parsedProp); } else if (parsedProp.pfValue != null) { normalizedNumberVal = parsedProp.pfValue; } var numberVal = propInfo.enums == null ? parsedProp.value : null; var haveNormNum = normalizedNumberVal != null; var haveUnitedNum = numberVal != null; var haveNum = haveNormNum || haveUnitedNum; var units = parsedProp.units; if (type3.number && haveNum && !type3.multiple) { var v3 = haveNormNum ? normalizedNumberVal : numberVal; updateGrKey(cleanNum(v3), _grKey); if (!haveNormNum && units != null) { updateGrKeyWStr(units, _grKey); } } else { updateGrKeyWStr(parsedProp.strValue, _grKey); } } var hash = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]; for (var _i2 = 0; _i2 < propGrKeys.length; _i2++) { var _grKey2 = propGrKeys[_i2]; var grHash = _p.styleKeys[_grKey2]; hash[0] = hashInt(grHash[0], hash[0]); hash[1] = hashIntAlt(grHash[1], hash[1]); } _p.styleKey = combineHashes(hash[0], hash[1]); var sk = _p.styleKeys; _p.labelDimsKey = combineHashesArray(sk.labelDimensions); var labelKeys = propHash(ele, ["label"], sk.labelDimensions); _p.labelKey = combineHashesArray(labelKeys); _p.labelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, labelKeys)); if (!isNode2) { var sourceLabelKeys = propHash(ele, ["source-label"], sk.labelDimensions); _p.sourceLabelKey = combineHashesArray(sourceLabelKeys); _p.sourceLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, sourceLabelKeys)); var targetLabelKeys = propHash(ele, ["target-label"], sk.labelDimensions); _p.targetLabelKey = combineHashesArray(targetLabelKeys); _p.targetLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, targetLabelKeys)); } if (isNode2) { var _p$styleKeys = _p.styleKeys, nodeBody = _p$styleKeys.nodeBody, nodeBorder = _p$styleKeys.nodeBorder, nodeOutline = _p$styleKeys.nodeOutline, backgroundImage = _p$styleKeys.backgroundImage, compound = _p$styleKeys.compound, pie2 = _p$styleKeys.pie, stripe = _p$styleKeys.stripe; var nodeKeys = [nodeBody, nodeBorder, nodeOutline, backgroundImage, compound, pie2, stripe].filter(function(k2) { return k2 != null; }).reduce(hashArrays, [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]); _p.nodeKey = combineHashesArray(nodeKeys); _p.hasPie = pie2 != null && pie2[0] !== DEFAULT_HASH_SEED && pie2[1] !== DEFAULT_HASH_SEED_ALT; _p.hasStripe = stripe != null && stripe[0] !== DEFAULT_HASH_SEED && stripe[1] !== DEFAULT_HASH_SEED_ALT; } return oldStyleKey !== _p.styleKey; }; styfn$8.clearStyleHints = function(ele) { var _p = ele._private; _p.styleCxtKey = ""; _p.styleKeys = {}; _p.styleKey = null; _p.labelKey = null; _p.labelStyleKey = null; _p.sourceLabelKey = null; _p.sourceLabelStyleKey = null; _p.targetLabelKey = null; _p.targetLabelStyleKey = null; _p.nodeKey = null; _p.hasPie = null; _p.hasStripe = null; }; styfn$8.applyParsedProperty = function(ele, parsedProp) { var self2 = this; var prop = parsedProp; var style3 = ele._private.style; var flatProp; var types = self2.types; var type3 = self2.properties[prop.name].type; var propIsBypass = prop.bypass; var origProp = style3[prop.name]; var origPropIsBypass = origProp && origProp.bypass; var _p = ele._private; var flatPropMapping = "mapping"; var getVal = /* @__PURE__ */ __name(function getVal2(p3) { if (p3 == null) { return null; } else if (p3.pfValue != null) { return p3.pfValue; } else { return p3.value; } }, "getVal"); var checkTriggers = /* @__PURE__ */ __name(function checkTriggers2() { var fromVal = getVal(origProp); var toVal = getVal(prop); self2.checkTriggers(ele, prop.name, fromVal, toVal); }, "checkTriggers"); if (parsedProp.name === "curve-style" && ele.isEdge() && // loops must be bundled beziers (parsedProp.value !== "bezier" && ele.isLoop() || // edges connected to compound nodes can not be haystacks parsedProp.value === "haystack" && (ele.source().isParent() || ele.target().isParent()))) { prop = parsedProp = this.parse(parsedProp.name, "bezier", propIsBypass); } if (prop["delete"]) { style3[prop.name] = void 0; checkTriggers(); return true; } if (prop.deleteBypassed) { if (!origProp) { checkTriggers(); return true; } else if (origProp.bypass) { origProp.bypassed = void 0; checkTriggers(); return true; } else { return false; } } if (prop.deleteBypass) { if (!origProp) { checkTriggers(); return true; } else if (origProp.bypass) { style3[prop.name] = origProp.bypassed; checkTriggers(); return true; } else { return false; } } var printMappingErr = /* @__PURE__ */ __name(function printMappingErr2() { warn("Do not assign mappings to elements without corresponding data (i.e. ele `" + ele.id() + "` has no mapping for property `" + prop.name + "` with data field `" + prop.field + "`); try a `[" + prop.field + "]` selector to limit scope to elements with `" + prop.field + "` defined"); }, "printMappingErr"); switch (prop.mapped) { // flatten the property if mapped case types.mapData: { var fields = prop.field.split("."); var fieldVal = _p.data; for (var i2 = 0; i2 < fields.length && fieldVal; i2++) { var field = fields[i2]; fieldVal = fieldVal[field]; } if (fieldVal == null) { printMappingErr(); return false; } var percent; if (!number$1(fieldVal)) { warn("Do not use continuous mappers without specifying numeric data (i.e. `" + prop.field + ": " + fieldVal + "` for `" + ele.id() + "` is non-numeric)"); return false; } else { var fieldWidth = prop.fieldMax - prop.fieldMin; if (fieldWidth === 0) { percent = 0; } else { percent = (fieldVal - prop.fieldMin) / fieldWidth; } } if (percent < 0) { percent = 0; } else if (percent > 1) { percent = 1; } if (type3.color) { var r1 = prop.valueMin[0]; var r2 = prop.valueMax[0]; var g1 = prop.valueMin[1]; var g2 = prop.valueMax[1]; var b1 = prop.valueMin[2]; var b22 = prop.valueMax[2]; var a1 = prop.valueMin[3] == null ? 1 : prop.valueMin[3]; var a2 = prop.valueMax[3] == null ? 1 : prop.valueMax[3]; var clr = [Math.round(r1 + (r2 - r1) * percent), Math.round(g1 + (g2 - g1) * percent), Math.round(b1 + (b22 - b1) * percent), Math.round(a1 + (a2 - a1) * percent)]; flatProp = { // colours are simple, so just create the flat property instead of expensive string parsing bypass: prop.bypass, // we're a bypass if the mapping property is a bypass name: prop.name, value: clr, strValue: "rgb(" + clr[0] + ", " + clr[1] + ", " + clr[2] + ")" }; } else if (type3.number) { var calcValue = prop.valueMin + (prop.valueMax - prop.valueMin) * percent; flatProp = this.parse(prop.name, calcValue, prop.bypass, flatPropMapping); } else { return false; } if (!flatProp) { printMappingErr(); return false; } flatProp.mapping = prop; prop = flatProp; break; } // direct mapping case types.data: { var _fields = prop.field.split("."); var _fieldVal = _p.data; for (var _i3 = 0; _i3 < _fields.length && _fieldVal; _i3++) { var _field = _fields[_i3]; _fieldVal = _fieldVal[_field]; } if (_fieldVal != null) { flatProp = this.parse(prop.name, _fieldVal, prop.bypass, flatPropMapping); } if (!flatProp) { printMappingErr(); return false; } flatProp.mapping = prop; prop = flatProp; break; } case types.fn: { var fn3 = prop.value; var fnRetVal = prop.fnValue != null ? prop.fnValue : fn3(ele); prop.prevFnValue = fnRetVal; if (fnRetVal == null) { warn("Custom function mappers may not return null (i.e. `" + prop.name + "` for ele `" + ele.id() + "` is null)"); return false; } flatProp = this.parse(prop.name, fnRetVal, prop.bypass, flatPropMapping); if (!flatProp) { warn("Custom function mappers may not return invalid values for the property type (i.e. `" + prop.name + "` for ele `" + ele.id() + "` is invalid)"); return false; } flatProp.mapping = copy3(prop); prop = flatProp; break; } case void 0: break; // just set the property default: return false; } if (propIsBypass) { if (origPropIsBypass) { prop.bypassed = origProp.bypassed; } else { prop.bypassed = origProp; } style3[prop.name] = prop; } else { if (origPropIsBypass) { origProp.bypassed = prop; } else { style3[prop.name] = prop; } } checkTriggers(); return true; }; styfn$8.cleanElements = function(eles, keepBypasses) { for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; this.clearStyleHints(ele); ele.dirtyCompoundBoundsCache(); ele.dirtyBoundingBoxCache(); if (!keepBypasses) { ele._private.style = {}; } else { var style3 = ele._private.style; var propNames = Object.keys(style3); for (var j3 = 0; j3 < propNames.length; j3++) { var propName = propNames[j3]; var eleProp = style3[propName]; if (eleProp != null) { if (eleProp.bypass) { eleProp.bypassed = null; } else { style3[propName] = null; } } } } } }; styfn$8.update = function() { var cy = this._private.cy; var eles = cy.mutableElements(); eles.updateStyle(); }; styfn$8.updateTransitions = function(ele, diffProps) { var self2 = this; var _p = ele._private; var props = ele.pstyle("transition-property").value; var duration = ele.pstyle("transition-duration").pfValue; var delay2 = ele.pstyle("transition-delay").pfValue; if (props.length > 0 && duration > 0) { var style3 = {}; var anyPrev = false; for (var i2 = 0; i2 < props.length; i2++) { var prop = props[i2]; var styProp = ele.pstyle(prop); var diffProp = diffProps[prop]; if (!diffProp) { continue; } var prevProp = diffProp.prev; var fromProp = prevProp; var toProp = diffProp.next != null ? diffProp.next : styProp; var diff2 = false; var initVal = void 0; var initDt = 1e-6; if (!fromProp) { continue; } if (number$1(fromProp.pfValue) && number$1(toProp.pfValue)) { diff2 = toProp.pfValue - fromProp.pfValue; initVal = fromProp.pfValue + initDt * diff2; } else if (number$1(fromProp.value) && number$1(toProp.value)) { diff2 = toProp.value - fromProp.value; initVal = fromProp.value + initDt * diff2; } else if (array2(fromProp.value) && array2(toProp.value)) { diff2 = fromProp.value[0] !== toProp.value[0] || fromProp.value[1] !== toProp.value[1] || fromProp.value[2] !== toProp.value[2]; initVal = fromProp.strValue; } if (diff2) { style3[prop] = toProp.strValue; this.applyBypass(ele, prop, initVal); anyPrev = true; } } if (!anyPrev) { return; } _p.transitioning = true; new Promise$1(function(resolve2) { if (delay2 > 0) { ele.delayAnimation(delay2).play().promise().then(resolve2); } else { resolve2(); } }).then(function() { return ele.animation({ style: style3, duration, easing: ele.pstyle("transition-timing-function").value, queue: false }).play().promise(); }).then(function() { self2.removeBypasses(ele, props); ele.emitAndNotify("style"); _p.transitioning = false; }); } else if (_p.transitioning) { this.removeBypasses(ele, props); ele.emitAndNotify("style"); _p.transitioning = false; } }; styfn$8.checkTrigger = function(ele, name, fromValue, toValue, getTrigger, onTrigger) { var prop = this.properties[name]; var triggerCheck = getTrigger(prop); if (ele.removed()) { return; } if (triggerCheck != null && triggerCheck(fromValue, toValue, ele)) { onTrigger(prop); } }; styfn$8.checkZOrderTrigger = function(ele, name, fromValue, toValue) { var _this = this; this.checkTrigger(ele, name, fromValue, toValue, function(prop) { return prop.triggersZOrder; }, function() { _this._private.cy.notify("zorder", ele); }); }; styfn$8.checkBoundsTrigger = function(ele, name, fromValue, toValue) { this.checkTrigger(ele, name, fromValue, toValue, function(prop) { return prop.triggersBounds; }, function(prop) { ele.dirtyCompoundBoundsCache(); ele.dirtyBoundingBoxCache(); }); }; styfn$8.checkConnectedEdgesBoundsTrigger = function(ele, name, fromValue, toValue) { this.checkTrigger(ele, name, fromValue, toValue, function(prop) { return prop.triggersBoundsOfConnectedEdges; }, function(prop) { ele.connectedEdges().forEach(function(edge) { edge.dirtyBoundingBoxCache(); }); }); }; styfn$8.checkParallelEdgesBoundsTrigger = function(ele, name, fromValue, toValue) { this.checkTrigger(ele, name, fromValue, toValue, function(prop) { return prop.triggersBoundsOfParallelEdges; }, function(prop) { ele.parallelEdges().forEach(function(pllEdge) { pllEdge.dirtyBoundingBoxCache(); }); }); }; styfn$8.checkTriggers = function(ele, name, fromValue, toValue) { ele.dirtyStyleCache(); this.checkZOrderTrigger(ele, name, fromValue, toValue); this.checkBoundsTrigger(ele, name, fromValue, toValue); this.checkConnectedEdgesBoundsTrigger(ele, name, fromValue, toValue); this.checkParallelEdgesBoundsTrigger(ele, name, fromValue, toValue); }; styfn$7 = {}; styfn$7.applyBypass = function(eles, name, value2, updateTransitions) { var self2 = this; var props = []; var isBypass = true; if (name === "*" || name === "**") { if (value2 !== void 0) { for (var i2 = 0; i2 < self2.properties.length; i2++) { var prop = self2.properties[i2]; var _name = prop.name; var parsedProp = this.parse(_name, value2, true); if (parsedProp) { props.push(parsedProp); } } } } else if (string(name)) { var _parsedProp = this.parse(name, value2, true); if (_parsedProp) { props.push(_parsedProp); } } else if (plainObject(name)) { var specifiedProps = name; updateTransitions = value2; var names = Object.keys(specifiedProps); for (var _i = 0; _i < names.length; _i++) { var _name2 = names[_i]; var _value = specifiedProps[_name2]; if (_value === void 0) { _value = specifiedProps[dash2camel(_name2)]; } if (_value !== void 0) { var _parsedProp2 = this.parse(_name2, _value, true); if (_parsedProp2) { props.push(_parsedProp2); } } } } else { return false; } if (props.length === 0) { return false; } var ret = false; for (var _i2 = 0; _i2 < eles.length; _i2++) { var ele = eles[_i2]; var diffProps = {}; var diffProp = void 0; for (var j3 = 0; j3 < props.length; j3++) { var _prop = props[j3]; if (updateTransitions) { var prevProp = ele.pstyle(_prop.name); diffProp = diffProps[_prop.name] = { prev: prevProp }; } ret = this.applyParsedProperty(ele, copy3(_prop)) || ret; if (updateTransitions) { diffProp.next = ele.pstyle(_prop.name); } } if (ret) { this.updateStyleHints(ele); } if (updateTransitions) { this.updateTransitions(ele, diffProps, isBypass); } } return ret; }; styfn$7.overrideBypass = function(eles, name, value2) { name = camel2dash(name); for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; var prop = ele._private.style[name]; var type3 = this.properties[name].type; var isColor = type3.color; var isMulti = type3.mutiple; var oldValue = !prop ? null : prop.pfValue != null ? prop.pfValue : prop.value; if (!prop || !prop.bypass) { this.applyBypass(ele, name, value2); } else { prop.value = value2; if (prop.pfValue != null) { prop.pfValue = value2; } if (isColor) { prop.strValue = "rgb(" + value2.join(",") + ")"; } else if (isMulti) { prop.strValue = value2.join(" "); } else { prop.strValue = "" + value2; } this.updateStyleHints(ele); } this.checkTriggers(ele, name, oldValue, value2); } }; styfn$7.removeAllBypasses = function(eles, updateTransitions) { return this.removeBypasses(eles, this.propertyNames, updateTransitions); }; styfn$7.removeBypasses = function(eles, props, updateTransitions) { var isBypass = true; for (var j3 = 0; j3 < eles.length; j3++) { var ele = eles[j3]; var diffProps = {}; for (var i2 = 0; i2 < props.length; i2++) { var name = props[i2]; var prop = this.properties[name]; var prevProp = ele.pstyle(prop.name); if (!prevProp || !prevProp.bypass) { continue; } var value2 = ""; var parsedProp = this.parse(name, value2, true); var diffProp = diffProps[prop.name] = { prev: prevProp }; this.applyParsedProperty(ele, parsedProp); diffProp.next = ele.pstyle(prop.name); } this.updateStyleHints(ele); if (updateTransitions) { this.updateTransitions(ele, diffProps, isBypass); } } }; styfn$6 = {}; styfn$6.getEmSizeInPixels = function() { var px = this.containerCss("font-size"); if (px != null) { return parseFloat(px); } else { return 1; } }; styfn$6.containerCss = function(propName) { var cy = this._private.cy; var domElement3 = cy.container(); var containerWindow = cy.window(); if (containerWindow && domElement3 && containerWindow.getComputedStyle) { return containerWindow.getComputedStyle(domElement3).getPropertyValue(propName); } }; styfn$5 = {}; styfn$5.getRenderedStyle = function(ele, prop) { if (prop) { return this.getStylePropertyValue(ele, prop, true); } else { return this.getRawStyle(ele, true); } }; styfn$5.getRawStyle = function(ele, isRenderedVal) { var self2 = this; ele = ele[0]; if (ele) { var rstyle = {}; for (var i2 = 0; i2 < self2.properties.length; i2++) { var prop = self2.properties[i2]; var val = self2.getStylePropertyValue(ele, prop.name, isRenderedVal); if (val != null) { rstyle[prop.name] = val; rstyle[dash2camel(prop.name)] = val; } } return rstyle; } }; styfn$5.getIndexedStyle = function(ele, property2, subproperty, index) { var pstyle = ele.pstyle(property2)[subproperty][index]; return pstyle != null ? pstyle : ele.cy().style().getDefaultProperty(property2)[subproperty][0]; }; styfn$5.getStylePropertyValue = function(ele, propName, isRenderedVal) { var self2 = this; ele = ele[0]; if (ele) { var prop = self2.properties[propName]; if (prop.alias) { prop = prop.pointsTo; } var type3 = prop.type; var styleProp = ele.pstyle(prop.name); if (styleProp) { var value2 = styleProp.value, units = styleProp.units, strValue = styleProp.strValue; if (isRenderedVal && type3.number && value2 != null && number$1(value2)) { var zoom2 = ele.cy().zoom(); var getRenderedValue = /* @__PURE__ */ __name(function getRenderedValue2(val) { return val * zoom2; }, "getRenderedValue"); var getValueStringWithUnits = /* @__PURE__ */ __name(function getValueStringWithUnits2(val, units2) { return getRenderedValue(val) + units2; }, "getValueStringWithUnits"); var isArrayValue = array2(value2); var haveUnits = isArrayValue ? units.every(function(u2) { return u2 != null; }) : units != null; if (haveUnits) { if (isArrayValue) { return value2.map(function(v3, i2) { return getValueStringWithUnits(v3, units[i2]); }).join(" "); } else { return getValueStringWithUnits(value2, units); } } else { if (isArrayValue) { return value2.map(function(v3) { return string(v3) ? v3 : "" + getRenderedValue(v3); }).join(" "); } else { return "" + getRenderedValue(value2); } } } else if (strValue != null) { return strValue; } } return null; } }; styfn$5.getAnimationStartStyle = function(ele, aniProps) { var rstyle = {}; for (var i2 = 0; i2 < aniProps.length; i2++) { var aniProp = aniProps[i2]; var name = aniProp.name; var styleProp = ele.pstyle(name); if (styleProp !== void 0) { if (plainObject(styleProp)) { styleProp = this.parse(name, styleProp.strValue); } else { styleProp = this.parse(name, styleProp); } } if (styleProp) { rstyle[name] = styleProp; } } return rstyle; }; styfn$5.getPropsList = function(propsObj) { var self2 = this; var rstyle = []; var style3 = propsObj; var props = self2.properties; if (style3) { var names = Object.keys(style3); for (var i2 = 0; i2 < names.length; i2++) { var name = names[i2]; var val = style3[name]; var prop = props[name] || props[camel2dash(name)]; var styleProp = this.parse(prop.name, val); if (styleProp) { rstyle.push(styleProp); } } } return rstyle; }; styfn$5.getNonDefaultPropertiesHash = function(ele, propNames, seed) { var hash = seed.slice(); var name, val, strVal, chVal; var i2, j3; for (i2 = 0; i2 < propNames.length; i2++) { name = propNames[i2]; val = ele.pstyle(name, false); if (val == null) { continue; } else if (val.pfValue != null) { hash[0] = hashInt(chVal, hash[0]); hash[1] = hashIntAlt(chVal, hash[1]); } else { strVal = val.strValue; for (j3 = 0; j3 < strVal.length; j3++) { chVal = strVal.charCodeAt(j3); hash[0] = hashInt(chVal, hash[0]); hash[1] = hashIntAlt(chVal, hash[1]); } } } return hash; }; styfn$5.getPropertiesHash = styfn$5.getNonDefaultPropertiesHash; styfn$4 = {}; styfn$4.appendFromJson = function(json3) { var style3 = this; for (var i2 = 0; i2 < json3.length; i2++) { var context = json3[i2]; var selector = context.selector; var props = context.style || context.css; var names = Object.keys(props); style3.selector(selector); for (var j3 = 0; j3 < names.length; j3++) { var name = names[j3]; var value2 = props[name]; style3.css(name, value2); } } return style3; }; styfn$4.fromJson = function(json3) { var style3 = this; style3.resetToDefault(); style3.appendFromJson(json3); return style3; }; styfn$4.json = function() { var json3 = []; for (var i2 = this.defaultLength; i2 < this.length; i2++) { var cxt = this[i2]; var selector = cxt.selector; var props = cxt.properties; var css = {}; for (var j3 = 0; j3 < props.length; j3++) { var prop = props[j3]; css[prop.name] = prop.strValue; } json3.push({ selector: !selector ? "core" : selector.toString(), style: css }); } return json3; }; styfn$3 = {}; styfn$3.appendFromString = function(string3) { var self2 = this; var style3 = this; var remaining = "" + string3; var selAndBlockStr; var blockRem; var propAndValStr; remaining = remaining.replace(/[/][*](\s|.)+?[*][/]/g, ""); function removeSelAndBlockFromRemaining() { if (remaining.length > selAndBlockStr.length) { remaining = remaining.substr(selAndBlockStr.length); } else { remaining = ""; } } __name(removeSelAndBlockFromRemaining, "removeSelAndBlockFromRemaining"); function removePropAndValFromRem() { if (blockRem.length > propAndValStr.length) { blockRem = blockRem.substr(propAndValStr.length); } else { blockRem = ""; } } __name(removePropAndValFromRem, "removePropAndValFromRem"); for (; ; ) { var nothingLeftToParse = remaining.match(/^\s*$/); if (nothingLeftToParse) { break; } var selAndBlock = remaining.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/); if (!selAndBlock) { warn("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: " + remaining); break; } selAndBlockStr = selAndBlock[0]; var selectorStr = selAndBlock[1]; if (selectorStr !== "core") { var selector = new Selector(selectorStr); if (selector.invalid) { warn("Skipping parsing of block: Invalid selector found in string stylesheet: " + selectorStr); removeSelAndBlockFromRemaining(); continue; } } var blockStr = selAndBlock[2]; var invalidBlock = false; blockRem = blockStr; var props = []; for (; ; ) { var _nothingLeftToParse = blockRem.match(/^\s*$/); if (_nothingLeftToParse) { break; } var propAndVal = blockRem.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/); if (!propAndVal) { warn("Skipping parsing of block: Invalid formatting of style property and value definitions found in:" + blockStr); invalidBlock = true; break; } propAndValStr = propAndVal[0]; var propStr = propAndVal[1]; var valStr = propAndVal[2]; var prop = self2.properties[propStr]; if (!prop) { warn("Skipping property: Invalid property name in: " + propAndValStr); removePropAndValFromRem(); continue; } var parsedProp = style3.parse(propStr, valStr); if (!parsedProp) { warn("Skipping property: Invalid property definition in: " + propAndValStr); removePropAndValFromRem(); continue; } props.push({ name: propStr, val: valStr }); removePropAndValFromRem(); } if (invalidBlock) { removeSelAndBlockFromRemaining(); break; } style3.selector(selectorStr); for (var i2 = 0; i2 < props.length; i2++) { var _prop = props[i2]; style3.css(_prop.name, _prop.val); } removeSelAndBlockFromRemaining(); } return style3; }; styfn$3.fromString = function(string3) { var style3 = this; style3.resetToDefault(); style3.appendFromString(string3); return style3; }; styfn$2 = {}; (function() { var number$12 = number6; var rgba4 = rgbaNoBackRefs; var hsla3 = hslaNoBackRefs; var hex3$1 = hex3; var hex6$1 = hex6; var data5 = /* @__PURE__ */ __name(function data6(prefix) { return "^" + prefix + "\\s*\\(\\s*([\\w\\.]+)\\s*\\)$"; }, "data"); var mapData = /* @__PURE__ */ __name(function mapData2(prefix) { var mapArg = number$12 + "|\\w+|" + rgba4 + "|" + hsla3 + "|" + hex3$1 + "|" + hex6$1; return "^" + prefix + "\\s*\\(([\\w\\.]+)\\s*\\,\\s*(" + number$12 + ")\\s*\\,\\s*(" + number$12 + ")\\s*,\\s*(" + mapArg + ")\\s*\\,\\s*(" + mapArg + ")\\)$"; }, "mapData"); var urlRegexes = [`^url\\s*\\(\\s*['"]?(.+?)['"]?\\s*\\)$`, "^(none)$", "^(.+)$"]; styfn$2.types = { time: { number: true, min: 0, units: "s|ms", implicitUnits: "ms" }, percent: { number: true, min: 0, max: 100, units: "%", implicitUnits: "%" }, percentages: { number: true, min: 0, max: 100, units: "%", implicitUnits: "%", multiple: true }, zeroOneNumber: { number: true, min: 0, max: 1, unitless: true }, zeroOneNumbers: { number: true, min: 0, max: 1, unitless: true, multiple: true }, nOneOneNumber: { number: true, min: -1, max: 1, unitless: true }, nonNegativeInt: { number: true, min: 0, integer: true, unitless: true }, nonNegativeNumber: { number: true, min: 0, unitless: true }, position: { enums: ["parent", "origin"] }, nodeSize: { number: true, min: 0, enums: ["label"] }, number: { number: true, unitless: true }, numbers: { number: true, unitless: true, multiple: true }, positiveNumber: { number: true, unitless: true, min: 0, strictMin: true }, size: { number: true, min: 0 }, bidirectionalSize: { number: true }, // allows negative bidirectionalSizeMaybePercent: { number: true, allowPercent: true }, // allows negative bidirectionalSizes: { number: true, multiple: true }, // allows negative sizeMaybePercent: { number: true, min: 0, allowPercent: true }, axisDirection: { enums: ["horizontal", "leftward", "rightward", "vertical", "upward", "downward", "auto"] }, axisDirectionExplicit: { enums: ["leftward", "rightward", "upward", "downward"] }, axisDirectionPrimary: { enums: ["horizontal", "vertical"] }, paddingRelativeTo: { enums: ["width", "height", "average", "min", "max"] }, bgWH: { number: true, min: 0, allowPercent: true, enums: ["auto"], multiple: true }, bgPos: { number: true, allowPercent: true, multiple: true }, bgRelativeTo: { enums: ["inner", "include-padding"], multiple: true }, bgRepeat: { enums: ["repeat", "repeat-x", "repeat-y", "no-repeat"], multiple: true }, bgFit: { enums: ["none", "contain", "cover"], multiple: true }, bgCrossOrigin: { enums: ["anonymous", "use-credentials", "null"], multiple: true }, bgClip: { enums: ["none", "node"], multiple: true }, bgContainment: { enums: ["inside", "over"], multiple: true }, boxSelection: { enums: ["contain", "overlap", "none"] }, color: { color: true }, colors: { color: true, multiple: true }, fill: { enums: ["solid", "linear-gradient", "radial-gradient"] }, bool: { enums: ["yes", "no"] }, bools: { enums: ["yes", "no"], multiple: true }, lineStyle: { enums: ["solid", "dotted", "dashed"] }, lineCap: { enums: ["butt", "round", "square"] }, linePosition: { enums: ["center", "inside", "outside"] }, lineJoin: { enums: ["round", "bevel", "miter"] }, borderStyle: { enums: ["solid", "dotted", "dashed", "double"] }, curveStyle: { enums: ["bezier", "unbundled-bezier", "haystack", "segments", "straight", "straight-triangle", "taxi", "round-segments", "round-taxi"] }, radiusType: { enums: ["arc-radius", "influence-radius"], multiple: true }, fontFamily: { regex: '^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$' }, fontStyle: { enums: ["italic", "normal", "oblique"] }, fontWeight: { enums: ["normal", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "800", "900", 100, 200, 300, 400, 500, 600, 700, 800, 900] }, textDecoration: { enums: ["none", "underline", "overline", "line-through"] }, textTransform: { enums: ["none", "uppercase", "lowercase"] }, textWrap: { enums: ["none", "wrap", "ellipsis"] }, textOverflowWrap: { enums: ["whitespace", "anywhere"] }, textBackgroundShape: { enums: ["rectangle", "roundrectangle", "round-rectangle", "circle"] }, nodeShape: { enums: ["rectangle", "roundrectangle", "round-rectangle", "cutrectangle", "cut-rectangle", "bottomroundrectangle", "bottom-round-rectangle", "barrel", "ellipse", "triangle", "round-triangle", "square", "pentagon", "round-pentagon", "hexagon", "round-hexagon", "concavehexagon", "concave-hexagon", "heptagon", "round-heptagon", "octagon", "round-octagon", "tag", "round-tag", "star", "diamond", "round-diamond", "vee", "rhomboid", "right-rhomboid", "polygon"] }, overlayShape: { enums: ["roundrectangle", "round-rectangle", "ellipse"] }, cornerRadius: { number: true, min: 0, units: "px|em", implicitUnits: "px", enums: ["auto"] }, compoundIncludeLabels: { enums: ["include", "exclude"] }, arrowShape: { enums: ["tee", "triangle", "triangle-tee", "circle-triangle", "triangle-cross", "triangle-backcurve", "vee", "square", "circle", "diamond", "chevron", "none"] }, arrowFill: { enums: ["filled", "hollow"] }, arrowWidth: { number: true, units: "%|px|em", implicitUnits: "px", enums: ["match-line"] }, display: { enums: ["element", "none"] }, visibility: { enums: ["hidden", "visible"] }, zCompoundDepth: { enums: ["bottom", "orphan", "auto", "top"] }, zIndexCompare: { enums: ["auto", "manual"] }, valign: { enums: ["top", "center", "bottom"] }, halign: { enums: ["left", "center", "right"] }, justification: { enums: ["left", "center", "right", "auto"] }, text: { string: true }, data: { mapping: true, regex: data5("data") }, layoutData: { mapping: true, regex: data5("layoutData") }, scratch: { mapping: true, regex: data5("scratch") }, mapData: { mapping: true, regex: mapData("mapData") }, mapLayoutData: { mapping: true, regex: mapData("mapLayoutData") }, mapScratch: { mapping: true, regex: mapData("mapScratch") }, fn: { mapping: true, fn: true }, url: { regexes: urlRegexes, singleRegexMatchValue: true }, urls: { regexes: urlRegexes, singleRegexMatchValue: true, multiple: true }, propList: { propList: true }, angle: { number: true, units: "deg|rad", implicitUnits: "rad" }, textRotation: { number: true, units: "deg|rad", implicitUnits: "rad", enums: ["none", "autorotate"] }, polygonPointList: { number: true, multiple: true, evenMultiple: true, min: -1, max: 1, unitless: true }, edgeDistances: { enums: ["intersection", "node-position", "endpoints"] }, edgeEndpoint: { number: true, multiple: true, units: "%|px|em|deg|rad", implicitUnits: "px", enums: ["inside-to-node", "outside-to-node", "outside-to-node-or-label", "outside-to-line", "outside-to-line-or-label"], singleEnum: true, validate: /* @__PURE__ */ __name(function validate(valArr, unitsArr) { switch (valArr.length) { case 2: return unitsArr[0] !== "deg" && unitsArr[0] !== "rad" && unitsArr[1] !== "deg" && unitsArr[1] !== "rad"; case 1: return string(valArr[0]) || unitsArr[0] === "deg" || unitsArr[0] === "rad"; default: return false; } }, "validate") }, easing: { regexes: ["^(spring)\\s*\\(\\s*(" + number$12 + ")\\s*,\\s*(" + number$12 + ")\\s*\\)$", "^(cubic-bezier)\\s*\\(\\s*(" + number$12 + ")\\s*,\\s*(" + number$12 + ")\\s*,\\s*(" + number$12 + ")\\s*,\\s*(" + number$12 + ")\\s*\\)$"], enums: ["linear", "ease", "ease-in", "ease-out", "ease-in-out", "ease-in-sine", "ease-out-sine", "ease-in-out-sine", "ease-in-quad", "ease-out-quad", "ease-in-out-quad", "ease-in-cubic", "ease-out-cubic", "ease-in-out-cubic", "ease-in-quart", "ease-out-quart", "ease-in-out-quart", "ease-in-quint", "ease-out-quint", "ease-in-out-quint", "ease-in-expo", "ease-out-expo", "ease-in-out-expo", "ease-in-circ", "ease-out-circ", "ease-in-out-circ"] }, gradientDirection: { enums: [ "to-bottom", "to-top", "to-left", "to-right", "to-bottom-right", "to-bottom-left", "to-top-right", "to-top-left", "to-right-bottom", "to-left-bottom", "to-right-top", "to-left-top" // different order ] }, boundsExpansion: { number: true, multiple: true, min: 0, validate: /* @__PURE__ */ __name(function validate(valArr) { var length2 = valArr.length; return length2 === 1 || length2 === 2 || length2 === 4; }, "validate") } }; var diff2 = { zeroNonZero: /* @__PURE__ */ __name(function zeroNonZero(val1, val2) { if ((val1 == null || val2 == null) && val1 !== val2) { return true; } if (val1 == 0 && val2 != 0) { return true; } else if (val1 != 0 && val2 == 0) { return true; } else { return false; } }, "zeroNonZero"), any: /* @__PURE__ */ __name(function any(val1, val2) { return val1 != val2; }, "any"), emptyNonEmpty: /* @__PURE__ */ __name(function emptyNonEmpty(str1, str2) { var empty1 = emptyString(str1); var empty22 = emptyString(str2); return empty1 && !empty22 || !empty1 && empty22; }, "emptyNonEmpty") }; var t4 = styfn$2.types; var mainLabel = [{ name: "label", type: t4.text, triggersBounds: diff2.any, triggersZOrder: diff2.emptyNonEmpty }, { name: "text-rotation", type: t4.textRotation, triggersBounds: diff2.any }, { name: "text-margin-x", type: t4.bidirectionalSize, triggersBounds: diff2.any }, { name: "text-margin-y", type: t4.bidirectionalSize, triggersBounds: diff2.any }]; var sourceLabel = [{ name: "source-label", type: t4.text, triggersBounds: diff2.any }, { name: "source-text-rotation", type: t4.textRotation, triggersBounds: diff2.any }, { name: "source-text-margin-x", type: t4.bidirectionalSize, triggersBounds: diff2.any }, { name: "source-text-margin-y", type: t4.bidirectionalSize, triggersBounds: diff2.any }, { name: "source-text-offset", type: t4.size, triggersBounds: diff2.any }]; var targetLabel = [{ name: "target-label", type: t4.text, triggersBounds: diff2.any }, { name: "target-text-rotation", type: t4.textRotation, triggersBounds: diff2.any }, { name: "target-text-margin-x", type: t4.bidirectionalSize, triggersBounds: diff2.any }, { name: "target-text-margin-y", type: t4.bidirectionalSize, triggersBounds: diff2.any }, { name: "target-text-offset", type: t4.size, triggersBounds: diff2.any }]; var labelDimensions = [{ name: "font-family", type: t4.fontFamily, triggersBounds: diff2.any }, { name: "font-style", type: t4.fontStyle, triggersBounds: diff2.any }, { name: "font-weight", type: t4.fontWeight, triggersBounds: diff2.any }, { name: "font-size", type: t4.size, triggersBounds: diff2.any }, { name: "text-transform", type: t4.textTransform, triggersBounds: diff2.any }, { name: "text-wrap", type: t4.textWrap, triggersBounds: diff2.any }, { name: "text-overflow-wrap", type: t4.textOverflowWrap, triggersBounds: diff2.any }, { name: "text-max-width", type: t4.size, triggersBounds: diff2.any }, { name: "text-outline-width", type: t4.size, triggersBounds: diff2.any }, { name: "line-height", type: t4.positiveNumber, triggersBounds: diff2.any }]; var commonLabel = [{ name: "text-valign", type: t4.valign, triggersBounds: diff2.any }, { name: "text-halign", type: t4.halign, triggersBounds: diff2.any }, { name: "color", type: t4.color }, { name: "text-outline-color", type: t4.color }, { name: "text-outline-opacity", type: t4.zeroOneNumber }, { name: "text-background-color", type: t4.color }, { name: "text-background-opacity", type: t4.zeroOneNumber }, { name: "text-background-padding", type: t4.size, triggersBounds: diff2.any }, { name: "text-border-opacity", type: t4.zeroOneNumber }, { name: "text-border-color", type: t4.color }, { name: "text-border-width", type: t4.size, triggersBounds: diff2.any }, { name: "text-border-style", type: t4.borderStyle, triggersBounds: diff2.any }, { name: "text-background-shape", type: t4.textBackgroundShape, triggersBounds: diff2.any }, { name: "text-justification", type: t4.justification }, { name: "box-select-labels", type: t4.bool, triggersBounds: diff2.any }]; var behavior = [{ name: "events", type: t4.bool, triggersZOrder: diff2.any }, { name: "text-events", type: t4.bool, triggersZOrder: diff2.any }, { name: "box-selection", type: t4.boxSelection, triggersZOrder: diff2.any }]; var visibility = [{ name: "display", type: t4.display, triggersZOrder: diff2.any, triggersBounds: diff2.any, triggersBoundsOfConnectedEdges: diff2.any, triggersBoundsOfParallelEdges: /* @__PURE__ */ __name(function triggersBoundsOfParallelEdges(fromValue, toValue, ele) { if (fromValue === toValue) { return false; } return ele.pstyle("curve-style").value === "bezier"; }, "triggersBoundsOfParallelEdges") }, { name: "visibility", type: t4.visibility, triggersZOrder: diff2.any }, { name: "opacity", type: t4.zeroOneNumber, triggersZOrder: diff2.zeroNonZero }, { name: "text-opacity", type: t4.zeroOneNumber }, { name: "min-zoomed-font-size", type: t4.size }, { name: "z-compound-depth", type: t4.zCompoundDepth, triggersZOrder: diff2.any }, { name: "z-index-compare", type: t4.zIndexCompare, triggersZOrder: diff2.any }, { name: "z-index", type: t4.number, triggersZOrder: diff2.any }]; var overlay = [{ name: "overlay-padding", type: t4.size, triggersBounds: diff2.any }, { name: "overlay-color", type: t4.color }, { name: "overlay-opacity", type: t4.zeroOneNumber, triggersBounds: diff2.zeroNonZero }, { name: "overlay-shape", type: t4.overlayShape, triggersBounds: diff2.any }, { name: "overlay-corner-radius", type: t4.cornerRadius }]; var underlay = [{ name: "underlay-padding", type: t4.size, triggersBounds: diff2.any }, { name: "underlay-color", type: t4.color }, { name: "underlay-opacity", type: t4.zeroOneNumber, triggersBounds: diff2.zeroNonZero }, { name: "underlay-shape", type: t4.overlayShape, triggersBounds: diff2.any }, { name: "underlay-corner-radius", type: t4.cornerRadius }]; var transition2 = [{ name: "transition-property", type: t4.propList }, { name: "transition-duration", type: t4.time }, { name: "transition-delay", type: t4.time }, { name: "transition-timing-function", type: t4.easing }]; var nodeSizeHashOverride = /* @__PURE__ */ __name(function nodeSizeHashOverride2(ele, parsedProp) { if (parsedProp.value === "label") { return -ele.poolIndex(); } else { return parsedProp.pfValue; } }, "nodeSizeHashOverride"); var nodeBody = [{ name: "height", type: t4.nodeSize, triggersBounds: diff2.any, hashOverride: nodeSizeHashOverride }, { name: "width", type: t4.nodeSize, triggersBounds: diff2.any, hashOverride: nodeSizeHashOverride }, { name: "shape", type: t4.nodeShape, triggersBounds: diff2.any }, { name: "shape-polygon-points", type: t4.polygonPointList, triggersBounds: diff2.any }, { name: "corner-radius", type: t4.cornerRadius }, { name: "background-color", type: t4.color }, { name: "background-fill", type: t4.fill }, { name: "background-opacity", type: t4.zeroOneNumber }, { name: "background-blacken", type: t4.nOneOneNumber }, { name: "background-gradient-stop-colors", type: t4.colors }, { name: "background-gradient-stop-positions", type: t4.percentages }, { name: "background-gradient-direction", type: t4.gradientDirection }, { name: "padding", type: t4.sizeMaybePercent, triggersBounds: diff2.any }, { name: "padding-relative-to", type: t4.paddingRelativeTo, triggersBounds: diff2.any }, { name: "bounds-expansion", type: t4.boundsExpansion, triggersBounds: diff2.any }]; var nodeBorder = [{ name: "border-color", type: t4.color }, { name: "border-opacity", type: t4.zeroOneNumber }, { name: "border-width", type: t4.size, triggersBounds: diff2.any }, { name: "border-style", type: t4.borderStyle }, { name: "border-cap", type: t4.lineCap }, { name: "border-join", type: t4.lineJoin }, { name: "border-dash-pattern", type: t4.numbers }, { name: "border-dash-offset", type: t4.number }, { name: "border-position", type: t4.linePosition }]; var nodeOutline = [{ name: "outline-color", type: t4.color }, { name: "outline-opacity", type: t4.zeroOneNumber }, { name: "outline-width", type: t4.size, triggersBounds: diff2.any }, { name: "outline-style", type: t4.borderStyle }, { name: "outline-offset", type: t4.size, triggersBounds: diff2.any }]; var backgroundImage = [{ name: "background-image", type: t4.urls }, { name: "background-image-crossorigin", type: t4.bgCrossOrigin }, { name: "background-image-opacity", type: t4.zeroOneNumbers }, { name: "background-image-containment", type: t4.bgContainment }, { name: "background-image-smoothing", type: t4.bools }, { name: "background-position-x", type: t4.bgPos }, { name: "background-position-y", type: t4.bgPos }, { name: "background-width-relative-to", type: t4.bgRelativeTo }, { name: "background-height-relative-to", type: t4.bgRelativeTo }, { name: "background-repeat", type: t4.bgRepeat }, { name: "background-fit", type: t4.bgFit }, { name: "background-clip", type: t4.bgClip }, { name: "background-width", type: t4.bgWH }, { name: "background-height", type: t4.bgWH }, { name: "background-offset-x", type: t4.bgPos }, { name: "background-offset-y", type: t4.bgPos }]; var compound = [{ name: "position", type: t4.position, triggersBounds: diff2.any }, { name: "compound-sizing-wrt-labels", type: t4.compoundIncludeLabels, triggersBounds: diff2.any }, { name: "min-width", type: t4.size, triggersBounds: diff2.any }, { name: "min-width-bias-left", type: t4.sizeMaybePercent, triggersBounds: diff2.any }, { name: "min-width-bias-right", type: t4.sizeMaybePercent, triggersBounds: diff2.any }, { name: "min-height", type: t4.size, triggersBounds: diff2.any }, { name: "min-height-bias-top", type: t4.sizeMaybePercent, triggersBounds: diff2.any }, { name: "min-height-bias-bottom", type: t4.sizeMaybePercent, triggersBounds: diff2.any }]; var edgeLine = [{ name: "line-style", type: t4.lineStyle }, { name: "line-color", type: t4.color }, { name: "line-fill", type: t4.fill }, { name: "line-cap", type: t4.lineCap }, { name: "line-opacity", type: t4.zeroOneNumber }, { name: "line-dash-pattern", type: t4.numbers }, { name: "line-dash-offset", type: t4.number }, { name: "line-outline-width", type: t4.size }, { name: "line-outline-color", type: t4.color }, { name: "line-gradient-stop-colors", type: t4.colors }, { name: "line-gradient-stop-positions", type: t4.percentages }, { name: "curve-style", type: t4.curveStyle, triggersBounds: diff2.any, triggersBoundsOfParallelEdges: /* @__PURE__ */ __name(function triggersBoundsOfParallelEdges(fromValue, toValue) { if (fromValue === toValue) { return false; } return fromValue === "bezier" || // remove from bundle toValue === "bezier"; }, "triggersBoundsOfParallelEdges") }, { name: "haystack-radius", type: t4.zeroOneNumber, triggersBounds: diff2.any }, { name: "source-endpoint", type: t4.edgeEndpoint, triggersBounds: diff2.any }, { name: "target-endpoint", type: t4.edgeEndpoint, triggersBounds: diff2.any }, { name: "control-point-step-size", type: t4.size, triggersBounds: diff2.any }, { name: "control-point-distances", type: t4.bidirectionalSizes, triggersBounds: diff2.any }, { name: "control-point-weights", type: t4.numbers, triggersBounds: diff2.any }, { name: "segment-distances", type: t4.bidirectionalSizes, triggersBounds: diff2.any }, { name: "segment-weights", type: t4.numbers, triggersBounds: diff2.any }, { name: "segment-radii", type: t4.numbers, triggersBounds: diff2.any }, { name: "radius-type", type: t4.radiusType, triggersBounds: diff2.any }, { name: "taxi-turn", type: t4.bidirectionalSizeMaybePercent, triggersBounds: diff2.any }, { name: "taxi-turn-min-distance", type: t4.size, triggersBounds: diff2.any }, { name: "taxi-direction", type: t4.axisDirection, triggersBounds: diff2.any }, { name: "taxi-radius", type: t4.number, triggersBounds: diff2.any }, { name: "edge-distances", type: t4.edgeDistances, triggersBounds: diff2.any }, { name: "arrow-scale", type: t4.positiveNumber, triggersBounds: diff2.any }, { name: "loop-direction", type: t4.angle, triggersBounds: diff2.any }, { name: "loop-sweep", type: t4.angle, triggersBounds: diff2.any }, { name: "source-distance-from-node", type: t4.size, triggersBounds: diff2.any }, { name: "target-distance-from-node", type: t4.size, triggersBounds: diff2.any }]; var ghost = [{ name: "ghost", type: t4.bool, triggersBounds: diff2.any }, { name: "ghost-offset-x", type: t4.bidirectionalSize, triggersBounds: diff2.any }, { name: "ghost-offset-y", type: t4.bidirectionalSize, triggersBounds: diff2.any }, { name: "ghost-opacity", type: t4.zeroOneNumber }]; var core4 = [{ name: "selection-box-color", type: t4.color }, { name: "selection-box-opacity", type: t4.zeroOneNumber }, { name: "selection-box-border-color", type: t4.color }, { name: "selection-box-border-width", type: t4.size }, { name: "active-bg-color", type: t4.color }, { name: "active-bg-opacity", type: t4.zeroOneNumber }, { name: "active-bg-size", type: t4.size }, { name: "outside-texture-bg-color", type: t4.color }, { name: "outside-texture-bg-opacity", type: t4.zeroOneNumber }]; var pie2 = []; styfn$2.pieBackgroundN = 16; pie2.push({ name: "pie-size", type: t4.sizeMaybePercent }); pie2.push({ name: "pie-hole", type: t4.sizeMaybePercent }); pie2.push({ name: "pie-start-angle", type: t4.angle }); for (var i2 = 1; i2 <= styfn$2.pieBackgroundN; i2++) { pie2.push({ name: "pie-" + i2 + "-background-color", type: t4.color }); pie2.push({ name: "pie-" + i2 + "-background-size", type: t4.percent }); pie2.push({ name: "pie-" + i2 + "-background-opacity", type: t4.zeroOneNumber }); } var stripe = []; styfn$2.stripeBackgroundN = 16; stripe.push({ name: "stripe-size", type: t4.sizeMaybePercent }); stripe.push({ name: "stripe-direction", type: t4.axisDirectionPrimary }); for (var _i = 1; _i <= styfn$2.stripeBackgroundN; _i++) { stripe.push({ name: "stripe-" + _i + "-background-color", type: t4.color }); stripe.push({ name: "stripe-" + _i + "-background-size", type: t4.percent }); stripe.push({ name: "stripe-" + _i + "-background-opacity", type: t4.zeroOneNumber }); } var edgeArrow = []; var arrowPrefixes = styfn$2.arrowPrefixes = ["source", "mid-source", "target", "mid-target"]; [{ name: "arrow-shape", type: t4.arrowShape, triggersBounds: diff2.any }, { name: "arrow-color", type: t4.color }, { name: "arrow-fill", type: t4.arrowFill }, { name: "arrow-width", type: t4.arrowWidth }].forEach(function(prop2) { arrowPrefixes.forEach(function(prefix) { var name = prefix + "-" + prop2.name; var type3 = prop2.type, triggersBounds = prop2.triggersBounds; edgeArrow.push({ name, type: type3, triggersBounds }); }); }, {}); var props = styfn$2.properties = [].concat(behavior, transition2, visibility, overlay, underlay, ghost, commonLabel, labelDimensions, mainLabel, sourceLabel, targetLabel, nodeBody, nodeBorder, nodeOutline, backgroundImage, pie2, stripe, compound, edgeLine, edgeArrow, core4); var propGroups = styfn$2.propertyGroups = { // common to all eles behavior, transition: transition2, visibility, overlay, underlay, ghost, // labels commonLabel, labelDimensions, mainLabel, sourceLabel, targetLabel, // node props nodeBody, nodeBorder, nodeOutline, backgroundImage, pie: pie2, stripe, compound, // edge props edgeLine, edgeArrow, core: core4 }; var propGroupNames = styfn$2.propertyGroupNames = {}; var propGroupKeys = styfn$2.propertyGroupKeys = Object.keys(propGroups); propGroupKeys.forEach(function(key) { propGroupNames[key] = propGroups[key].map(function(prop2) { return prop2.name; }); propGroups[key].forEach(function(prop2) { return prop2.groupKey = key; }); }); var aliases = styfn$2.aliases = [{ name: "content", pointsTo: "label" }, { name: "control-point-distance", pointsTo: "control-point-distances" }, { name: "control-point-weight", pointsTo: "control-point-weights" }, { name: "segment-distance", pointsTo: "segment-distances" }, { name: "segment-weight", pointsTo: "segment-weights" }, { name: "segment-radius", pointsTo: "segment-radii" }, { name: "edge-text-rotation", pointsTo: "text-rotation" }, { name: "padding-left", pointsTo: "padding" }, { name: "padding-right", pointsTo: "padding" }, { name: "padding-top", pointsTo: "padding" }, { name: "padding-bottom", pointsTo: "padding" }]; styfn$2.propertyNames = props.map(function(p3) { return p3.name; }); for (var _i2 = 0; _i2 < props.length; _i2++) { var prop = props[_i2]; props[prop.name] = prop; } for (var _i3 = 0; _i3 < aliases.length; _i3++) { var alias = aliases[_i3]; var pointsToProp = props[alias.pointsTo]; var aliasProp = { name: alias.name, alias: true, pointsTo: pointsToProp }; props.push(aliasProp); props[alias.name] = aliasProp; } })(); styfn$2.getDefaultProperty = function(name) { return this.getDefaultProperties()[name]; }; styfn$2.getDefaultProperties = function() { var _p = this._private; if (_p.defaultProperties != null) { return _p.defaultProperties; } var rawProps = extend4({ // core props "selection-box-color": "#ddd", "selection-box-opacity": 0.65, "selection-box-border-color": "#aaa", "selection-box-border-width": 1, "active-bg-color": "black", "active-bg-opacity": 0.15, "active-bg-size": 30, "outside-texture-bg-color": "#000", "outside-texture-bg-opacity": 0.125, // common node/edge props "events": "yes", "text-events": "no", "text-valign": "top", "text-halign": "center", "text-justification": "auto", "line-height": 1, "color": "#000", "box-selection": "contain", "text-outline-color": "#000", "text-outline-width": 0, "text-outline-opacity": 1, "text-opacity": 1, "text-decoration": "none", "text-transform": "none", "text-wrap": "none", "text-overflow-wrap": "whitespace", "text-max-width": 9999, "text-background-color": "#000", "text-background-opacity": 0, "text-background-shape": "rectangle", "text-background-padding": 0, "text-border-opacity": 0, "text-border-width": 0, "text-border-style": "solid", "text-border-color": "#000", "font-family": "Helvetica Neue, Helvetica, sans-serif", "font-style": "normal", "font-weight": "normal", "font-size": 16, "min-zoomed-font-size": 0, "text-rotation": "none", "source-text-rotation": "none", "target-text-rotation": "none", "visibility": "visible", "display": "element", "opacity": 1, "z-compound-depth": "auto", "z-index-compare": "auto", "z-index": 0, "label": "", "text-margin-x": 0, "text-margin-y": 0, "source-label": "", "source-text-offset": 0, "source-text-margin-x": 0, "source-text-margin-y": 0, "target-label": "", "target-text-offset": 0, "target-text-margin-x": 0, "target-text-margin-y": 0, "overlay-opacity": 0, "overlay-color": "#000", "overlay-padding": 10, "overlay-shape": "round-rectangle", "overlay-corner-radius": "auto", "underlay-opacity": 0, "underlay-color": "#000", "underlay-padding": 10, "underlay-shape": "round-rectangle", "underlay-corner-radius": "auto", "transition-property": "none", "transition-duration": 0, "transition-delay": 0, "transition-timing-function": "linear", "box-select-labels": "no", // node props "background-blacken": 0, "background-color": "#999", "background-fill": "solid", "background-opacity": 1, "background-image": "none", "background-image-crossorigin": "anonymous", "background-image-opacity": 1, "background-image-containment": "inside", "background-image-smoothing": "yes", "background-position-x": "50%", "background-position-y": "50%", "background-offset-x": 0, "background-offset-y": 0, "background-width-relative-to": "include-padding", "background-height-relative-to": "include-padding", "background-repeat": "no-repeat", "background-fit": "none", "background-clip": "node", "background-width": "auto", "background-height": "auto", "border-color": "#000", "border-opacity": 1, "border-width": 0, "border-style": "solid", "border-dash-pattern": [4, 2], "border-dash-offset": 0, "border-cap": "butt", "border-join": "miter", "border-position": "center", "outline-color": "#999", "outline-opacity": 1, "outline-width": 0, "outline-offset": 0, "outline-style": "solid", "height": 30, "width": 30, "shape": "ellipse", "shape-polygon-points": "-1, -1, 1, -1, 1, 1, -1, 1", "corner-radius": "auto", "bounds-expansion": 0, // node gradient "background-gradient-direction": "to-bottom", "background-gradient-stop-colors": "#999", "background-gradient-stop-positions": "0%", // ghost props "ghost": "no", "ghost-offset-y": 0, "ghost-offset-x": 0, "ghost-opacity": 0, // compound props "padding": 0, "padding-relative-to": "width", "position": "origin", "compound-sizing-wrt-labels": "include", "min-width": 0, "min-width-bias-left": 0, "min-width-bias-right": 0, "min-height": 0, "min-height-bias-top": 0, "min-height-bias-bottom": 0 }, { // node pie bg "pie-size": "100%", "pie-hole": 0, "pie-start-angle": "0deg" }, [{ name: "pie-{{i}}-background-color", value: "black" }, { name: "pie-{{i}}-background-size", value: "0%" }, { name: "pie-{{i}}-background-opacity", value: 1 }].reduce(function(css, prop2) { for (var i3 = 1; i3 <= styfn$2.pieBackgroundN; i3++) { var name2 = prop2.name.replace("{{i}}", i3); var val2 = prop2.value; css[name2] = val2; } return css; }, {}), { // node stripes bg "stripe-size": "100%", "stripe-direction": "horizontal" }, [{ name: "stripe-{{i}}-background-color", value: "black" }, { name: "stripe-{{i}}-background-size", value: "0%" }, { name: "stripe-{{i}}-background-opacity", value: 1 }].reduce(function(css, prop2) { for (var i3 = 1; i3 <= styfn$2.stripeBackgroundN; i3++) { var name2 = prop2.name.replace("{{i}}", i3); var val2 = prop2.value; css[name2] = val2; } return css; }, {}), { // edge props "line-style": "solid", "line-color": "#999", "line-fill": "solid", "line-cap": "butt", "line-opacity": 1, "line-outline-width": 0, "line-outline-color": "#000", "line-gradient-stop-colors": "#999", "line-gradient-stop-positions": "0%", "control-point-step-size": 40, "control-point-weights": 0.5, "segment-weights": 0.5, "segment-distances": 20, "segment-radii": 15, "radius-type": "arc-radius", "taxi-turn": "50%", "taxi-radius": 15, "taxi-turn-min-distance": 10, "taxi-direction": "auto", "edge-distances": "intersection", "curve-style": "haystack", "haystack-radius": 0, "arrow-scale": 1, "loop-direction": "-45deg", "loop-sweep": "-90deg", "source-distance-from-node": 0, "target-distance-from-node": 0, "source-endpoint": "outside-to-node", "target-endpoint": "outside-to-node", "line-dash-pattern": [6, 3], "line-dash-offset": 0 }, [{ name: "arrow-shape", value: "none" }, { name: "arrow-color", value: "#999" }, { name: "arrow-fill", value: "filled" }, { name: "arrow-width", value: 1 }].reduce(function(css, prop2) { styfn$2.arrowPrefixes.forEach(function(prefix) { var name2 = prefix + "-" + prop2.name; var val2 = prop2.value; css[name2] = val2; }); return css; }, {})); var parsedProps = {}; for (var i2 = 0; i2 < this.properties.length; i2++) { var prop = this.properties[i2]; if (prop.pointsTo) { continue; } var name = prop.name; var val = rawProps[name]; var parsedProp = this.parse(name, val); parsedProps[name] = parsedProp; } _p.defaultProperties = parsedProps; return _p.defaultProperties; }; styfn$2.addDefaultStylesheet = function() { this.selector(":parent").css({ "shape": "rectangle", "padding": 10, "background-color": "#eee", "border-color": "#ccc", "border-width": 1 }).selector("edge").css({ "width": 3 }).selector(":loop").css({ "curve-style": "bezier" }).selector("edge:compound").css({ "curve-style": "bezier", "source-endpoint": "outside-to-line", "target-endpoint": "outside-to-line" }).selector(":selected").css({ "background-color": "#0169D9", "line-color": "#0169D9", "source-arrow-color": "#0169D9", "target-arrow-color": "#0169D9", "mid-source-arrow-color": "#0169D9", "mid-target-arrow-color": "#0169D9" }).selector(":parent:selected").css({ "background-color": "#CCE1F9", "border-color": "#aec8e5" }).selector(":active").css({ "overlay-color": "black", "overlay-padding": 10, "overlay-opacity": 0.25 }); this.defaultLength = this.length; }; styfn$1 = {}; styfn$1.parse = function(name, value2, propIsBypass, propIsFlat) { var self2 = this; if (fn$6(value2)) { return self2.parseImplWarn(name, value2, propIsBypass, propIsFlat); } var flatKey = propIsFlat === "mapping" || propIsFlat === true || propIsFlat === false || propIsFlat == null ? "dontcare" : propIsFlat; var bypassKey = propIsBypass ? "t" : "f"; var valueKey = "" + value2; var argHash = hashStrings(name, valueKey, bypassKey, flatKey); var propCache = self2.propCache = self2.propCache || []; var ret; if (!(ret = propCache[argHash])) { ret = propCache[argHash] = self2.parseImplWarn(name, value2, propIsBypass, propIsFlat); } if (propIsBypass || propIsFlat === "mapping") { ret = copy3(ret); if (ret) { ret.value = copy3(ret.value); } } return ret; }; styfn$1.parseImplWarn = function(name, value2, propIsBypass, propIsFlat) { var prop = this.parseImpl(name, value2, propIsBypass, propIsFlat); if (!prop && value2 != null) { warn("The style property `".concat(name, ": ").concat(value2, "` is invalid")); } if (prop && (prop.name === "width" || prop.name === "height") && value2 === "label") { warn("The style value of `label` is deprecated for `" + prop.name + "`"); } return prop; }; styfn$1.parseImpl = function(name, value2, propIsBypass, propIsFlat) { var self2 = this; name = camel2dash(name); var property2 = self2.properties[name]; var passedValue = value2; var types = self2.types; if (!property2) { return null; } if (value2 === void 0) { return null; } if (property2.alias) { property2 = property2.pointsTo; name = property2.name; } var valueIsString = string(value2); if (valueIsString) { value2 = value2.trim(); } var type3 = property2.type; if (!type3) { return null; } if (propIsBypass && (value2 === "" || value2 === null)) { return { name, value: value2, bypass: true, deleteBypass: true }; } if (fn$6(value2)) { return { name, value: value2, strValue: "fn", mapped: types.fn, bypass: propIsBypass }; } var data5, mapData; if (!valueIsString || propIsFlat || value2.length < 7 || value2[1] !== "a") ; else if (value2.length >= 7 && value2[0] === "d" && (data5 = new RegExp(types.data.regex).exec(value2))) { if (propIsBypass) { return false; } var mapped = types.data; return { name, value: data5, strValue: "" + value2, mapped, field: data5[1], bypass: propIsBypass }; } else if (value2.length >= 10 && value2[0] === "m" && (mapData = new RegExp(types.mapData.regex).exec(value2))) { if (propIsBypass) { return false; } if (type3.multiple) { return false; } var _mapped = types.mapData; if (!(type3.color || type3.number)) { return false; } var valueMin = this.parse(name, mapData[4]); if (!valueMin || valueMin.mapped) { return false; } var valueMax = this.parse(name, mapData[5]); if (!valueMax || valueMax.mapped) { return false; } if (valueMin.pfValue === valueMax.pfValue || valueMin.strValue === valueMax.strValue) { warn("`" + name + ": " + value2 + "` is not a valid mapper because the output range is zero; converting to `" + name + ": " + valueMin.strValue + "`"); return this.parse(name, valueMin.strValue); } else if (type3.color) { var c1 = valueMin.value; var c22 = valueMax.value; var same2 = c1[0] === c22[0] && c1[1] === c22[1] && c1[2] === c22[2] && // optional alpha (c1[3] === c22[3] || (c1[3] == null || c1[3] === 1) && (c22[3] == null || c22[3] === 1)); if (same2) { return false; } } return { name, value: mapData, strValue: "" + value2, mapped: _mapped, field: mapData[1], fieldMin: parseFloat(mapData[2]), // min & max are numeric fieldMax: parseFloat(mapData[3]), valueMin: valueMin.value, valueMax: valueMax.value, bypass: propIsBypass }; } if (type3.multiple && propIsFlat !== "multiple") { var vals; if (valueIsString) { vals = value2.split(/\s+/); } else if (array2(value2)) { vals = value2; } else { vals = [value2]; } if (type3.evenMultiple && vals.length % 2 !== 0) { return null; } var valArr = []; var unitsArr = []; var pfValArr = []; var strVal = ""; var hasEnum = false; for (var i2 = 0; i2 < vals.length; i2++) { var p3 = self2.parse(name, vals[i2], propIsBypass, "multiple"); hasEnum = hasEnum || string(p3.value); valArr.push(p3.value); pfValArr.push(p3.pfValue != null ? p3.pfValue : p3.value); unitsArr.push(p3.units); strVal += (i2 > 0 ? " " : "") + p3.strValue; } if (type3.validate && !type3.validate(valArr, unitsArr)) { return null; } if (type3.singleEnum && hasEnum) { if (valArr.length === 1 && string(valArr[0])) { return { name, value: valArr[0], strValue: valArr[0], bypass: propIsBypass }; } else { return null; } } return { name, value: valArr, pfValue: pfValArr, strValue: strVal, bypass: propIsBypass, units: unitsArr }; } var checkEnums = /* @__PURE__ */ __name(function checkEnums2() { for (var _i = 0; _i < type3.enums.length; _i++) { var en = type3.enums[_i]; if (en === value2) { return { name, value: value2, strValue: "" + value2, bypass: propIsBypass }; } } return null; }, "checkEnums"); if (type3.number) { var units; var implicitUnits = "px"; if (type3.units) { units = type3.units; } if (type3.implicitUnits) { implicitUnits = type3.implicitUnits; } if (!type3.unitless) { if (valueIsString) { var unitsRegex = "px|em" + (type3.allowPercent ? "|\\%" : ""); if (units) { unitsRegex = units; } var match2 = value2.match("^(" + number6 + ")(" + unitsRegex + ")?$"); if (match2) { value2 = match2[1]; units = match2[2] || implicitUnits; } } else if (!units || type3.implicitUnits) { units = implicitUnits; } } value2 = parseFloat(value2); if (isNaN(value2) && type3.enums === void 0) { return null; } if (isNaN(value2) && type3.enums !== void 0) { value2 = passedValue; return checkEnums(); } if (type3.integer && !integer(value2)) { return null; } if (type3.min !== void 0 && (value2 < type3.min || type3.strictMin && value2 === type3.min) || type3.max !== void 0 && (value2 > type3.max || type3.strictMax && value2 === type3.max)) { return null; } var ret = { name, value: value2, strValue: "" + value2 + (units ? units : ""), units, bypass: propIsBypass }; if (type3.unitless || units !== "px" && units !== "em") { ret.pfValue = value2; } else { ret.pfValue = units === "px" || !units ? value2 : this.getEmSizeInPixels() * value2; } if (units === "ms" || units === "s") { ret.pfValue = units === "ms" ? value2 : 1e3 * value2; } if (units === "deg" || units === "rad") { ret.pfValue = units === "rad" ? value2 : deg2rad(value2); } if (units === "%") { ret.pfValue = value2 / 100; } return ret; } else if (type3.propList) { var props = []; var propsStr = "" + value2; if (propsStr === "none") ; else { var propsSplit = propsStr.split(/\s*,\s*|\s+/); for (var _i2 = 0; _i2 < propsSplit.length; _i2++) { var propName = propsSplit[_i2].trim(); if (self2.properties[propName]) { props.push(propName); } else { warn("`" + propName + "` is not a valid property name"); } } if (props.length === 0) { return null; } } return { name, value: props, strValue: props.length === 0 ? "none" : props.join(" "), bypass: propIsBypass }; } else if (type3.color) { var tuple = color2tuple(value2); if (!tuple) { return null; } return { name, value: tuple, pfValue: tuple, strValue: "rgb(" + tuple[0] + "," + tuple[1] + "," + tuple[2] + ")", // n.b. no spaces b/c of multiple support bypass: propIsBypass }; } else if (type3.regex || type3.regexes) { if (type3.enums) { var enumProp = checkEnums(); if (enumProp) { return enumProp; } } var regexes = type3.regexes ? type3.regexes : [type3.regex]; for (var _i3 = 0; _i3 < regexes.length; _i3++) { var regex2 = new RegExp(regexes[_i3]); var m3 = regex2.exec(value2); if (m3) { return { name, value: type3.singleRegexMatchValue ? m3[1] : m3, strValue: "" + value2, bypass: propIsBypass }; } } return null; } else if (type3.string) { return { name, value: "" + value2, strValue: "" + value2, bypass: propIsBypass }; } else if (type3.enums) { return checkEnums(); } else { return null; } }; _Style = /* @__PURE__ */ __name(function Style2(cy) { if (!(this instanceof _Style)) { return new _Style(cy); } if (!core2(cy)) { error("A style must have a core reference"); return; } this._private = { cy, coreStyle: {} }; this.length = 0; this.resetToDefault(); }, "Style"); styfn = _Style.prototype; styfn.instanceString = function() { return "style"; }; styfn.clear = function() { var _p = this._private; var cy = _p.cy; var eles = cy.elements(); for (var i2 = 0; i2 < this.length; i2++) { this[i2] = void 0; } this.length = 0; _p.contextStyles = {}; _p.propDiffs = {}; this.cleanElements(eles, true); eles.forEach(function(ele) { var ele_p = ele[0]._private; ele_p.styleDirty = true; ele_p.appliedInitStyle = false; }); return this; }; styfn.resetToDefault = function() { this.clear(); this.addDefaultStylesheet(); return this; }; styfn.core = function(propName) { return this._private.coreStyle[propName] || this.getDefaultProperty(propName); }; styfn.selector = function(selectorStr) { var selector = selectorStr === "core" ? null : new Selector(selectorStr); var i2 = this.length++; this[i2] = { selector, properties: [], mappedProperties: [], index: i2 }; return this; }; styfn.css = function() { var self2 = this; var args = arguments; if (args.length === 1) { var map5 = args[0]; for (var i2 = 0; i2 < self2.properties.length; i2++) { var prop = self2.properties[i2]; var mapVal = map5[prop.name]; if (mapVal === void 0) { mapVal = map5[dash2camel(prop.name)]; } if (mapVal !== void 0) { this.cssRule(prop.name, mapVal); } } } else if (args.length === 2) { this.cssRule(args[0], args[1]); } return this; }; styfn.style = styfn.css; styfn.cssRule = function(name, value2) { var property2 = this.parse(name, value2); if (property2) { var i2 = this.length - 1; this[i2].properties.push(property2); this[i2].properties[property2.name] = property2; if (property2.name.match(/pie-(\d+)-background-size/) && property2.value) { this._private.hasPie = true; } if (property2.name.match(/stripe-(\d+)-background-size/) && property2.value) { this._private.hasStripe = true; } if (property2.mapped) { this[i2].mappedProperties.push(property2); } var currentSelectorIsCore = !this[i2].selector; if (currentSelectorIsCore) { this._private.coreStyle[property2.name] = property2; } } return this; }; styfn.append = function(style3) { if (stylesheet(style3)) { style3.appendToStyle(this); } else if (array2(style3)) { this.appendFromJson(style3); } else if (string(style3)) { this.appendFromString(style3); } return this; }; _Style.fromJson = function(cy, json3) { var style3 = new _Style(cy); style3.fromJson(json3); return style3; }; _Style.fromString = function(cy, string3) { return new _Style(cy).fromString(string3); }; [styfn$8, styfn$7, styfn$6, styfn$5, styfn$4, styfn$3, styfn$2, styfn$1].forEach(function(props) { extend4(styfn, props); }); _Style.types = styfn.types; _Style.properties = styfn.properties; _Style.propertyGroups = styfn.propertyGroups; _Style.propertyGroupNames = styfn.propertyGroupNames; _Style.propertyGroupKeys = styfn.propertyGroupKeys; corefn$2 = { style: /* @__PURE__ */ __name(function style2(newStyle) { if (newStyle) { var s2 = this.setStyle(newStyle); s2.update(); } return this._private.style; }, "style"), setStyle: /* @__PURE__ */ __name(function setStyle(style3) { var _p = this._private; if (stylesheet(style3)) { _p.style = style3.generateStyle(this); } else if (array2(style3)) { _p.style = _Style.fromJson(this, style3); } else if (string(style3)) { _p.style = _Style.fromString(this, style3); } else { _p.style = _Style(this); } return _p.style; }, "setStyle"), // e.g. cy.data() changed => recalc ele mappers updateStyle: /* @__PURE__ */ __name(function updateStyle2() { this.mutableElements().updateStyle(); }, "updateStyle") }; defaultSelectionType = "single"; corefn$1 = { autolock: /* @__PURE__ */ __name(function autolock(bool2) { if (bool2 !== void 0) { this._private.autolock = bool2 ? true : false; } else { return this._private.autolock; } return this; }, "autolock"), autoungrabify: /* @__PURE__ */ __name(function autoungrabify(bool2) { if (bool2 !== void 0) { this._private.autoungrabify = bool2 ? true : false; } else { return this._private.autoungrabify; } return this; }, "autoungrabify"), autounselectify: /* @__PURE__ */ __name(function autounselectify(bool2) { if (bool2 !== void 0) { this._private.autounselectify = bool2 ? true : false; } else { return this._private.autounselectify; } return this; }, "autounselectify"), selectionType: /* @__PURE__ */ __name(function selectionType(selType) { var _p = this._private; if (_p.selectionType == null) { _p.selectionType = defaultSelectionType; } if (selType !== void 0) { if (selType === "additive" || selType === "single") { _p.selectionType = selType; } } else { return _p.selectionType; } return this; }, "selectionType"), panningEnabled: /* @__PURE__ */ __name(function panningEnabled(bool2) { if (bool2 !== void 0) { this._private.panningEnabled = bool2 ? true : false; } else { return this._private.panningEnabled; } return this; }, "panningEnabled"), userPanningEnabled: /* @__PURE__ */ __name(function userPanningEnabled(bool2) { if (bool2 !== void 0) { this._private.userPanningEnabled = bool2 ? true : false; } else { return this._private.userPanningEnabled; } return this; }, "userPanningEnabled"), zoomingEnabled: /* @__PURE__ */ __name(function zoomingEnabled(bool2) { if (bool2 !== void 0) { this._private.zoomingEnabled = bool2 ? true : false; } else { return this._private.zoomingEnabled; } return this; }, "zoomingEnabled"), userZoomingEnabled: /* @__PURE__ */ __name(function userZoomingEnabled(bool2) { if (bool2 !== void 0) { this._private.userZoomingEnabled = bool2 ? true : false; } else { return this._private.userZoomingEnabled; } return this; }, "userZoomingEnabled"), boxSelectionEnabled: /* @__PURE__ */ __name(function boxSelectionEnabled(bool2) { if (bool2 !== void 0) { this._private.boxSelectionEnabled = bool2 ? true : false; } else { return this._private.boxSelectionEnabled; } return this; }, "boxSelectionEnabled"), pan: /* @__PURE__ */ __name(function pan() { var args = arguments; var pan2 = this._private.pan; var dim, val, dims, x5, y6; switch (args.length) { case 0: return pan2; case 1: if (string(args[0])) { dim = args[0]; return pan2[dim]; } else if (plainObject(args[0])) { if (!this._private.panningEnabled) { return this; } dims = args[0]; x5 = dims.x; y6 = dims.y; if (number$1(x5)) { pan2.x = x5; } if (number$1(y6)) { pan2.y = y6; } this.emit("pan viewport"); } break; case 2: if (!this._private.panningEnabled) { return this; } dim = args[0]; val = args[1]; if ((dim === "x" || dim === "y") && number$1(val)) { pan2[dim] = val; } this.emit("pan viewport"); break; } this.notify("viewport"); return this; }, "pan"), panBy: /* @__PURE__ */ __name(function panBy(arg0, arg1) { var args = arguments; var pan2 = this._private.pan; var dim, val, dims, x5, y6; if (!this._private.panningEnabled) { return this; } switch (args.length) { case 1: if (plainObject(arg0)) { dims = args[0]; x5 = dims.x; y6 = dims.y; if (number$1(x5)) { pan2.x += x5; } if (number$1(y6)) { pan2.y += y6; } this.emit("pan viewport"); } break; case 2: dim = arg0; val = arg1; if ((dim === "x" || dim === "y") && number$1(val)) { pan2[dim] += val; } this.emit("pan viewport"); break; } this.notify("viewport"); return this; }, "panBy"), gc: /* @__PURE__ */ __name(function gc() { this.notify("gc"); }, "gc"), fit: /* @__PURE__ */ __name(function fit(elements2, padding2) { var viewportState = this.getFitViewport(elements2, padding2); if (viewportState) { var _p = this._private; _p.zoom = viewportState.zoom; _p.pan = viewportState.pan; this.emit("pan zoom viewport"); this.notify("viewport"); } return this; }, "fit"), getFitViewport: /* @__PURE__ */ __name(function getFitViewport(elements2, padding2) { if (number$1(elements2) && padding2 === void 0) { padding2 = elements2; elements2 = void 0; } if (!this._private.panningEnabled || !this._private.zoomingEnabled) { return; } var bb; if (string(elements2)) { var sel = elements2; elements2 = this.$(sel); } else if (boundingBox(elements2)) { var bbe = elements2; bb = { x1: bbe.x1, y1: bbe.y1, x2: bbe.x2, y2: bbe.y2 }; bb.w = bb.x2 - bb.x1; bb.h = bb.y2 - bb.y1; } else if (!elementOrCollection(elements2)) { elements2 = this.mutableElements(); } if (elementOrCollection(elements2) && elements2.empty()) { return; } bb = bb || elements2.boundingBox(); var w4 = this.width(); var h3 = this.height(); var zoom2; padding2 = number$1(padding2) ? padding2 : 0; if (!isNaN(w4) && !isNaN(h3) && w4 > 0 && h3 > 0 && !isNaN(bb.w) && !isNaN(bb.h) && bb.w > 0 && bb.h > 0) { zoom2 = Math.min((w4 - 2 * padding2) / bb.w, (h3 - 2 * padding2) / bb.h); zoom2 = zoom2 > this._private.maxZoom ? this._private.maxZoom : zoom2; zoom2 = zoom2 < this._private.minZoom ? this._private.minZoom : zoom2; var pan2 = { // now pan to middle x: (w4 - zoom2 * (bb.x1 + bb.x2)) / 2, y: (h3 - zoom2 * (bb.y1 + bb.y2)) / 2 }; return { zoom: zoom2, pan: pan2 }; } return; }, "getFitViewport"), zoomRange: /* @__PURE__ */ __name(function zoomRange(min9, max10) { var _p = this._private; if (max10 == null) { var opts = min9; min9 = opts.min; max10 = opts.max; } if (number$1(min9) && number$1(max10) && min9 <= max10) { _p.minZoom = min9; _p.maxZoom = max10; } else if (number$1(min9) && max10 === void 0 && min9 <= _p.maxZoom) { _p.minZoom = min9; } else if (number$1(max10) && min9 === void 0 && max10 >= _p.minZoom) { _p.maxZoom = max10; } return this; }, "zoomRange"), minZoom: /* @__PURE__ */ __name(function minZoom(zoom2) { if (zoom2 === void 0) { return this._private.minZoom; } else { return this.zoomRange({ min: zoom2 }); } }, "minZoom"), maxZoom: /* @__PURE__ */ __name(function maxZoom(zoom2) { if (zoom2 === void 0) { return this._private.maxZoom; } else { return this.zoomRange({ max: zoom2 }); } }, "maxZoom"), getZoomedViewport: /* @__PURE__ */ __name(function getZoomedViewport(params) { var _p = this._private; var currentPan = _p.pan; var currentZoom = _p.zoom; var pos; var zoom2; var bail = false; if (!_p.zoomingEnabled) { bail = true; } if (number$1(params)) { zoom2 = params; } else if (plainObject(params)) { zoom2 = params.level; if (params.position != null) { pos = modelToRenderedPosition$1(params.position, currentZoom, currentPan); } else if (params.renderedPosition != null) { pos = params.renderedPosition; } if (pos != null && !_p.panningEnabled) { bail = true; } } zoom2 = zoom2 > _p.maxZoom ? _p.maxZoom : zoom2; zoom2 = zoom2 < _p.minZoom ? _p.minZoom : zoom2; if (bail || !number$1(zoom2) || zoom2 === currentZoom || pos != null && (!number$1(pos.x) || !number$1(pos.y))) { return null; } if (pos != null) { var pan1 = currentPan; var zoom1 = currentZoom; var zoom22 = zoom2; var pan2 = { x: -zoom22 / zoom1 * (pos.x - pan1.x) + pos.x, y: -zoom22 / zoom1 * (pos.y - pan1.y) + pos.y }; return { zoomed: true, panned: true, zoom: zoom22, pan: pan2 }; } else { return { zoomed: true, panned: false, zoom: zoom2, pan: currentPan }; } }, "getZoomedViewport"), zoom: /* @__PURE__ */ __name(function zoom(params) { if (params === void 0) { return this._private.zoom; } else { var vp = this.getZoomedViewport(params); var _p = this._private; if (vp == null || !vp.zoomed) { return this; } _p.zoom = vp.zoom; if (vp.panned) { _p.pan.x = vp.pan.x; _p.pan.y = vp.pan.y; } this.emit("zoom" + (vp.panned ? " pan" : "") + " viewport"); this.notify("viewport"); return this; } }, "zoom"), viewport: /* @__PURE__ */ __name(function viewport(opts) { var _p = this._private; var zoomDefd = true; var panDefd = true; var events = []; var zoomFailed = false; var panFailed = false; if (!opts) { return this; } if (!number$1(opts.zoom)) { zoomDefd = false; } if (!plainObject(opts.pan)) { panDefd = false; } if (!zoomDefd && !panDefd) { return this; } if (zoomDefd) { var z3 = opts.zoom; if (z3 < _p.minZoom || z3 > _p.maxZoom || !_p.zoomingEnabled) { zoomFailed = true; } else { _p.zoom = z3; events.push("zoom"); } } if (panDefd && (!zoomFailed || !opts.cancelOnFailedZoom) && _p.panningEnabled) { var p3 = opts.pan; if (number$1(p3.x)) { _p.pan.x = p3.x; panFailed = false; } if (number$1(p3.y)) { _p.pan.y = p3.y; panFailed = false; } if (!panFailed) { events.push("pan"); } } if (events.length > 0) { events.push("viewport"); this.emit(events.join(" ")); this.notify("viewport"); } return this; }, "viewport"), center: /* @__PURE__ */ __name(function center2(elements2) { var pan2 = this.getCenterPan(elements2); if (pan2) { this._private.pan = pan2; this.emit("pan viewport"); this.notify("viewport"); } return this; }, "center"), getCenterPan: /* @__PURE__ */ __name(function getCenterPan(elements2, zoom2) { if (!this._private.panningEnabled) { return; } if (string(elements2)) { var selector = elements2; elements2 = this.mutableElements().filter(selector); } else if (!elementOrCollection(elements2)) { elements2 = this.mutableElements(); } if (elements2.length === 0) { return; } var bb = elements2.boundingBox(); var w4 = this.width(); var h3 = this.height(); zoom2 = zoom2 === void 0 ? this._private.zoom : zoom2; var pan2 = { // middle x: (w4 - zoom2 * (bb.x1 + bb.x2)) / 2, y: (h3 - zoom2 * (bb.y1 + bb.y2)) / 2 }; return pan2; }, "getCenterPan"), reset: /* @__PURE__ */ __name(function reset2() { if (!this._private.panningEnabled || !this._private.zoomingEnabled) { return this; } this.viewport({ pan: { x: 0, y: 0 }, zoom: 1 }); return this; }, "reset"), invalidateSize: /* @__PURE__ */ __name(function invalidateSize() { this._private.sizeCache = null; }, "invalidateSize"), size: /* @__PURE__ */ __name(function size3() { var _p = this._private; var container2 = _p.container; var cy = this; return _p.sizeCache = _p.sizeCache || (container2 ? (function() { var style3 = cy.window().getComputedStyle(container2); var val = /* @__PURE__ */ __name(function val2(name) { return parseFloat(style3.getPropertyValue(name)); }, "val"); return { width: container2.clientWidth - val("padding-left") - val("padding-right"), height: container2.clientHeight - val("padding-top") - val("padding-bottom") }; })() : { // fallback if no container (not 0 b/c can be used for dividing etc) width: 1, height: 1 }); }, "size"), width: /* @__PURE__ */ __name(function width2() { return this.size().width; }, "width"), height: /* @__PURE__ */ __name(function height() { return this.size().height; }, "height"), extent: /* @__PURE__ */ __name(function extent() { var pan2 = this._private.pan; var zoom2 = this._private.zoom; var rb = this.renderedExtent(); var b3 = { x1: (rb.x1 - pan2.x) / zoom2, x2: (rb.x2 - pan2.x) / zoom2, y1: (rb.y1 - pan2.y) / zoom2, y2: (rb.y2 - pan2.y) / zoom2 }; b3.w = b3.x2 - b3.x1; b3.h = b3.y2 - b3.y1; return b3; }, "extent"), renderedExtent: /* @__PURE__ */ __name(function renderedExtent() { var width3 = this.width(); var height2 = this.height(); return { x1: 0, y1: 0, x2: width3, y2: height2, w: width3, h: height2 }; }, "renderedExtent"), multiClickDebounceTime: /* @__PURE__ */ __name(function multiClickDebounceTime(_int) { if (_int) this._private.multiClickDebounceTime = _int; else return this._private.multiClickDebounceTime; return this; }, "multiClickDebounceTime") }; corefn$1.centre = corefn$1.center; corefn$1.autolockNodes = corefn$1.autolock; corefn$1.autoungrabifyNodes = corefn$1.autoungrabify; fn2 = { data: define2.data({ field: "data", bindingEvent: "data", allowBinding: true, allowSetting: true, settingEvent: "data", settingTriggersEvent: true, triggerFnName: "trigger", allowGetting: true, updateStyle: true }), removeData: define2.removeData({ field: "data", event: "data", triggerFnName: "trigger", triggerEvent: true, updateStyle: true }), scratch: define2.data({ field: "scratch", bindingEvent: "scratch", allowBinding: true, allowSetting: true, settingEvent: "scratch", settingTriggersEvent: true, triggerFnName: "trigger", allowGetting: true, updateStyle: true }), removeScratch: define2.removeData({ field: "scratch", event: "scratch", triggerFnName: "trigger", triggerEvent: true, updateStyle: true }) }; fn2.attr = fn2.data; fn2.removeAttr = fn2.removeData; Core = /* @__PURE__ */ __name(function Core2(opts) { var cy = this; opts = extend4({}, opts); var container2 = opts.container; if (container2 && !htmlElement(container2) && htmlElement(container2[0])) { container2 = container2[0]; } var reg = container2 ? container2._cyreg : null; reg = reg || {}; if (reg && reg.cy) { reg.cy.destroy(); reg = {}; } var readies = reg.readies = reg.readies || []; if (container2) { container2._cyreg = reg; } reg.cy = cy; var head2 = _window !== void 0 && container2 !== void 0 && !opts.headless; var options2 = opts; options2.layout = extend4({ name: head2 ? "grid" : "null" }, options2.layout); options2.renderer = extend4({ name: head2 ? "canvas" : "null" }, options2.renderer); var defVal = /* @__PURE__ */ __name(function defVal2(def, val, altVal) { if (val !== void 0) { return val; } else if (altVal !== void 0) { return altVal; } else { return def; } }, "defVal"); var _p = this._private = { container: container2, // html dom ele container ready: false, // whether ready has been triggered options: options2, // cached options elements: new Collection(this), // elements in the graph listeners: [], // list of listeners aniEles: new Collection(this), // elements being animated data: options2.data || {}, // data for the core scratch: {}, // scratch object for core layout: null, renderer: null, destroyed: false, // whether destroy was called notificationsEnabled: true, // whether notifications are sent to the renderer minZoom: 1e-50, maxZoom: 1e50, zoomingEnabled: defVal(true, options2.zoomingEnabled), userZoomingEnabled: defVal(true, options2.userZoomingEnabled), panningEnabled: defVal(true, options2.panningEnabled), userPanningEnabled: defVal(true, options2.userPanningEnabled), boxSelectionEnabled: defVal(true, options2.boxSelectionEnabled), autolock: defVal(false, options2.autolock, options2.autolockNodes), autoungrabify: defVal(false, options2.autoungrabify, options2.autoungrabifyNodes), autounselectify: defVal(false, options2.autounselectify), styleEnabled: options2.styleEnabled === void 0 ? head2 : options2.styleEnabled, zoom: number$1(options2.zoom) ? options2.zoom : 1, pan: { x: plainObject(options2.pan) && number$1(options2.pan.x) ? options2.pan.x : 0, y: plainObject(options2.pan) && number$1(options2.pan.y) ? options2.pan.y : 0 }, animation: { // object for currently-running animations current: [], queue: [] }, hasCompoundNodes: false, multiClickDebounceTime: defVal(250, options2.multiClickDebounceTime) }; this.createEmitter(); this.selectionType(options2.selectionType); this.zoomRange({ min: options2.minZoom, max: options2.maxZoom }); var loadExtData = /* @__PURE__ */ __name(function loadExtData2(extData, next3) { var anyIsPromise = extData.some(promise); if (anyIsPromise) { return Promise$1.all(extData).then(next3); } else { next3(extData); } }, "loadExtData"); if (_p.styleEnabled) { cy.setStyle([]); } var rendererOptions = extend4({}, options2, options2.renderer); cy.initRenderer(rendererOptions); var setElesAndLayout = /* @__PURE__ */ __name(function setElesAndLayout2(elements2, onload, ondone) { cy.notifications(false); var oldEles = cy.mutableElements(); if (oldEles.length > 0) { oldEles.remove(); } if (elements2 != null) { if (plainObject(elements2) || array2(elements2)) { cy.add(elements2); } } cy.one("layoutready", function(e3) { cy.notifications(true); cy.emit(e3); cy.one("load", onload); cy.emitAndNotify("load"); }).one("layoutstop", function() { cy.one("done", ondone); cy.emit("done"); }); var layoutOpts = extend4({}, cy._private.options.layout); layoutOpts.eles = cy.elements(); cy.layout(layoutOpts).run(); }, "setElesAndLayout"); loadExtData([options2.style, options2.elements], function(thens) { var initStyle = thens[0]; var initEles = thens[1]; if (_p.styleEnabled) { cy.style().append(initStyle); } setElesAndLayout(initEles, function() { cy.startAnimationLoop(); _p.ready = true; if (fn$6(options2.ready)) { cy.on("ready", options2.ready); } for (var i2 = 0; i2 < readies.length; i2++) { var fn3 = readies[i2]; cy.on("ready", fn3); } if (reg) { reg.readies = []; } cy.emit("ready"); }, options2.done); }); }, "Core"); corefn = Core.prototype; extend4(corefn, { instanceString: /* @__PURE__ */ __name(function instanceString3() { return "core"; }, "instanceString"), isReady: /* @__PURE__ */ __name(function isReady() { return this._private.ready; }, "isReady"), destroyed: /* @__PURE__ */ __name(function destroyed() { return this._private.destroyed; }, "destroyed"), ready: /* @__PURE__ */ __name(function ready(fn3) { if (this.isReady()) { this.emitter().emit("ready", [], fn3); } else { this.on("ready", fn3); } return this; }, "ready"), destroy: /* @__PURE__ */ __name(function destroy() { var cy = this; if (cy.destroyed()) return; cy.stopAnimationLoop(); cy.destroyRenderer(); this.emit("destroy"); cy._private.destroyed = true; return cy; }, "destroy"), hasElementWithId: /* @__PURE__ */ __name(function hasElementWithId(id30) { return this._private.elements.hasElementWithId(id30); }, "hasElementWithId"), getElementById: /* @__PURE__ */ __name(function getElementById(id30) { return this._private.elements.getElementById(id30); }, "getElementById"), hasCompoundNodes: /* @__PURE__ */ __name(function hasCompoundNodes() { return this._private.hasCompoundNodes; }, "hasCompoundNodes"), headless: /* @__PURE__ */ __name(function headless() { return this._private.renderer.isHeadless(); }, "headless"), styleEnabled: /* @__PURE__ */ __name(function styleEnabled() { return this._private.styleEnabled; }, "styleEnabled"), addToPool: /* @__PURE__ */ __name(function addToPool(eles) { this._private.elements.merge(eles); return this; }, "addToPool"), removeFromPool: /* @__PURE__ */ __name(function removeFromPool(eles) { this._private.elements.unmerge(eles); return this; }, "removeFromPool"), container: /* @__PURE__ */ __name(function container() { return this._private.container || null; }, "container"), window: /* @__PURE__ */ __name(function window2() { var container2 = this._private.container; if (container2 == null) return _window; var ownerDocument = this._private.container.ownerDocument; if (ownerDocument === void 0 || ownerDocument == null) { return _window; } return ownerDocument.defaultView || _window; }, "window"), mount: /* @__PURE__ */ __name(function mount(container2) { if (container2 == null) { return; } var cy = this; var _p = cy._private; var options2 = _p.options; if (!htmlElement(container2) && htmlElement(container2[0])) { container2 = container2[0]; } cy.stopAnimationLoop(); cy.destroyRenderer(); _p.container = container2; _p.styleEnabled = true; cy.invalidateSize(); cy.initRenderer(extend4({}, options2, options2.renderer, { // allow custom renderer name to be re-used, otherwise use canvas name: options2.renderer.name === "null" ? "canvas" : options2.renderer.name })); cy.startAnimationLoop(); cy.style(options2.style); cy.emit("mount"); return cy; }, "mount"), unmount: /* @__PURE__ */ __name(function unmount() { var cy = this; cy.stopAnimationLoop(); cy.destroyRenderer(); cy.initRenderer({ name: "null" }); cy.emit("unmount"); return cy; }, "unmount"), options: /* @__PURE__ */ __name(function options() { return copy3(this._private.options); }, "options"), json: /* @__PURE__ */ __name(function json2(obj) { var cy = this; var _p = cy._private; var eles = cy.mutableElements(); var getFreshRef = /* @__PURE__ */ __name(function getFreshRef2(ele) { return cy.getElementById(ele.id()); }, "getFreshRef"); if (plainObject(obj)) { cy.startBatch(); if (obj.elements) { var idInJson = {}; var updateEles = /* @__PURE__ */ __name(function updateEles2(jsons, gr2) { var toAdd = []; var toMod = []; for (var i3 = 0; i3 < jsons.length; i3++) { var json4 = jsons[i3]; if (!json4.data.id) { warn("cy.json() cannot handle elements without an ID attribute"); continue; } var id30 = "" + json4.data.id; var ele = cy.getElementById(id30); idInJson[id30] = true; if (ele.length !== 0) { toMod.push({ ele, json: json4 }); } else { if (gr2) { json4.group = gr2; toAdd.push(json4); } else { toAdd.push(json4); } } } cy.add(toAdd); for (var _i = 0; _i < toMod.length; _i++) { var _toMod$_i = toMod[_i], _ele = _toMod$_i.ele, _json = _toMod$_i.json; _ele.json(_json); } }, "updateEles"); if (array2(obj.elements)) { updateEles(obj.elements); } else { var grs = ["nodes", "edges"]; for (var i2 = 0; i2 < grs.length; i2++) { var gr = grs[i2]; var elements2 = obj.elements[gr]; if (array2(elements2)) { updateEles(elements2, gr); } } } var parentsToRemove = cy.collection(); eles.filter(function(ele) { return !idInJson[ele.id()]; }).forEach(function(ele) { if (ele.isParent()) { parentsToRemove.merge(ele); } else { ele.remove(); } }); parentsToRemove.forEach(function(ele) { return ele.children().move({ parent: null }); }); parentsToRemove.forEach(function(ele) { return getFreshRef(ele).remove(); }); } if (obj.style) { cy.style(obj.style); } if (obj.zoom != null && obj.zoom !== _p.zoom) { cy.zoom(obj.zoom); } if (obj.pan) { if (obj.pan.x !== _p.pan.x || obj.pan.y !== _p.pan.y) { cy.pan(obj.pan); } } if (obj.data) { cy.data(obj.data); } var fields = ["minZoom", "maxZoom", "zoomingEnabled", "userZoomingEnabled", "panningEnabled", "userPanningEnabled", "boxSelectionEnabled", "autolock", "autoungrabify", "autounselectify", "multiClickDebounceTime"]; for (var _i2 = 0; _i2 < fields.length; _i2++) { var f2 = fields[_i2]; if (obj[f2] != null) { cy[f2](obj[f2]); } } cy.endBatch(); return this; } else { var flat = !!obj; var json3 = {}; if (flat) { json3.elements = this.elements().map(function(ele) { return ele.json(); }); } else { json3.elements = {}; eles.forEach(function(ele) { var group2 = ele.group(); if (!json3.elements[group2]) { json3.elements[group2] = []; } json3.elements[group2].push(ele.json()); }); } if (this._private.styleEnabled) { json3.style = cy.style().json(); } json3.data = copy3(cy.data()); var options2 = _p.options; json3.zoomingEnabled = _p.zoomingEnabled; json3.userZoomingEnabled = _p.userZoomingEnabled; json3.zoom = _p.zoom; json3.minZoom = _p.minZoom; json3.maxZoom = _p.maxZoom; json3.panningEnabled = _p.panningEnabled; json3.userPanningEnabled = _p.userPanningEnabled; json3.pan = copy3(_p.pan); json3.boxSelectionEnabled = _p.boxSelectionEnabled; json3.renderer = copy3(options2.renderer); json3.hideEdgesOnViewport = options2.hideEdgesOnViewport; json3.textureOnViewport = options2.textureOnViewport; json3.wheelSensitivity = options2.wheelSensitivity; json3.motionBlur = options2.motionBlur; json3.multiClickDebounceTime = options2.multiClickDebounceTime; return json3; } }, "json") }); corefn.$id = corefn.getElementById; [corefn$9, corefn$8, elesfn, corefn$7, corefn$6, corefn$5, corefn$4, corefn$3, corefn$2, corefn$1, fn2].forEach(function(props) { extend4(corefn, props); }); defaults$7 = { fit: true, // whether to fit the viewport to the graph directed: false, // whether the tree is directed downwards (or edges can point in any direction if false) direction: "downward", // determines the direction in which the tree structure is drawn. The possible values are 'downward', 'upward', 'rightward', or 'leftward'. padding: 30, // padding on fit circle: false, // put depths in concentric circles if true, put depths top down if false grid: false, // whether to create an even grid into which the DAG is placed (circle:false only) spacingFactor: 1.75, // positive spacing factor, larger => more space between nodes (N.B. n/a if causes overlap) boundingBox: void 0, // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } avoidOverlap: true, // prevents node overlap, may overflow boundingBox if not enough space nodeDimensionsIncludeLabels: false, // Excludes the label when calculating node bounding boxes for the layout algorithm roots: void 0, // the roots of the trees depthSort: void 0, // a sorting function to order nodes at equal depth. e.g. function(a, b){ return a.data('weight') - b.data('weight') } animate: false, // whether to transition the node positions animationDuration: 500, // duration of animation in ms if enabled animationEasing: void 0, // easing of animation if enabled, animateFilter: /* @__PURE__ */ __name(function animateFilter(node2, i2) { return true; }, "animateFilter"), // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts ready: void 0, // callback on layoutready stop: void 0, // callback on layoutstop transform: /* @__PURE__ */ __name(function transform2(node2, position5) { return position5; }, "transform") // transform a given node position. Useful for changing flow direction in discrete layouts }; deprecatedOptionDefaults = { maximal: false, // whether to shift nodes down their natural BFS depths in order to avoid upwards edges (DAGS only); setting acyclic to true sets maximal to true also acyclic: false // whether the tree is acyclic and thus a node could be shifted (due to the maximal option) multiple times without causing an infinite loop; setting to true sets maximal to true also; if you are uncertain whether a tree is acyclic, set to false to avoid potential infinite loops }; getInfo = /* @__PURE__ */ __name(function getInfo2(ele) { return ele.scratch("breadthfirst"); }, "getInfo"); setInfo = /* @__PURE__ */ __name(function setInfo2(ele, obj) { return ele.scratch("breadthfirst", obj); }, "setInfo"); __name(BreadthFirstLayout, "BreadthFirstLayout"); BreadthFirstLayout.prototype.run = function() { var options2 = this.options; var cy = options2.cy; var eles = options2.eles; var nodes5 = eles.nodes().filter(function(n3) { return n3.isChildless(); }); var graph = eles; var directed = options2.directed; var maximal = options2.acyclic || options2.maximal || options2.maximalAdjustments > 0; var hasBoundingBox = !!options2.boundingBox; var bb = makeBoundingBox(hasBoundingBox ? options2.boundingBox : structuredClone(cy.extent())); var roots; if (elementOrCollection(options2.roots)) { roots = options2.roots; } else if (array2(options2.roots)) { var rootsArray = []; for (var i2 = 0; i2 < options2.roots.length; i2++) { var id30 = options2.roots[i2]; var ele = cy.getElementById(id30); rootsArray.push(ele); } roots = cy.collection(rootsArray); } else if (string(options2.roots)) { roots = cy.$(options2.roots); } else { if (directed) { roots = nodes5.roots(); } else { var components3 = eles.components(); roots = cy.collection(); var _loop = /* @__PURE__ */ __name(function _loop2() { var comp = components3[_i]; var maxDegree = comp.maxDegree(false); var compRoots = comp.filter(function(ele2) { return ele2.degree(false) === maxDegree; }); roots = roots.add(compRoots); }, "_loop"); for (var _i = 0; _i < components3.length; _i++) { _loop(); } } } var depths = []; var foundByBfs = {}; var addToDepth = /* @__PURE__ */ __name(function addToDepth2(ele2, d3) { if (depths[d3] == null) { depths[d3] = []; } var i3 = depths[d3].length; depths[d3].push(ele2); setInfo(ele2, { index: i3, depth: d3 }); }, "addToDepth"); var changeDepth = /* @__PURE__ */ __name(function changeDepth2(ele2, newDepth) { var _getInfo = getInfo(ele2), depth = _getInfo.depth, index = _getInfo.index; depths[depth][index] = null; if (ele2.isChildless()) addToDepth(ele2, newDepth); }, "changeDepth"); graph.bfs({ roots, directed: options2.directed, visit: /* @__PURE__ */ __name(function visit(node2, edge, pNode, i3, depth) { var ele2 = node2[0]; var id31 = ele2.id(); if (ele2.isChildless()) addToDepth(ele2, depth); foundByBfs[id31] = true; }, "visit") }); var orphanNodes = []; for (var _i2 = 0; _i2 < nodes5.length; _i2++) { var _ele = nodes5[_i2]; if (foundByBfs[_ele.id()]) { continue; } else { orphanNodes.push(_ele); } } var assignDepthsAt = /* @__PURE__ */ __name(function assignDepthsAt2(i3) { var eles2 = depths[i3]; for (var j3 = 0; j3 < eles2.length; j3++) { var _ele2 = eles2[j3]; if (_ele2 == null) { eles2.splice(j3, 1); j3--; continue; } setInfo(_ele2, { depth: i3, index: j3 }); } }, "assignDepthsAt"); var adjustMaximally = /* @__PURE__ */ __name(function adjustMaximally2(ele2, shifted2) { var eInfo = getInfo(ele2); var incomers = ele2.incomers().filter(function(el) { return el.isNode() && eles.has(el); }); var maxDepth = -1; var id31 = ele2.id(); for (var k2 = 0; k2 < incomers.length; k2++) { var incmr = incomers[k2]; var iInfo = getInfo(incmr); maxDepth = Math.max(maxDepth, iInfo.depth); } if (eInfo.depth <= maxDepth) { if (!options2.acyclic && shifted2[id31]) { return null; } var newDepth = maxDepth + 1; changeDepth(ele2, newDepth); shifted2[id31] = newDepth; return true; } return false; }, "adjustMaximally"); if (directed && maximal) { var Q3 = []; var shifted = {}; var enqueue = /* @__PURE__ */ __name(function enqueue2(n3) { return Q3.push(n3); }, "enqueue"); var dequeue = /* @__PURE__ */ __name(function dequeue2() { return Q3.shift(); }, "dequeue"); nodes5.forEach(function(n3) { return Q3.push(n3); }); while (Q3.length > 0) { var _ele3 = dequeue(); var didShift = adjustMaximally(_ele3, shifted); if (didShift) { _ele3.outgoers().filter(function(el) { return el.isNode() && eles.has(el); }).forEach(enqueue); } else if (didShift === null) { warn("Detected double maximal shift for node `" + _ele3.id() + "`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs."); break; } } } var minDistance = 0; if (options2.avoidOverlap) { for (var _i3 = 0; _i3 < nodes5.length; _i3++) { var n2 = nodes5[_i3]; var nbb = n2.layoutDimensions(options2); var w4 = nbb.w; var h3 = nbb.h; minDistance = Math.max(minDistance, w4, h3); } } var cachedWeightedPercent = {}; var getWeightedPercent = /* @__PURE__ */ __name(function getWeightedPercent2(ele2) { if (cachedWeightedPercent[ele2.id()]) { return cachedWeightedPercent[ele2.id()]; } var eleDepth = getInfo(ele2).depth; var neighbors = ele2.neighborhood(); var percent = 0; var samples = 0; for (var _i4 = 0; _i4 < neighbors.length; _i4++) { var neighbor = neighbors[_i4]; if (neighbor.isEdge() || neighbor.isParent() || !nodes5.has(neighbor)) { continue; } var bf = getInfo(neighbor); if (bf == null) { continue; } var index = bf.index; var depth = bf.depth; if (index == null || depth == null) { continue; } var nDepth = depths[depth].length; if (depth < eleDepth) { percent += index / nDepth; samples++; } } samples = Math.max(1, samples); percent = percent / samples; if (samples === 0) { percent = 0; } cachedWeightedPercent[ele2.id()] = percent; return percent; }, "getWeightedPercent"); var sortFn = /* @__PURE__ */ __name(function sortFn2(a2, b3) { var apct = getWeightedPercent(a2); var bpct = getWeightedPercent(b3); var diff2 = apct - bpct; if (diff2 === 0) { return ascending3(a2.id(), b3.id()); } else { return diff2; } }, "sortFn"); if (options2.depthSort !== void 0) { sortFn = options2.depthSort; } var depthsLen = depths.length; for (var _i5 = 0; _i5 < depthsLen; _i5++) { depths[_i5].sort(sortFn); assignDepthsAt(_i5); } var orphanDepth = []; for (var _i6 = 0; _i6 < orphanNodes.length; _i6++) { orphanDepth.push(orphanNodes[_i6]); } var assignDepths = /* @__PURE__ */ __name(function assignDepths2() { for (var _i7 = 0; _i7 < depthsLen; _i7++) { assignDepthsAt(_i7); } }, "assignDepths"); if (orphanDepth.length) { depths.unshift(orphanDepth); depthsLen = depths.length; assignDepths(); } var biggestDepthSize = 0; for (var _i8 = 0; _i8 < depthsLen; _i8++) { biggestDepthSize = Math.max(depths[_i8].length, biggestDepthSize); } var center4 = { x: bb.x1 + bb.w / 2, y: bb.y1 + bb.h / 2 }; var aveNodeSize = nodes5.reduce(function(acc, node2) { return (function(box) { return { w: acc.w === -1 ? box.w : (acc.w + box.w) / 2, h: acc.h === -1 ? box.h : (acc.h + box.h) / 2 }; })(node2.boundingBox({ includeLabels: options2.nodeDimensionsIncludeLabels })); }, { w: -1, h: -1 }); var distanceY = Math.max( // only one depth depthsLen === 1 ? 0 : ( // inside a bounding box, no need for top & bottom padding hasBoundingBox ? (bb.h - options2.padding * 2 - aveNodeSize.h) / (depthsLen - 1) : (bb.h - options2.padding * 2 - aveNodeSize.h) / (depthsLen + 1) ), minDistance ); var maxDepthSize = depths.reduce(function(max10, eles2) { return Math.max(max10, eles2.length); }, 0); var getPositionTopBottom = /* @__PURE__ */ __name(function getPositionTopBottom2(ele2) { var _getInfo2 = getInfo(ele2), depth = _getInfo2.depth, index = _getInfo2.index; if (options2.circle) { var radiusStepSize = Math.min(bb.w / 2 / depthsLen, bb.h / 2 / depthsLen); radiusStepSize = Math.max(radiusStepSize, minDistance); var radius2 = radiusStepSize * depth + radiusStepSize - (depthsLen > 0 && depths[0].length <= 3 ? radiusStepSize / 2 : 0); var theta = 2 * Math.PI / depths[depth].length * index; if (depth === 0 && depths[0].length === 1) { radius2 = 1; } return { x: center4.x + radius2 * Math.cos(theta), y: center4.y + radius2 * Math.sin(theta) }; } else { var depthSize = depths[depth].length; var distanceX = Math.max( // only one depth depthSize === 1 ? 0 : ( // inside a bounding box, no need for left & right padding hasBoundingBox ? (bb.w - options2.padding * 2 - aveNodeSize.w) / ((options2.grid ? maxDepthSize : depthSize) - 1) : (bb.w - options2.padding * 2 - aveNodeSize.w) / ((options2.grid ? maxDepthSize : depthSize) + 1) ), minDistance ); var epos = { x: center4.x + (index + 1 - (depthSize + 1) / 2) * distanceX, y: center4.y + (depth + 1 - (depthsLen + 1) / 2) * distanceY }; return epos; } }, "getPositionTopBottom"); var rotateDegrees = { "downward": 0, "leftward": 90, "upward": 180, "rightward": -90 }; if (Object.keys(rotateDegrees).indexOf(options2.direction) === -1) { error("Invalid direction '".concat(options2.direction, "' specified for breadthfirst layout. Valid values are: ").concat(Object.keys(rotateDegrees).join(", "))); } var getPosition = /* @__PURE__ */ __name(function getPosition2(ele2) { return rotatePosAndSkewByBox(getPositionTopBottom(ele2), bb, rotateDegrees[options2.direction]); }, "getPosition"); eles.nodes().layoutPositions(this, options2, getPosition); return this; }; defaults$6 = { fit: true, // whether to fit the viewport to the graph padding: 30, // the padding on fit boundingBox: void 0, // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } avoidOverlap: true, // prevents node overlap, may overflow boundingBox and radius if not enough space nodeDimensionsIncludeLabels: false, // Excludes the label when calculating node bounding boxes for the layout algorithm spacingFactor: void 0, // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up radius: void 0, // the radius of the circle startAngle: 3 / 2 * Math.PI, // where nodes start in radians sweep: void 0, // how many radians should be between the first and last node (defaults to full circle) clockwise: true, // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false) sort: void 0, // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') } animate: false, // whether to transition the node positions animationDuration: 500, // duration of animation in ms if enabled animationEasing: void 0, // easing of animation if enabled animateFilter: /* @__PURE__ */ __name(function animateFilter2(node2, i2) { return true; }, "animateFilter"), // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts ready: void 0, // callback on layoutready stop: void 0, // callback on layoutstop transform: /* @__PURE__ */ __name(function transform3(node2, position5) { return position5; }, "transform") // transform a given node position. Useful for changing flow direction in discrete layouts }; __name(CircleLayout, "CircleLayout"); CircleLayout.prototype.run = function() { var params = this.options; var options2 = params; var cy = params.cy; var eles = options2.eles; var clockwise = options2.counterclockwise !== void 0 ? !options2.counterclockwise : options2.clockwise; var nodes5 = eles.nodes().not(":parent"); if (options2.sort) { nodes5 = nodes5.sort(options2.sort); } var bb = makeBoundingBox(options2.boundingBox ? options2.boundingBox : { x1: 0, y1: 0, w: cy.width(), h: cy.height() }); var center4 = { x: bb.x1 + bb.w / 2, y: bb.y1 + bb.h / 2 }; var sweep = options2.sweep === void 0 ? 2 * Math.PI - 2 * Math.PI / nodes5.length : options2.sweep; var dTheta = sweep / Math.max(1, nodes5.length - 1); var r2; var minDistance = 0; for (var i2 = 0; i2 < nodes5.length; i2++) { var n2 = nodes5[i2]; var nbb = n2.layoutDimensions(options2); var w4 = nbb.w; var h3 = nbb.h; minDistance = Math.max(minDistance, w4, h3); } if (number$1(options2.radius)) { r2 = options2.radius; } else if (nodes5.length <= 1) { r2 = 0; } else { r2 = Math.min(bb.h, bb.w) / 2 - minDistance; } if (nodes5.length > 1 && options2.avoidOverlap) { minDistance *= 1.75; var dcos = Math.cos(dTheta) - Math.cos(0); var dsin = Math.sin(dTheta) - Math.sin(0); var rMin = Math.sqrt(minDistance * minDistance / (dcos * dcos + dsin * dsin)); r2 = Math.max(rMin, r2); } var getPos = /* @__PURE__ */ __name(function getPos2(ele, i3) { var theta = options2.startAngle + i3 * dTheta * (clockwise ? 1 : -1); var rx = r2 * Math.cos(theta); var ry = r2 * Math.sin(theta); var pos = { x: center4.x + rx, y: center4.y + ry }; return pos; }, "getPos"); eles.nodes().layoutPositions(this, options2, getPos); return this; }; defaults$5 = { fit: true, // whether to fit the viewport to the graph padding: 30, // the padding on fit startAngle: 3 / 2 * Math.PI, // where nodes start in radians sweep: void 0, // how many radians should be between the first and last node (defaults to full circle) clockwise: true, // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false) equidistant: false, // whether levels have an equal radial distance betwen them, may cause bounding box overflow minNodeSpacing: 10, // min spacing between outside of nodes (used for radius adjustment) boundingBox: void 0, // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } avoidOverlap: true, // prevents node overlap, may overflow boundingBox if not enough space nodeDimensionsIncludeLabels: false, // Excludes the label when calculating node bounding boxes for the layout algorithm height: void 0, // height of layout area (overrides container height) width: void 0, // width of layout area (overrides container width) spacingFactor: void 0, // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up concentric: /* @__PURE__ */ __name(function concentric(node2) { return node2.degree(); }, "concentric"), levelWidth: /* @__PURE__ */ __name(function levelWidth(nodes5) { return nodes5.maxDegree() / 4; }, "levelWidth"), animate: false, // whether to transition the node positions animationDuration: 500, // duration of animation in ms if enabled animationEasing: void 0, // easing of animation if enabled animateFilter: /* @__PURE__ */ __name(function animateFilter3(node2, i2) { return true; }, "animateFilter"), // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts ready: void 0, // callback on layoutready stop: void 0, // callback on layoutstop transform: /* @__PURE__ */ __name(function transform4(node2, position5) { return position5; }, "transform") // transform a given node position. Useful for changing flow direction in discrete layouts }; __name(ConcentricLayout, "ConcentricLayout"); ConcentricLayout.prototype.run = function() { var params = this.options; var options2 = params; var clockwise = options2.counterclockwise !== void 0 ? !options2.counterclockwise : options2.clockwise; var cy = params.cy; var eles = options2.eles; var nodes5 = eles.nodes().not(":parent"); var bb = makeBoundingBox(options2.boundingBox ? options2.boundingBox : { x1: 0, y1: 0, w: cy.width(), h: cy.height() }); var center4 = { x: bb.x1 + bb.w / 2, y: bb.y1 + bb.h / 2 }; var nodeValues = []; var maxNodeSize = 0; for (var i2 = 0; i2 < nodes5.length; i2++) { var node2 = nodes5[i2]; var value2 = void 0; value2 = options2.concentric(node2); nodeValues.push({ value: value2, node: node2 }); node2._private.scratch.concentric = value2; } nodes5.updateStyle(); for (var _i = 0; _i < nodes5.length; _i++) { var _node = nodes5[_i]; var nbb = _node.layoutDimensions(options2); maxNodeSize = Math.max(maxNodeSize, nbb.w, nbb.h); } nodeValues.sort(function(a2, b3) { return b3.value - a2.value; }); var levelWidth2 = options2.levelWidth(nodes5); var levels = [[]]; var currentLevel = levels[0]; for (var _i2 = 0; _i2 < nodeValues.length; _i2++) { var val = nodeValues[_i2]; if (currentLevel.length > 0) { var diff2 = Math.abs(currentLevel[0].value - val.value); if (diff2 >= levelWidth2) { currentLevel = []; levels.push(currentLevel); } } currentLevel.push(val); } var minDist = maxNodeSize + options2.minNodeSpacing; if (!options2.avoidOverlap) { var firstLvlHasMulti = levels.length > 0 && levels[0].length > 1; var maxR = Math.min(bb.w, bb.h) / 2 - minDist; var rStep = maxR / (levels.length + firstLvlHasMulti ? 1 : 0); minDist = Math.min(minDist, rStep); } var r2 = 0; for (var _i3 = 0; _i3 < levels.length; _i3++) { var level = levels[_i3]; var sweep = options2.sweep === void 0 ? 2 * Math.PI - 2 * Math.PI / level.length : options2.sweep; var dTheta = level.dTheta = sweep / Math.max(1, level.length - 1); if (level.length > 1 && options2.avoidOverlap) { var dcos = Math.cos(dTheta) - Math.cos(0); var dsin = Math.sin(dTheta) - Math.sin(0); var rMin = Math.sqrt(minDist * minDist / (dcos * dcos + dsin * dsin)); r2 = Math.max(rMin, r2); } level.r = r2; r2 += minDist; } if (options2.equidistant) { var rDeltaMax = 0; var _r = 0; for (var _i4 = 0; _i4 < levels.length; _i4++) { var _level = levels[_i4]; var rDelta = _level.r - _r; rDeltaMax = Math.max(rDeltaMax, rDelta); } _r = 0; for (var _i5 = 0; _i5 < levels.length; _i5++) { var _level2 = levels[_i5]; if (_i5 === 0) { _r = _level2.r; } _level2.r = _r; _r += rDeltaMax; } } var pos = {}; for (var _i6 = 0; _i6 < levels.length; _i6++) { var _level3 = levels[_i6]; var _dTheta = _level3.dTheta; var _r2 = _level3.r; for (var j3 = 0; j3 < _level3.length; j3++) { var _val = _level3[j3]; var theta = options2.startAngle + (clockwise ? 1 : -1) * _dTheta * j3; var p3 = { x: center4.x + _r2 * Math.cos(theta), y: center4.y + _r2 * Math.sin(theta) }; pos[_val.node.id()] = p3; } } eles.nodes().layoutPositions(this, options2, function(ele) { var id30 = ele.id(); return pos[id30]; }); return this; }; defaults$4 = { // Called on `layoutready` ready: /* @__PURE__ */ __name(function ready2() { }, "ready"), // Called on `layoutstop` stop: /* @__PURE__ */ __name(function stop3() { }, "stop"), // Whether to animate while running the layout // true : Animate continuously as the layout is running // false : Just show the end result // 'end' : Animate with the end result, from the initial positions to the end positions animate: true, // Easing of the animation for animate:'end' animationEasing: void 0, // The duration of the animation for animate:'end' animationDuration: void 0, // A function that determines whether the node should be animated // All nodes animated by default on animate enabled // Non-animated nodes are positioned immediately when the layout starts animateFilter: /* @__PURE__ */ __name(function animateFilter4(node2, i2) { return true; }, "animateFilter"), // The layout animates only after this many milliseconds for animate:true // (prevents flashing on fast runs) animationThreshold: 250, // Number of iterations between consecutive screen positions update refresh: 20, // Whether to fit the network view after when done fit: true, // Padding on fit padding: 30, // Constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } boundingBox: void 0, // Excludes the label when calculating node bounding boxes for the layout algorithm nodeDimensionsIncludeLabels: false, // Randomize the initial positions of the nodes (true) or use existing positions (false) randomize: false, // Extra spacing between components in non-compound graphs componentSpacing: 40, // Node repulsion (non overlapping) multiplier nodeRepulsion: /* @__PURE__ */ __name(function nodeRepulsion(node2) { return 2048; }, "nodeRepulsion"), // Node repulsion (overlapping) multiplier nodeOverlap: 4, // Ideal edge (non nested) length idealEdgeLength: /* @__PURE__ */ __name(function idealEdgeLength(edge) { return 32; }, "idealEdgeLength"), // Divisor to compute edge forces edgeElasticity: /* @__PURE__ */ __name(function edgeElasticity(edge) { return 32; }, "edgeElasticity"), // Nesting factor (multiplier) to compute ideal edge length for nested edges nestingFactor: 1.2, // Gravity force (constant) gravity: 1, // Maximum number of iterations to perform numIter: 1e3, // Initial temperature (maximum node displacement) initialTemp: 1e3, // Cooling factor (how the temperature is reduced between consecutive iterations coolingFactor: 0.99, // Lower temperature threshold (below this point the layout will end) minTemp: 1 }; __name(CoseLayout, "CoseLayout"); CoseLayout.prototype.run = function() { var options2 = this.options; var cy = options2.cy; var layout6 = this; layout6.stopped = false; if (options2.animate === true || options2.animate === false) { layout6.emit({ type: "layoutstart", layout: layout6 }); } if (true === options2.debug) { DEBUG = true; } else { DEBUG = false; } var layoutInfo = createLayoutInfo(cy, layout6, options2); if (DEBUG) { printLayoutInfo(layoutInfo); } if (options2.randomize) { randomizePositions(layoutInfo); } var startTime = performanceNow(); var refresh = /* @__PURE__ */ __name(function refresh2() { refreshPositions(layoutInfo, cy, options2); if (true === options2.fit) { cy.fit(options2.padding); } }, "refresh"); var mainLoop = /* @__PURE__ */ __name(function mainLoop2(i3) { if (layout6.stopped || i3 >= options2.numIter) { return false; } step(layoutInfo, options2); layoutInfo.temperature = layoutInfo.temperature * options2.coolingFactor; if (layoutInfo.temperature < options2.minTemp) { return false; } return true; }, "mainLoop"); var done = /* @__PURE__ */ __name(function done2() { if (options2.animate === true || options2.animate === false) { refresh(); layout6.one("layoutstop", options2.stop); layout6.emit({ type: "layoutstop", layout: layout6 }); } else { var nodes5 = options2.eles.nodes(); var getScaledPos = getScaleInBoundsFn(layoutInfo, options2, nodes5); nodes5.layoutPositions(layout6, options2, getScaledPos); } }, "done"); var i2 = 0; var loopRet = true; if (options2.animate === true) { var _frame = /* @__PURE__ */ __name(function frame2() { var f2 = 0; while (loopRet && f2 < options2.refresh) { loopRet = mainLoop(i2); i2++; f2++; } if (!loopRet) { separateComponents(layoutInfo, options2); done(); } else { var now3 = performanceNow(); if (now3 - startTime >= options2.animationThreshold) { refresh(); } requestAnimationFrame2(_frame); } }, "frame"); _frame(); } else { while (loopRet) { loopRet = mainLoop(i2); i2++; } separateComponents(layoutInfo, options2); done(); } return this; }; CoseLayout.prototype.stop = function() { this.stopped = true; if (this.thread) { this.thread.stop(); } this.emit("layoutstop"); return this; }; CoseLayout.prototype.destroy = function() { if (this.thread) { this.thread.stop(); } return this; }; createLayoutInfo = /* @__PURE__ */ __name(function createLayoutInfo2(cy, layout6, options2) { var edges3 = options2.eles.edges(); var nodes5 = options2.eles.nodes(); var bb = makeBoundingBox(options2.boundingBox ? options2.boundingBox : { x1: 0, y1: 0, w: cy.width(), h: cy.height() }); var layoutInfo = { isCompound: cy.hasCompoundNodes(), layoutNodes: [], idToIndex: {}, nodeSize: nodes5.size(), graphSet: [], indexToGraph: [], layoutEdges: [], edgeSize: edges3.size(), temperature: options2.initialTemp, clientWidth: bb.w, clientHeight: bb.h, boundingBox: bb }; var components3 = options2.eles.components(); var id2cmptId = {}; for (var i2 = 0; i2 < components3.length; i2++) { var component2 = components3[i2]; for (var j3 = 0; j3 < component2.length; j3++) { var node2 = component2[j3]; id2cmptId[node2.id()] = i2; } } for (var i2 = 0; i2 < layoutInfo.nodeSize; i2++) { var n2 = nodes5[i2]; var nbb = n2.layoutDimensions(options2); var tempNode = {}; tempNode.isLocked = n2.locked(); tempNode.id = n2.data("id"); tempNode.parentId = n2.data("parent"); tempNode.cmptId = id2cmptId[n2.id()]; tempNode.children = []; tempNode.positionX = n2.position("x"); tempNode.positionY = n2.position("y"); tempNode.offsetX = 0; tempNode.offsetY = 0; tempNode.height = nbb.w; tempNode.width = nbb.h; tempNode.maxX = tempNode.positionX + tempNode.width / 2; tempNode.minX = tempNode.positionX - tempNode.width / 2; tempNode.maxY = tempNode.positionY + tempNode.height / 2; tempNode.minY = tempNode.positionY - tempNode.height / 2; tempNode.padLeft = parseFloat(n2.style("padding")); tempNode.padRight = parseFloat(n2.style("padding")); tempNode.padTop = parseFloat(n2.style("padding")); tempNode.padBottom = parseFloat(n2.style("padding")); tempNode.nodeRepulsion = fn$6(options2.nodeRepulsion) ? options2.nodeRepulsion(n2) : options2.nodeRepulsion; layoutInfo.layoutNodes.push(tempNode); layoutInfo.idToIndex[tempNode.id] = i2; } var queue = []; var start3 = 0; var end2 = -1; var tempGraph = []; for (var i2 = 0; i2 < layoutInfo.nodeSize; i2++) { var n2 = layoutInfo.layoutNodes[i2]; var p_id = n2.parentId; if (null != p_id) { layoutInfo.layoutNodes[layoutInfo.idToIndex[p_id]].children.push(n2.id); } else { queue[++end2] = n2.id; tempGraph.push(n2.id); } } layoutInfo.graphSet.push(tempGraph); while (start3 <= end2) { var node_id = queue[start3++]; var node_ix = layoutInfo.idToIndex[node_id]; var node2 = layoutInfo.layoutNodes[node_ix]; var children2 = node2.children; if (children2.length > 0) { layoutInfo.graphSet.push(children2); for (var i2 = 0; i2 < children2.length; i2++) { queue[++end2] = children2[i2]; } } } for (var i2 = 0; i2 < layoutInfo.graphSet.length; i2++) { var graph = layoutInfo.graphSet[i2]; for (var j3 = 0; j3 < graph.length; j3++) { var index = layoutInfo.idToIndex[graph[j3]]; layoutInfo.indexToGraph[index] = i2; } } for (var i2 = 0; i2 < layoutInfo.edgeSize; i2++) { var e3 = edges3[i2]; var tempEdge = {}; tempEdge.id = e3.data("id"); tempEdge.sourceId = e3.data("source"); tempEdge.targetId = e3.data("target"); var idealLength = fn$6(options2.idealEdgeLength) ? options2.idealEdgeLength(e3) : options2.idealEdgeLength; var elasticity = fn$6(options2.edgeElasticity) ? options2.edgeElasticity(e3) : options2.edgeElasticity; var sourceIx = layoutInfo.idToIndex[tempEdge.sourceId]; var targetIx = layoutInfo.idToIndex[tempEdge.targetId]; var sourceGraph = layoutInfo.indexToGraph[sourceIx]; var targetGraph = layoutInfo.indexToGraph[targetIx]; if (sourceGraph != targetGraph) { var lca = findLCA(tempEdge.sourceId, tempEdge.targetId, layoutInfo); var lcaGraph = layoutInfo.graphSet[lca]; var depth = 0; var tempNode = layoutInfo.layoutNodes[sourceIx]; while (-1 === lcaGraph.indexOf(tempNode.id)) { tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]]; depth++; } tempNode = layoutInfo.layoutNodes[targetIx]; while (-1 === lcaGraph.indexOf(tempNode.id)) { tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]]; depth++; } idealLength *= depth * options2.nestingFactor; } tempEdge.idealLength = idealLength; tempEdge.elasticity = elasticity; layoutInfo.layoutEdges.push(tempEdge); } return layoutInfo; }, "createLayoutInfo"); findLCA = /* @__PURE__ */ __name(function findLCA2(node1, node2, layoutInfo) { var res = _findLCA_aux(node1, node2, 0, layoutInfo); if (2 > res.count) { return 0; } else { return res.graph; } }, "findLCA"); _findLCA_aux = /* @__PURE__ */ __name(function findLCA_aux(node1, node2, graphIx, layoutInfo) { var graph = layoutInfo.graphSet[graphIx]; if (-1 < graph.indexOf(node1) && -1 < graph.indexOf(node2)) { return { count: 2, graph: graphIx }; } var c3 = 0; for (var i2 = 0; i2 < graph.length; i2++) { var nodeId = graph[i2]; var nodeIx = layoutInfo.idToIndex[nodeId]; var children2 = layoutInfo.layoutNodes[nodeIx].children; if (0 === children2.length) { continue; } var childGraphIx = layoutInfo.indexToGraph[layoutInfo.idToIndex[children2[0]]]; var result = _findLCA_aux(node1, node2, childGraphIx, layoutInfo); if (0 === result.count) { continue; } else if (1 === result.count) { c3++; if (2 === c3) { break; } } else { return result; } } return { count: c3, graph: graphIx }; }, "findLCA_aux"); randomizePositions = /* @__PURE__ */ __name(function randomizePositions2(layoutInfo, cy) { var width3 = layoutInfo.clientWidth; var height2 = layoutInfo.clientHeight; for (var i2 = 0; i2 < layoutInfo.nodeSize; i2++) { var n2 = layoutInfo.layoutNodes[i2]; if (0 === n2.children.length && !n2.isLocked) { n2.positionX = Math.random() * width3; n2.positionY = Math.random() * height2; } } }, "randomizePositions"); getScaleInBoundsFn = /* @__PURE__ */ __name(function getScaleInBoundsFn2(layoutInfo, options2, nodes5) { var bb = layoutInfo.boundingBox; var coseBB = { x1: Infinity, x2: -Infinity, y1: Infinity, y2: -Infinity }; if (options2.boundingBox) { nodes5.forEach(function(node2) { var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[node2.data("id")]]; coseBB.x1 = Math.min(coseBB.x1, lnode.positionX); coseBB.x2 = Math.max(coseBB.x2, lnode.positionX); coseBB.y1 = Math.min(coseBB.y1, lnode.positionY); coseBB.y2 = Math.max(coseBB.y2, lnode.positionY); }); coseBB.w = coseBB.x2 - coseBB.x1; coseBB.h = coseBB.y2 - coseBB.y1; } return function(ele, i2) { var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[ele.data("id")]]; if (options2.boundingBox) { var pctX = coseBB.w === 0 ? 0.5 : (lnode.positionX - coseBB.x1) / coseBB.w; var pctY = coseBB.h === 0 ? 0.5 : (lnode.positionY - coseBB.y1) / coseBB.h; return { x: bb.x1 + pctX * bb.w, y: bb.y1 + pctY * bb.h }; } else { return { x: lnode.positionX, y: lnode.positionY }; } }; }, "getScaleInBoundsFn"); refreshPositions = /* @__PURE__ */ __name(function refreshPositions2(layoutInfo, cy, options2) { var layout6 = options2.layout; var nodes5 = options2.eles.nodes(); var getScaledPos = getScaleInBoundsFn(layoutInfo, options2, nodes5); nodes5.positions(getScaledPos); if (true !== layoutInfo.ready) { layoutInfo.ready = true; layout6.one("layoutready", options2.ready); layout6.emit({ type: "layoutready", layout: this }); } }, "refreshPositions"); step = /* @__PURE__ */ __name(function step2(layoutInfo, options2, _step) { calculateNodeForces(layoutInfo, options2); calculateEdgeForces(layoutInfo); calculateGravityForces(layoutInfo, options2); propagateForces(layoutInfo); updatePositions(layoutInfo); }, "step"); calculateNodeForces = /* @__PURE__ */ __name(function calculateNodeForces2(layoutInfo, options2) { for (var i2 = 0; i2 < layoutInfo.graphSet.length; i2++) { var graph = layoutInfo.graphSet[i2]; var numNodes = graph.length; for (var j3 = 0; j3 < numNodes; j3++) { var node1 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j3]]]; for (var k2 = j3 + 1; k2 < numNodes; k2++) { var node2 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[k2]]]; nodeRepulsion2(node1, node2, layoutInfo, options2); } } } }, "calculateNodeForces"); randomDistance = /* @__PURE__ */ __name(function randomDistance2(max10) { return -1 + 2 * max10 * Math.random(); }, "randomDistance"); nodeRepulsion2 = /* @__PURE__ */ __name(function nodeRepulsion3(node1, node2, layoutInfo, options2) { var cmptId1 = node1.cmptId; var cmptId2 = node2.cmptId; if (cmptId1 !== cmptId2 && !layoutInfo.isCompound) { return; } var directionX = node2.positionX - node1.positionX; var directionY = node2.positionY - node1.positionY; var maxRandDist = 1; if (0 === directionX && 0 === directionY) { directionX = randomDistance(maxRandDist); directionY = randomDistance(maxRandDist); } var overlap = nodesOverlap(node1, node2, directionX, directionY); if (overlap > 0) { var force = options2.nodeOverlap * overlap; var distance2 = Math.sqrt(directionX * directionX + directionY * directionY); var forceX = force * directionX / distance2; var forceY = force * directionY / distance2; } else { var point1 = findClippingPoint(node1, directionX, directionY); var point22 = findClippingPoint(node2, -1 * directionX, -1 * directionY); var distanceX = point22.x - point1.x; var distanceY = point22.y - point1.y; var distanceSqr = distanceX * distanceX + distanceY * distanceY; var distance2 = Math.sqrt(distanceSqr); var force = (node1.nodeRepulsion + node2.nodeRepulsion) / distanceSqr; var forceX = force * distanceX / distance2; var forceY = force * distanceY / distance2; } if (!node1.isLocked) { node1.offsetX -= forceX; node1.offsetY -= forceY; } if (!node2.isLocked) { node2.offsetX += forceX; node2.offsetY += forceY; } return; }, "nodeRepulsion"); nodesOverlap = /* @__PURE__ */ __name(function nodesOverlap2(node1, node2, dX, dY) { if (dX > 0) { var overlapX = node1.maxX - node2.minX; } else { var overlapX = node2.maxX - node1.minX; } if (dY > 0) { var overlapY = node1.maxY - node2.minY; } else { var overlapY = node2.maxY - node1.minY; } if (overlapX >= 0 && overlapY >= 0) { return Math.sqrt(overlapX * overlapX + overlapY * overlapY); } else { return 0; } }, "nodesOverlap"); findClippingPoint = /* @__PURE__ */ __name(function findClippingPoint2(node2, dX, dY) { var X4 = node2.positionX; var Y3 = node2.positionY; var H2 = node2.height || 1; var W3 = node2.width || 1; var dirSlope = dY / dX; var nodeSlope = H2 / W3; var res = {}; if (0 === dX && 0 < dY) { res.x = X4; res.y = Y3 + H2 / 2; return res; } if (0 === dX && 0 > dY) { res.x = X4; res.y = Y3 + H2 / 2; return res; } if (0 < dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) { res.x = X4 + W3 / 2; res.y = Y3 + W3 * dY / 2 / dX; return res; } if (0 > dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) { res.x = X4 - W3 / 2; res.y = Y3 - W3 * dY / 2 / dX; return res; } if (0 < dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) { res.x = X4 + H2 * dX / 2 / dY; res.y = Y3 + H2 / 2; return res; } if (0 > dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) { res.x = X4 - H2 * dX / 2 / dY; res.y = Y3 - H2 / 2; return res; } return res; }, "findClippingPoint"); calculateEdgeForces = /* @__PURE__ */ __name(function calculateEdgeForces2(layoutInfo, options2) { for (var i2 = 0; i2 < layoutInfo.edgeSize; i2++) { var edge = layoutInfo.layoutEdges[i2]; var sourceIx = layoutInfo.idToIndex[edge.sourceId]; var source = layoutInfo.layoutNodes[sourceIx]; var targetIx = layoutInfo.idToIndex[edge.targetId]; var target = layoutInfo.layoutNodes[targetIx]; var directionX = target.positionX - source.positionX; var directionY = target.positionY - source.positionY; if (0 === directionX && 0 === directionY) { continue; } var point1 = findClippingPoint(source, directionX, directionY); var point22 = findClippingPoint(target, -1 * directionX, -1 * directionY); var lx = point22.x - point1.x; var ly = point22.y - point1.y; var l4 = Math.sqrt(lx * lx + ly * ly); var force = Math.pow(edge.idealLength - l4, 2) / edge.elasticity; if (0 !== l4) { var forceX = force * lx / l4; var forceY = force * ly / l4; } else { var forceX = 0; var forceY = 0; } if (!source.isLocked) { source.offsetX += forceX; source.offsetY += forceY; } if (!target.isLocked) { target.offsetX -= forceX; target.offsetY -= forceY; } } }, "calculateEdgeForces"); calculateGravityForces = /* @__PURE__ */ __name(function calculateGravityForces2(layoutInfo, options2) { if (options2.gravity === 0) { return; } var distThreshold = 1; for (var i2 = 0; i2 < layoutInfo.graphSet.length; i2++) { var graph = layoutInfo.graphSet[i2]; var numNodes = graph.length; if (0 === i2) { var centerX = layoutInfo.clientHeight / 2; var centerY = layoutInfo.clientWidth / 2; } else { var temp = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[0]]]; var parent4 = layoutInfo.layoutNodes[layoutInfo.idToIndex[temp.parentId]]; var centerX = parent4.positionX; var centerY = parent4.positionY; } for (var j3 = 0; j3 < numNodes; j3++) { var node2 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j3]]]; if (node2.isLocked) { continue; } var dx = centerX - node2.positionX; var dy = centerY - node2.positionY; var d3 = Math.sqrt(dx * dx + dy * dy); if (d3 > distThreshold) { var fx = options2.gravity * dx / d3; var fy = options2.gravity * dy / d3; node2.offsetX += fx; node2.offsetY += fy; } } } }, "calculateGravityForces"); propagateForces = /* @__PURE__ */ __name(function propagateForces2(layoutInfo, options2) { var queue = []; var start3 = 0; var end2 = -1; queue.push.apply(queue, layoutInfo.graphSet[0]); end2 += layoutInfo.graphSet[0].length; while (start3 <= end2) { var nodeId = queue[start3++]; var nodeIndex = layoutInfo.idToIndex[nodeId]; var node2 = layoutInfo.layoutNodes[nodeIndex]; var children2 = node2.children; if (0 < children2.length && !node2.isLocked) { var offX = node2.offsetX; var offY = node2.offsetY; for (var i2 = 0; i2 < children2.length; i2++) { var childNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[children2[i2]]]; childNode.offsetX += offX; childNode.offsetY += offY; queue[++end2] = children2[i2]; } node2.offsetX = 0; node2.offsetY = 0; } } }, "propagateForces"); updatePositions = /* @__PURE__ */ __name(function updatePositions2(layoutInfo, options2) { for (var i2 = 0; i2 < layoutInfo.nodeSize; i2++) { var n2 = layoutInfo.layoutNodes[i2]; if (0 < n2.children.length) { n2.maxX = void 0; n2.minX = void 0; n2.maxY = void 0; n2.minY = void 0; } } for (var i2 = 0; i2 < layoutInfo.nodeSize; i2++) { var n2 = layoutInfo.layoutNodes[i2]; if (0 < n2.children.length || n2.isLocked) { continue; } var tempForce = limitForce(n2.offsetX, n2.offsetY, layoutInfo.temperature); n2.positionX += tempForce.x; n2.positionY += tempForce.y; n2.offsetX = 0; n2.offsetY = 0; n2.minX = n2.positionX - n2.width; n2.maxX = n2.positionX + n2.width; n2.minY = n2.positionY - n2.height; n2.maxY = n2.positionY + n2.height; _updateAncestryBoundaries(n2, layoutInfo); } for (var i2 = 0; i2 < layoutInfo.nodeSize; i2++) { var n2 = layoutInfo.layoutNodes[i2]; if (0 < n2.children.length && !n2.isLocked) { n2.positionX = (n2.maxX + n2.minX) / 2; n2.positionY = (n2.maxY + n2.minY) / 2; n2.width = n2.maxX - n2.minX; n2.height = n2.maxY - n2.minY; } } }, "updatePositions"); limitForce = /* @__PURE__ */ __name(function limitForce2(forceX, forceY, max10) { var force = Math.sqrt(forceX * forceX + forceY * forceY); if (force > max10) { var res = { x: max10 * forceX / force, y: max10 * forceY / force }; } else { var res = { x: forceX, y: forceY }; } return res; }, "limitForce"); _updateAncestryBoundaries = /* @__PURE__ */ __name(function updateAncestryBoundaries(node2, layoutInfo) { var parentId = node2.parentId; if (null == parentId) { return; } var p3 = layoutInfo.layoutNodes[layoutInfo.idToIndex[parentId]]; var flag = false; if (null == p3.maxX || node2.maxX + p3.padRight > p3.maxX) { p3.maxX = node2.maxX + p3.padRight; flag = true; } if (null == p3.minX || node2.minX - p3.padLeft < p3.minX) { p3.minX = node2.minX - p3.padLeft; flag = true; } if (null == p3.maxY || node2.maxY + p3.padBottom > p3.maxY) { p3.maxY = node2.maxY + p3.padBottom; flag = true; } if (null == p3.minY || node2.minY - p3.padTop < p3.minY) { p3.minY = node2.minY - p3.padTop; flag = true; } if (flag) { return _updateAncestryBoundaries(p3, layoutInfo); } return; }, "updateAncestryBoundaries"); separateComponents = /* @__PURE__ */ __name(function separateComponents2(layoutInfo, options2) { var nodes5 = layoutInfo.layoutNodes; var components3 = []; for (var i2 = 0; i2 < nodes5.length; i2++) { var node2 = nodes5[i2]; var cid = node2.cmptId; var component2 = components3[cid] = components3[cid] || []; component2.push(node2); } var totalA = 0; for (var i2 = 0; i2 < components3.length; i2++) { var c3 = components3[i2]; if (!c3) { continue; } c3.x1 = Infinity; c3.x2 = -Infinity; c3.y1 = Infinity; c3.y2 = -Infinity; for (var j3 = 0; j3 < c3.length; j3++) { var n2 = c3[j3]; c3.x1 = Math.min(c3.x1, n2.positionX - n2.width / 2); c3.x2 = Math.max(c3.x2, n2.positionX + n2.width / 2); c3.y1 = Math.min(c3.y1, n2.positionY - n2.height / 2); c3.y2 = Math.max(c3.y2, n2.positionY + n2.height / 2); } c3.w = c3.x2 - c3.x1; c3.h = c3.y2 - c3.y1; totalA += c3.w * c3.h; } components3.sort(function(c1, c22) { return c22.w * c22.h - c1.w * c1.h; }); var x5 = 0; var y6 = 0; var usedW = 0; var rowH = 0; var maxRowW = Math.sqrt(totalA) * layoutInfo.clientWidth / layoutInfo.clientHeight; for (var i2 = 0; i2 < components3.length; i2++) { var c3 = components3[i2]; if (!c3) { continue; } for (var j3 = 0; j3 < c3.length; j3++) { var n2 = c3[j3]; if (!n2.isLocked) { n2.positionX += x5 - c3.x1; n2.positionY += y6 - c3.y1; } } x5 += c3.w + options2.componentSpacing; usedW += c3.w + options2.componentSpacing; rowH = Math.max(rowH, c3.h); if (usedW > maxRowW) { y6 += rowH + options2.componentSpacing; x5 = 0; usedW = 0; rowH = 0; } } }, "separateComponents"); defaults$3 = { fit: true, // whether to fit the viewport to the graph padding: 30, // padding used on fit boundingBox: void 0, // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } avoidOverlap: true, // prevents node overlap, may overflow boundingBox if not enough space avoidOverlapPadding: 10, // extra spacing around nodes when avoidOverlap: true nodeDimensionsIncludeLabels: false, // Excludes the label when calculating node bounding boxes for the layout algorithm spacingFactor: void 0, // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up condense: false, // uses all available space on false, uses minimal space on true rows: void 0, // force num of rows in the grid cols: void 0, // force num of columns in the grid position: /* @__PURE__ */ __name(function position3(node2) { }, "position"), // returns { row, col } for element sort: void 0, // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') } animate: false, // whether to transition the node positions animationDuration: 500, // duration of animation in ms if enabled animationEasing: void 0, // easing of animation if enabled animateFilter: /* @__PURE__ */ __name(function animateFilter5(node2, i2) { return true; }, "animateFilter"), // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts ready: void 0, // callback on layoutready stop: void 0, // callback on layoutstop transform: /* @__PURE__ */ __name(function transform5(node2, position5) { return position5; }, "transform") // transform a given node position. Useful for changing flow direction in discrete layouts }; __name(GridLayout, "GridLayout"); GridLayout.prototype.run = function() { var params = this.options; var options2 = params; var cy = params.cy; var eles = options2.eles; var nodes5 = eles.nodes().not(":parent"); if (options2.sort) { nodes5 = nodes5.sort(options2.sort); } var bb = makeBoundingBox(options2.boundingBox ? options2.boundingBox : { x1: 0, y1: 0, w: cy.width(), h: cy.height() }); if (bb.h === 0 || bb.w === 0) { eles.nodes().layoutPositions(this, options2, function(ele) { return { x: bb.x1, y: bb.y1 }; }); } else { var cells = nodes5.size(); var splits = Math.sqrt(cells * bb.h / bb.w); var rows = Math.round(splits); var cols = Math.round(bb.w / bb.h * splits); var small = /* @__PURE__ */ __name(function small2(val) { if (val == null) { return Math.min(rows, cols); } else { var min9 = Math.min(rows, cols); if (min9 == rows) { rows = val; } else { cols = val; } } }, "small"); var large = /* @__PURE__ */ __name(function large2(val) { if (val == null) { return Math.max(rows, cols); } else { var max10 = Math.max(rows, cols); if (max10 == rows) { rows = val; } else { cols = val; } } }, "large"); var oRows = options2.rows; var oCols = options2.cols != null ? options2.cols : options2.columns; if (oRows != null && oCols != null) { rows = oRows; cols = oCols; } else if (oRows != null && oCols == null) { rows = oRows; cols = Math.ceil(cells / rows); } else if (oRows == null && oCols != null) { cols = oCols; rows = Math.ceil(cells / cols); } else if (cols * rows > cells) { var sm = small(); var lg = large(); if ((sm - 1) * lg >= cells) { small(sm - 1); } else if ((lg - 1) * sm >= cells) { large(lg - 1); } } else { while (cols * rows < cells) { var _sm = small(); var _lg = large(); if ((_lg + 1) * _sm >= cells) { large(_lg + 1); } else { small(_sm + 1); } } } var cellWidth = bb.w / cols; var cellHeight = bb.h / rows; if (options2.condense) { cellWidth = 0; cellHeight = 0; } if (options2.avoidOverlap) { for (var i2 = 0; i2 < nodes5.length; i2++) { var node2 = nodes5[i2]; var pos = node2._private.position; if (pos.x == null || pos.y == null) { pos.x = 0; pos.y = 0; } var nbb = node2.layoutDimensions(options2); var p3 = options2.avoidOverlapPadding; var w4 = nbb.w + p3; var h3 = nbb.h + p3; cellWidth = Math.max(cellWidth, w4); cellHeight = Math.max(cellHeight, h3); } } var cellUsed = {}; var used = /* @__PURE__ */ __name(function used2(row2, col2) { return cellUsed["c-" + row2 + "-" + col2] ? true : false; }, "used"); var use = /* @__PURE__ */ __name(function use2(row2, col2) { cellUsed["c-" + row2 + "-" + col2] = true; }, "use"); var row = 0; var col = 0; var moveToNextCell = /* @__PURE__ */ __name(function moveToNextCell2() { col++; if (col >= cols) { col = 0; row++; } }, "moveToNextCell"); var id2manPos = {}; for (var _i = 0; _i < nodes5.length; _i++) { var _node = nodes5[_i]; var rcPos = options2.position(_node); if (rcPos && (rcPos.row !== void 0 || rcPos.col !== void 0)) { var _pos = { row: rcPos.row, col: rcPos.col }; if (_pos.col === void 0) { _pos.col = 0; while (used(_pos.row, _pos.col)) { _pos.col++; } } else if (_pos.row === void 0) { _pos.row = 0; while (used(_pos.row, _pos.col)) { _pos.row++; } } id2manPos[_node.id()] = _pos; use(_pos.row, _pos.col); } } var getPos = /* @__PURE__ */ __name(function getPos2(element3, i3) { var x5, y6; if (element3.locked() || element3.isParent()) { return false; } var rcPos2 = id2manPos[element3.id()]; if (rcPos2) { x5 = rcPos2.col * cellWidth + cellWidth / 2 + bb.x1; y6 = rcPos2.row * cellHeight + cellHeight / 2 + bb.y1; } else { while (used(row, col)) { moveToNextCell(); } x5 = col * cellWidth + cellWidth / 2 + bb.x1; y6 = row * cellHeight + cellHeight / 2 + bb.y1; use(row, col); moveToNextCell(); } return { x: x5, y: y6 }; }, "getPos"); nodes5.layoutPositions(this, options2, getPos); } return this; }; defaults$2 = { ready: /* @__PURE__ */ __name(function ready3() { }, "ready"), // on layoutready stop: /* @__PURE__ */ __name(function stop4() { }, "stop") // on layoutstop }; __name(NullLayout, "NullLayout"); NullLayout.prototype.run = function() { var options2 = this.options; var eles = options2.eles; var layout6 = this; options2.cy; layout6.emit("layoutstart"); eles.nodes().positions(function() { return { x: 0, y: 0 }; }); layout6.one("layoutready", options2.ready); layout6.emit("layoutready"); layout6.one("layoutstop", options2.stop); layout6.emit("layoutstop"); return this; }; NullLayout.prototype.stop = function() { return this; }; defaults$1 = { positions: void 0, // map of (node id) => (position obj); or function(node){ return somPos; } zoom: void 0, // the zoom level to set (prob want fit = false if set) pan: void 0, // the pan level to set (prob want fit = false if set) fit: true, // whether to fit to viewport padding: 30, // padding on fit spacingFactor: void 0, // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up animate: false, // whether to transition the node positions animationDuration: 500, // duration of animation in ms if enabled animationEasing: void 0, // easing of animation if enabled animateFilter: /* @__PURE__ */ __name(function animateFilter6(node2, i2) { return true; }, "animateFilter"), // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts ready: void 0, // callback on layoutready stop: void 0, // callback on layoutstop transform: /* @__PURE__ */ __name(function transform6(node2, position5) { return position5; }, "transform") // transform a given node position. Useful for changing flow direction in discrete layouts }; __name(PresetLayout, "PresetLayout"); PresetLayout.prototype.run = function() { var options2 = this.options; var eles = options2.eles; var nodes5 = eles.nodes(); var posIsFn = fn$6(options2.positions); function getPosition(node2) { if (options2.positions == null) { return copyPosition(node2.position()); } if (posIsFn) { return options2.positions(node2); } var pos = options2.positions[node2._private.data.id]; if (pos == null) { return null; } return pos; } __name(getPosition, "getPosition"); nodes5.layoutPositions(this, options2, function(node2, i2) { var position5 = getPosition(node2); if (node2.locked() || position5 == null) { return false; } return position5; }); return this; }; defaults3 = { fit: true, // whether to fit to viewport padding: 30, // fit padding boundingBox: void 0, // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } animate: false, // whether to transition the node positions animationDuration: 500, // duration of animation in ms if enabled animationEasing: void 0, // easing of animation if enabled animateFilter: /* @__PURE__ */ __name(function animateFilter7(node2, i2) { return true; }, "animateFilter"), // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts ready: void 0, // callback on layoutready stop: void 0, // callback on layoutstop transform: /* @__PURE__ */ __name(function transform7(node2, position5) { return position5; }, "transform") // transform a given node position. Useful for changing flow direction in discrete layouts }; __name(RandomLayout, "RandomLayout"); RandomLayout.prototype.run = function() { var options2 = this.options; var cy = options2.cy; var eles = options2.eles; var bb = makeBoundingBox(options2.boundingBox ? options2.boundingBox : { x1: 0, y1: 0, w: cy.width(), h: cy.height() }); var getPos = /* @__PURE__ */ __name(function getPos2(node2, i2) { return { x: bb.x1 + Math.round(Math.random() * bb.w), y: bb.y1 + Math.round(Math.random() * bb.h) }; }, "getPos"); eles.nodes().layoutPositions(this, options2, getPos); return this; }; layout4 = [{ name: "breadthfirst", impl: BreadthFirstLayout }, { name: "circle", impl: CircleLayout }, { name: "concentric", impl: ConcentricLayout }, { name: "cose", impl: CoseLayout }, { name: "grid", impl: GridLayout }, { name: "null", impl: NullLayout }, { name: "preset", impl: PresetLayout }, { name: "random", impl: RandomLayout }]; __name(NullRenderer, "NullRenderer"); noop4 = /* @__PURE__ */ __name(function noop5() { }, "noop"); throwImgErr = /* @__PURE__ */ __name(function throwImgErr2() { throw new Error("A headless instance can not render images"); }, "throwImgErr"); NullRenderer.prototype = { recalculateRenderedStyle: noop4, notify: /* @__PURE__ */ __name(function notify2() { this.notifications++; }, "notify"), init: noop4, isHeadless: /* @__PURE__ */ __name(function isHeadless() { return true; }, "isHeadless"), png: throwImgErr, jpg: throwImgErr }; BRp$f = {}; BRp$f.arrowShapeWidth = 0.3; BRp$f.registerArrowShapes = function() { var arrowShapes = this.arrowShapes = {}; var renderer10 = this; var bbCollide = /* @__PURE__ */ __name(function bbCollide2(x5, y6, size4, angle2, translation, edgeWidth, padding2) { var x1 = translation.x - size4 / 2 - padding2; var x22 = translation.x + size4 / 2 + padding2; var y1 = translation.y - size4 / 2 - padding2; var y22 = translation.y + size4 / 2 + padding2; var inside = x1 <= x5 && x5 <= x22 && y1 <= y6 && y6 <= y22; return inside; }, "bbCollide"); var transform8 = /* @__PURE__ */ __name(function transform9(x5, y6, size4, angle2, translation) { var xRotated = x5 * Math.cos(angle2) - y6 * Math.sin(angle2); var yRotated = x5 * Math.sin(angle2) + y6 * Math.cos(angle2); var xScaled = xRotated * size4; var yScaled = yRotated * size4; var xTranslated = xScaled + translation.x; var yTranslated = yScaled + translation.y; return { x: xTranslated, y: yTranslated }; }, "transform"); var transformPoints3 = /* @__PURE__ */ __name(function transformPoints4(pts2, size4, angle2, translation) { var retPts = []; for (var i2 = 0; i2 < pts2.length; i2 += 2) { var x5 = pts2[i2]; var y6 = pts2[i2 + 1]; retPts.push(transform8(x5, y6, size4, angle2, translation)); } return retPts; }, "transformPoints"); var pointsToArr = /* @__PURE__ */ __name(function pointsToArr2(pts2) { var ret = []; for (var i2 = 0; i2 < pts2.length; i2++) { var p3 = pts2[i2]; ret.push(p3.x, p3.y); } return ret; }, "pointsToArr"); var standardGap = /* @__PURE__ */ __name(function standardGap2(edge) { return edge.pstyle("width").pfValue * edge.pstyle("arrow-scale").pfValue * 2; }, "standardGap"); var defineArrowShape = /* @__PURE__ */ __name(function defineArrowShape2(name, defn) { if (string(defn)) { defn = arrowShapes[defn]; } arrowShapes[name] = extend4({ name, points: [-0.15, -0.3, 0.15, -0.3, 0.15, 0.3, -0.15, 0.3], collide: /* @__PURE__ */ __name(function collide(x5, y6, size4, angle2, translation, padding2) { var points = pointsToArr(transformPoints3(this.points, size4 + 2 * padding2, angle2, translation)); var inside = pointInsidePolygonPoints(x5, y6, points); return inside; }, "collide"), roughCollide: bbCollide, draw: /* @__PURE__ */ __name(function draw26(context, size4, angle2, translation) { var points = transformPoints3(this.points, size4, angle2, translation); renderer10.arrowShapeImpl("polygon")(context, points); }, "draw"), spacing: /* @__PURE__ */ __name(function spacing2(edge) { return 0; }, "spacing"), gap: standardGap }, defn); }, "defineArrowShape"); defineArrowShape("none", { collide: falsify, roughCollide: falsify, draw: noop$1, spacing: zeroify, gap: zeroify }); defineArrowShape("triangle", { points: [-0.15, -0.3, 0, 0, 0.15, -0.3] }); defineArrowShape("arrow", "triangle"); defineArrowShape("triangle-backcurve", { points: arrowShapes["triangle"].points, controlPoint: [0, -0.15], roughCollide: bbCollide, draw: /* @__PURE__ */ __name(function draw26(context, size4, angle2, translation, edgeWidth) { var ptsTrans = transformPoints3(this.points, size4, angle2, translation); var ctrlPt = this.controlPoint; var ctrlPtTrans = transform8(ctrlPt[0], ctrlPt[1], size4, angle2, translation); renderer10.arrowShapeImpl(this.name)(context, ptsTrans, ctrlPtTrans); }, "draw"), gap: /* @__PURE__ */ __name(function gap(edge) { return standardGap(edge) * 0.8; }, "gap") }); defineArrowShape("triangle-tee", { points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0], pointsTee: [-0.15, -0.4, -0.15, -0.5, 0.15, -0.5, 0.15, -0.4], collide: /* @__PURE__ */ __name(function collide(x5, y6, size4, angle2, translation, edgeWidth, padding2) { var triPts = pointsToArr(transformPoints3(this.points, size4 + 2 * padding2, angle2, translation)); var teePts = pointsToArr(transformPoints3(this.pointsTee, size4 + 2 * padding2, angle2, translation)); var inside = pointInsidePolygonPoints(x5, y6, triPts) || pointInsidePolygonPoints(x5, y6, teePts); return inside; }, "collide"), draw: /* @__PURE__ */ __name(function draw26(context, size4, angle2, translation, edgeWidth) { var triPts = transformPoints3(this.points, size4, angle2, translation); var teePts = transformPoints3(this.pointsTee, size4, angle2, translation); renderer10.arrowShapeImpl(this.name)(context, triPts, teePts); }, "draw") }); defineArrowShape("circle-triangle", { radius: 0.15, pointsTr: [0, -0.15, 0.15, -0.45, -0.15, -0.45, 0, -0.15], collide: /* @__PURE__ */ __name(function collide(x5, y6, size4, angle2, translation, edgeWidth, padding2) { var t4 = translation; var circleInside = Math.pow(t4.x - x5, 2) + Math.pow(t4.y - y6, 2) <= Math.pow((size4 + 2 * padding2) * this.radius, 2); var triPts = pointsToArr(transformPoints3(this.points, size4 + 2 * padding2, angle2, translation)); return pointInsidePolygonPoints(x5, y6, triPts) || circleInside; }, "collide"), draw: /* @__PURE__ */ __name(function draw26(context, size4, angle2, translation, edgeWidth) { var triPts = transformPoints3(this.pointsTr, size4, angle2, translation); renderer10.arrowShapeImpl(this.name)(context, triPts, translation.x, translation.y, this.radius * size4); }, "draw"), spacing: /* @__PURE__ */ __name(function spacing2(edge) { return renderer10.getArrowWidth(edge.pstyle("width").pfValue, edge.pstyle("arrow-scale").value) * this.radius; }, "spacing") }); defineArrowShape("triangle-cross", { points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0], baseCrossLinePts: [ -0.15, -0.4, // first half of the rectangle -0.15, -0.4, 0.15, -0.4, // second half of the rectangle 0.15, -0.4 ], crossLinePts: /* @__PURE__ */ __name(function crossLinePts(size4, edgeWidth) { var p3 = this.baseCrossLinePts.slice(); var shiftFactor = edgeWidth / size4; var y0 = 3; var y1 = 5; p3[y0] = p3[y0] - shiftFactor; p3[y1] = p3[y1] - shiftFactor; return p3; }, "crossLinePts"), collide: /* @__PURE__ */ __name(function collide(x5, y6, size4, angle2, translation, edgeWidth, padding2) { var triPts = pointsToArr(transformPoints3(this.points, size4 + 2 * padding2, angle2, translation)); var teePts = pointsToArr(transformPoints3(this.crossLinePts(size4, edgeWidth), size4 + 2 * padding2, angle2, translation)); var inside = pointInsidePolygonPoints(x5, y6, triPts) || pointInsidePolygonPoints(x5, y6, teePts); return inside; }, "collide"), draw: /* @__PURE__ */ __name(function draw26(context, size4, angle2, translation, edgeWidth) { var triPts = transformPoints3(this.points, size4, angle2, translation); var crossLinePts = transformPoints3(this.crossLinePts(size4, edgeWidth), size4, angle2, translation); renderer10.arrowShapeImpl(this.name)(context, triPts, crossLinePts); }, "draw") }); defineArrowShape("vee", { points: [-0.15, -0.3, 0, 0, 0.15, -0.3, 0, -0.15], gap: /* @__PURE__ */ __name(function gap(edge) { return standardGap(edge) * 0.525; }, "gap") }); defineArrowShape("circle", { radius: 0.15, collide: /* @__PURE__ */ __name(function collide(x5, y6, size4, angle2, translation, edgeWidth, padding2) { var t4 = translation; var inside = Math.pow(t4.x - x5, 2) + Math.pow(t4.y - y6, 2) <= Math.pow((size4 + 2 * padding2) * this.radius, 2); return inside; }, "collide"), draw: /* @__PURE__ */ __name(function draw26(context, size4, angle2, translation, edgeWidth) { renderer10.arrowShapeImpl(this.name)(context, translation.x, translation.y, this.radius * size4); }, "draw"), spacing: /* @__PURE__ */ __name(function spacing2(edge) { return renderer10.getArrowWidth(edge.pstyle("width").pfValue, edge.pstyle("arrow-scale").value) * this.radius; }, "spacing") }); defineArrowShape("tee", { points: [-0.15, 0, -0.15, -0.1, 0.15, -0.1, 0.15, 0], spacing: /* @__PURE__ */ __name(function spacing2(edge) { return 1; }, "spacing"), gap: /* @__PURE__ */ __name(function gap(edge) { return 1; }, "gap") }); defineArrowShape("square", { points: [-0.15, 0, 0.15, 0, 0.15, -0.3, -0.15, -0.3] }); defineArrowShape("diamond", { points: [-0.15, -0.15, 0, -0.3, 0.15, -0.15, 0, 0], gap: /* @__PURE__ */ __name(function gap(edge) { return edge.pstyle("width").pfValue * edge.pstyle("arrow-scale").value; }, "gap") }); defineArrowShape("chevron", { points: [0, 0, -0.15, -0.15, -0.1, -0.2, 0, -0.1, 0.1, -0.2, 0.15, -0.15], gap: /* @__PURE__ */ __name(function gap(edge) { return 0.95 * edge.pstyle("width").pfValue * edge.pstyle("arrow-scale").value; }, "gap") }); }; BRp$e = {}; BRp$e.projectIntoViewport = function(clientX, clientY) { var cy = this.cy; var offsets = this.findContainerClientCoords(); var offsetLeft = offsets[0]; var offsetTop = offsets[1]; var scale2 = offsets[4]; var pan2 = cy.pan(); var zoom2 = cy.zoom(); var x5 = ((clientX - offsetLeft) / scale2 - pan2.x) / zoom2; var y6 = ((clientY - offsetTop) / scale2 - pan2.y) / zoom2; return [x5, y6]; }; BRp$e.findContainerClientCoords = function() { if (this.containerBB) { return this.containerBB; } var container2 = this.container; var rect3 = container2.getBoundingClientRect(); var style3 = this.cy.window().getComputedStyle(container2); var styleValue2 = /* @__PURE__ */ __name(function styleValue3(name) { return parseFloat(style3.getPropertyValue(name)); }, "styleValue"); var padding2 = { left: styleValue2("padding-left"), right: styleValue2("padding-right"), top: styleValue2("padding-top"), bottom: styleValue2("padding-bottom") }; var border = { left: styleValue2("border-left-width"), right: styleValue2("border-right-width"), top: styleValue2("border-top-width"), bottom: styleValue2("border-bottom-width") }; var clientWidth = container2.clientWidth; var clientHeight = container2.clientHeight; var paddingHor = padding2.left + padding2.right; var paddingVer = padding2.top + padding2.bottom; var borderHor = border.left + border.right; var scale2 = rect3.width / (clientWidth + borderHor); var unscaledW = clientWidth - paddingHor; var unscaledH = clientHeight - paddingVer; var left3 = rect3.left + padding2.left + border.left; var top2 = rect3.top + padding2.top + border.top; return this.containerBB = [left3, top2, unscaledW, unscaledH, scale2]; }; BRp$e.invalidateContainerClientCoordsCache = function() { this.containerBB = null; }; BRp$e.findNearestElement = function(x5, y6, interactiveElementsOnly, isTouch) { return this.findNearestElements(x5, y6, interactiveElementsOnly, isTouch)[0]; }; BRp$e.findNearestElements = function(x5, y6, interactiveElementsOnly, isTouch) { var self2 = this; var r2 = this; var eles = r2.getCachedZSortedEles(); var near = []; var zoom2 = r2.cy.zoom(); var hasCompounds = r2.cy.hasCompoundNodes(); var edgeThreshold = (isTouch ? 24 : 8) / zoom2; var nodeThreshold = (isTouch ? 8 : 2) / zoom2; var labelThreshold = (isTouch ? 8 : 2) / zoom2; var minSqDist = Infinity; var nearEdge; var nearNode; if (interactiveElementsOnly) { eles = eles.interactive; } function addEle(ele2, sqDist) { if (ele2.isNode()) { if (nearNode) { return; } else { nearNode = ele2; near.push(ele2); } } if (ele2.isEdge() && (sqDist == null || sqDist < minSqDist)) { if (nearEdge) { if (nearEdge.pstyle("z-compound-depth").value === ele2.pstyle("z-compound-depth").value && nearEdge.pstyle("z-compound-depth").value === ele2.pstyle("z-compound-depth").value) { for (var i3 = 0; i3 < near.length; i3++) { if (near[i3].isEdge()) { near[i3] = ele2; nearEdge = ele2; minSqDist = sqDist != null ? sqDist : minSqDist; break; } } } } else { near.push(ele2); nearEdge = ele2; minSqDist = sqDist != null ? sqDist : minSqDist; } } } __name(addEle, "addEle"); function checkNode(node2) { var width3 = node2.outerWidth() + 2 * nodeThreshold; var height2 = node2.outerHeight() + 2 * nodeThreshold; var hw = width3 / 2; var hh = height2 / 2; var pos = node2.position(); var cornerRadius = node2.pstyle("corner-radius").value === "auto" ? "auto" : node2.pstyle("corner-radius").pfValue; var rs = node2._private.rscratch; if (pos.x - hw <= x5 && x5 <= pos.x + hw && pos.y - hh <= y6 && y6 <= pos.y + hh) { var shape = r2.nodeShapes[self2.getNodeShape(node2)]; if (shape.checkPoint(x5, y6, 0, width3, height2, pos.x, pos.y, cornerRadius, rs)) { addEle(node2, 0); return true; } } } __name(checkNode, "checkNode"); function checkEdge(edge) { var _p = edge._private; var rs = _p.rscratch; var styleWidth = edge.pstyle("width").pfValue; var scale2 = edge.pstyle("arrow-scale").value; var width3 = styleWidth / 2 + edgeThreshold; var widthSq = width3 * width3; var width22 = width3 * 2; var src = _p.source; var tgt = _p.target; var sqDist; if (rs.edgeType === "segments" || rs.edgeType === "straight" || rs.edgeType === "haystack") { var pts2 = rs.allpts; for (var i3 = 0; i3 + 3 < pts2.length; i3 += 2) { if (inLineVicinity(x5, y6, pts2[i3], pts2[i3 + 1], pts2[i3 + 2], pts2[i3 + 3], width22) && widthSq > (sqDist = sqdistToFiniteLine(x5, y6, pts2[i3], pts2[i3 + 1], pts2[i3 + 2], pts2[i3 + 3]))) { addEle(edge, sqDist); return true; } } } else if (rs.edgeType === "bezier" || rs.edgeType === "multibezier" || rs.edgeType === "self" || rs.edgeType === "compound") { var pts2 = rs.allpts; for (var i3 = 0; i3 + 5 < rs.allpts.length; i3 += 4) { if (inBezierVicinity(x5, y6, pts2[i3], pts2[i3 + 1], pts2[i3 + 2], pts2[i3 + 3], pts2[i3 + 4], pts2[i3 + 5], width22) && widthSq > (sqDist = sqdistToQuadraticBezier(x5, y6, pts2[i3], pts2[i3 + 1], pts2[i3 + 2], pts2[i3 + 3], pts2[i3 + 4], pts2[i3 + 5]))) { addEle(edge, sqDist); return true; } } } var src = src || _p.source; var tgt = tgt || _p.target; var arSize = self2.getArrowWidth(styleWidth, scale2); var arrows = [{ name: "source", x: rs.arrowStartX, y: rs.arrowStartY, angle: rs.srcArrowAngle }, { name: "target", x: rs.arrowEndX, y: rs.arrowEndY, angle: rs.tgtArrowAngle }, { name: "mid-source", x: rs.midX, y: rs.midY, angle: rs.midsrcArrowAngle }, { name: "mid-target", x: rs.midX, y: rs.midY, angle: rs.midtgtArrowAngle }]; for (var i3 = 0; i3 < arrows.length; i3++) { var ar = arrows[i3]; var shape = r2.arrowShapes[edge.pstyle(ar.name + "-arrow-shape").value]; var edgeWidth = edge.pstyle("width").pfValue; if (shape.roughCollide(x5, y6, arSize, ar.angle, { x: ar.x, y: ar.y }, edgeWidth, edgeThreshold) && shape.collide(x5, y6, arSize, ar.angle, { x: ar.x, y: ar.y }, edgeWidth, edgeThreshold)) { addEle(edge); return true; } } if (hasCompounds && near.length > 0) { checkNode(src); checkNode(tgt); } } __name(checkEdge, "checkEdge"); function preprop(obj, name, pre) { return getPrefixedProperty(obj, name, pre); } __name(preprop, "preprop"); function checkLabel(ele2, prefix) { var _p = ele2._private; var th = labelThreshold; var prefixDash; if (prefix) { prefixDash = prefix + "-"; } else { prefixDash = ""; } ele2.boundingBox(); var bb = _p.labelBounds[prefix || "main"]; var text4 = ele2.pstyle(prefixDash + "label").value; var eventsEnabled = ele2.pstyle("text-events").strValue === "yes"; if (!eventsEnabled || !text4) { return; } var lx = preprop(_p.rscratch, "labelX", prefix); var ly = preprop(_p.rscratch, "labelY", prefix); var theta = preprop(_p.rscratch, "labelAngle", prefix); var ox = ele2.pstyle(prefixDash + "text-margin-x").pfValue; var oy = ele2.pstyle(prefixDash + "text-margin-y").pfValue; var lx1 = bb.x1 - th - ox; var lx2 = bb.x2 + th - ox; var ly1 = bb.y1 - th - oy; var ly2 = bb.y2 + th - oy; if (theta) { var cos3 = Math.cos(theta); var sin3 = Math.sin(theta); var rotate2 = /* @__PURE__ */ __name(function rotate3(x6, y7) { x6 = x6 - lx; y7 = y7 - ly; return { x: x6 * cos3 - y7 * sin3 + lx, y: x6 * sin3 + y7 * cos3 + ly }; }, "rotate"); var px1y1 = rotate2(lx1, ly1); var px1y2 = rotate2(lx1, ly2); var px2y1 = rotate2(lx2, ly1); var px2y2 = rotate2(lx2, ly2); var points = [ // with the margin added after the rotation is applied px1y1.x + ox, px1y1.y + oy, px2y1.x + ox, px2y1.y + oy, px2y2.x + ox, px2y2.y + oy, px1y2.x + ox, px1y2.y + oy ]; if (pointInsidePolygonPoints(x5, y6, points)) { addEle(ele2); return true; } } else { if (inBoundingBox(bb, x5, y6)) { addEle(ele2); return true; } } } __name(checkLabel, "checkLabel"); for (var i2 = eles.length - 1; i2 >= 0; i2--) { var ele = eles[i2]; if (ele.isNode()) { checkNode(ele) || checkLabel(ele); } else { checkEdge(ele) || checkLabel(ele) || checkLabel(ele, "source") || checkLabel(ele, "target"); } } return near; }; BRp$e.getAllInBox = function(x1, y1, x22, y22) { var eles = this.getCachedZSortedEles().interactive; var zoom2 = this.cy.zoom(); var labelThreshold = 2 / zoom2; var box = []; var x1c = Math.min(x1, x22); var x2c = Math.max(x1, x22); var y1c = Math.min(y1, y22); var y2c = Math.max(y1, y22); x1 = x1c; x22 = x2c; y1 = y1c; y22 = y2c; var boxBb = makeBoundingBox({ x1, y1, x2: x22, y2: y22 }); var selectionBox = [{ x: boxBb.x1, y: boxBb.y1 }, { x: boxBb.x2, y: boxBb.y1 }, { x: boxBb.x2, y: boxBb.y2 }, { x: boxBb.x1, y: boxBb.y2 }]; var boxEdges = [[selectionBox[0], selectionBox[1]], [selectionBox[1], selectionBox[2]], [selectionBox[2], selectionBox[3]], [selectionBox[3], selectionBox[0]]]; function preprop(obj, name, pre) { return getPrefixedProperty(obj, name, pre); } __name(preprop, "preprop"); function getRotatedLabelBox(ele2, prefix) { var _p2 = ele2._private; var th = labelThreshold; var prefixDash = ""; ele2.boundingBox(); var bb = _p2.labelBounds["main"]; if (!bb) { return null; } var lx = preprop(_p2.rscratch, "labelX", prefix); var ly = preprop(_p2.rscratch, "labelY", prefix); var theta = preprop(_p2.rscratch, "labelAngle", prefix); var ox = ele2.pstyle(prefixDash + "text-margin-x").pfValue; var oy = ele2.pstyle(prefixDash + "text-margin-y").pfValue; var lx1 = bb.x1 - th - ox; var lx2 = bb.x2 + th - ox; var ly1 = bb.y1 - th - oy; var ly2 = bb.y2 + th - oy; if (theta) { var cos3 = Math.cos(theta); var sin3 = Math.sin(theta); var rotate2 = /* @__PURE__ */ __name(function rotate3(x5, y6) { x5 = x5 - lx; y6 = y6 - ly; return { x: x5 * cos3 - y6 * sin3 + lx, y: x5 * sin3 + y6 * cos3 + ly }; }, "rotate"); return [rotate2(lx1, ly1), rotate2(lx2, ly1), rotate2(lx2, ly2), rotate2(lx1, ly2)]; } else { return [{ x: lx1, y: ly1 }, { x: lx2, y: ly1 }, { x: lx2, y: ly2 }, { x: lx1, y: ly2 }]; } } __name(getRotatedLabelBox, "getRotatedLabelBox"); function doLinesIntersect(p1, p22, q1, q22) { function ccw(a2, b4, c3) { return (c3.y - a2.y) * (b4.x - a2.x) > (b4.y - a2.y) * (c3.x - a2.x); } __name(ccw, "ccw"); return ccw(p1, q1, q22) !== ccw(p22, q1, q22) && ccw(p1, p22, q1) !== ccw(p1, p22, q22); } __name(doLinesIntersect, "doLinesIntersect"); for (var e3 = 0; e3 < eles.length; e3++) { var ele = eles[e3]; if (ele.isNode()) { var node2 = ele; var textEvents = node2.pstyle("text-events").strValue === "yes"; var nodeBoxSelectMode = node2.pstyle("box-selection").strValue; var labelBoxSelectEnabled = node2.pstyle("box-select-labels").strValue === "yes"; if (nodeBoxSelectMode === "none") { continue; } var includeLabels = (nodeBoxSelectMode === "overlap" || labelBoxSelectEnabled) && textEvents; var nodeBb = node2.boundingBox({ includeNodes: true, includeEdges: false, includeLabels }); if (nodeBoxSelectMode === "contain") { var selected = false; if (labelBoxSelectEnabled && textEvents) { var rotatedLabelBox = getRotatedLabelBox(node2); if (rotatedLabelBox && satPolygonIntersection(rotatedLabelBox, selectionBox)) { box.push(node2); selected = true; } } if (!selected && boundingBoxInBoundingBox(boxBb, nodeBb)) { box.push(node2); } } else if (nodeBoxSelectMode === "overlap") { if (boundingBoxesIntersect(boxBb, nodeBb)) { var nodeBodyBb = node2.boundingBox({ includeNodes: true, includeEdges: true, includeLabels: false, includeMainLabels: false, includeSourceLabels: false, includeTargetLabels: false }); var nodeBodyCorners = [{ x: nodeBodyBb.x1, y: nodeBodyBb.y1 }, { x: nodeBodyBb.x2, y: nodeBodyBb.y1 }, { x: nodeBodyBb.x2, y: nodeBodyBb.y2 }, { x: nodeBodyBb.x1, y: nodeBodyBb.y2 }]; if (satPolygonIntersection(nodeBodyCorners, selectionBox)) { box.push(node2); } else { var _rotatedLabelBox = getRotatedLabelBox(node2); if (_rotatedLabelBox && satPolygonIntersection(_rotatedLabelBox, selectionBox)) { box.push(node2); } } } } } else { var edge = ele; var _p = edge._private; var rs = _p.rscratch; var edgeBoxSelectMode = edge.pstyle("box-selection").strValue; if (edgeBoxSelectMode === "none") { continue; } if (edgeBoxSelectMode === "contain") { if (rs.startX != null && rs.startY != null && !inBoundingBox(boxBb, rs.startX, rs.startY)) { continue; } if (rs.endX != null && rs.endY != null && !inBoundingBox(boxBb, rs.endX, rs.endY)) { continue; } if (rs.edgeType === "bezier" || rs.edgeType === "multibezier" || rs.edgeType === "self" || rs.edgeType === "compound" || rs.edgeType === "segments" || rs.edgeType === "haystack") { var pts2 = _p.rstyle.bezierPts || _p.rstyle.linePts || _p.rstyle.haystackPts; var allInside = true; for (var i2 = 0; i2 < pts2.length; i2++) { if (!pointInBoundingBox(boxBb, pts2[i2])) { allInside = false; break; } } if (allInside) { box.push(edge); } } else if (rs.edgeType === "straight") { box.push(edge); } } else if (edgeBoxSelectMode === "overlap") { var _selected = false; if (rs.startX != null && rs.startY != null && rs.endX != null && rs.endY != null && (inBoundingBox(boxBb, rs.startX, rs.startY) || inBoundingBox(boxBb, rs.endX, rs.endY))) { box.push(edge); _selected = true; } else if (!_selected && rs.edgeType === "haystack") { var haystackPts = _p.rstyle.haystackPts; for (var _i = 0; _i < haystackPts.length; _i++) { if (pointInBoundingBox(boxBb, haystackPts[_i])) { box.push(edge); _selected = true; break; } } } if (!_selected) { var _pts = _p.rstyle.bezierPts || _p.rstyle.linePts || _p.rstyle.haystackPts; if ((!_pts || _pts.length < 2) && rs.edgeType === "straight") { if (rs.startX != null && rs.startY != null && rs.endX != null && rs.endY != null) { _pts = [{ x: rs.startX, y: rs.startY }, { x: rs.endX, y: rs.endY }]; } } if (!_pts || _pts.length < 2) continue; for (var _i2 = 0; _i2 < _pts.length - 1; _i2++) { var segStart = _pts[_i2]; var segEnd = _pts[_i2 + 1]; for (var b3 = 0; b3 < boxEdges.length; b3++) { var _boxEdges$b = _slicedToArray(boxEdges[b3], 2), boxStart = _boxEdges$b[0], boxEnd = _boxEdges$b[1]; if (doLinesIntersect(segStart, segEnd, boxStart, boxEnd)) { box.push(edge); _selected = true; break; } } if (_selected) break; } } } } } return box; }; BRp$d = {}; BRp$d.calculateArrowAngles = function(edge) { var rs = edge._private.rscratch; var isHaystack = rs.edgeType === "haystack"; var isBezier = rs.edgeType === "bezier"; var isMultibezier = rs.edgeType === "multibezier"; var isSegments = rs.edgeType === "segments"; var isCompound = rs.edgeType === "compound"; var isSelf = rs.edgeType === "self"; var dispX, dispY; var startX2, startY2, endX, endY, midX, midY; if (isHaystack) { startX2 = rs.haystackPts[0]; startY2 = rs.haystackPts[1]; endX = rs.haystackPts[2]; endY = rs.haystackPts[3]; } else { startX2 = rs.arrowStartX; startY2 = rs.arrowStartY; endX = rs.arrowEndX; endY = rs.arrowEndY; } midX = rs.midX; midY = rs.midY; if (isSegments) { dispX = startX2 - rs.segpts[0]; dispY = startY2 - rs.segpts[1]; } else if (isMultibezier || isCompound || isSelf || isBezier) { var pts2 = rs.allpts; var bX = qbezierAt(pts2[0], pts2[2], pts2[4], 0.1); var bY = qbezierAt(pts2[1], pts2[3], pts2[5], 0.1); dispX = startX2 - bX; dispY = startY2 - bY; } else { dispX = startX2 - midX; dispY = startY2 - midY; } rs.srcArrowAngle = getAngleFromDisp(dispX, dispY); var midX = rs.midX; var midY = rs.midY; if (isHaystack) { midX = (startX2 + endX) / 2; midY = (startY2 + endY) / 2; } dispX = endX - startX2; dispY = endY - startY2; if (isSegments) { var pts2 = rs.allpts; if (pts2.length / 2 % 2 === 0) { var i2 = pts2.length / 2; var i1 = i2 - 2; dispX = pts2[i2] - pts2[i1]; dispY = pts2[i2 + 1] - pts2[i1 + 1]; } else if (rs.isRound) { dispX = rs.midVector[1]; dispY = -rs.midVector[0]; } else { var i2 = pts2.length / 2 - 1; var i1 = i2 - 2; dispX = pts2[i2] - pts2[i1]; dispY = pts2[i2 + 1] - pts2[i1 + 1]; } } else if (isMultibezier || isCompound || isSelf) { var pts2 = rs.allpts; var cpts = rs.ctrlpts; var bp0x, bp0y; var bp1x, bp1y; if (cpts.length / 2 % 2 === 0) { var p0 = pts2.length / 2 - 1; var ic = p0 + 2; var p1 = ic + 2; bp0x = qbezierAt(pts2[p0], pts2[ic], pts2[p1], 0); bp0y = qbezierAt(pts2[p0 + 1], pts2[ic + 1], pts2[p1 + 1], 0); bp1x = qbezierAt(pts2[p0], pts2[ic], pts2[p1], 1e-4); bp1y = qbezierAt(pts2[p0 + 1], pts2[ic + 1], pts2[p1 + 1], 1e-4); } else { var ic = pts2.length / 2 - 1; var p0 = ic - 2; var p1 = ic + 2; bp0x = qbezierAt(pts2[p0], pts2[ic], pts2[p1], 0.4999); bp0y = qbezierAt(pts2[p0 + 1], pts2[ic + 1], pts2[p1 + 1], 0.4999); bp1x = qbezierAt(pts2[p0], pts2[ic], pts2[p1], 0.5); bp1y = qbezierAt(pts2[p0 + 1], pts2[ic + 1], pts2[p1 + 1], 0.5); } dispX = bp1x - bp0x; dispY = bp1y - bp0y; } rs.midtgtArrowAngle = getAngleFromDisp(dispX, dispY); rs.midDispX = dispX; rs.midDispY = dispY; dispX *= -1; dispY *= -1; if (isSegments) { var pts2 = rs.allpts; if (pts2.length / 2 % 2 === 0) ; else if (!rs.isRound) { var i2 = pts2.length / 2 - 1; var i3 = i2 + 2; dispX = -(pts2[i3] - pts2[i2]); dispY = -(pts2[i3 + 1] - pts2[i2 + 1]); } } rs.midsrcArrowAngle = getAngleFromDisp(dispX, dispY); if (isSegments) { dispX = endX - rs.segpts[rs.segpts.length - 2]; dispY = endY - rs.segpts[rs.segpts.length - 1]; } else if (isMultibezier || isCompound || isSelf || isBezier) { var pts2 = rs.allpts; var l4 = pts2.length; var bX = qbezierAt(pts2[l4 - 6], pts2[l4 - 4], pts2[l4 - 2], 0.9); var bY = qbezierAt(pts2[l4 - 5], pts2[l4 - 3], pts2[l4 - 1], 0.9); dispX = endX - bX; dispY = endY - bY; } else { dispX = endX - midX; dispY = endY - midY; } rs.tgtArrowAngle = getAngleFromDisp(dispX, dispY); }; BRp$d.getArrowWidth = BRp$d.getArrowHeight = function(edgeWidth, scale2) { var cache3 = this.arrowWidthCache = this.arrowWidthCache || {}; var cachedVal = cache3[edgeWidth + ", " + scale2]; if (cachedVal) { return cachedVal; } cachedVal = Math.max(Math.pow(edgeWidth * 13.37, 0.9), 29) * scale2; cache3[edgeWidth + ", " + scale2] = cachedVal; return cachedVal; }; v1 = {}; v22 = {}; asVec = /* @__PURE__ */ __name(function asVec2(p3, pp, v3) { v3.x = pp.x - p3.x; v3.y = pp.y - p3.y; v3.len = Math.sqrt(v3.x * v3.x + v3.y * v3.y); v3.nx = v3.x / v3.len; v3.ny = v3.y / v3.len; v3.ang = Math.atan2(v3.ny, v3.nx); }, "asVec"); invertVec = /* @__PURE__ */ __name(function invertVec2(originalV, invertedV) { invertedV.x = originalV.x * -1; invertedV.y = originalV.y * -1; invertedV.nx = originalV.nx * -1; invertedV.ny = originalV.ny * -1; invertedV.ang = originalV.ang > 0 ? -(Math.PI - originalV.ang) : Math.PI + originalV.ang; }, "invertVec"); calcCornerArc = /* @__PURE__ */ __name(function calcCornerArc2(previousPoint, currentPoint, nextPoint, radiusMax, isArcRadius) { previousPoint !== lastPoint ? asVec(currentPoint, previousPoint, v1) : invertVec(v22, v1); asVec(currentPoint, nextPoint, v22); sinA = v1.nx * v22.ny - v1.ny * v22.nx; sinA90 = v1.nx * v22.nx - v1.ny * -v22.ny; angle = Math.asin(Math.max(-1, Math.min(1, sinA))); if (Math.abs(angle) < 1e-6) { x3 = currentPoint.x; y4 = currentPoint.y; cRadius = radius = 0; return; } radDirection = 1; drawDirection = false; if (sinA90 < 0) { if (angle < 0) { angle = Math.PI + angle; } else { angle = Math.PI - angle; radDirection = -1; drawDirection = true; } } else { if (angle > 0) { radDirection = -1; drawDirection = true; } } if (currentPoint.radius !== void 0) { radius = currentPoint.radius; } else { radius = radiusMax; } halfAngle = angle / 2; limit = Math.min(v1.len / 2, v22.len / 2); if (isArcRadius) { lenOut = Math.abs(Math.cos(halfAngle) * radius / Math.sin(halfAngle)); if (lenOut > limit) { lenOut = limit; cRadius = Math.abs(lenOut * Math.sin(halfAngle) / Math.cos(halfAngle)); } else { cRadius = radius; } } else { lenOut = Math.min(limit, radius); cRadius = Math.abs(lenOut * Math.sin(halfAngle) / Math.cos(halfAngle)); } stopX = currentPoint.x + v22.nx * lenOut; stopY = currentPoint.y + v22.ny * lenOut; x3 = stopX - v22.ny * cRadius * radDirection; y4 = stopY + v22.nx * cRadius * radDirection; startX = currentPoint.x + v1.nx * lenOut; startY = currentPoint.y + v1.ny * lenOut; lastPoint = currentPoint; }, "calcCornerArc"); __name(drawPreparedRoundCorner, "drawPreparedRoundCorner"); __name(getRoundCorner, "getRoundCorner"); AVOID_IMPOSSIBLE_BEZIER_CONSTANT = 0.01; AVOID_IMPOSSIBLE_BEZIER_CONSTANT_L = Math.sqrt(2 * AVOID_IMPOSSIBLE_BEZIER_CONSTANT); BRp$c = {}; BRp$c.findMidptPtsEtc = function(edge, pairInfo) { var posPts = pairInfo.posPts, intersectionPts = pairInfo.intersectionPts, vectorNormInverse = pairInfo.vectorNormInverse; var midptPts; var srcManEndpt = edge.pstyle("source-endpoint"); var tgtManEndpt = edge.pstyle("target-endpoint"); var haveManualEndPts = srcManEndpt.units != null && tgtManEndpt.units != null; var recalcVectorNormInverse = /* @__PURE__ */ __name(function recalcVectorNormInverse2(x12, y12, x23, y23) { var dy = y23 - y12; var dx = x23 - x12; var l4 = Math.sqrt(dx * dx + dy * dy); return { x: -dy / l4, y: dx / l4 }; }, "recalcVectorNormInverse"); var edgeDistances = edge.pstyle("edge-distances").value; switch (edgeDistances) { case "node-position": midptPts = posPts; break; case "intersection": midptPts = intersectionPts; break; case "endpoints": { if (haveManualEndPts) { var _this$manualEndptToPx = this.manualEndptToPx(edge.source()[0], srcManEndpt), _this$manualEndptToPx2 = _slicedToArray(_this$manualEndptToPx, 2), x1 = _this$manualEndptToPx2[0], y1 = _this$manualEndptToPx2[1]; var _this$manualEndptToPx3 = this.manualEndptToPx(edge.target()[0], tgtManEndpt), _this$manualEndptToPx4 = _slicedToArray(_this$manualEndptToPx3, 2), x22 = _this$manualEndptToPx4[0], y22 = _this$manualEndptToPx4[1]; var endPts = { x1, y1, x2: x22, y2: y22 }; vectorNormInverse = recalcVectorNormInverse(x1, y1, x22, y22); midptPts = endPts; } else { warn("Edge ".concat(edge.id(), " has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")); midptPts = intersectionPts; } break; } } return { midptPts, vectorNormInverse }; }; BRp$c.findHaystackPoints = function(edges3) { for (var i2 = 0; i2 < edges3.length; i2++) { var edge = edges3[i2]; var _p = edge._private; var rs = _p.rscratch; if (!rs.haystack) { var angle2 = Math.random() * 2 * Math.PI; rs.source = { x: Math.cos(angle2), y: Math.sin(angle2) }; angle2 = Math.random() * 2 * Math.PI; rs.target = { x: Math.cos(angle2), y: Math.sin(angle2) }; } var src = _p.source; var tgt = _p.target; var srcPos = src.position(); var tgtPos = tgt.position(); var srcW = src.width(); var tgtW = tgt.width(); var srcH = src.height(); var tgtH = tgt.height(); var radius2 = edge.pstyle("haystack-radius").value; var halfRadius = radius2 / 2; rs.haystackPts = rs.allpts = [rs.source.x * srcW * halfRadius + srcPos.x, rs.source.y * srcH * halfRadius + srcPos.y, rs.target.x * tgtW * halfRadius + tgtPos.x, rs.target.y * tgtH * halfRadius + tgtPos.y]; rs.midX = (rs.allpts[0] + rs.allpts[2]) / 2; rs.midY = (rs.allpts[1] + rs.allpts[3]) / 2; rs.edgeType = "haystack"; rs.haystack = true; this.storeEdgeProjections(edge); this.calculateArrowAngles(edge); this.recalculateEdgeLabelProjections(edge); this.calculateLabelAngles(edge); } }; BRp$c.findSegmentsPoints = function(edge, pairInfo) { var rs = edge._private.rscratch; var segmentWs = edge.pstyle("segment-weights"); var segmentDs = edge.pstyle("segment-distances"); var segmentRs = edge.pstyle("segment-radii"); var segmentTs = edge.pstyle("radius-type"); var segmentsN = Math.min(segmentWs.pfValue.length, segmentDs.pfValue.length); var lastRadius = segmentRs.pfValue[segmentRs.pfValue.length - 1]; var lastRadiusType = segmentTs.pfValue[segmentTs.pfValue.length - 1]; rs.edgeType = "segments"; rs.segpts = []; rs.radii = []; rs.isArcRadius = []; for (var s2 = 0; s2 < segmentsN; s2++) { var w4 = segmentWs.pfValue[s2]; var d3 = segmentDs.pfValue[s2]; var w1 = 1 - w4; var w22 = w4; var _this$findMidptPtsEtc = this.findMidptPtsEtc(edge, pairInfo), midptPts = _this$findMidptPtsEtc.midptPts, vectorNormInverse = _this$findMidptPtsEtc.vectorNormInverse; var adjustedMidpt = { x: midptPts.x1 * w1 + midptPts.x2 * w22, y: midptPts.y1 * w1 + midptPts.y2 * w22 }; rs.segpts.push(adjustedMidpt.x + vectorNormInverse.x * d3, adjustedMidpt.y + vectorNormInverse.y * d3); rs.radii.push(segmentRs.pfValue[s2] !== void 0 ? segmentRs.pfValue[s2] : lastRadius); rs.isArcRadius.push((segmentTs.pfValue[s2] !== void 0 ? segmentTs.pfValue[s2] : lastRadiusType) === "arc-radius"); } }; BRp$c.findLoopPoints = function(edge, pairInfo, i2, edgeIsUnbundled) { var rs = edge._private.rscratch; var dirCounts = pairInfo.dirCounts, srcPos = pairInfo.srcPos; var ctrlptDists = edge.pstyle("control-point-distances"); var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : void 0; var loopDir = edge.pstyle("loop-direction").pfValue; var loopSwp = edge.pstyle("loop-sweep").pfValue; var stepSize = edge.pstyle("control-point-step-size").pfValue; rs.edgeType = "self"; var j3 = i2; var loopDist = stepSize; if (edgeIsUnbundled) { j3 = 0; loopDist = ctrlptDist; } var loopAngle = loopDir - Math.PI / 2; var outAngle = loopAngle - loopSwp / 2; var inAngle = loopAngle + loopSwp / 2; var dc = String(loopDir + "_" + loopSwp); j3 = dirCounts[dc] === void 0 ? dirCounts[dc] = 0 : ++dirCounts[dc]; rs.ctrlpts = [srcPos.x + Math.cos(outAngle) * 1.4 * loopDist * (j3 / 3 + 1), srcPos.y + Math.sin(outAngle) * 1.4 * loopDist * (j3 / 3 + 1), srcPos.x + Math.cos(inAngle) * 1.4 * loopDist * (j3 / 3 + 1), srcPos.y + Math.sin(inAngle) * 1.4 * loopDist * (j3 / 3 + 1)]; }; BRp$c.findCompoundLoopPoints = function(edge, pairInfo, i2, edgeIsUnbundled) { var rs = edge._private.rscratch; rs.edgeType = "compound"; var srcPos = pairInfo.srcPos, tgtPos = pairInfo.tgtPos, srcW = pairInfo.srcW, srcH = pairInfo.srcH, tgtW = pairInfo.tgtW, tgtH = pairInfo.tgtH; var stepSize = edge.pstyle("control-point-step-size").pfValue; var ctrlptDists = edge.pstyle("control-point-distances"); var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : void 0; var j3 = i2; var loopDist = stepSize; if (edgeIsUnbundled) { j3 = 0; loopDist = ctrlptDist; } var loopW = 50; var loopaPos = { x: srcPos.x - srcW / 2, y: srcPos.y - srcH / 2 }; var loopbPos = { x: tgtPos.x - tgtW / 2, y: tgtPos.y - tgtH / 2 }; var loopPos = { x: Math.min(loopaPos.x, loopbPos.x), y: Math.min(loopaPos.y, loopbPos.y) }; var minCompoundStretch = 0.5; var compoundStretchA = Math.max(minCompoundStretch, Math.log(srcW * AVOID_IMPOSSIBLE_BEZIER_CONSTANT)); var compoundStretchB = Math.max(minCompoundStretch, Math.log(tgtW * AVOID_IMPOSSIBLE_BEZIER_CONSTANT)); rs.ctrlpts = [loopPos.x, loopPos.y - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j3 / 3 + 1) * compoundStretchA, loopPos.x - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j3 / 3 + 1) * compoundStretchB, loopPos.y]; }; BRp$c.findStraightEdgePoints = function(edge) { edge._private.rscratch.edgeType = "straight"; }; BRp$c.findBezierPoints = function(edge, pairInfo, i2, edgeIsUnbundled, edgeIsSwapped) { var rs = edge._private.rscratch; var stepSize = edge.pstyle("control-point-step-size").pfValue; var ctrlptDists = edge.pstyle("control-point-distances"); var ctrlptWs = edge.pstyle("control-point-weights"); var bezierN = ctrlptDists && ctrlptWs ? Math.min(ctrlptDists.value.length, ctrlptWs.value.length) : 1; var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : void 0; var ctrlptWeight = ctrlptWs.value[0]; var multi = edgeIsUnbundled; rs.edgeType = multi ? "multibezier" : "bezier"; rs.ctrlpts = []; for (var b3 = 0; b3 < bezierN; b3++) { var normctrlptDist = (0.5 - pairInfo.eles.length / 2 + i2) * stepSize * (edgeIsSwapped ? -1 : 1); var manctrlptDist = void 0; var sign2 = signum(normctrlptDist); if (multi) { ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[b3] : stepSize; ctrlptWeight = ctrlptWs.value[b3]; } if (edgeIsUnbundled) { manctrlptDist = ctrlptDist; } else { manctrlptDist = ctrlptDist !== void 0 ? sign2 * ctrlptDist : void 0; } var distanceFromMidpoint = manctrlptDist !== void 0 ? manctrlptDist : normctrlptDist; var w1 = 1 - ctrlptWeight; var w22 = ctrlptWeight; var _this$findMidptPtsEtc2 = this.findMidptPtsEtc(edge, pairInfo), midptPts = _this$findMidptPtsEtc2.midptPts, vectorNormInverse = _this$findMidptPtsEtc2.vectorNormInverse; var adjustedMidpt = { x: midptPts.x1 * w1 + midptPts.x2 * w22, y: midptPts.y1 * w1 + midptPts.y2 * w22 }; rs.ctrlpts.push(adjustedMidpt.x + vectorNormInverse.x * distanceFromMidpoint, adjustedMidpt.y + vectorNormInverse.y * distanceFromMidpoint); } }; BRp$c.findTaxiPoints = function(edge, pairInfo) { var rs = edge._private.rscratch; rs.edgeType = "segments"; var VERTICAL = "vertical"; var HORIZONTAL = "horizontal"; var LEFTWARD = "leftward"; var RIGHTWARD = "rightward"; var DOWNWARD = "downward"; var UPWARD = "upward"; var AUTO = "auto"; var posPts = pairInfo.posPts, srcW = pairInfo.srcW, srcH = pairInfo.srcH, tgtW = pairInfo.tgtW, tgtH = pairInfo.tgtH; var edgeDistances = edge.pstyle("edge-distances").value; var dIncludesNodeBody = edgeDistances !== "node-position"; var taxiDir = edge.pstyle("taxi-direction").value; var rawTaxiDir = taxiDir; var taxiTurn = edge.pstyle("taxi-turn"); var turnIsPercent = taxiTurn.units === "%"; var taxiTurnPfVal = taxiTurn.pfValue; var turnIsNegative = taxiTurnPfVal < 0; var minD = edge.pstyle("taxi-turn-min-distance").pfValue; var dw = dIncludesNodeBody ? (srcW + tgtW) / 2 : 0; var dh = dIncludesNodeBody ? (srcH + tgtH) / 2 : 0; var pdx = posPts.x2 - posPts.x1; var pdy = posPts.y2 - posPts.y1; var subDWH = /* @__PURE__ */ __name(function subDWH2(dxy, dwh) { if (dxy > 0) { return Math.max(dxy - dwh, 0); } else { return Math.min(dxy + dwh, 0); } }, "subDWH"); var dx = subDWH(pdx, dw); var dy = subDWH(pdy, dh); var isExplicitDir = false; if (rawTaxiDir === AUTO) { taxiDir = Math.abs(dx) > Math.abs(dy) ? HORIZONTAL : VERTICAL; } else if (rawTaxiDir === UPWARD || rawTaxiDir === DOWNWARD) { taxiDir = VERTICAL; isExplicitDir = true; } else if (rawTaxiDir === LEFTWARD || rawTaxiDir === RIGHTWARD) { taxiDir = HORIZONTAL; isExplicitDir = true; } var isVert = taxiDir === VERTICAL; var l4 = isVert ? dy : dx; var pl = isVert ? pdy : pdx; var sgnL = signum(pl); var forcedDir = false; if (!(isExplicitDir && (turnIsPercent || turnIsNegative)) && (rawTaxiDir === DOWNWARD && pl < 0 || rawTaxiDir === UPWARD && pl > 0 || rawTaxiDir === LEFTWARD && pl > 0 || rawTaxiDir === RIGHTWARD && pl < 0)) { sgnL *= -1; l4 = sgnL * Math.abs(l4); forcedDir = true; } var d3; if (turnIsPercent) { var p3 = taxiTurnPfVal < 0 ? 1 + taxiTurnPfVal : taxiTurnPfVal; d3 = p3 * l4; } else { var k2 = taxiTurnPfVal < 0 ? l4 : 0; d3 = k2 + taxiTurnPfVal * sgnL; } var getIsTooClose = /* @__PURE__ */ __name(function getIsTooClose2(d4) { return Math.abs(d4) < minD || Math.abs(d4) >= Math.abs(l4); }, "getIsTooClose"); var isTooCloseSrc = getIsTooClose(d3); var isTooCloseTgt = getIsTooClose(Math.abs(l4) - Math.abs(d3)); var isTooClose = isTooCloseSrc || isTooCloseTgt; if (isTooClose && !forcedDir) { if (isVert) { var lShapeInsideSrc = Math.abs(pl) <= srcH / 2; var lShapeInsideTgt = Math.abs(pdx) <= tgtW / 2; if (lShapeInsideSrc) { var x5 = (posPts.x1 + posPts.x2) / 2; var y1 = posPts.y1, y22 = posPts.y2; rs.segpts = [x5, y1, x5, y22]; } else if (lShapeInsideTgt) { var y6 = (posPts.y1 + posPts.y2) / 2; var x1 = posPts.x1, x22 = posPts.x2; rs.segpts = [x1, y6, x22, y6]; } else { rs.segpts = [posPts.x1, posPts.y2]; } } else { var _lShapeInsideSrc = Math.abs(pl) <= srcW / 2; var _lShapeInsideTgt = Math.abs(pdy) <= tgtH / 2; if (_lShapeInsideSrc) { var _y = (posPts.y1 + posPts.y2) / 2; var _x = posPts.x1, _x2 = posPts.x2; rs.segpts = [_x, _y, _x2, _y]; } else if (_lShapeInsideTgt) { var _x3 = (posPts.x1 + posPts.x2) / 2; var _y2 = posPts.y1, _y3 = posPts.y2; rs.segpts = [_x3, _y2, _x3, _y3]; } else { rs.segpts = [posPts.x2, posPts.y1]; } } } else { if (isVert) { var _y4 = posPts.y1 + d3 + (dIncludesNodeBody ? srcH / 2 * sgnL : 0); var _x4 = posPts.x1, _x5 = posPts.x2; rs.segpts = [_x4, _y4, _x5, _y4]; } else { var _x6 = posPts.x1 + d3 + (dIncludesNodeBody ? srcW / 2 * sgnL : 0); var _y5 = posPts.y1, _y6 = posPts.y2; rs.segpts = [_x6, _y5, _x6, _y6]; } } if (rs.isRound) { var radius2 = edge.pstyle("taxi-radius").value; var isArcRadius = edge.pstyle("radius-type").value[0] === "arc-radius"; rs.radii = new Array(rs.segpts.length / 2).fill(radius2); rs.isArcRadius = new Array(rs.segpts.length / 2).fill(isArcRadius); } }; BRp$c.tryToCorrectInvalidPoints = function(edge, pairInfo) { var rs = edge._private.rscratch; if (rs.edgeType === "bezier") { var srcPos = pairInfo.srcPos, tgtPos = pairInfo.tgtPos, srcW = pairInfo.srcW, srcH = pairInfo.srcH, tgtW = pairInfo.tgtW, tgtH = pairInfo.tgtH, srcShape = pairInfo.srcShape, tgtShape = pairInfo.tgtShape, srcCornerRadius = pairInfo.srcCornerRadius, tgtCornerRadius = pairInfo.tgtCornerRadius, srcRs = pairInfo.srcRs, tgtRs = pairInfo.tgtRs; var badStart = !number$1(rs.startX) || !number$1(rs.startY); var badAStart = !number$1(rs.arrowStartX) || !number$1(rs.arrowStartY); var badEnd = !number$1(rs.endX) || !number$1(rs.endY); var badAEnd = !number$1(rs.arrowEndX) || !number$1(rs.arrowEndY); var minCpADistFactor = 3; var arrowW = this.getArrowWidth(edge.pstyle("width").pfValue, edge.pstyle("arrow-scale").value) * this.arrowShapeWidth; var minCpADist = minCpADistFactor * arrowW; var startACpDist = dist({ x: rs.ctrlpts[0], y: rs.ctrlpts[1] }, { x: rs.startX, y: rs.startY }); var closeStartACp = startACpDist < minCpADist; var endACpDist = dist({ x: rs.ctrlpts[0], y: rs.ctrlpts[1] }, { x: rs.endX, y: rs.endY }); var closeEndACp = endACpDist < minCpADist; var overlapping = false; if (badStart || badAStart || closeStartACp) { overlapping = true; var cpD = { // delta x: rs.ctrlpts[0] - srcPos.x, y: rs.ctrlpts[1] - srcPos.y }; var cpL = Math.sqrt(cpD.x * cpD.x + cpD.y * cpD.y); var cpM = { // normalised delta x: cpD.x / cpL, y: cpD.y / cpL }; var radius2 = Math.max(srcW, srcH); var cpProj = { // *2 radius guarantees outside shape x: rs.ctrlpts[0] + cpM.x * 2 * radius2, y: rs.ctrlpts[1] + cpM.y * 2 * radius2 }; var srcCtrlPtIntn = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, cpProj.x, cpProj.y, 0, srcCornerRadius, srcRs); if (closeStartACp) { rs.ctrlpts[0] = rs.ctrlpts[0] + cpM.x * (minCpADist - startACpDist); rs.ctrlpts[1] = rs.ctrlpts[1] + cpM.y * (minCpADist - startACpDist); } else { rs.ctrlpts[0] = srcCtrlPtIntn[0] + cpM.x * minCpADist; rs.ctrlpts[1] = srcCtrlPtIntn[1] + cpM.y * minCpADist; } } if (badEnd || badAEnd || closeEndACp) { overlapping = true; var _cpD = { // delta x: rs.ctrlpts[0] - tgtPos.x, y: rs.ctrlpts[1] - tgtPos.y }; var _cpL = Math.sqrt(_cpD.x * _cpD.x + _cpD.y * _cpD.y); var _cpM = { // normalised delta x: _cpD.x / _cpL, y: _cpD.y / _cpL }; var _radius = Math.max(srcW, srcH); var _cpProj = { // *2 radius guarantees outside shape x: rs.ctrlpts[0] + _cpM.x * 2 * _radius, y: rs.ctrlpts[1] + _cpM.y * 2 * _radius }; var tgtCtrlPtIntn = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, _cpProj.x, _cpProj.y, 0, tgtCornerRadius, tgtRs); if (closeEndACp) { rs.ctrlpts[0] = rs.ctrlpts[0] + _cpM.x * (minCpADist - endACpDist); rs.ctrlpts[1] = rs.ctrlpts[1] + _cpM.y * (minCpADist - endACpDist); } else { rs.ctrlpts[0] = tgtCtrlPtIntn[0] + _cpM.x * minCpADist; rs.ctrlpts[1] = tgtCtrlPtIntn[1] + _cpM.y * minCpADist; } } if (overlapping) { this.findEndpoints(edge); } } }; BRp$c.storeAllpts = function(edge) { var rs = edge._private.rscratch; if (rs.edgeType === "multibezier" || rs.edgeType === "bezier" || rs.edgeType === "self" || rs.edgeType === "compound") { rs.allpts = []; rs.allpts.push(rs.startX, rs.startY); for (var b3 = 0; b3 + 1 < rs.ctrlpts.length; b3 += 2) { rs.allpts.push(rs.ctrlpts[b3], rs.ctrlpts[b3 + 1]); if (b3 + 3 < rs.ctrlpts.length) { rs.allpts.push((rs.ctrlpts[b3] + rs.ctrlpts[b3 + 2]) / 2, (rs.ctrlpts[b3 + 1] + rs.ctrlpts[b3 + 3]) / 2); } } rs.allpts.push(rs.endX, rs.endY); var m3, mt; if (rs.ctrlpts.length / 2 % 2 === 0) { m3 = rs.allpts.length / 2 - 1; rs.midX = rs.allpts[m3]; rs.midY = rs.allpts[m3 + 1]; } else { m3 = rs.allpts.length / 2 - 3; mt = 0.5; rs.midX = qbezierAt(rs.allpts[m3], rs.allpts[m3 + 2], rs.allpts[m3 + 4], mt); rs.midY = qbezierAt(rs.allpts[m3 + 1], rs.allpts[m3 + 3], rs.allpts[m3 + 5], mt); } } else if (rs.edgeType === "straight") { rs.allpts = [rs.startX, rs.startY, rs.endX, rs.endY]; rs.midX = (rs.startX + rs.endX + rs.arrowStartX + rs.arrowEndX) / 4; rs.midY = (rs.startY + rs.endY + rs.arrowStartY + rs.arrowEndY) / 4; } else if (rs.edgeType === "segments") { rs.allpts = []; rs.allpts.push(rs.startX, rs.startY); rs.allpts.push.apply(rs.allpts, rs.segpts); rs.allpts.push(rs.endX, rs.endY); if (rs.isRound) { rs.roundCorners = []; for (var i2 = 2; i2 + 3 < rs.allpts.length; i2 += 2) { var radius2 = rs.radii[i2 / 2 - 1]; var isArcRadius = rs.isArcRadius[i2 / 2 - 1]; rs.roundCorners.push(getRoundCorner({ x: rs.allpts[i2 - 2], y: rs.allpts[i2 - 1] }, { x: rs.allpts[i2], y: rs.allpts[i2 + 1], radius: radius2 }, { x: rs.allpts[i2 + 2], y: rs.allpts[i2 + 3] }, radius2, isArcRadius)); } } if (rs.segpts.length % 4 === 0) { var i22 = rs.segpts.length / 2; var i1 = i22 - 2; rs.midX = (rs.segpts[i1] + rs.segpts[i22]) / 2; rs.midY = (rs.segpts[i1 + 1] + rs.segpts[i22 + 1]) / 2; } else { var _i = rs.segpts.length / 2 - 1; if (!rs.isRound) { rs.midX = rs.segpts[_i]; rs.midY = rs.segpts[_i + 1]; } else { var point8 = { x: rs.segpts[_i], y: rs.segpts[_i + 1] }; var corner = rs.roundCorners[_i / 2]; if (corner.radius === 0) { var nextPoint = { x: rs.segpts[_i + 2], y: rs.segpts[_i + 3] }; rs.midX = point8.x; rs.midY = point8.y; rs.midVector = [point8.y - nextPoint.y, nextPoint.x - point8.x]; } else { var v3 = [point8.x - corner.cx, point8.y - corner.cy]; var factor = corner.radius / Math.sqrt(Math.pow(v3[0], 2) + Math.pow(v3[1], 2)); v3 = v3.map(function(c3) { return c3 * factor; }); rs.midX = corner.cx + v3[0]; rs.midY = corner.cy + v3[1]; rs.midVector = v3; } } } } }; BRp$c.checkForInvalidEdgeWarning = function(edge) { var rs = edge[0]._private.rscratch; if (rs.nodesOverlap || number$1(rs.startX) && number$1(rs.startY) && number$1(rs.endX) && number$1(rs.endY)) { rs.loggedErr = false; } else { if (!rs.loggedErr) { rs.loggedErr = true; warn("Edge `" + edge.id() + "` has invalid endpoints and so it is impossible to draw. Adjust your edge style (e.g. control points) accordingly or use an alternative edge type. This is expected behaviour when the source node and the target node overlap."); } } }; BRp$c.findEdgeControlPoints = function(edges3) { var _this = this; if (!edges3 || edges3.length === 0) { return; } var r2 = this; var cy = r2.cy; var hasCompounds = cy.hasCompoundNodes(); var hashTable = new Map$1(); var getKey3 = /* @__PURE__ */ __name(function getKey4(pairId2, edgeIsUnbundled2) { return [].concat(_toConsumableArray(pairId2), [edgeIsUnbundled2 ? 1 : 0]).join("-"); }, "getKey"); var pairIds = []; var haystackEdges = []; for (var i2 = 0; i2 < edges3.length; i2++) { var edge = edges3[i2]; var _p = edge._private; var curveStyle = edge.pstyle("curve-style").value; if (edge.removed() || !edge.takesUpSpace()) { continue; } if (curveStyle === "haystack") { haystackEdges.push(edge); continue; } var edgeIsUnbundled = curveStyle === "unbundled-bezier" || endsWith(curveStyle, "segments") || curveStyle === "straight" || curveStyle === "straight-triangle" || endsWith(curveStyle, "taxi"); var edgeIsBezier = curveStyle === "unbundled-bezier" || curveStyle === "bezier"; var src = _p.source; var tgt = _p.target; var srcIndex = src.poolIndex(); var tgtIndex = tgt.poolIndex(); var pairId = [srcIndex, tgtIndex].sort(); var key = getKey3(pairId, edgeIsUnbundled); var tableEntry = hashTable.get(key); if (tableEntry == null) { tableEntry = { eles: [] }; pairIds.push({ pairId, edgeIsUnbundled }); hashTable.set(key, tableEntry); } tableEntry.eles.push(edge); if (edgeIsUnbundled) { tableEntry.hasUnbundled = true; } if (edgeIsBezier) { tableEntry.hasBezier = true; } } var _loop = /* @__PURE__ */ __name(function _loop2() { var _pairIds$p = pairIds[p3], pairId2 = _pairIds$p.pairId, edgeIsUnbundled2 = _pairIds$p.edgeIsUnbundled; var key2 = getKey3(pairId2, edgeIsUnbundled2); var pairInfo = hashTable.get(key2); var swappedpairInfo; if (!pairInfo.hasUnbundled) { var pllEdges = pairInfo.eles[0].parallelEdges().filter(function(e3) { return e3.isBundledBezier(); }); clearArray(pairInfo.eles); pllEdges.forEach(function(edge2) { return pairInfo.eles.push(edge2); }); pairInfo.eles.sort(function(edge1, edge2) { return edge1.poolIndex() - edge2.poolIndex(); }); } var firstEdge = pairInfo.eles[0]; var src2 = firstEdge.source(); var tgt2 = firstEdge.target(); if (src2.poolIndex() > tgt2.poolIndex()) { var temp = src2; src2 = tgt2; tgt2 = temp; } var srcPos = pairInfo.srcPos = src2.position(); var tgtPos = pairInfo.tgtPos = tgt2.position(); var srcW = pairInfo.srcW = src2.outerWidth(); var srcH = pairInfo.srcH = src2.outerHeight(); var tgtW = pairInfo.tgtW = tgt2.outerWidth(); var tgtH = pairInfo.tgtH = tgt2.outerHeight(); var srcShape = pairInfo.srcShape = r2.nodeShapes[_this.getNodeShape(src2)]; var tgtShape = pairInfo.tgtShape = r2.nodeShapes[_this.getNodeShape(tgt2)]; var srcCornerRadius = pairInfo.srcCornerRadius = src2.pstyle("corner-radius").value === "auto" ? "auto" : src2.pstyle("corner-radius").pfValue; var tgtCornerRadius = pairInfo.tgtCornerRadius = tgt2.pstyle("corner-radius").value === "auto" ? "auto" : tgt2.pstyle("corner-radius").pfValue; var tgtRs = pairInfo.tgtRs = tgt2._private.rscratch; var srcRs = pairInfo.srcRs = src2._private.rscratch; pairInfo.dirCounts = { "north": 0, "west": 0, "south": 0, "east": 0, "northwest": 0, "southwest": 0, "northeast": 0, "southeast": 0 }; for (var _i2 = 0; _i2 < pairInfo.eles.length; _i2++) { var _edge = pairInfo.eles[_i2]; var rs = _edge[0]._private.rscratch; var _curveStyle = _edge.pstyle("curve-style").value; var _edgeIsUnbundled = _curveStyle === "unbundled-bezier" || endsWith(_curveStyle, "segments") || endsWith(_curveStyle, "taxi"); var edgeIsSwapped = !src2.same(_edge.source()); if (!pairInfo.calculatedIntersection && src2 !== tgt2 && (pairInfo.hasBezier || pairInfo.hasUnbundled)) { pairInfo.calculatedIntersection = true; var srcOutside = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, tgtPos.x, tgtPos.y, 0, srcCornerRadius, srcRs); var srcIntn = pairInfo.srcIntn = srcOutside; var tgtOutside = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, srcPos.x, srcPos.y, 0, tgtCornerRadius, tgtRs); var tgtIntn = pairInfo.tgtIntn = tgtOutside; var intersectionPts = pairInfo.intersectionPts = { x1: srcOutside[0], x2: tgtOutside[0], y1: srcOutside[1], y2: tgtOutside[1] }; var posPts = pairInfo.posPts = { x1: srcPos.x, x2: tgtPos.x, y1: srcPos.y, y2: tgtPos.y }; var dy = tgtOutside[1] - srcOutside[1]; var dx = tgtOutside[0] - srcOutside[0]; var l4 = Math.sqrt(dx * dx + dy * dy); if (number$1(l4) && l4 >= AVOID_IMPOSSIBLE_BEZIER_CONSTANT_L) ; else { l4 = Math.sqrt(Math.max(dx * dx, AVOID_IMPOSSIBLE_BEZIER_CONSTANT) + Math.max(dy * dy, AVOID_IMPOSSIBLE_BEZIER_CONSTANT)); } var vector = pairInfo.vector = { x: dx, y: dy }; var vectorNorm = pairInfo.vectorNorm = { x: vector.x / l4, y: vector.y / l4 }; var vectorNormInverse = { x: -vectorNorm.y, y: vectorNorm.x }; pairInfo.nodesOverlap = !number$1(l4) || tgtShape.checkPoint(srcOutside[0], srcOutside[1], 0, tgtW, tgtH, tgtPos.x, tgtPos.y, tgtCornerRadius, tgtRs) || srcShape.checkPoint(tgtOutside[0], tgtOutside[1], 0, srcW, srcH, srcPos.x, srcPos.y, srcCornerRadius, srcRs); pairInfo.vectorNormInverse = vectorNormInverse; swappedpairInfo = { nodesOverlap: pairInfo.nodesOverlap, dirCounts: pairInfo.dirCounts, calculatedIntersection: true, hasBezier: pairInfo.hasBezier, hasUnbundled: pairInfo.hasUnbundled, eles: pairInfo.eles, srcPos: tgtPos, srcRs: tgtRs, tgtPos: srcPos, tgtRs: srcRs, srcW: tgtW, srcH: tgtH, tgtW: srcW, tgtH: srcH, srcIntn: tgtIntn, tgtIntn: srcIntn, srcShape: tgtShape, tgtShape: srcShape, posPts: { x1: posPts.x2, y1: posPts.y2, x2: posPts.x1, y2: posPts.y1 }, intersectionPts: { x1: intersectionPts.x2, y1: intersectionPts.y2, x2: intersectionPts.x1, y2: intersectionPts.y1 }, vector: { x: -vector.x, y: -vector.y }, vectorNorm: { x: -vectorNorm.x, y: -vectorNorm.y }, vectorNormInverse: { x: -vectorNormInverse.x, y: -vectorNormInverse.y } }; } var passedPairInfo = edgeIsSwapped ? swappedpairInfo : pairInfo; rs.nodesOverlap = passedPairInfo.nodesOverlap; rs.srcIntn = passedPairInfo.srcIntn; rs.tgtIntn = passedPairInfo.tgtIntn; rs.isRound = _curveStyle.startsWith("round"); if (hasCompounds && (src2.isParent() || src2.isChild() || tgt2.isParent() || tgt2.isChild()) && (src2.parents().anySame(tgt2) || tgt2.parents().anySame(src2) || src2.same(tgt2) && src2.isParent())) { _this.findCompoundLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled); } else if (src2 === tgt2) { _this.findLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled); } else if (_curveStyle.endsWith("segments")) { _this.findSegmentsPoints(_edge, passedPairInfo); } else if (_curveStyle.endsWith("taxi")) { _this.findTaxiPoints(_edge, passedPairInfo); } else if (_curveStyle === "straight" || !_edgeIsUnbundled && pairInfo.eles.length % 2 === 1 && _i2 === Math.floor(pairInfo.eles.length / 2)) { _this.findStraightEdgePoints(_edge); } else { _this.findBezierPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled, edgeIsSwapped); } _this.findEndpoints(_edge); _this.tryToCorrectInvalidPoints(_edge, passedPairInfo); _this.checkForInvalidEdgeWarning(_edge); _this.storeAllpts(_edge); _this.storeEdgeProjections(_edge); _this.calculateArrowAngles(_edge); _this.recalculateEdgeLabelProjections(_edge); _this.calculateLabelAngles(_edge); } }, "_loop"); for (var p3 = 0; p3 < pairIds.length; p3++) { _loop(); } this.findHaystackPoints(haystackEdges); }; __name(getPts, "getPts"); BRp$c.getSegmentPoints = function(edge) { var rs = edge[0]._private.rscratch; this.recalculateRenderedStyle(edge); var type3 = rs.edgeType; if (type3 === "segments") { return getPts(rs.segpts); } }; BRp$c.getControlPoints = function(edge) { var rs = edge[0]._private.rscratch; this.recalculateRenderedStyle(edge); var type3 = rs.edgeType; if (type3 === "bezier" || type3 === "multibezier" || type3 === "self" || type3 === "compound") { return getPts(rs.ctrlpts); } }; BRp$c.getEdgeMidpoint = function(edge) { var rs = edge[0]._private.rscratch; this.recalculateRenderedStyle(edge); return { x: rs.midX, y: rs.midY }; }; BRp$b = {}; BRp$b.manualEndptToPx = function(node2, prop) { var r2 = this; var npos = node2.position(); var w4 = node2.outerWidth(); var h3 = node2.outerHeight(); var rs = node2._private.rscratch; if (prop.value.length === 2) { var p3 = [prop.pfValue[0], prop.pfValue[1]]; if (prop.units[0] === "%") { p3[0] = p3[0] * w4; } if (prop.units[1] === "%") { p3[1] = p3[1] * h3; } p3[0] += npos.x; p3[1] += npos.y; return p3; } else { var angle2 = prop.pfValue[0]; angle2 = -Math.PI / 2 + angle2; var l4 = 2 * Math.max(w4, h3); var _p = [npos.x + Math.cos(angle2) * l4, npos.y + Math.sin(angle2) * l4]; return r2.nodeShapes[this.getNodeShape(node2)].intersectLine(npos.x, npos.y, w4, h3, _p[0], _p[1], 0, node2.pstyle("corner-radius").value === "auto" ? "auto" : node2.pstyle("corner-radius").pfValue, rs); } }; BRp$b.findEndpoints = function(edge) { var _ref, _tgtManEndpt$pfValue, _ref2, _srcManEndpt$pfValue; var r2 = this; var intersect3; var source = edge.source()[0]; var target = edge.target()[0]; var srcPos = source.position(); var tgtPos = target.position(); var tgtArShape = edge.pstyle("target-arrow-shape").value; var srcArShape = edge.pstyle("source-arrow-shape").value; var tgtDist = edge.pstyle("target-distance-from-node").pfValue; var srcDist = edge.pstyle("source-distance-from-node").pfValue; var srcRs = source._private.rscratch; var tgtRs = target._private.rscratch; var curveStyle = edge.pstyle("curve-style").value; var rs = edge._private.rscratch; var et2 = rs.edgeType; var taxi = endsWith(curveStyle, "taxi"); var self2 = et2 === "self" || et2 === "compound"; var bezier = et2 === "bezier" || et2 === "multibezier" || self2; var multi = et2 !== "bezier"; var lines = et2 === "straight" || et2 === "segments"; var segments = et2 === "segments"; var hasEndpts = bezier || multi || lines; var overrideEndpts = self2 || taxi; var srcManEndpt = edge.pstyle("source-endpoint"); var srcManEndptVal = overrideEndpts ? "outside-to-node" : srcManEndpt.value; var srcCornerRadius = source.pstyle("corner-radius").value === "auto" ? "auto" : source.pstyle("corner-radius").pfValue; var tgtManEndpt = edge.pstyle("target-endpoint"); var tgtManEndptVal = overrideEndpts ? "outside-to-node" : tgtManEndpt.value; var tgtCornerRadius = target.pstyle("corner-radius").value === "auto" ? "auto" : target.pstyle("corner-radius").pfValue; rs.srcManEndpt = srcManEndpt; rs.tgtManEndpt = tgtManEndpt; var p1; var p22; var p1_i; var p2_i; var tgtManEndptPt = (_ref = (tgtManEndpt === null || tgtManEndpt === void 0 || (_tgtManEndpt$pfValue = tgtManEndpt.pfValue) === null || _tgtManEndpt$pfValue === void 0 ? void 0 : _tgtManEndpt$pfValue.length) === 2 ? tgtManEndpt.pfValue : null) !== null && _ref !== void 0 ? _ref : [0, 0]; var srcManEndptPt = (_ref2 = (srcManEndpt === null || srcManEndpt === void 0 || (_srcManEndpt$pfValue = srcManEndpt.pfValue) === null || _srcManEndpt$pfValue === void 0 ? void 0 : _srcManEndpt$pfValue.length) === 2 ? srcManEndpt.pfValue : null) !== null && _ref2 !== void 0 ? _ref2 : [0, 0]; if (bezier) { var cpStart = [rs.ctrlpts[0], rs.ctrlpts[1]]; var cpEnd = multi ? [rs.ctrlpts[rs.ctrlpts.length - 2], rs.ctrlpts[rs.ctrlpts.length - 1]] : cpStart; p1 = cpEnd; p22 = cpStart; } else if (lines) { var srcArrowFromPt = !segments ? [tgtPos.x + tgtManEndptPt[0], tgtPos.y + tgtManEndptPt[1]] : rs.segpts.slice(0, 2); var tgtArrowFromPt = !segments ? [srcPos.x + srcManEndptPt[0], srcPos.y + srcManEndptPt[1]] : rs.segpts.slice(rs.segpts.length - 2); p1 = tgtArrowFromPt; p22 = srcArrowFromPt; } if (tgtManEndptVal === "inside-to-node") { intersect3 = [tgtPos.x, tgtPos.y]; } else if (tgtManEndpt.units) { intersect3 = this.manualEndptToPx(target, tgtManEndpt); } else if (tgtManEndptVal === "outside-to-line") { intersect3 = rs.tgtIntn; } else { if (tgtManEndptVal === "outside-to-node" || tgtManEndptVal === "outside-to-node-or-label") { p1_i = p1; } else if (tgtManEndptVal === "outside-to-line" || tgtManEndptVal === "outside-to-line-or-label") { p1_i = [srcPos.x, srcPos.y]; } intersect3 = r2.nodeShapes[this.getNodeShape(target)].intersectLine(tgtPos.x, tgtPos.y, target.outerWidth(), target.outerHeight(), p1_i[0], p1_i[1], 0, tgtCornerRadius, tgtRs); if (tgtManEndptVal === "outside-to-node-or-label" || tgtManEndptVal === "outside-to-line-or-label") { var trs = target._private.rscratch; var lw = trs.labelWidth; var lh = trs.labelHeight; var lx = trs.labelX; var ly = trs.labelY; var lw2 = lw / 2; var lh2 = lh / 2; var va = target.pstyle("text-valign").value; if (va === "top") { ly -= lh2; } else if (va === "bottom") { ly += lh2; } var ha = target.pstyle("text-halign").value; if (ha === "left") { lx -= lw2; } else if (ha === "right") { lx += lw2; } var labelIntersect = polygonIntersectLine(p1_i[0], p1_i[1], [lx - lw2, ly - lh2, lx + lw2, ly - lh2, lx + lw2, ly + lh2, lx - lw2, ly + lh2], tgtPos.x, tgtPos.y); if (labelIntersect.length > 0) { var refPt = srcPos; var intSqdist = sqdist(refPt, array2point(intersect3)); var labIntSqdist = sqdist(refPt, array2point(labelIntersect)); var minSqDist = intSqdist; if (labIntSqdist < intSqdist) { intersect3 = labelIntersect; minSqDist = labIntSqdist; } if (labelIntersect.length > 2) { var labInt2SqDist = sqdist(refPt, { x: labelIntersect[2], y: labelIntersect[3] }); if (labInt2SqDist < minSqDist) { intersect3 = [labelIntersect[2], labelIntersect[3]]; } } } } } var arrowEnd = shortenIntersection(intersect3, p1, r2.arrowShapes[tgtArShape].spacing(edge) + tgtDist); var edgeEnd = shortenIntersection(intersect3, p1, r2.arrowShapes[tgtArShape].gap(edge) + tgtDist); rs.endX = edgeEnd[0]; rs.endY = edgeEnd[1]; rs.arrowEndX = arrowEnd[0]; rs.arrowEndY = arrowEnd[1]; if (srcManEndptVal === "inside-to-node") { intersect3 = [srcPos.x, srcPos.y]; } else if (srcManEndpt.units) { intersect3 = this.manualEndptToPx(source, srcManEndpt); } else if (srcManEndptVal === "outside-to-line") { intersect3 = rs.srcIntn; } else { if (srcManEndptVal === "outside-to-node" || srcManEndptVal === "outside-to-node-or-label") { p2_i = p22; } else if (srcManEndptVal === "outside-to-line" || srcManEndptVal === "outside-to-line-or-label") { p2_i = [tgtPos.x, tgtPos.y]; } intersect3 = r2.nodeShapes[this.getNodeShape(source)].intersectLine(srcPos.x, srcPos.y, source.outerWidth(), source.outerHeight(), p2_i[0], p2_i[1], 0, srcCornerRadius, srcRs); if (srcManEndptVal === "outside-to-node-or-label" || srcManEndptVal === "outside-to-line-or-label") { var srs = source._private.rscratch; var _lw = srs.labelWidth; var _lh = srs.labelHeight; var _lx = srs.labelX; var _ly = srs.labelY; var _lw2 = _lw / 2; var _lh2 = _lh / 2; var _va = source.pstyle("text-valign").value; if (_va === "top") { _ly -= _lh2; } else if (_va === "bottom") { _ly += _lh2; } var _ha = source.pstyle("text-halign").value; if (_ha === "left") { _lx -= _lw2; } else if (_ha === "right") { _lx += _lw2; } var _labelIntersect = polygonIntersectLine(p2_i[0], p2_i[1], [_lx - _lw2, _ly - _lh2, _lx + _lw2, _ly - _lh2, _lx + _lw2, _ly + _lh2, _lx - _lw2, _ly + _lh2], srcPos.x, srcPos.y); if (_labelIntersect.length > 0) { var _refPt = tgtPos; var _intSqdist = sqdist(_refPt, array2point(intersect3)); var _labIntSqdist = sqdist(_refPt, array2point(_labelIntersect)); var _minSqDist = _intSqdist; if (_labIntSqdist < _intSqdist) { intersect3 = [_labelIntersect[0], _labelIntersect[1]]; _minSqDist = _labIntSqdist; } if (_labelIntersect.length > 2) { var _labInt2SqDist = sqdist(_refPt, { x: _labelIntersect[2], y: _labelIntersect[3] }); if (_labInt2SqDist < _minSqDist) { intersect3 = [_labelIntersect[2], _labelIntersect[3]]; } } } } } var arrowStart = shortenIntersection(intersect3, p22, r2.arrowShapes[srcArShape].spacing(edge) + srcDist); var edgeStart = shortenIntersection(intersect3, p22, r2.arrowShapes[srcArShape].gap(edge) + srcDist); rs.startX = edgeStart[0]; rs.startY = edgeStart[1]; rs.arrowStartX = arrowStart[0]; rs.arrowStartY = arrowStart[1]; if (hasEndpts) { if (!number$1(rs.startX) || !number$1(rs.startY) || !number$1(rs.endX) || !number$1(rs.endY)) { rs.badLine = true; } else { rs.badLine = false; } } }; BRp$b.getSourceEndpoint = function(edge) { var rs = edge[0]._private.rscratch; this.recalculateRenderedStyle(edge); switch (rs.edgeType) { case "haystack": return { x: rs.haystackPts[0], y: rs.haystackPts[1] }; default: return { x: rs.arrowStartX, y: rs.arrowStartY }; } }; BRp$b.getTargetEndpoint = function(edge) { var rs = edge[0]._private.rscratch; this.recalculateRenderedStyle(edge); switch (rs.edgeType) { case "haystack": return { x: rs.haystackPts[2], y: rs.haystackPts[3] }; default: return { x: rs.arrowEndX, y: rs.arrowEndY }; } }; BRp$a = {}; __name(pushBezierPts, "pushBezierPts"); BRp$a.storeEdgeProjections = function(edge) { var _p = edge._private; var rs = _p.rscratch; var et2 = rs.edgeType; _p.rstyle.bezierPts = null; _p.rstyle.linePts = null; _p.rstyle.haystackPts = null; if (et2 === "multibezier" || et2 === "bezier" || et2 === "self" || et2 === "compound") { _p.rstyle.bezierPts = []; for (var i2 = 0; i2 + 5 < rs.allpts.length; i2 += 4) { pushBezierPts(this, edge, rs.allpts.slice(i2, i2 + 6)); } } else if (et2 === "segments") { var lpts = _p.rstyle.linePts = []; for (var i2 = 0; i2 + 1 < rs.allpts.length; i2 += 2) { lpts.push({ x: rs.allpts[i2], y: rs.allpts[i2 + 1] }); } } else if (et2 === "haystack") { var hpts = rs.haystackPts; _p.rstyle.haystackPts = [{ x: hpts[0], y: hpts[1] }, { x: hpts[2], y: hpts[3] }]; } _p.rstyle.arrowWidth = this.getArrowWidth(edge.pstyle("width").pfValue, edge.pstyle("arrow-scale").value) * this.arrowShapeWidth; }; BRp$a.recalculateEdgeProjections = function(edges3) { this.findEdgeControlPoints(edges3); }; BRp$9 = {}; BRp$9.recalculateNodeLabelProjection = function(node2) { var content = node2.pstyle("label").strValue; if (emptyString(content)) { return; } var textX, textY; var _p = node2._private; var nodeWidth = node2.width(); var nodeHeight = node2.height(); var padding2 = node2.padding(); var nodePos = node2.position(); var textHalign = node2.pstyle("text-halign").strValue; var textValign = node2.pstyle("text-valign").strValue; var rs = _p.rscratch; var rstyle = _p.rstyle; switch (textHalign) { case "left": textX = nodePos.x - nodeWidth / 2 - padding2; break; case "right": textX = nodePos.x + nodeWidth / 2 + padding2; break; default: textX = nodePos.x; } switch (textValign) { case "top": textY = nodePos.y - nodeHeight / 2 - padding2; break; case "bottom": textY = nodePos.y + nodeHeight / 2 + padding2; break; default: textY = nodePos.y; } rs.labelX = textX; rs.labelY = textY; rstyle.labelX = textX; rstyle.labelY = textY; this.calculateLabelAngles(node2); this.applyLabelDimensions(node2); }; lineAngleFromDelta = /* @__PURE__ */ __name(function lineAngleFromDelta2(dx, dy) { var angle2 = Math.atan(dy / dx); if (dx === 0 && angle2 < 0) { angle2 = angle2 * -1; } return angle2; }, "lineAngleFromDelta"); lineAngle = /* @__PURE__ */ __name(function lineAngle2(p0, p1) { var dx = p1.x - p0.x; var dy = p1.y - p0.y; return lineAngleFromDelta(dx, dy); }, "lineAngle"); bezierAngle = /* @__PURE__ */ __name(function bezierAngle2(p0, p1, p22, t4) { var t03 = bound(0, t4 - 1e-3, 1); var t13 = bound(0, t4 + 1e-3, 1); var lp0 = qbezierPtAt(p0, p1, p22, t03); var lp1 = qbezierPtAt(p0, p1, p22, t13); return lineAngle(lp0, lp1); }, "bezierAngle"); BRp$9.recalculateEdgeLabelProjections = function(edge) { var p3; var _p = edge._private; var rs = _p.rscratch; var r2 = this; var content = { mid: edge.pstyle("label").strValue, source: edge.pstyle("source-label").strValue, target: edge.pstyle("target-label").strValue }; if (content.mid || content.source || content.target) ; else { return; } p3 = { x: rs.midX, y: rs.midY }; var setRs = /* @__PURE__ */ __name(function setRs2(propName, prefix, value2) { setPrefixedProperty(_p.rscratch, propName, prefix, value2); setPrefixedProperty(_p.rstyle, propName, prefix, value2); }, "setRs"); setRs("labelX", null, p3.x); setRs("labelY", null, p3.y); var midAngle = lineAngleFromDelta(rs.midDispX, rs.midDispY); setRs("labelAutoAngle", null, midAngle); var _createControlPointInfo = /* @__PURE__ */ __name(function createControlPointInfo() { if (_createControlPointInfo.cache) { return _createControlPointInfo.cache; } var ctrlpts = []; for (var i2 = 0; i2 + 5 < rs.allpts.length; i2 += 4) { var p0 = { x: rs.allpts[i2], y: rs.allpts[i2 + 1] }; var p1 = { x: rs.allpts[i2 + 2], y: rs.allpts[i2 + 3] }; var p22 = { x: rs.allpts[i2 + 4], y: rs.allpts[i2 + 5] }; ctrlpts.push({ p0, p1, p2: p22, startDist: 0, length: 0, segments: [] }); } var bpts = _p.rstyle.bezierPts; var nProjs = r2.bezierProjPcts.length; function addSegment(cp2, p02, p12, t03, t13) { var length2 = dist(p02, p12); var prevSegment = cp2.segments[cp2.segments.length - 1]; var segment = { p0: p02, p1: p12, t0: t03, t1: t13, startDist: prevSegment ? prevSegment.startDist + prevSegment.length : 0, length: length2 }; cp2.segments.push(segment); cp2.length += length2; } __name(addSegment, "addSegment"); for (var _i = 0; _i < ctrlpts.length; _i++) { var cp = ctrlpts[_i]; var prevCp = ctrlpts[_i - 1]; if (prevCp) { cp.startDist = prevCp.startDist + prevCp.length; } addSegment(cp, cp.p0, bpts[_i * nProjs], 0, r2.bezierProjPcts[0]); for (var j3 = 0; j3 < nProjs - 1; j3++) { addSegment(cp, bpts[_i * nProjs + j3], bpts[_i * nProjs + j3 + 1], r2.bezierProjPcts[j3], r2.bezierProjPcts[j3 + 1]); } addSegment(cp, bpts[_i * nProjs + nProjs - 1], cp.p2, r2.bezierProjPcts[nProjs - 1], 1); } return _createControlPointInfo.cache = ctrlpts; }, "createControlPointInfo"); var calculateEndProjection = /* @__PURE__ */ __name(function calculateEndProjection2(prefix) { var angle2; var isSrc = prefix === "source"; if (!content[prefix]) { return; } var offset = edge.pstyle(prefix + "-text-offset").pfValue; switch (rs.edgeType) { case "self": case "compound": case "bezier": case "multibezier": { var cps = _createControlPointInfo(); var selected; var startDist = 0; var totalDist = 0; for (var i2 = 0; i2 < cps.length; i2++) { var _cp = cps[isSrc ? i2 : cps.length - 1 - i2]; for (var j3 = 0; j3 < _cp.segments.length; j3++) { var _seg = _cp.segments[isSrc ? j3 : _cp.segments.length - 1 - j3]; var lastSeg = i2 === cps.length - 1 && j3 === _cp.segments.length - 1; startDist = totalDist; totalDist += _seg.length; if (totalDist >= offset || lastSeg) { selected = { cp: _cp, segment: _seg }; break; } } if (selected) { break; } } var cp = selected.cp; var seg = selected.segment; var tSegment = (offset - startDist) / seg.length; var segDt = seg.t1 - seg.t0; var t4 = isSrc ? seg.t0 + segDt * tSegment : seg.t1 - segDt * tSegment; t4 = bound(0, t4, 1); p3 = qbezierPtAt(cp.p0, cp.p1, cp.p2, t4); angle2 = bezierAngle(cp.p0, cp.p1, cp.p2, t4); break; } case "straight": case "segments": case "haystack": { var d3 = 0, di, d0; var p0, p1; var l4 = rs.allpts.length; for (var _i2 = 0; _i2 + 3 < l4; _i2 += 2) { if (isSrc) { p0 = { x: rs.allpts[_i2], y: rs.allpts[_i2 + 1] }; p1 = { x: rs.allpts[_i2 + 2], y: rs.allpts[_i2 + 3] }; } else { p0 = { x: rs.allpts[l4 - 2 - _i2], y: rs.allpts[l4 - 1 - _i2] }; p1 = { x: rs.allpts[l4 - 4 - _i2], y: rs.allpts[l4 - 3 - _i2] }; } di = dist(p0, p1); d0 = d3; d3 += di; if (d3 >= offset) { break; } } var pD = offset - d0; var _t = pD / di; _t = bound(0, _t, 1); p3 = lineAt(p0, p1, _t); angle2 = lineAngle(p0, p1); break; } } setRs("labelX", prefix, p3.x); setRs("labelY", prefix, p3.y); setRs("labelAutoAngle", prefix, angle2); }, "calculateEndProjection"); calculateEndProjection("source"); calculateEndProjection("target"); this.applyLabelDimensions(edge); }; BRp$9.applyLabelDimensions = function(ele) { this.applyPrefixedLabelDimensions(ele); if (ele.isEdge()) { this.applyPrefixedLabelDimensions(ele, "source"); this.applyPrefixedLabelDimensions(ele, "target"); } }; BRp$9.applyPrefixedLabelDimensions = function(ele, prefix) { var _p = ele._private; var text4 = this.getLabelText(ele, prefix); var cacheKey = hashString(text4, ele._private.labelDimsKey); if (getPrefixedProperty(_p.rscratch, "prefixedLabelDimsKey", prefix) === cacheKey) { return; } setPrefixedProperty(_p.rscratch, "prefixedLabelDimsKey", prefix, cacheKey); var labelDims = this.calculateLabelDimensions(ele, text4); var lineHeight = ele.pstyle("line-height").pfValue; var textWrap = ele.pstyle("text-wrap").strValue; var lines = getPrefixedProperty(_p.rscratch, "labelWrapCachedLines", prefix) || []; var numLines = textWrap !== "wrap" ? 1 : Math.max(lines.length, 1); var normPerLineHeight = labelDims.height / numLines; var labelLineHeight = normPerLineHeight * lineHeight; var width3 = labelDims.width; var height2 = labelDims.height + (numLines - 1) * (lineHeight - 1) * normPerLineHeight; setPrefixedProperty(_p.rstyle, "labelWidth", prefix, width3); setPrefixedProperty(_p.rscratch, "labelWidth", prefix, width3); setPrefixedProperty(_p.rstyle, "labelHeight", prefix, height2); setPrefixedProperty(_p.rscratch, "labelHeight", prefix, height2); setPrefixedProperty(_p.rscratch, "labelLineHeight", prefix, labelLineHeight); }; BRp$9.getLabelText = function(ele, prefix) { var _p = ele._private; var pfd = prefix ? prefix + "-" : ""; var text4 = ele.pstyle(pfd + "label").strValue; var textTransform = ele.pstyle("text-transform").value; var rscratch = /* @__PURE__ */ __name(function rscratch2(propName, value2) { if (value2) { setPrefixedProperty(_p.rscratch, propName, prefix, value2); return value2; } else { return getPrefixedProperty(_p.rscratch, propName, prefix); } }, "rscratch"); if (!text4) { return ""; } if (textTransform == "none") ; else if (textTransform == "uppercase") { text4 = text4.toUpperCase(); } else if (textTransform == "lowercase") { text4 = text4.toLowerCase(); } var wrapStyle = ele.pstyle("text-wrap").value; if (wrapStyle === "wrap") { var labelKey = rscratch("labelKey"); if (labelKey != null && rscratch("labelWrapKey") === labelKey) { return rscratch("labelWrapCachedText"); } var zwsp = "\u200B"; var lines = text4.split("\n"); var maxW = ele.pstyle("text-max-width").pfValue; var overflow = ele.pstyle("text-overflow-wrap").value; var overflowAny = overflow === "anywhere"; var wrappedLines = []; var separatorRegex = /[\s\u200b]+|$/g; for (var l4 = 0; l4 < lines.length; l4++) { var line2 = lines[l4]; var lineDims = this.calculateLabelDimensions(ele, line2); var lineW = lineDims.width; if (overflowAny) { var processedLine = line2.split("").join(zwsp); line2 = processedLine; } if (lineW > maxW) { var separatorMatches = line2.matchAll(separatorRegex); var subline = ""; var previousIndex = 0; var _iterator = _createForOfIteratorHelper(separatorMatches), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done; ) { var separatorMatch = _step.value; var wordSeparator = separatorMatch[0]; var word = line2.substring(previousIndex, separatorMatch.index); previousIndex = separatorMatch.index + wordSeparator.length; var testLine = subline.length === 0 ? word : subline + word + wordSeparator; var testDims = this.calculateLabelDimensions(ele, testLine); var testW = testDims.width; if (testW <= maxW) { subline += word + wordSeparator; } else { if (subline) { wrappedLines.push(subline); } subline = word + wordSeparator; } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } if (!subline.match(/^[\s\u200b]+$/)) { wrappedLines.push(subline); } } else { wrappedLines.push(line2); } } rscratch("labelWrapCachedLines", wrappedLines); text4 = rscratch("labelWrapCachedText", wrappedLines.join("\n")); rscratch("labelWrapKey", labelKey); } else if (wrapStyle === "ellipsis") { var _maxW = ele.pstyle("text-max-width").pfValue; var ellipsized = ""; var ellipsis = "\u2026"; var incLastCh = false; if (this.calculateLabelDimensions(ele, text4).width < _maxW) { return text4; } for (var i2 = 0; i2 < text4.length; i2++) { var widthWithNextCh = this.calculateLabelDimensions(ele, ellipsized + text4[i2] + ellipsis).width; if (widthWithNextCh > _maxW) { break; } ellipsized += text4[i2]; if (i2 === text4.length - 1) { incLastCh = true; } } if (!incLastCh) { ellipsized += ellipsis; } return ellipsized; } return text4; }; BRp$9.getLabelJustification = function(ele) { var justification = ele.pstyle("text-justification").strValue; var textHalign = ele.pstyle("text-halign").strValue; if (justification === "auto") { if (ele.isNode()) { switch (textHalign) { case "left": return "right"; case "right": return "left"; default: return "center"; } } else { return "center"; } } else { return justification; } }; BRp$9.calculateLabelDimensions = function(ele, text4) { var r2 = this; var containerWindow = r2.cy.window(); var document2 = containerWindow.document; var padding2 = 0; var fStyle = ele.pstyle("font-style").strValue; var size4 = ele.pstyle("font-size").pfValue; var family = ele.pstyle("font-family").strValue; var weight8 = ele.pstyle("font-weight").strValue; var canvas = this.labelCalcCanvas; var c2d = this.labelCalcCanvasContext; if (!canvas) { canvas = this.labelCalcCanvas = document2.createElement("canvas"); c2d = this.labelCalcCanvasContext = canvas.getContext("2d"); var ds = canvas.style; ds.position = "absolute"; ds.left = "-9999px"; ds.top = "-9999px"; ds.zIndex = "-1"; ds.visibility = "hidden"; ds.pointerEvents = "none"; } c2d.font = "".concat(fStyle, " ").concat(weight8, " ").concat(size4, "px ").concat(family); var width3 = 0; var height2 = 0; var lines = text4.split("\n"); for (var i2 = 0; i2 < lines.length; i2++) { var line2 = lines[i2]; var metrics = c2d.measureText(line2); var w4 = Math.ceil(metrics.width); var h3 = size4; width3 = Math.max(w4, width3); height2 += h3; } width3 += padding2; height2 += padding2; return { width: width3, height: height2 }; }; BRp$9.calculateLabelAngle = function(ele, prefix) { var _p = ele._private; var rs = _p.rscratch; var isEdge2 = ele.isEdge(); var prefixDash = prefix ? prefix + "-" : ""; var rot = ele.pstyle(prefixDash + "text-rotation"); var rotStr = rot.strValue; if (rotStr === "none") { return 0; } else if (isEdge2 && rotStr === "autorotate") { return rs.labelAutoAngle; } else if (rotStr === "autorotate") { return 0; } else { return rot.pfValue; } }; BRp$9.calculateLabelAngles = function(ele) { var r2 = this; var isEdge2 = ele.isEdge(); var _p = ele._private; var rs = _p.rscratch; rs.labelAngle = r2.calculateLabelAngle(ele); if (isEdge2) { rs.sourceLabelAngle = r2.calculateLabelAngle(ele, "source"); rs.targetLabelAngle = r2.calculateLabelAngle(ele, "target"); } }; BRp$8 = {}; TOO_SMALL_CUT_RECT = 28; warnedCutRect = false; BRp$8.getNodeShape = function(node2) { var r2 = this; var shape = node2.pstyle("shape").value; if (shape === "cutrectangle" && (node2.width() < TOO_SMALL_CUT_RECT || node2.height() < TOO_SMALL_CUT_RECT)) { if (!warnedCutRect) { warn("The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead"); warnedCutRect = true; } return "rectangle"; } if (node2.isParent()) { if (shape === "rectangle" || shape === "roundrectangle" || shape === "round-rectangle" || shape === "cutrectangle" || shape === "cut-rectangle" || shape === "barrel") { return shape; } else { return "rectangle"; } } if (shape === "polygon") { var points = node2.pstyle("shape-polygon-points").value; return r2.nodeShapes.makePolygon(points).name; } return shape; }; BRp$7 = {}; BRp$7.registerCalculationListeners = function() { var cy = this.cy; var elesToUpdate = cy.collection(); var r2 = this; var enqueue = /* @__PURE__ */ __name(function enqueue2(eles) { var dirtyStyleCaches = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true; elesToUpdate.merge(eles); if (dirtyStyleCaches) { for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; var _p = ele._private; var rstyle = _p.rstyle; rstyle.clean = false; rstyle.cleanConnected = false; } } }, "enqueue"); r2.binder(cy).on("bounds.* dirty.*", /* @__PURE__ */ __name(function onDirtyBounds(e3) { var ele = e3.target; enqueue(ele); }, "onDirtyBounds")).on("style.* background.*", /* @__PURE__ */ __name(function onDirtyStyle(e3) { var ele = e3.target; enqueue(ele, false); }, "onDirtyStyle")); var updateEleCalcs = /* @__PURE__ */ __name(function updateEleCalcs2(willDraw) { if (willDraw) { var fns = r2.onUpdateEleCalcsFns; elesToUpdate.cleanStyle(); for (var i2 = 0; i2 < elesToUpdate.length; i2++) { var ele = elesToUpdate[i2]; var rstyle = ele._private.rstyle; if (ele.isNode() && !rstyle.cleanConnected) { enqueue(ele.connectedEdges()); rstyle.cleanConnected = true; } } if (fns) { for (var _i = 0; _i < fns.length; _i++) { var fn3 = fns[_i]; fn3(willDraw, elesToUpdate); } } r2.recalculateRenderedStyle(elesToUpdate); elesToUpdate = cy.collection(); } }, "updateEleCalcs"); r2.flushRenderedStyleQueue = function() { updateEleCalcs(true); }; r2.beforeRender(updateEleCalcs, r2.beforeRenderPriorities.eleCalcs); }; BRp$7.onUpdateEleCalcs = function(fn3) { var fns = this.onUpdateEleCalcsFns = this.onUpdateEleCalcsFns || []; fns.push(fn3); }; BRp$7.recalculateRenderedStyle = function(eles, useCache) { var isCleanConnected = /* @__PURE__ */ __name(function isCleanConnected2(ele2) { return ele2._private.rstyle.cleanConnected; }, "isCleanConnected"); if (eles.length === 0) { return; } var edges3 = []; var nodes5 = []; if (this.destroyed) { return; } if (useCache === void 0) { useCache = true; } for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; var _p = ele._private; var rstyle = _p.rstyle; if (ele.isEdge() && (!isCleanConnected(ele.source()) || !isCleanConnected(ele.target()))) { rstyle.clean = false; } if (ele.isEdge() && ele.isBundledBezier()) { if (ele.parallelEdges().some(function(ele2) { return !ele2._private.rstyle.clean && ele2.isBundledBezier(); })) { rstyle.clean = false; } } if (useCache && rstyle.clean || ele.removed()) { continue; } if (ele.pstyle("display").value === "none") { continue; } if (_p.group === "nodes") { nodes5.push(ele); } else { edges3.push(ele); } rstyle.clean = true; } for (var _i2 = 0; _i2 < nodes5.length; _i2++) { var _ele = nodes5[_i2]; var _p2 = _ele._private; var _rstyle = _p2.rstyle; var pos = _ele.position(); this.recalculateNodeLabelProjection(_ele); _rstyle.nodeX = pos.x; _rstyle.nodeY = pos.y; _rstyle.nodeW = _ele.pstyle("width").pfValue; _rstyle.nodeH = _ele.pstyle("height").pfValue; } this.recalculateEdgeProjections(edges3); for (var _i3 = 0; _i3 < edges3.length; _i3++) { var _ele2 = edges3[_i3]; var _p3 = _ele2._private; var _rstyle2 = _p3.rstyle; var rs = _p3.rscratch; _rstyle2.srcX = rs.arrowStartX; _rstyle2.srcY = rs.arrowStartY; _rstyle2.tgtX = rs.arrowEndX; _rstyle2.tgtY = rs.arrowEndY; _rstyle2.midX = rs.midX; _rstyle2.midY = rs.midY; _rstyle2.labelAngle = rs.labelAngle; _rstyle2.sourceLabelAngle = rs.sourceLabelAngle; _rstyle2.targetLabelAngle = rs.targetLabelAngle; } }; BRp$6 = {}; BRp$6.updateCachedGrabbedEles = function() { var eles = this.cachedZSortedEles; if (!eles) { return; } eles.drag = []; eles.nondrag = []; var grabTargets = []; for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; var rs = ele._private.rscratch; if (ele.grabbed() && !ele.isParent()) { grabTargets.push(ele); } else if (rs.inDragLayer) { eles.drag.push(ele); } else { eles.nondrag.push(ele); } } for (var i2 = 0; i2 < grabTargets.length; i2++) { var ele = grabTargets[i2]; eles.drag.push(ele); } }; BRp$6.invalidateCachedZSortedEles = function() { this.cachedZSortedEles = null; }; BRp$6.getCachedZSortedEles = function(forceRecalc) { if (forceRecalc || !this.cachedZSortedEles) { var eles = this.cy.mutableElements().toArray(); eles.sort(zIndexSort); eles.interactive = eles.filter(function(ele) { return ele.interactive(); }); this.cachedZSortedEles = eles; this.updateCachedGrabbedEles(); } else { eles = this.cachedZSortedEles; } return eles; }; BRp$5 = {}; [BRp$e, BRp$d, BRp$c, BRp$b, BRp$a, BRp$9, BRp$8, BRp$7, BRp$6].forEach(function(props) { extend4(BRp$5, props); }); BRp$4 = {}; BRp$4.getCachedImage = function(url, crossOrigin, onLoad) { var r2 = this; var imageCache = r2.imageCache = r2.imageCache || {}; var cache3 = imageCache[url]; if (cache3) { if (!cache3.image.complete) { cache3.image.addEventListener("load", onLoad); } return cache3.image; } else { cache3 = imageCache[url] = imageCache[url] || {}; var image = cache3.image = new Image(); image.addEventListener("load", onLoad); image.addEventListener("error", function() { image.error = true; }); var dataUriPrefix = "data:"; var isDataUri = url.substring(0, dataUriPrefix.length).toLowerCase() === dataUriPrefix; if (!isDataUri) { crossOrigin = crossOrigin === "null" ? null : crossOrigin; image.crossOrigin = crossOrigin; } image.src = url; return image; } }; BRp$3 = {}; BRp$3.registerBinding = function(target, event3, handler, useCapture) { var args = Array.prototype.slice.apply(arguments, [1]); if (Array.isArray(target)) { var res = []; for (var i2 = 0; i2 < target.length; i2++) { var t4 = target[i2]; if (t4 !== void 0) { var b3 = this.binder(t4); res.push(b3.on.apply(b3, args)); } } return res; } var b3 = this.binder(target); return b3.on.apply(b3, args); }; BRp$3.binder = function(tgt) { var r2 = this; var containerWindow = r2.cy.window(); var tgtIsDom = tgt === containerWindow || tgt === containerWindow.document || tgt === containerWindow.document.body || domElement(tgt); if (r2.supportsPassiveEvents == null) { var supportsPassive = false; try { var opts = Object.defineProperty({}, "passive", { get: /* @__PURE__ */ __name(function get5() { supportsPassive = true; return true; }, "get") }); containerWindow.addEventListener("test", null, opts); } catch (err) { } r2.supportsPassiveEvents = supportsPassive; } var on3 = /* @__PURE__ */ __name(function on4(event3, handler, useCapture) { var args = Array.prototype.slice.call(arguments); if (tgtIsDom && r2.supportsPassiveEvents) { args[2] = { capture: useCapture != null ? useCapture : false, passive: false, once: false }; } r2.bindings.push({ target: tgt, args }); (tgt.addEventListener || tgt.on).apply(tgt, args); return this; }, "on"); return { on: on3, addEventListener: on3, addListener: on3, bind: on3 }; }; BRp$3.nodeIsDraggable = function(node2) { return node2 && node2.isNode() && !node2.locked() && node2.grabbable(); }; BRp$3.nodeIsGrabbable = function(node2) { return this.nodeIsDraggable(node2) && node2.interactive(); }; BRp$3.load = function() { var r2 = this; var containerWindow = r2.cy.window(); var isSelected = /* @__PURE__ */ __name(function isSelected2(ele) { return ele.selected(); }, "isSelected"); var getShadowRoot = /* @__PURE__ */ __name(function getShadowRoot2(element3) { var rootNode = element3.getRootNode(); if (rootNode && rootNode.nodeType === 11 && rootNode.host !== void 0) { return rootNode; } }, "getShadowRoot"); var triggerEvents = /* @__PURE__ */ __name(function triggerEvents2(target, names, e3, position5) { if (target == null) { target = r2.cy; } for (var i2 = 0; i2 < names.length; i2++) { var name = names[i2]; target.emit({ originalEvent: e3, type: name, position: position5 }); } }, "triggerEvents"); var isMultSelKeyDown = /* @__PURE__ */ __name(function isMultSelKeyDown2(e3) { return e3.shiftKey || e3.metaKey || e3.ctrlKey; }, "isMultSelKeyDown"); var allowPanningPassthrough = /* @__PURE__ */ __name(function allowPanningPassthrough2(down, downs) { var allowPassthrough = true; if (r2.cy.hasCompoundNodes() && down && down.pannable()) { for (var i2 = 0; downs && i2 < downs.length; i2++) { var down = downs[i2]; if (down.isNode() && down.isParent() && !down.pannable()) { allowPassthrough = false; break; } } } else { allowPassthrough = true; } return allowPassthrough; }, "allowPanningPassthrough"); var setGrabbed = /* @__PURE__ */ __name(function setGrabbed2(ele) { ele[0]._private.grabbed = true; }, "setGrabbed"); var setFreed = /* @__PURE__ */ __name(function setFreed2(ele) { ele[0]._private.grabbed = false; }, "setFreed"); var setInDragLayer = /* @__PURE__ */ __name(function setInDragLayer2(ele) { ele[0]._private.rscratch.inDragLayer = true; }, "setInDragLayer"); var setOutDragLayer = /* @__PURE__ */ __name(function setOutDragLayer2(ele) { ele[0]._private.rscratch.inDragLayer = false; }, "setOutDragLayer"); var setGrabTarget = /* @__PURE__ */ __name(function setGrabTarget2(ele) { ele[0]._private.rscratch.isGrabTarget = true; }, "setGrabTarget"); var removeGrabTarget = /* @__PURE__ */ __name(function removeGrabTarget2(ele) { ele[0]._private.rscratch.isGrabTarget = false; }, "removeGrabTarget"); var addToDragList = /* @__PURE__ */ __name(function addToDragList2(ele, opts) { var list = opts.addToList; var listHasEle = list.has(ele); if (!listHasEle && ele.grabbable() && !ele.locked()) { list.merge(ele); setGrabbed(ele); } }, "addToDragList"); var addDescendantsToDrag = /* @__PURE__ */ __name(function addDescendantsToDrag2(node2, opts) { if (!node2.cy().hasCompoundNodes()) { return; } if (opts.inDragLayer == null && opts.addToList == null) { return; } var innerNodes = node2.descendants(); if (opts.inDragLayer) { innerNodes.forEach(setInDragLayer); innerNodes.connectedEdges().forEach(setInDragLayer); } if (opts.addToList) { addToDragList(innerNodes, opts); } }, "addDescendantsToDrag"); var addNodesToDrag = /* @__PURE__ */ __name(function addNodesToDrag2(nodes5, opts) { opts = opts || {}; var hasCompoundNodes2 = nodes5.cy().hasCompoundNodes(); if (opts.inDragLayer) { nodes5.forEach(setInDragLayer); nodes5.neighborhood().stdFilter(function(ele) { return !hasCompoundNodes2 || ele.isEdge(); }).forEach(setInDragLayer); } if (opts.addToList) { nodes5.forEach(function(ele) { addToDragList(ele, opts); }); } addDescendantsToDrag(nodes5, opts); updateAncestorsInDragLayer(nodes5, { inDragLayer: opts.inDragLayer }); r2.updateCachedGrabbedEles(); }, "addNodesToDrag"); var addNodeToDrag = addNodesToDrag; var freeDraggedElements = /* @__PURE__ */ __name(function freeDraggedElements2(grabbedEles) { if (!grabbedEles) { return; } r2.getCachedZSortedEles().forEach(function(ele) { setFreed(ele); setOutDragLayer(ele); removeGrabTarget(ele); }); r2.updateCachedGrabbedEles(); }, "freeDraggedElements"); var updateAncestorsInDragLayer = /* @__PURE__ */ __name(function updateAncestorsInDragLayer2(node2, opts) { if (opts.inDragLayer == null && opts.addToList == null) { return; } if (!node2.cy().hasCompoundNodes()) { return; } var parent4 = node2.ancestors().orphans(); if (parent4.same(node2)) { return; } var nodes5 = parent4.descendants().spawnSelf().merge(parent4).unmerge(node2).unmerge(node2.descendants()); var edges3 = nodes5.connectedEdges(); if (opts.inDragLayer) { edges3.forEach(setInDragLayer); nodes5.forEach(setInDragLayer); } if (opts.addToList) { nodes5.forEach(function(ele) { addToDragList(ele, opts); }); } }, "updateAncestorsInDragLayer"); var blurActiveDomElement = /* @__PURE__ */ __name(function blurActiveDomElement2() { if (document.activeElement != null && document.activeElement.blur != null) { document.activeElement.blur(); } }, "blurActiveDomElement"); var haveMutationsApi = typeof MutationObserver !== "undefined"; var haveResizeObserverApi = typeof ResizeObserver !== "undefined"; if (haveMutationsApi) { r2.removeObserver = new MutationObserver(function(mutns) { for (var i2 = 0; i2 < mutns.length; i2++) { var mutn = mutns[i2]; var rNodes = mutn.removedNodes; if (rNodes) { for (var j3 = 0; j3 < rNodes.length; j3++) { var rNode = rNodes[j3]; if (rNode === r2.container) { r2.destroy(); break; } } } } }); if (r2.container.parentNode) { r2.removeObserver.observe(r2.container.parentNode, { childList: true }); } } else { r2.registerBinding(r2.container, "DOMNodeRemoved", function(e3) { r2.destroy(); }); } var onResize = debounce(function() { r2.cy.resize(); }, 100); if (haveMutationsApi) { r2.styleObserver = new MutationObserver(onResize); r2.styleObserver.observe(r2.container, { attributes: true }); } r2.registerBinding(containerWindow, "resize", onResize); if (haveResizeObserverApi) { r2.resizeObserver = new ResizeObserver(onResize); r2.resizeObserver.observe(r2.container); } var forEachUp = /* @__PURE__ */ __name(function forEachUp2(domEle, fn3) { while (domEle != null) { fn3(domEle); domEle = domEle.parentNode; } }, "forEachUp"); var invalidateCoords = /* @__PURE__ */ __name(function invalidateCoords2() { r2.invalidateContainerClientCoordsCache(); }, "invalidateCoords"); forEachUp(r2.container, function(domEle) { r2.registerBinding(domEle, "transitionend", invalidateCoords); r2.registerBinding(domEle, "animationend", invalidateCoords); r2.registerBinding(domEle, "scroll", invalidateCoords); }); r2.registerBinding(r2.container, "contextmenu", function(e3) { e3.preventDefault(); }); var inBoxSelection = /* @__PURE__ */ __name(function inBoxSelection2() { return r2.selection[4] !== 0; }, "inBoxSelection"); var eventInContainer = /* @__PURE__ */ __name(function eventInContainer2(e3) { var containerPageCoords = r2.findContainerClientCoords(); var x5 = containerPageCoords[0]; var y6 = containerPageCoords[1]; var width3 = containerPageCoords[2]; var height2 = containerPageCoords[3]; var positions2 = e3.touches ? e3.touches : [e3]; var atLeastOnePosInside = false; for (var i2 = 0; i2 < positions2.length; i2++) { var p3 = positions2[i2]; if (x5 <= p3.clientX && p3.clientX <= x5 + width3 && y6 <= p3.clientY && p3.clientY <= y6 + height2) { atLeastOnePosInside = true; break; } } if (!atLeastOnePosInside) { return false; } var container2 = r2.container; var target = e3.target; var tParent = target.parentNode; var containerIsTarget = false; while (tParent) { if (tParent === container2) { containerIsTarget = true; break; } tParent = tParent.parentNode; } if (!containerIsTarget) { return false; } return true; }, "eventInContainer"); r2.registerBinding(r2.container, "mousedown", /* @__PURE__ */ __name(function mousedownHandler(e3) { if (!eventInContainer(e3)) { return; } if (r2.hoverData.which === 1 && e3.which !== 1) { return; } e3.preventDefault(); blurActiveDomElement(); r2.hoverData.capture = true; r2.hoverData.which = e3.which; var cy = r2.cy; var gpos = [e3.clientX, e3.clientY]; var pos = r2.projectIntoViewport(gpos[0], gpos[1]); var select = r2.selection; var nears = r2.findNearestElements(pos[0], pos[1], true, false); var near = nears[0]; var draggedElements = r2.dragData.possibleDragElements; r2.hoverData.mdownPos = pos; r2.hoverData.mdownGPos = gpos; var makeEvent = /* @__PURE__ */ __name(function makeEvent2(type3) { return { originalEvent: e3, type: type3, position: { x: pos[0], y: pos[1] } }; }, "makeEvent"); var checkForTaphold = /* @__PURE__ */ __name(function checkForTaphold2() { r2.hoverData.tapholdCancelled = false; clearTimeout(r2.hoverData.tapholdTimeout); r2.hoverData.tapholdTimeout = setTimeout(function() { if (r2.hoverData.tapholdCancelled) { return; } else { var ele = r2.hoverData.down; if (ele) { ele.emit(makeEvent("taphold")); } else { cy.emit(makeEvent("taphold")); } } }, r2.tapholdDuration); }, "checkForTaphold"); if (e3.which == 3) { r2.hoverData.cxtStarted = true; var cxtEvt = { originalEvent: e3, type: "cxttapstart", position: { x: pos[0], y: pos[1] } }; if (near) { near.activate(); near.emit(cxtEvt); r2.hoverData.down = near; } else { cy.emit(cxtEvt); } r2.hoverData.downTime = (/* @__PURE__ */ new Date()).getTime(); r2.hoverData.cxtDragged = false; } else if (e3.which == 1) { if (near) { near.activate(); } { if (near != null) { if (r2.nodeIsGrabbable(near)) { var triggerGrab = /* @__PURE__ */ __name(function triggerGrab2(ele) { ele.emit(makeEvent("grab")); }, "triggerGrab"); setGrabTarget(near); if (!near.selected()) { draggedElements = r2.dragData.possibleDragElements = cy.collection(); addNodeToDrag(near, { addToList: draggedElements }); near.emit(makeEvent("grabon")).emit(makeEvent("grab")); } else { draggedElements = r2.dragData.possibleDragElements = cy.collection(); var selectedNodes = cy.$(function(ele) { return ele.isNode() && ele.selected() && r2.nodeIsGrabbable(ele); }); addNodesToDrag(selectedNodes, { addToList: draggedElements }); near.emit(makeEvent("grabon")); selectedNodes.forEach(triggerGrab); } r2.redrawHint("eles", true); r2.redrawHint("drag", true); } } r2.hoverData.down = near; r2.hoverData.downs = nears; r2.hoverData.downTime = (/* @__PURE__ */ new Date()).getTime(); } triggerEvents(near, ["mousedown", "tapstart", "vmousedown"], e3, { x: pos[0], y: pos[1] }); if (near == null) { select[4] = 1; r2.data.bgActivePosistion = { x: pos[0], y: pos[1] }; r2.redrawHint("select", true); r2.redraw(); } else if (near.pannable()) { select[4] = 1; } checkForTaphold(); } select[0] = select[2] = pos[0]; select[1] = select[3] = pos[1]; }, "mousedownHandler"), false); var shadowRoot = getShadowRoot(r2.container); r2.registerBinding([containerWindow, shadowRoot], "mousemove", /* @__PURE__ */ __name(function mousemoveHandler(e3) { var capture = r2.hoverData.capture; if (!capture && !eventInContainer(e3)) { return; } var preventDefault2 = false; var cy = r2.cy; var zoom2 = cy.zoom(); var gpos = [e3.clientX, e3.clientY]; var pos = r2.projectIntoViewport(gpos[0], gpos[1]); var mdownPos = r2.hoverData.mdownPos; var mdownGPos = r2.hoverData.mdownGPos; var select = r2.selection; var near = null; if (!r2.hoverData.draggingEles && !r2.hoverData.dragging && !r2.hoverData.selecting) { near = r2.findNearestElement(pos[0], pos[1], true, false); } var last3 = r2.hoverData.last; var down = r2.hoverData.down; var disp = [pos[0] - select[2], pos[1] - select[3]]; var draggedElements = r2.dragData.possibleDragElements; var isOverThresholdDrag; if (mdownGPos) { var dx = gpos[0] - mdownGPos[0]; var dx2 = dx * dx; var dy = gpos[1] - mdownGPos[1]; var dy2 = dy * dy; var dist22 = dx2 + dy2; r2.hoverData.isOverThresholdDrag = isOverThresholdDrag = dist22 >= r2.desktopTapThreshold2; } var multSelKeyDown = isMultSelKeyDown(e3); if (isOverThresholdDrag) { r2.hoverData.tapholdCancelled = true; } var updateDragDelta = /* @__PURE__ */ __name(function updateDragDelta2() { var dragDelta2 = r2.hoverData.dragDelta = r2.hoverData.dragDelta || []; if (dragDelta2.length === 0) { dragDelta2.push(disp[0]); dragDelta2.push(disp[1]); } else { dragDelta2[0] += disp[0]; dragDelta2[1] += disp[1]; } }, "updateDragDelta"); preventDefault2 = true; triggerEvents(near, ["mousemove", "vmousemove", "tapdrag"], e3, { x: pos[0], y: pos[1] }); var makeEvent = /* @__PURE__ */ __name(function makeEvent2(type3) { return { originalEvent: e3, type: type3, position: { x: pos[0], y: pos[1] } }; }, "makeEvent"); var goIntoBoxMode = /* @__PURE__ */ __name(function goIntoBoxMode2() { r2.data.bgActivePosistion = void 0; if (!r2.hoverData.selecting) { cy.emit(makeEvent("boxstart")); } select[4] = 1; r2.hoverData.selecting = true; r2.redrawHint("select", true); r2.redraw(); }, "goIntoBoxMode"); if (r2.hoverData.which === 3) { if (isOverThresholdDrag) { var cxtEvt = makeEvent("cxtdrag"); if (down) { down.emit(cxtEvt); } else { cy.emit(cxtEvt); } r2.hoverData.cxtDragged = true; if (!r2.hoverData.cxtOver || near !== r2.hoverData.cxtOver) { if (r2.hoverData.cxtOver) { r2.hoverData.cxtOver.emit(makeEvent("cxtdragout")); } r2.hoverData.cxtOver = near; if (near) { near.emit(makeEvent("cxtdragover")); } } } } else if (r2.hoverData.dragging) { preventDefault2 = true; if (cy.panningEnabled() && cy.userPanningEnabled()) { var deltaP; if (r2.hoverData.justStartedPan) { var mdPos = r2.hoverData.mdownPos; deltaP = { x: (pos[0] - mdPos[0]) * zoom2, y: (pos[1] - mdPos[1]) * zoom2 }; r2.hoverData.justStartedPan = false; } else { deltaP = { x: disp[0] * zoom2, y: disp[1] * zoom2 }; } cy.panBy(deltaP); cy.emit(makeEvent("dragpan")); r2.hoverData.dragged = true; } pos = r2.projectIntoViewport(e3.clientX, e3.clientY); } else if (select[4] == 1 && (down == null || down.pannable())) { if (isOverThresholdDrag) { if (!r2.hoverData.dragging && cy.boxSelectionEnabled() && (multSelKeyDown || !cy.panningEnabled() || !cy.userPanningEnabled())) { goIntoBoxMode(); } else if (!r2.hoverData.selecting && cy.panningEnabled() && cy.userPanningEnabled()) { var allowPassthrough = allowPanningPassthrough(down, r2.hoverData.downs); if (allowPassthrough) { r2.hoverData.dragging = true; r2.hoverData.justStartedPan = true; select[4] = 0; r2.data.bgActivePosistion = array2point(mdownPos); r2.redrawHint("select", true); r2.redraw(); } } if (down && down.pannable() && down.active()) { down.unactivate(); } } } else { if (down && down.pannable() && down.active()) { down.unactivate(); } if ((!down || !down.grabbed()) && near != last3) { if (last3) { triggerEvents(last3, ["mouseout", "tapdragout"], e3, { x: pos[0], y: pos[1] }); } if (near) { triggerEvents(near, ["mouseover", "tapdragover"], e3, { x: pos[0], y: pos[1] }); } r2.hoverData.last = near; } if (down) { if (isOverThresholdDrag) { if (cy.boxSelectionEnabled() && multSelKeyDown) { if (down && down.grabbed()) { freeDraggedElements(draggedElements); down.emit(makeEvent("freeon")); draggedElements.emit(makeEvent("free")); if (r2.dragData.didDrag) { down.emit(makeEvent("dragfreeon")); draggedElements.emit(makeEvent("dragfree")); } } goIntoBoxMode(); } else if (down && down.grabbed() && r2.nodeIsDraggable(down)) { var justStartedDrag = !r2.dragData.didDrag; if (justStartedDrag) { r2.redrawHint("eles", true); } r2.dragData.didDrag = true; if (!r2.hoverData.draggingEles) { addNodesToDrag(draggedElements, { inDragLayer: true }); } var totalShift = { x: 0, y: 0 }; if (number$1(disp[0]) && number$1(disp[1])) { totalShift.x += disp[0]; totalShift.y += disp[1]; if (justStartedDrag) { var dragDelta = r2.hoverData.dragDelta; if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) { totalShift.x += dragDelta[0]; totalShift.y += dragDelta[1]; } } } r2.hoverData.draggingEles = true; draggedElements.silentShift(totalShift).emit(makeEvent("position")).emit(makeEvent("drag")); r2.redrawHint("drag", true); r2.redraw(); } } else { updateDragDelta(); } } preventDefault2 = true; } select[2] = pos[0]; select[3] = pos[1]; if (preventDefault2) { if (e3.stopPropagation) e3.stopPropagation(); if (e3.preventDefault) e3.preventDefault(); return false; } }, "mousemoveHandler"), false); var clickTimeout, didDoubleClick, prevClickTimeStamp; r2.registerBinding(containerWindow, "mouseup", /* @__PURE__ */ __name(function mouseupHandler(e3) { if (r2.hoverData.which === 1 && e3.which !== 1 && r2.hoverData.capture) { return; } var capture = r2.hoverData.capture; if (!capture) { return; } r2.hoverData.capture = false; var cy = r2.cy; var pos = r2.projectIntoViewport(e3.clientX, e3.clientY); var select = r2.selection; var near = r2.findNearestElement(pos[0], pos[1], true, false); var draggedElements = r2.dragData.possibleDragElements; var down = r2.hoverData.down; var multSelKeyDown = isMultSelKeyDown(e3); if (r2.data.bgActivePosistion) { r2.redrawHint("select", true); r2.redraw(); } r2.hoverData.tapholdCancelled = true; r2.data.bgActivePosistion = void 0; if (down) { down.unactivate(); } var makeEvent = /* @__PURE__ */ __name(function makeEvent2(type3) { return { originalEvent: e3, type: type3, position: { x: pos[0], y: pos[1] } }; }, "makeEvent"); if (r2.hoverData.which === 3) { var cxtEvt = makeEvent("cxttapend"); if (down) { down.emit(cxtEvt); } else { cy.emit(cxtEvt); } if (!r2.hoverData.cxtDragged) { var cxtTap = makeEvent("cxttap"); if (down) { down.emit(cxtTap); } else { cy.emit(cxtTap); } } r2.hoverData.cxtDragged = false; r2.hoverData.which = null; } else if (r2.hoverData.which === 1) { triggerEvents(near, ["mouseup", "tapend", "vmouseup"], e3, { x: pos[0], y: pos[1] }); if (!r2.dragData.didDrag && // didn't move a node around !r2.hoverData.dragged && // didn't pan !r2.hoverData.selecting && // not box selection !r2.hoverData.isOverThresholdDrag) { triggerEvents(down, ["click", "tap", "vclick"], e3, { x: pos[0], y: pos[1] }); didDoubleClick = false; if (e3.timeStamp - prevClickTimeStamp <= cy.multiClickDebounceTime()) { clickTimeout && clearTimeout(clickTimeout); didDoubleClick = true; prevClickTimeStamp = null; triggerEvents(down, ["dblclick", "dbltap", "vdblclick"], e3, { x: pos[0], y: pos[1] }); } else { clickTimeout = setTimeout(function() { if (didDoubleClick) return; triggerEvents(down, ["oneclick", "onetap", "voneclick"], e3, { x: pos[0], y: pos[1] }); }, cy.multiClickDebounceTime()); prevClickTimeStamp = e3.timeStamp; } } if (down == null && !r2.dragData.didDrag && !r2.hoverData.selecting && !r2.hoverData.dragged && !isMultSelKeyDown(e3)) { cy.$(isSelected).unselect(["tapunselect"]); if (draggedElements.length > 0) { r2.redrawHint("eles", true); } r2.dragData.possibleDragElements = draggedElements = cy.collection(); } if (near == down && !r2.dragData.didDrag && !r2.hoverData.selecting) { if (near != null && near._private.selectable) { if (r2.hoverData.dragging) ; else if (cy.selectionType() === "additive" || multSelKeyDown) { if (near.selected()) { near.unselect(["tapunselect"]); } else { near.select(["tapselect"]); } } else { if (!multSelKeyDown) { cy.$(isSelected).unmerge(near).unselect(["tapunselect"]); near.select(["tapselect"]); } } r2.redrawHint("eles", true); } } if (r2.hoverData.selecting) { var box = cy.collection(r2.getAllInBox(select[0], select[1], select[2], select[3])); r2.redrawHint("select", true); if (box.length > 0) { r2.redrawHint("eles", true); } cy.emit(makeEvent("boxend")); var eleWouldBeSelected = /* @__PURE__ */ __name(function eleWouldBeSelected2(ele) { return ele.selectable() && !ele.selected(); }, "eleWouldBeSelected"); if (cy.selectionType() === "additive") { box.emit(makeEvent("box")).stdFilter(eleWouldBeSelected).select().emit(makeEvent("boxselect")); } else { if (!multSelKeyDown) { cy.$(isSelected).unmerge(box).unselect(); } box.emit(makeEvent("box")).stdFilter(eleWouldBeSelected).select().emit(makeEvent("boxselect")); } r2.redraw(); } if (r2.hoverData.dragging) { r2.hoverData.dragging = false; r2.redrawHint("select", true); r2.redrawHint("eles", true); r2.redraw(); } if (!select[4]) { r2.redrawHint("drag", true); r2.redrawHint("eles", true); var downWasGrabbed = down && down.grabbed(); freeDraggedElements(draggedElements); if (downWasGrabbed) { down.emit(makeEvent("freeon")); draggedElements.emit(makeEvent("free")); if (r2.dragData.didDrag) { down.emit(makeEvent("dragfreeon")); draggedElements.emit(makeEvent("dragfree")); } } } } select[4] = 0; r2.hoverData.down = null; r2.hoverData.cxtStarted = false; r2.hoverData.draggingEles = false; r2.hoverData.selecting = false; r2.hoverData.isOverThresholdDrag = false; r2.dragData.didDrag = false; r2.hoverData.dragged = false; r2.hoverData.dragDelta = []; r2.hoverData.mdownPos = null; r2.hoverData.mdownGPos = null; r2.hoverData.which = null; }, "mouseupHandler"), false); var wheelDeltas = []; var wheelDeltaN = 4; var inaccurateScrollDevice; var inaccurateScrollFactor = 1e5; var allAreDivisibleBy = /* @__PURE__ */ __name(function allAreDivisibleBy2(list, factor) { for (var i2 = 0; i2 < list.length; i2++) { if (list[i2] % factor !== 0) { return false; } } return true; }, "allAreDivisibleBy"); var allAreSameMagnitude = /* @__PURE__ */ __name(function allAreSameMagnitude2(list) { var firstMag = Math.abs(list[0]); for (var i2 = 1; i2 < list.length; i2++) { if (Math.abs(list[i2]) !== firstMag) { return false; } } return true; }, "allAreSameMagnitude"); var wheelHandler = /* @__PURE__ */ __name(function wheelHandler2(e3) { var clamp = false; var delta = e3.deltaY; if (delta == null) { if (e3.wheelDeltaY != null) { delta = e3.wheelDeltaY / 4; } else if (e3.wheelDelta != null) { delta = e3.wheelDelta / 4; } } if (delta === 0) { return; } if (inaccurateScrollDevice == null) { if (wheelDeltas.length >= wheelDeltaN) { var wds = wheelDeltas; inaccurateScrollDevice = allAreDivisibleBy(wds, 5); if (!inaccurateScrollDevice) { var firstMag = Math.abs(wds[0]); inaccurateScrollDevice = allAreSameMagnitude(wds) && firstMag > 5; } if (inaccurateScrollDevice) { for (var i2 = 0; i2 < wds.length; i2++) { inaccurateScrollFactor = Math.min(Math.abs(wds[i2]), inaccurateScrollFactor); } } } else { wheelDeltas.push(delta); clamp = true; } } else if (inaccurateScrollDevice) { inaccurateScrollFactor = Math.min(Math.abs(delta), inaccurateScrollFactor); } if (r2.scrollingPage) { return; } var cy = r2.cy; var zoom2 = cy.zoom(); var pan2 = cy.pan(); var pos = r2.projectIntoViewport(e3.clientX, e3.clientY); var rpos = [pos[0] * zoom2 + pan2.x, pos[1] * zoom2 + pan2.y]; if (r2.hoverData.draggingEles || r2.hoverData.dragging || r2.hoverData.cxtStarted || inBoxSelection()) { e3.preventDefault(); return; } if (cy.panningEnabled() && cy.userPanningEnabled() && cy.zoomingEnabled() && cy.userZoomingEnabled()) { e3.preventDefault(); r2.data.wheelZooming = true; clearTimeout(r2.data.wheelTimeout); r2.data.wheelTimeout = setTimeout(function() { r2.data.wheelZooming = false; r2.redrawHint("eles", true); r2.redraw(); }, 150); var diff2; if (clamp && Math.abs(delta) > 5) { delta = signum(delta) * 5; } diff2 = delta / -250; if (inaccurateScrollDevice) { diff2 /= inaccurateScrollFactor; diff2 *= 3; } diff2 = diff2 * r2.wheelSensitivity; var needsWheelFix = e3.deltaMode === 1; if (needsWheelFix) { diff2 *= 33; } var newZoom = cy.zoom() * Math.pow(10, diff2); if (e3.type === "gesturechange") { newZoom = r2.gestureStartZoom * e3.scale; } cy.zoom({ level: newZoom, renderedPosition: { x: rpos[0], y: rpos[1] } }); cy.emit({ type: e3.type === "gesturechange" ? "pinchzoom" : "scrollzoom", originalEvent: e3, position: { x: pos[0], y: pos[1] } }); } }, "wheelHandler"); r2.registerBinding(r2.container, "wheel", wheelHandler, true); r2.registerBinding(containerWindow, "scroll", /* @__PURE__ */ __name(function scrollHandler(e3) { r2.scrollingPage = true; clearTimeout(r2.scrollingPageTimeout); r2.scrollingPageTimeout = setTimeout(function() { r2.scrollingPage = false; }, 250); }, "scrollHandler"), true); r2.registerBinding(r2.container, "gesturestart", /* @__PURE__ */ __name(function gestureStartHandler(e3) { r2.gestureStartZoom = r2.cy.zoom(); if (!r2.hasTouchStarted) { e3.preventDefault(); } }, "gestureStartHandler"), true); r2.registerBinding(r2.container, "gesturechange", function(e3) { if (!r2.hasTouchStarted) { wheelHandler(e3); } }, true); r2.registerBinding(r2.container, "mouseout", /* @__PURE__ */ __name(function mouseOutHandler(e3) { var pos = r2.projectIntoViewport(e3.clientX, e3.clientY); r2.cy.emit({ originalEvent: e3, type: "mouseout", position: { x: pos[0], y: pos[1] } }); }, "mouseOutHandler"), false); r2.registerBinding(r2.container, "mouseover", /* @__PURE__ */ __name(function mouseOverHandler(e3) { var pos = r2.projectIntoViewport(e3.clientX, e3.clientY); r2.cy.emit({ originalEvent: e3, type: "mouseover", position: { x: pos[0], y: pos[1] } }); }, "mouseOverHandler"), false); var f1x1, f1y1, f2x1, f2y1; var distance1, distance1Sq; var center1, modelCenter1; var offsetLeft, offsetTop; var containerWidth, containerHeight; var twoFingersStartInside; var distance2 = /* @__PURE__ */ __name(function distance3(x1, y1, x22, y22) { return Math.sqrt((x22 - x1) * (x22 - x1) + (y22 - y1) * (y22 - y1)); }, "distance"); var distanceSq = /* @__PURE__ */ __name(function distanceSq2(x1, y1, x22, y22) { return (x22 - x1) * (x22 - x1) + (y22 - y1) * (y22 - y1); }, "distanceSq"); var touchstartHandler; r2.registerBinding(r2.container, "touchstart", touchstartHandler = /* @__PURE__ */ __name(function touchstartHandler2(e3) { r2.hasTouchStarted = true; if (!eventInContainer(e3)) { return; } blurActiveDomElement(); r2.touchData.capture = true; r2.data.bgActivePosistion = void 0; var cy = r2.cy; var now3 = r2.touchData.now; var earlier = r2.touchData.earlier; if (e3.touches[0]) { var pos = r2.projectIntoViewport(e3.touches[0].clientX, e3.touches[0].clientY); now3[0] = pos[0]; now3[1] = pos[1]; } if (e3.touches[1]) { var pos = r2.projectIntoViewport(e3.touches[1].clientX, e3.touches[1].clientY); now3[2] = pos[0]; now3[3] = pos[1]; } if (e3.touches[2]) { var pos = r2.projectIntoViewport(e3.touches[2].clientX, e3.touches[2].clientY); now3[4] = pos[0]; now3[5] = pos[1]; } var makeEvent = /* @__PURE__ */ __name(function makeEvent2(type3) { return { originalEvent: e3, type: type3, position: { x: now3[0], y: now3[1] } }; }, "makeEvent"); if (e3.touches[1]) { r2.touchData.singleTouchMoved = true; freeDraggedElements(r2.dragData.touchDragEles); var offsets = r2.findContainerClientCoords(); offsetLeft = offsets[0]; offsetTop = offsets[1]; containerWidth = offsets[2]; containerHeight = offsets[3]; f1x1 = e3.touches[0].clientX - offsetLeft; f1y1 = e3.touches[0].clientY - offsetTop; f2x1 = e3.touches[1].clientX - offsetLeft; f2y1 = e3.touches[1].clientY - offsetTop; twoFingersStartInside = 0 <= f1x1 && f1x1 <= containerWidth && 0 <= f2x1 && f2x1 <= containerWidth && 0 <= f1y1 && f1y1 <= containerHeight && 0 <= f2y1 && f2y1 <= containerHeight; var pan2 = cy.pan(); var zoom2 = cy.zoom(); distance1 = distance2(f1x1, f1y1, f2x1, f2y1); distance1Sq = distanceSq(f1x1, f1y1, f2x1, f2y1); center1 = [(f1x1 + f2x1) / 2, (f1y1 + f2y1) / 2]; modelCenter1 = [(center1[0] - pan2.x) / zoom2, (center1[1] - pan2.y) / zoom2]; var cxtDistThreshold = 200; var cxtDistThresholdSq = cxtDistThreshold * cxtDistThreshold; if (distance1Sq < cxtDistThresholdSq && !e3.touches[2]) { var near1 = r2.findNearestElement(now3[0], now3[1], true, true); var near2 = r2.findNearestElement(now3[2], now3[3], true, true); if (near1 && near1.isNode()) { near1.activate().emit(makeEvent("cxttapstart")); r2.touchData.start = near1; } else if (near2 && near2.isNode()) { near2.activate().emit(makeEvent("cxttapstart")); r2.touchData.start = near2; } else { cy.emit(makeEvent("cxttapstart")); } if (r2.touchData.start) { r2.touchData.start._private.grabbed = false; } r2.touchData.cxt = true; r2.touchData.cxtDragged = false; r2.data.bgActivePosistion = void 0; r2.redraw(); return; } } if (e3.touches[2]) { if (cy.boxSelectionEnabled()) { e3.preventDefault(); } } else if (e3.touches[1]) ; else if (e3.touches[0]) { var nears = r2.findNearestElements(now3[0], now3[1], true, true); var near = nears[0]; if (near != null) { near.activate(); r2.touchData.start = near; r2.touchData.starts = nears; if (r2.nodeIsGrabbable(near)) { var draggedEles = r2.dragData.touchDragEles = cy.collection(); var selectedNodes = null; r2.redrawHint("eles", true); r2.redrawHint("drag", true); if (near.selected()) { selectedNodes = cy.$(function(ele) { return ele.selected() && r2.nodeIsGrabbable(ele); }); addNodesToDrag(selectedNodes, { addToList: draggedEles }); } else { addNodeToDrag(near, { addToList: draggedEles }); } setGrabTarget(near); near.emit(makeEvent("grabon")); if (selectedNodes) { selectedNodes.forEach(function(n2) { n2.emit(makeEvent("grab")); }); } else { near.emit(makeEvent("grab")); } } } triggerEvents(near, ["touchstart", "tapstart", "vmousedown"], e3, { x: now3[0], y: now3[1] }); if (near == null) { r2.data.bgActivePosistion = { x: pos[0], y: pos[1] }; r2.redrawHint("select", true); r2.redraw(); } r2.touchData.singleTouchMoved = false; r2.touchData.singleTouchStartTime = +/* @__PURE__ */ new Date(); clearTimeout(r2.touchData.tapholdTimeout); r2.touchData.tapholdTimeout = setTimeout(function() { if (r2.touchData.singleTouchMoved === false && !r2.pinching && !r2.touchData.selecting) { triggerEvents(r2.touchData.start, ["taphold"], e3, { x: now3[0], y: now3[1] }); } }, r2.tapholdDuration); } if (e3.touches.length >= 1) { var sPos = r2.touchData.startPosition = [null, null, null, null, null, null]; for (var i2 = 0; i2 < now3.length; i2++) { sPos[i2] = earlier[i2] = now3[i2]; } var touch0 = e3.touches[0]; r2.touchData.startGPosition = [touch0.clientX, touch0.clientY]; } }, "touchstartHandler"), false); var touchmoveHandler; r2.registerBinding(containerWindow, "touchmove", touchmoveHandler = /* @__PURE__ */ __name(function touchmoveHandler2(e3) { var capture = r2.touchData.capture; if (!capture && !eventInContainer(e3)) { return; } var select = r2.selection; var cy = r2.cy; var now3 = r2.touchData.now; var earlier = r2.touchData.earlier; var zoom2 = cy.zoom(); if (e3.touches[0]) { var pos = r2.projectIntoViewport(e3.touches[0].clientX, e3.touches[0].clientY); now3[0] = pos[0]; now3[1] = pos[1]; } if (e3.touches[1]) { var pos = r2.projectIntoViewport(e3.touches[1].clientX, e3.touches[1].clientY); now3[2] = pos[0]; now3[3] = pos[1]; } if (e3.touches[2]) { var pos = r2.projectIntoViewport(e3.touches[2].clientX, e3.touches[2].clientY); now3[4] = pos[0]; now3[5] = pos[1]; } var makeEvent = /* @__PURE__ */ __name(function makeEvent2(type3) { return { originalEvent: e3, type: type3, position: { x: now3[0], y: now3[1] } }; }, "makeEvent"); var startGPos = r2.touchData.startGPosition; var isOverThresholdDrag; if (capture && e3.touches[0] && startGPos) { var disp = []; for (var j3 = 0; j3 < now3.length; j3++) { disp[j3] = now3[j3] - earlier[j3]; } var dx = e3.touches[0].clientX - startGPos[0]; var dx2 = dx * dx; var dy = e3.touches[0].clientY - startGPos[1]; var dy2 = dy * dy; var dist22 = dx2 + dy2; isOverThresholdDrag = dist22 >= r2.touchTapThreshold2; } if (capture && r2.touchData.cxt) { e3.preventDefault(); var f1x2 = e3.touches[0].clientX - offsetLeft, f1y2 = e3.touches[0].clientY - offsetTop; var f2x2 = e3.touches[1].clientX - offsetLeft, f2y2 = e3.touches[1].clientY - offsetTop; var distance2Sq = distanceSq(f1x2, f1y2, f2x2, f2y2); var factorSq = distance2Sq / distance1Sq; var distThreshold = 150; var distThresholdSq = distThreshold * distThreshold; var factorThreshold = 1.5; var factorThresholdSq = factorThreshold * factorThreshold; if (factorSq >= factorThresholdSq || distance2Sq >= distThresholdSq) { r2.touchData.cxt = false; r2.data.bgActivePosistion = void 0; r2.redrawHint("select", true); var cxtEvt = makeEvent("cxttapend"); if (r2.touchData.start) { r2.touchData.start.unactivate().emit(cxtEvt); r2.touchData.start = null; } else { cy.emit(cxtEvt); } } } if (capture && r2.touchData.cxt) { var cxtEvt = makeEvent("cxtdrag"); r2.data.bgActivePosistion = void 0; r2.redrawHint("select", true); if (r2.touchData.start) { r2.touchData.start.emit(cxtEvt); } else { cy.emit(cxtEvt); } if (r2.touchData.start) { r2.touchData.start._private.grabbed = false; } r2.touchData.cxtDragged = true; var near = r2.findNearestElement(now3[0], now3[1], true, true); if (!r2.touchData.cxtOver || near !== r2.touchData.cxtOver) { if (r2.touchData.cxtOver) { r2.touchData.cxtOver.emit(makeEvent("cxtdragout")); } r2.touchData.cxtOver = near; if (near) { near.emit(makeEvent("cxtdragover")); } } } else if (capture && e3.touches[2] && cy.boxSelectionEnabled()) { e3.preventDefault(); r2.data.bgActivePosistion = void 0; this.lastThreeTouch = +/* @__PURE__ */ new Date(); if (!r2.touchData.selecting) { cy.emit(makeEvent("boxstart")); } r2.touchData.selecting = true; r2.touchData.didSelect = true; select[4] = 1; if (!select || select.length === 0 || select[0] === void 0) { select[0] = (now3[0] + now3[2] + now3[4]) / 3; select[1] = (now3[1] + now3[3] + now3[5]) / 3; select[2] = (now3[0] + now3[2] + now3[4]) / 3 + 1; select[3] = (now3[1] + now3[3] + now3[5]) / 3 + 1; } else { select[2] = (now3[0] + now3[2] + now3[4]) / 3; select[3] = (now3[1] + now3[3] + now3[5]) / 3; } r2.redrawHint("select", true); r2.redraw(); } else if (capture && e3.touches[1] && !r2.touchData.didSelect && cy.zoomingEnabled() && cy.panningEnabled() && cy.userZoomingEnabled() && cy.userPanningEnabled()) { e3.preventDefault(); r2.data.bgActivePosistion = void 0; r2.redrawHint("select", true); var draggedEles = r2.dragData.touchDragEles; if (draggedEles) { r2.redrawHint("drag", true); for (var i2 = 0; i2 < draggedEles.length; i2++) { var de_p = draggedEles[i2]._private; de_p.grabbed = false; de_p.rscratch.inDragLayer = false; } } var _start = r2.touchData.start; var f1x2 = e3.touches[0].clientX - offsetLeft, f1y2 = e3.touches[0].clientY - offsetTop; var f2x2 = e3.touches[1].clientX - offsetLeft, f2y2 = e3.touches[1].clientY - offsetTop; var distance22 = distance2(f1x2, f1y2, f2x2, f2y2); var factor = distance22 / distance1; if (twoFingersStartInside) { var df1x = f1x2 - f1x1; var df1y = f1y2 - f1y1; var df2x = f2x2 - f2x1; var df2y = f2y2 - f2y1; var tx = (df1x + df2x) / 2; var ty = (df1y + df2y) / 2; var zoom1 = cy.zoom(); var zoom22 = zoom1 * factor; var pan1 = cy.pan(); var ctrx = modelCenter1[0] * zoom1 + pan1.x; var ctry = modelCenter1[1] * zoom1 + pan1.y; var pan2 = { x: -zoom22 / zoom1 * (ctrx - pan1.x - tx) + ctrx, y: -zoom22 / zoom1 * (ctry - pan1.y - ty) + ctry }; if (_start && _start.active()) { var draggedEles = r2.dragData.touchDragEles; freeDraggedElements(draggedEles); r2.redrawHint("drag", true); r2.redrawHint("eles", true); _start.unactivate().emit(makeEvent("freeon")); draggedEles.emit(makeEvent("free")); if (r2.dragData.didDrag) { _start.emit(makeEvent("dragfreeon")); draggedEles.emit(makeEvent("dragfree")); } } cy.viewport({ zoom: zoom22, pan: pan2, cancelOnFailedZoom: true }); cy.emit(makeEvent("pinchzoom")); distance1 = distance22; f1x1 = f1x2; f1y1 = f1y2; f2x1 = f2x2; f2y1 = f2y2; r2.pinching = true; } if (e3.touches[0]) { var pos = r2.projectIntoViewport(e3.touches[0].clientX, e3.touches[0].clientY); now3[0] = pos[0]; now3[1] = pos[1]; } if (e3.touches[1]) { var pos = r2.projectIntoViewport(e3.touches[1].clientX, e3.touches[1].clientY); now3[2] = pos[0]; now3[3] = pos[1]; } if (e3.touches[2]) { var pos = r2.projectIntoViewport(e3.touches[2].clientX, e3.touches[2].clientY); now3[4] = pos[0]; now3[5] = pos[1]; } } else if (e3.touches[0] && !r2.touchData.didSelect) { var start3 = r2.touchData.start; var last3 = r2.touchData.last; var near; if (!r2.hoverData.draggingEles && !r2.swipePanning) { near = r2.findNearestElement(now3[0], now3[1], true, true); } if (capture && start3 != null) { e3.preventDefault(); } if (capture && start3 != null && r2.nodeIsDraggable(start3)) { if (isOverThresholdDrag) { var draggedEles = r2.dragData.touchDragEles; var justStartedDrag = !r2.dragData.didDrag; if (justStartedDrag) { addNodesToDrag(draggedEles, { inDragLayer: true }); } r2.dragData.didDrag = true; var totalShift = { x: 0, y: 0 }; if (number$1(disp[0]) && number$1(disp[1])) { totalShift.x += disp[0]; totalShift.y += disp[1]; if (justStartedDrag) { r2.redrawHint("eles", true); var dragDelta = r2.touchData.dragDelta; if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) { totalShift.x += dragDelta[0]; totalShift.y += dragDelta[1]; } } } r2.hoverData.draggingEles = true; draggedEles.silentShift(totalShift).emit(makeEvent("position")).emit(makeEvent("drag")); r2.redrawHint("drag", true); if (r2.touchData.startPosition[0] == earlier[0] && r2.touchData.startPosition[1] == earlier[1]) { r2.redrawHint("eles", true); } r2.redraw(); } else { var dragDelta = r2.touchData.dragDelta = r2.touchData.dragDelta || []; if (dragDelta.length === 0) { dragDelta.push(disp[0]); dragDelta.push(disp[1]); } else { dragDelta[0] += disp[0]; dragDelta[1] += disp[1]; } } } { triggerEvents(start3 || near, ["touchmove", "tapdrag", "vmousemove"], e3, { x: now3[0], y: now3[1] }); if ((!start3 || !start3.grabbed()) && near != last3) { if (last3) { last3.emit(makeEvent("tapdragout")); } if (near) { near.emit(makeEvent("tapdragover")); } } r2.touchData.last = near; } if (capture) { for (var i2 = 0; i2 < now3.length; i2++) { if (now3[i2] && r2.touchData.startPosition[i2] && isOverThresholdDrag) { r2.touchData.singleTouchMoved = true; } } } if (capture && (start3 == null || start3.pannable()) && cy.panningEnabled() && cy.userPanningEnabled()) { var allowPassthrough = allowPanningPassthrough(start3, r2.touchData.starts); if (allowPassthrough) { e3.preventDefault(); if (!r2.data.bgActivePosistion) { r2.data.bgActivePosistion = array2point(r2.touchData.startPosition); } if (r2.swipePanning) { cy.panBy({ x: disp[0] * zoom2, y: disp[1] * zoom2 }); cy.emit(makeEvent("dragpan")); } else if (isOverThresholdDrag) { r2.swipePanning = true; cy.panBy({ x: dx * zoom2, y: dy * zoom2 }); cy.emit(makeEvent("dragpan")); if (start3) { start3.unactivate(); r2.redrawHint("select", true); r2.touchData.start = null; } } } var pos = r2.projectIntoViewport(e3.touches[0].clientX, e3.touches[0].clientY); now3[0] = pos[0]; now3[1] = pos[1]; } } for (var j3 = 0; j3 < now3.length; j3++) { earlier[j3] = now3[j3]; } if (capture && e3.touches.length > 0 && !r2.hoverData.draggingEles && !r2.swipePanning && r2.data.bgActivePosistion != null) { r2.data.bgActivePosistion = void 0; r2.redrawHint("select", true); r2.redraw(); } }, "touchmoveHandler"), false); var touchcancelHandler; r2.registerBinding(containerWindow, "touchcancel", touchcancelHandler = /* @__PURE__ */ __name(function touchcancelHandler2(e3) { var start3 = r2.touchData.start; r2.touchData.capture = false; if (start3) { start3.unactivate(); } }, "touchcancelHandler")); var touchendHandler, didDoubleTouch, touchTimeout, prevTouchTimeStamp; r2.registerBinding(containerWindow, "touchend", touchendHandler = /* @__PURE__ */ __name(function touchendHandler2(e3) { var start3 = r2.touchData.start; var capture = r2.touchData.capture; if (capture) { if (e3.touches.length === 0) { r2.touchData.capture = false; } e3.preventDefault(); } else { return; } var select = r2.selection; r2.swipePanning = false; r2.hoverData.draggingEles = false; var cy = r2.cy; var zoom2 = cy.zoom(); var now3 = r2.touchData.now; var earlier = r2.touchData.earlier; if (e3.touches[0]) { var pos = r2.projectIntoViewport(e3.touches[0].clientX, e3.touches[0].clientY); now3[0] = pos[0]; now3[1] = pos[1]; } if (e3.touches[1]) { var pos = r2.projectIntoViewport(e3.touches[1].clientX, e3.touches[1].clientY); now3[2] = pos[0]; now3[3] = pos[1]; } if (e3.touches[2]) { var pos = r2.projectIntoViewport(e3.touches[2].clientX, e3.touches[2].clientY); now3[4] = pos[0]; now3[5] = pos[1]; } var makeEvent = /* @__PURE__ */ __name(function makeEvent2(type3) { return { originalEvent: e3, type: type3, position: { x: now3[0], y: now3[1] } }; }, "makeEvent"); if (start3) { start3.unactivate(); } var ctxTapend; if (r2.touchData.cxt) { ctxTapend = makeEvent("cxttapend"); if (start3) { start3.emit(ctxTapend); } else { cy.emit(ctxTapend); } if (!r2.touchData.cxtDragged) { var ctxTap = makeEvent("cxttap"); if (start3) { start3.emit(ctxTap); } else { cy.emit(ctxTap); } } if (r2.touchData.start) { r2.touchData.start._private.grabbed = false; } r2.touchData.cxt = false; r2.touchData.start = null; r2.redraw(); return; } if (!e3.touches[2] && cy.boxSelectionEnabled() && r2.touchData.selecting) { r2.touchData.selecting = false; var box = cy.collection(r2.getAllInBox(select[0], select[1], select[2], select[3])); select[0] = void 0; select[1] = void 0; select[2] = void 0; select[3] = void 0; select[4] = 0; r2.redrawHint("select", true); cy.emit(makeEvent("boxend")); var eleWouldBeSelected = /* @__PURE__ */ __name(function eleWouldBeSelected2(ele) { return ele.selectable() && !ele.selected(); }, "eleWouldBeSelected"); box.emit(makeEvent("box")).stdFilter(eleWouldBeSelected).select().emit(makeEvent("boxselect")); if (box.nonempty()) { r2.redrawHint("eles", true); } r2.redraw(); } if (start3 != null) { start3.unactivate(); } if (e3.touches[2]) { r2.data.bgActivePosistion = void 0; r2.redrawHint("select", true); } else if (e3.touches[1]) ; else if (e3.touches[0]) ; else if (!e3.touches[0]) { r2.data.bgActivePosistion = void 0; r2.redrawHint("select", true); var draggedEles = r2.dragData.touchDragEles; if (start3 != null) { var startWasGrabbed = start3._private.grabbed; freeDraggedElements(draggedEles); r2.redrawHint("drag", true); r2.redrawHint("eles", true); if (startWasGrabbed) { start3.emit(makeEvent("freeon")); draggedEles.emit(makeEvent("free")); if (r2.dragData.didDrag) { start3.emit(makeEvent("dragfreeon")); draggedEles.emit(makeEvent("dragfree")); } } triggerEvents(start3, ["touchend", "tapend", "vmouseup", "tapdragout"], e3, { x: now3[0], y: now3[1] }); start3.unactivate(); r2.touchData.start = null; } else { var near = r2.findNearestElement(now3[0], now3[1], true, true); triggerEvents(near, ["touchend", "tapend", "vmouseup", "tapdragout"], e3, { x: now3[0], y: now3[1] }); } var dx = r2.touchData.startPosition[0] - now3[0]; var dx2 = dx * dx; var dy = r2.touchData.startPosition[1] - now3[1]; var dy2 = dy * dy; var dist22 = dx2 + dy2; var rdist2 = dist22 * zoom2 * zoom2; if (!r2.touchData.singleTouchMoved) { if (!start3) { cy.$(":selected").unselect(["tapunselect"]); } triggerEvents(start3, ["tap", "vclick"], e3, { x: now3[0], y: now3[1] }); didDoubleTouch = false; if (e3.timeStamp - prevTouchTimeStamp <= cy.multiClickDebounceTime()) { touchTimeout && clearTimeout(touchTimeout); didDoubleTouch = true; prevTouchTimeStamp = null; triggerEvents(start3, ["dbltap", "vdblclick"], e3, { x: now3[0], y: now3[1] }); } else { touchTimeout = setTimeout(function() { if (didDoubleTouch) return; triggerEvents(start3, ["onetap", "voneclick"], e3, { x: now3[0], y: now3[1] }); }, cy.multiClickDebounceTime()); prevTouchTimeStamp = e3.timeStamp; } } if (start3 != null && !r2.dragData.didDrag && start3._private.selectable && rdist2 < r2.touchTapThreshold2 && !r2.pinching) { if (cy.selectionType() === "single") { cy.$(isSelected).unmerge(start3).unselect(["tapunselect"]); start3.select(["tapselect"]); } else { if (start3.selected()) { start3.unselect(["tapunselect"]); } else { start3.select(["tapselect"]); } } r2.redrawHint("eles", true); } r2.touchData.singleTouchMoved = true; } for (var j3 = 0; j3 < now3.length; j3++) { earlier[j3] = now3[j3]; } r2.dragData.didDrag = false; if (e3.touches.length === 0) { r2.touchData.dragDelta = []; r2.touchData.startPosition = [null, null, null, null, null, null]; r2.touchData.startGPosition = null; r2.touchData.didSelect = false; } if (e3.touches.length < 2) { if (e3.touches.length === 1) { r2.touchData.startGPosition = [e3.touches[0].clientX, e3.touches[0].clientY]; } r2.pinching = false; r2.redrawHint("eles", true); r2.redraw(); } }, "touchendHandler"), false); if (typeof TouchEvent === "undefined") { var pointers = []; var makeTouch = /* @__PURE__ */ __name(function makeTouch2(e3) { return { clientX: e3.clientX, clientY: e3.clientY, force: 1, identifier: e3.pointerId, pageX: e3.pageX, pageY: e3.pageY, radiusX: e3.width / 2, radiusY: e3.height / 2, screenX: e3.screenX, screenY: e3.screenY, target: e3.target }; }, "makeTouch"); var makePointer = /* @__PURE__ */ __name(function makePointer2(e3) { return { event: e3, touch: makeTouch(e3) }; }, "makePointer"); var addPointer = /* @__PURE__ */ __name(function addPointer2(e3) { pointers.push(makePointer(e3)); }, "addPointer"); var removePointer = /* @__PURE__ */ __name(function removePointer2(e3) { for (var i2 = 0; i2 < pointers.length; i2++) { var p3 = pointers[i2]; if (p3.event.pointerId === e3.pointerId) { pointers.splice(i2, 1); return; } } }, "removePointer"); var updatePointer = /* @__PURE__ */ __name(function updatePointer2(e3) { var p3 = pointers.filter(function(p4) { return p4.event.pointerId === e3.pointerId; })[0]; p3.event = e3; p3.touch = makeTouch(e3); }, "updatePointer"); var addTouchesToEvent = /* @__PURE__ */ __name(function addTouchesToEvent2(e3) { e3.touches = pointers.map(function(p3) { return p3.touch; }); }, "addTouchesToEvent"); var pointerIsMouse = /* @__PURE__ */ __name(function pointerIsMouse2(e3) { return e3.pointerType === "mouse" || e3.pointerType === 4; }, "pointerIsMouse"); r2.registerBinding(r2.container, "pointerdown", function(e3) { if (pointerIsMouse(e3)) { return; } e3.preventDefault(); addPointer(e3); addTouchesToEvent(e3); touchstartHandler(e3); }); r2.registerBinding(r2.container, "pointerup", function(e3) { if (pointerIsMouse(e3)) { return; } removePointer(e3); addTouchesToEvent(e3); touchendHandler(e3); }); r2.registerBinding(r2.container, "pointercancel", function(e3) { if (pointerIsMouse(e3)) { return; } removePointer(e3); addTouchesToEvent(e3); touchcancelHandler(e3); }); r2.registerBinding(r2.container, "pointermove", function(e3) { if (pointerIsMouse(e3)) { return; } e3.preventDefault(); updatePointer(e3); addTouchesToEvent(e3); touchmoveHandler(e3); }); } }; BRp$2 = {}; BRp$2.generatePolygon = function(name, points) { return this.nodeShapes[name] = { renderer: this, name, points, draw: /* @__PURE__ */ __name(function draw26(context, centerX, centerY, width3, height2, cornerRadius) { this.renderer.nodeShapeImpl("polygon", context, centerX, centerY, width3, height2, this.points); }, "draw"), intersectLine: /* @__PURE__ */ __name(function intersectLine3(nodeX, nodeY, width3, height2, x5, y6, padding2, cornerRadius) { return polygonIntersectLine(x5, y6, this.points, nodeX, nodeY, width3 / 2, height2 / 2, padding2); }, "intersectLine"), checkPoint: /* @__PURE__ */ __name(function checkPoint(x5, y6, padding2, width3, height2, centerX, centerY, cornerRadius) { return pointInsidePolygon(x5, y6, this.points, centerX, centerY, width3, height2, [0, -1], padding2); }, "checkPoint"), hasMiterBounds: name !== "rectangle", miterBounds: /* @__PURE__ */ __name(function miterBounds(centerX, centerY, width3, height2, strokeWidth, strokePosition) { return miterBox(this.points, centerX, centerY, width3, height2, strokeWidth); }, "miterBounds") }; }; BRp$2.generateEllipse = function() { return this.nodeShapes["ellipse"] = { renderer: this, name: "ellipse", draw: /* @__PURE__ */ __name(function draw26(context, centerX, centerY, width3, height2, cornerRadius) { this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width3, height2); }, "draw"), intersectLine: /* @__PURE__ */ __name(function intersectLine3(nodeX, nodeY, width3, height2, x5, y6, padding2, cornerRadius) { return intersectLineEllipse(x5, y6, nodeX, nodeY, width3 / 2 + padding2, height2 / 2 + padding2); }, "intersectLine"), checkPoint: /* @__PURE__ */ __name(function checkPoint(x5, y6, padding2, width3, height2, centerX, centerY, cornerRadius) { return checkInEllipse(x5, y6, width3, height2, centerX, centerY, padding2); }, "checkPoint") }; }; BRp$2.generateRoundPolygon = function(name, points) { return this.nodeShapes[name] = { renderer: this, name, points, getOrCreateCorners: /* @__PURE__ */ __name(function getOrCreateCorners(centerX, centerY, width3, height2, cornerRadius, rs, field) { if (rs[field] !== void 0 && rs[field + "-cx"] === centerX && rs[field + "-cy"] === centerY) { return rs[field]; } rs[field] = new Array(points.length / 2); rs[field + "-cx"] = centerX; rs[field + "-cy"] = centerY; var halfW = width3 / 2; var halfH = height2 / 2; cornerRadius = cornerRadius === "auto" ? getRoundPolygonRadius(width3, height2) : cornerRadius; var p3 = new Array(points.length / 2); for (var _i = 0; _i < points.length / 2; _i++) { p3[_i] = { x: centerX + halfW * points[_i * 2], y: centerY + halfH * points[_i * 2 + 1] }; } var i2, p1, p22, p32, len = p3.length; p1 = p3[len - 1]; for (i2 = 0; i2 < len; i2++) { p22 = p3[i2 % len]; p32 = p3[(i2 + 1) % len]; rs[field][i2] = getRoundCorner(p1, p22, p32, cornerRadius); p1 = p22; p22 = p32; } return rs[field]; }, "getOrCreateCorners"), draw: /* @__PURE__ */ __name(function draw26(context, centerX, centerY, width3, height2, cornerRadius, rs) { this.renderer.nodeShapeImpl("round-polygon", context, centerX, centerY, width3, height2, this.points, this.getOrCreateCorners(centerX, centerY, width3, height2, cornerRadius, rs, "drawCorners")); }, "draw"), intersectLine: /* @__PURE__ */ __name(function intersectLine3(nodeX, nodeY, width3, height2, x5, y6, padding2, cornerRadius, rs) { return roundPolygonIntersectLine(x5, y6, this.points, nodeX, nodeY, width3, height2, padding2, this.getOrCreateCorners(nodeX, nodeY, width3, height2, cornerRadius, rs, "corners")); }, "intersectLine"), checkPoint: /* @__PURE__ */ __name(function checkPoint(x5, y6, padding2, width3, height2, centerX, centerY, cornerRadius, rs) { return pointInsideRoundPolygon(x5, y6, this.points, centerX, centerY, width3, height2, this.getOrCreateCorners(centerX, centerY, width3, height2, cornerRadius, rs, "corners")); }, "checkPoint") }; }; BRp$2.generateRoundRectangle = function() { return this.nodeShapes["round-rectangle"] = this.nodeShapes["roundrectangle"] = { renderer: this, name: "round-rectangle", points: generateUnitNgonPointsFitToSquare(4, 0), draw: /* @__PURE__ */ __name(function draw26(context, centerX, centerY, width3, height2, cornerRadius) { this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width3, height2, this.points, cornerRadius); }, "draw"), intersectLine: /* @__PURE__ */ __name(function intersectLine3(nodeX, nodeY, width3, height2, x5, y6, padding2, cornerRadius) { return roundRectangleIntersectLine(x5, y6, nodeX, nodeY, width3, height2, padding2, cornerRadius); }, "intersectLine"), checkPoint: /* @__PURE__ */ __name(function checkPoint(x5, y6, padding2, width3, height2, centerX, centerY, cornerRadius) { var halfWidth = width3 / 2; var halfHeight = height2 / 2; cornerRadius = cornerRadius === "auto" ? getRoundRectangleRadius(width3, height2) : cornerRadius; cornerRadius = Math.min(halfWidth, halfHeight, cornerRadius); var diam = cornerRadius * 2; if (pointInsidePolygon(x5, y6, this.points, centerX, centerY, width3, height2 - diam, [0, -1], padding2)) { return true; } if (pointInsidePolygon(x5, y6, this.points, centerX, centerY, width3 - diam, height2, [0, -1], padding2)) { return true; } if (checkInEllipse(x5, y6, diam, diam, centerX - halfWidth + cornerRadius, centerY - halfHeight + cornerRadius, padding2)) { return true; } if (checkInEllipse(x5, y6, diam, diam, centerX + halfWidth - cornerRadius, centerY - halfHeight + cornerRadius, padding2)) { return true; } if (checkInEllipse(x5, y6, diam, diam, centerX + halfWidth - cornerRadius, centerY + halfHeight - cornerRadius, padding2)) { return true; } if (checkInEllipse(x5, y6, diam, diam, centerX - halfWidth + cornerRadius, centerY + halfHeight - cornerRadius, padding2)) { return true; } return false; }, "checkPoint") }; }; BRp$2.generateCutRectangle = function() { return this.nodeShapes["cut-rectangle"] = this.nodeShapes["cutrectangle"] = { renderer: this, name: "cut-rectangle", cornerLength: getCutRectangleCornerLength(), points: generateUnitNgonPointsFitToSquare(4, 0), draw: /* @__PURE__ */ __name(function draw26(context, centerX, centerY, width3, height2, cornerRadius) { this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width3, height2, null, cornerRadius); }, "draw"), generateCutTrianglePts: /* @__PURE__ */ __name(function generateCutTrianglePts(width3, height2, centerX, centerY, cornerRadius) { var cl = cornerRadius === "auto" ? this.cornerLength : cornerRadius; var hh = height2 / 2; var hw = width3 / 2; var xBegin = centerX - hw; var xEnd = centerX + hw; var yBegin = centerY - hh; var yEnd = centerY + hh; return { topLeft: [xBegin, yBegin + cl, xBegin + cl, yBegin, xBegin + cl, yBegin + cl], topRight: [xEnd - cl, yBegin, xEnd, yBegin + cl, xEnd - cl, yBegin + cl], bottomRight: [xEnd, yEnd - cl, xEnd - cl, yEnd, xEnd - cl, yEnd - cl], bottomLeft: [xBegin + cl, yEnd, xBegin, yEnd - cl, xBegin + cl, yEnd - cl] }; }, "generateCutTrianglePts"), intersectLine: /* @__PURE__ */ __name(function intersectLine3(nodeX, nodeY, width3, height2, x5, y6, padding2, cornerRadius) { var cPts = this.generateCutTrianglePts(width3 + 2 * padding2, height2 + 2 * padding2, nodeX, nodeY, cornerRadius); var pts2 = [].concat.apply([], [cPts.topLeft.splice(0, 4), cPts.topRight.splice(0, 4), cPts.bottomRight.splice(0, 4), cPts.bottomLeft.splice(0, 4)]); return polygonIntersectLine(x5, y6, pts2, nodeX, nodeY); }, "intersectLine"), checkPoint: /* @__PURE__ */ __name(function checkPoint(x5, y6, padding2, width3, height2, centerX, centerY, cornerRadius) { var cl = cornerRadius === "auto" ? this.cornerLength : cornerRadius; if (pointInsidePolygon(x5, y6, this.points, centerX, centerY, width3, height2 - 2 * cl, [0, -1], padding2)) { return true; } if (pointInsidePolygon(x5, y6, this.points, centerX, centerY, width3 - 2 * cl, height2, [0, -1], padding2)) { return true; } var cutTrianglePts = this.generateCutTrianglePts(width3, height2, centerX, centerY); return pointInsidePolygonPoints(x5, y6, cutTrianglePts.topLeft) || pointInsidePolygonPoints(x5, y6, cutTrianglePts.topRight) || pointInsidePolygonPoints(x5, y6, cutTrianglePts.bottomRight) || pointInsidePolygonPoints(x5, y6, cutTrianglePts.bottomLeft); }, "checkPoint") }; }; BRp$2.generateBarrel = function() { return this.nodeShapes["barrel"] = { renderer: this, name: "barrel", points: generateUnitNgonPointsFitToSquare(4, 0), draw: /* @__PURE__ */ __name(function draw26(context, centerX, centerY, width3, height2, cornerRadius) { this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width3, height2); }, "draw"), intersectLine: /* @__PURE__ */ __name(function intersectLine3(nodeX, nodeY, width3, height2, x5, y6, padding2, cornerRadius) { var t03 = 0.15; var t13 = 0.5; var t22 = 0.85; var bPts = this.generateBarrelBezierPts(width3 + 2 * padding2, height2 + 2 * padding2, nodeX, nodeY); var approximateBarrelCurvePts = /* @__PURE__ */ __name(function approximateBarrelCurvePts2(pts3) { var m0 = qbezierPtAt({ x: pts3[0], y: pts3[1] }, { x: pts3[2], y: pts3[3] }, { x: pts3[4], y: pts3[5] }, t03); var m1 = qbezierPtAt({ x: pts3[0], y: pts3[1] }, { x: pts3[2], y: pts3[3] }, { x: pts3[4], y: pts3[5] }, t13); var m22 = qbezierPtAt({ x: pts3[0], y: pts3[1] }, { x: pts3[2], y: pts3[3] }, { x: pts3[4], y: pts3[5] }, t22); return [pts3[0], pts3[1], m0.x, m0.y, m1.x, m1.y, m22.x, m22.y, pts3[4], pts3[5]]; }, "approximateBarrelCurvePts"); var pts2 = [].concat(approximateBarrelCurvePts(bPts.topLeft), approximateBarrelCurvePts(bPts.topRight), approximateBarrelCurvePts(bPts.bottomRight), approximateBarrelCurvePts(bPts.bottomLeft)); return polygonIntersectLine(x5, y6, pts2, nodeX, nodeY); }, "intersectLine"), generateBarrelBezierPts: /* @__PURE__ */ __name(function generateBarrelBezierPts(width3, height2, centerX, centerY) { var hh = height2 / 2; var hw = width3 / 2; var xBegin = centerX - hw; var xEnd = centerX + hw; var yBegin = centerY - hh; var yEnd = centerY + hh; var curveConstants = getBarrelCurveConstants(width3, height2); var hOffset = curveConstants.heightOffset; var wOffset = curveConstants.widthOffset; var ctrlPtXOffset = curveConstants.ctrlPtOffsetPct * width3; var pts2 = { topLeft: [xBegin, yBegin + hOffset, xBegin + ctrlPtXOffset, yBegin, xBegin + wOffset, yBegin], topRight: [xEnd - wOffset, yBegin, xEnd - ctrlPtXOffset, yBegin, xEnd, yBegin + hOffset], bottomRight: [xEnd, yEnd - hOffset, xEnd - ctrlPtXOffset, yEnd, xEnd - wOffset, yEnd], bottomLeft: [xBegin + wOffset, yEnd, xBegin + ctrlPtXOffset, yEnd, xBegin, yEnd - hOffset] }; pts2.topLeft.isTop = true; pts2.topRight.isTop = true; pts2.bottomLeft.isBottom = true; pts2.bottomRight.isBottom = true; return pts2; }, "generateBarrelBezierPts"), checkPoint: /* @__PURE__ */ __name(function checkPoint(x5, y6, padding2, width3, height2, centerX, centerY, cornerRadius) { var curveConstants = getBarrelCurveConstants(width3, height2); var hOffset = curveConstants.heightOffset; var wOffset = curveConstants.widthOffset; if (pointInsidePolygon(x5, y6, this.points, centerX, centerY, width3, height2 - 2 * hOffset, [0, -1], padding2)) { return true; } if (pointInsidePolygon(x5, y6, this.points, centerX, centerY, width3 - 2 * wOffset, height2, [0, -1], padding2)) { return true; } var barrelCurvePts = this.generateBarrelBezierPts(width3, height2, centerX, centerY); var getCurveT = /* @__PURE__ */ __name(function getCurveT2(x6, y7, curvePts) { var x0 = curvePts[4]; var x1 = curvePts[2]; var x22 = curvePts[0]; var y02 = curvePts[5]; var y23 = curvePts[1]; var xMin = Math.min(x0, x22); var xMax = Math.max(x0, x22); var yMin = Math.min(y02, y23); var yMax = Math.max(y02, y23); if (xMin <= x6 && x6 <= xMax && yMin <= y7 && y7 <= yMax) { var coeff = bezierPtsToQuadCoeff(x0, x1, x22); var roots = solveQuadratic(coeff[0], coeff[1], coeff[2], x6); var validRoots = roots.filter(function(r2) { return 0 <= r2 && r2 <= 1; }); if (validRoots.length > 0) { return validRoots[0]; } } return null; }, "getCurveT"); var curveRegions = Object.keys(barrelCurvePts); for (var i2 = 0; i2 < curveRegions.length; i2++) { var corner = curveRegions[i2]; var cornerPts = barrelCurvePts[corner]; var t4 = getCurveT(x5, y6, cornerPts); if (t4 == null) { continue; } var y0 = cornerPts[5]; var y1 = cornerPts[3]; var y22 = cornerPts[1]; var bezY = qbezierAt(y0, y1, y22, t4); if (cornerPts.isTop && bezY <= y6) { return true; } if (cornerPts.isBottom && y6 <= bezY) { return true; } } return false; }, "checkPoint") }; }; BRp$2.generateBottomRoundrectangle = function() { return this.nodeShapes["bottom-round-rectangle"] = this.nodeShapes["bottomroundrectangle"] = { renderer: this, name: "bottom-round-rectangle", points: generateUnitNgonPointsFitToSquare(4, 0), draw: /* @__PURE__ */ __name(function draw26(context, centerX, centerY, width3, height2, cornerRadius) { this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width3, height2, this.points, cornerRadius); }, "draw"), intersectLine: /* @__PURE__ */ __name(function intersectLine3(nodeX, nodeY, width3, height2, x5, y6, padding2, cornerRadius) { var topStartX = nodeX - (width3 / 2 + padding2); var topStartY = nodeY - (height2 / 2 + padding2); var topEndY = topStartY; var topEndX = nodeX + (width3 / 2 + padding2); var topIntersections = finiteLinesIntersect(x5, y6, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false); if (topIntersections.length > 0) { return topIntersections; } return roundRectangleIntersectLine(x5, y6, nodeX, nodeY, width3, height2, padding2, cornerRadius); }, "intersectLine"), checkPoint: /* @__PURE__ */ __name(function checkPoint(x5, y6, padding2, width3, height2, centerX, centerY, cornerRadius) { cornerRadius = cornerRadius === "auto" ? getRoundRectangleRadius(width3, height2) : cornerRadius; var diam = 2 * cornerRadius; if (pointInsidePolygon(x5, y6, this.points, centerX, centerY, width3, height2 - diam, [0, -1], padding2)) { return true; } if (pointInsidePolygon(x5, y6, this.points, centerX, centerY, width3 - diam, height2, [0, -1], padding2)) { return true; } var outerWidth = width3 / 2 + 2 * padding2; var outerHeight = height2 / 2 + 2 * padding2; var points = [centerX - outerWidth, centerY - outerHeight, centerX - outerWidth, centerY, centerX + outerWidth, centerY, centerX + outerWidth, centerY - outerHeight]; if (pointInsidePolygonPoints(x5, y6, points)) { return true; } if (checkInEllipse(x5, y6, diam, diam, centerX + width3 / 2 - cornerRadius, centerY + height2 / 2 - cornerRadius, padding2)) { return true; } if (checkInEllipse(x5, y6, diam, diam, centerX - width3 / 2 + cornerRadius, centerY + height2 / 2 - cornerRadius, padding2)) { return true; } return false; }, "checkPoint") }; }; BRp$2.registerNodeShapes = function() { var nodeShapes = this.nodeShapes = {}; var renderer10 = this; this.generateEllipse(); this.generatePolygon("triangle", generateUnitNgonPointsFitToSquare(3, 0)); this.generateRoundPolygon("round-triangle", generateUnitNgonPointsFitToSquare(3, 0)); this.generatePolygon("rectangle", generateUnitNgonPointsFitToSquare(4, 0)); nodeShapes["square"] = nodeShapes["rectangle"]; this.generateRoundRectangle(); this.generateCutRectangle(); this.generateBarrel(); this.generateBottomRoundrectangle(); { var diamondPoints = [0, 1, 1, 0, 0, -1, -1, 0]; this.generatePolygon("diamond", diamondPoints); this.generateRoundPolygon("round-diamond", diamondPoints); } this.generatePolygon("pentagon", generateUnitNgonPointsFitToSquare(5, 0)); this.generateRoundPolygon("round-pentagon", generateUnitNgonPointsFitToSquare(5, 0)); this.generatePolygon("hexagon", generateUnitNgonPointsFitToSquare(6, 0)); this.generateRoundPolygon("round-hexagon", generateUnitNgonPointsFitToSquare(6, 0)); this.generatePolygon("heptagon", generateUnitNgonPointsFitToSquare(7, 0)); this.generateRoundPolygon("round-heptagon", generateUnitNgonPointsFitToSquare(7, 0)); this.generatePolygon("octagon", generateUnitNgonPointsFitToSquare(8, 0)); this.generateRoundPolygon("round-octagon", generateUnitNgonPointsFitToSquare(8, 0)); var star5Points = new Array(20); { var outerPoints = generateUnitNgonPoints(5, 0); var innerPoints = generateUnitNgonPoints(5, Math.PI / 5); var innerRadius = 0.5 * (3 - Math.sqrt(5)); innerRadius *= 1.57; for (var i2 = 0; i2 < innerPoints.length / 2; i2++) { innerPoints[i2 * 2] *= innerRadius; innerPoints[i2 * 2 + 1] *= innerRadius; } for (var i2 = 0; i2 < 20 / 4; i2++) { star5Points[i2 * 4] = outerPoints[i2 * 2]; star5Points[i2 * 4 + 1] = outerPoints[i2 * 2 + 1]; star5Points[i2 * 4 + 2] = innerPoints[i2 * 2]; star5Points[i2 * 4 + 3] = innerPoints[i2 * 2 + 1]; } } star5Points = fitPolygonToSquare(star5Points); this.generatePolygon("star", star5Points); this.generatePolygon("vee", [-1, -1, 0, -0.333, 1, -1, 0, 1]); this.generatePolygon("rhomboid", [-1, -1, 0.333, -1, 1, 1, -0.333, 1]); this.generatePolygon("right-rhomboid", [-0.333, -1, 1, -1, 0.333, 1, -1, 1]); this.nodeShapes["concavehexagon"] = this.generatePolygon("concave-hexagon", [-1, -0.95, -0.75, 0, -1, 0.95, 1, 0.95, 0.75, 0, 1, -0.95]); { var tagPoints = [-1, -1, 0.25, -1, 1, 0, 0.25, 1, -1, 1]; this.generatePolygon("tag", tagPoints); this.generateRoundPolygon("round-tag", tagPoints); } nodeShapes.makePolygon = function(points) { var key = points.join("$"); var name = "polygon-" + key; var shape; if (shape = this[name]) { return shape; } return renderer10.generatePolygon(name, points); }; }; BRp$1 = {}; BRp$1.timeToRender = function() { return this.redrawTotalTime / this.redrawCount; }; BRp$1.redraw = function(options2) { options2 = options2 || staticEmptyObject(); var r2 = this; if (r2.averageRedrawTime === void 0) { r2.averageRedrawTime = 0; } if (r2.lastRedrawTime === void 0) { r2.lastRedrawTime = 0; } if (r2.lastDrawTime === void 0) { r2.lastDrawTime = 0; } r2.requestedFrame = true; r2.renderOptions = options2; }; BRp$1.beforeRender = function(fn3, priority3) { if (this.destroyed) { return; } if (priority3 == null) { error("Priority is not optional for beforeRender"); } var cbs = this.beforeRenderCallbacks; cbs.push({ fn: fn3, priority: priority3 }); cbs.sort(function(a2, b3) { return b3.priority - a2.priority; }); }; beforeRenderCallbacks = /* @__PURE__ */ __name(function beforeRenderCallbacks2(r2, willDraw, startTime) { var cbs = r2.beforeRenderCallbacks; for (var i2 = 0; i2 < cbs.length; i2++) { cbs[i2].fn(willDraw, startTime); } }, "beforeRenderCallbacks"); BRp$1.startRenderLoop = function() { var r2 = this; var cy = r2.cy; if (r2.renderLoopStarted) { return; } else { r2.renderLoopStarted = true; } var _renderFn = /* @__PURE__ */ __name(function renderFn(requestTime) { if (r2.destroyed) { return; } if (cy.batching()) ; else if (r2.requestedFrame && !r2.skipFrame) { beforeRenderCallbacks(r2, true, requestTime); var startTime = performanceNow(); r2.render(r2.renderOptions); var endTime = r2.lastDrawTime = performanceNow(); if (r2.averageRedrawTime === void 0) { r2.averageRedrawTime = endTime - startTime; } if (r2.redrawCount === void 0) { r2.redrawCount = 0; } r2.redrawCount++; if (r2.redrawTotalTime === void 0) { r2.redrawTotalTime = 0; } var duration = endTime - startTime; r2.redrawTotalTime += duration; r2.lastRedrawTime = duration; r2.averageRedrawTime = r2.averageRedrawTime / 2 + duration / 2; r2.requestedFrame = false; } else { beforeRenderCallbacks(r2, false, requestTime); } r2.skipFrame = false; requestAnimationFrame2(_renderFn); }, "renderFn"); requestAnimationFrame2(_renderFn); }; BaseRenderer = /* @__PURE__ */ __name(function BaseRenderer2(options2) { this.init(options2); }, "BaseRenderer"); BR = BaseRenderer; BRp = BR.prototype; BRp.clientFunctions = ["redrawHint", "render", "renderTo", "matchCanvasSize", "nodeShapeImpl", "arrowShapeImpl"]; BRp.init = function(options2) { var r2 = this; r2.options = options2; r2.cy = options2.cy; var ctr = r2.container = options2.cy.container(); var containerWindow = r2.cy.window(); if (containerWindow) { var document2 = containerWindow.document; var head2 = document2.head; var stylesheetId = "__________cytoscape_stylesheet"; var className = "__________cytoscape_container"; var stylesheetAlreadyExists = document2.getElementById(stylesheetId) != null; if (ctr.className.indexOf(className) < 0) { ctr.className = (ctr.className || "") + " " + className; } if (!stylesheetAlreadyExists) { var stylesheet3 = document2.createElement("style"); stylesheet3.id = stylesheetId; stylesheet3.textContent = "." + className + " { position: relative; }"; head2.insertBefore(stylesheet3, head2.children[0]); } var computedStyle = containerWindow.getComputedStyle(ctr); var position5 = computedStyle.getPropertyValue("position"); if (position5 === "static") { warn("A Cytoscape container has style position:static and so can not use UI extensions properly"); } } r2.selection = [void 0, void 0, void 0, void 0, 0]; r2.bezierProjPcts = [0.05, 0.225, 0.4, 0.5, 0.6, 0.775, 0.95]; r2.hoverData = { down: null, last: null, downTime: null, triggerMode: null, dragging: false, initialPan: [null, null], capture: false }; r2.dragData = { possibleDragElements: [] }; r2.touchData = { start: null, capture: false, // These 3 fields related to tap, taphold events startPosition: [null, null, null, null, null, null], singleTouchStartTime: null, singleTouchMoved: true, now: [null, null, null, null, null, null], earlier: [null, null, null, null, null, null] }; r2.redraws = 0; r2.showFps = options2.showFps; r2.debug = options2.debug; r2.webgl = options2.webgl; r2.hideEdgesOnViewport = options2.hideEdgesOnViewport; r2.textureOnViewport = options2.textureOnViewport; r2.wheelSensitivity = options2.wheelSensitivity; r2.motionBlurEnabled = options2.motionBlur; r2.forcedPixelRatio = number$1(options2.pixelRatio) ? options2.pixelRatio : null; r2.motionBlur = options2.motionBlur; r2.motionBlurOpacity = options2.motionBlurOpacity; r2.motionBlurTransparency = 1 - r2.motionBlurOpacity; r2.motionBlurPxRatio = 1; r2.mbPxRBlurry = 1; r2.minMbLowQualFrames = 4; r2.fullQualityMb = false; r2.clearedForMotionBlur = []; r2.desktopTapThreshold = options2.desktopTapThreshold; r2.desktopTapThreshold2 = options2.desktopTapThreshold * options2.desktopTapThreshold; r2.touchTapThreshold = options2.touchTapThreshold; r2.touchTapThreshold2 = options2.touchTapThreshold * options2.touchTapThreshold; r2.tapholdDuration = 500; r2.bindings = []; r2.beforeRenderCallbacks = []; r2.beforeRenderPriorities = { // higher priority execs before lower one animations: 400, eleCalcs: 300, eleTxrDeq: 200, lyrTxrDeq: 150, lyrTxrSkip: 100 }; r2.registerNodeShapes(); r2.registerArrowShapes(); r2.registerCalculationListeners(); }; BRp.notify = function(eventName, eles) { var r2 = this; var cy = r2.cy; if (this.destroyed) { return; } if (eventName === "init") { r2.load(); return; } if (eventName === "destroy") { r2.destroy(); return; } if (eventName === "add" || eventName === "remove" || eventName === "move" && cy.hasCompoundNodes() || eventName === "load" || eventName === "zorder" || eventName === "mount") { r2.invalidateCachedZSortedEles(); } if (eventName === "viewport") { r2.redrawHint("select", true); } if (eventName === "gc") { r2.redrawHint("gc", true); } if (eventName === "load" || eventName === "resize" || eventName === "mount") { r2.invalidateContainerClientCoordsCache(); r2.matchCanvasSize(r2.container); } r2.redrawHint("eles", true); r2.redrawHint("drag", true); this.startRenderLoop(); this.redraw(); }; BRp.destroy = function() { var r2 = this; r2.destroyed = true; r2.cy.stopAnimationLoop(); for (var i2 = 0; i2 < r2.bindings.length; i2++) { var binding = r2.bindings[i2]; var b3 = binding; var tgt = b3.target; (tgt.off || tgt.removeEventListener).apply(tgt, b3.args); } r2.bindings = []; r2.beforeRenderCallbacks = []; r2.onUpdateEleCalcsFns = []; if (r2.removeObserver) { r2.removeObserver.disconnect(); } if (r2.styleObserver) { r2.styleObserver.disconnect(); } if (r2.resizeObserver) { r2.resizeObserver.disconnect(); } if (r2.labelCalcDiv) { try { document.body.removeChild(r2.labelCalcDiv); } catch (e3) { } } }; BRp.isHeadless = function() { return false; }; [BRp$f, BRp$5, BRp$4, BRp$3, BRp$2, BRp$1].forEach(function(props) { extend4(BRp, props); }); fullFpsTime = 1e3 / 60; defs = { setupDequeueing: /* @__PURE__ */ __name(function setupDequeueing(opts) { return /* @__PURE__ */ __name(function setupDequeueingImpl() { var self2 = this; var r2 = this.renderer; if (self2.dequeueingSetup) { return; } else { self2.dequeueingSetup = true; } var queueRedraw = debounce(function() { r2.redrawHint("eles", true); r2.redrawHint("drag", true); r2.redraw(); }, opts.deqRedrawThreshold); var dequeue = /* @__PURE__ */ __name(function dequeue2(willDraw, frameStartTime) { var startTime = performanceNow(); var avgRenderTime = r2.averageRedrawTime; var renderTime = r2.lastRedrawTime; var deqd = []; var extent2 = r2.cy.extent(); var pixelRatio = r2.getPixelRatio(); if (!willDraw) { r2.flushRenderedStyleQueue(); } while (true) { var now3 = performanceNow(); var duration = now3 - startTime; var frameDuration = now3 - frameStartTime; if (renderTime < fullFpsTime) { var timeAvailable = fullFpsTime - (willDraw ? avgRenderTime : 0); if (frameDuration >= opts.deqFastCost * timeAvailable) { break; } } else { if (willDraw) { if (duration >= opts.deqCost * renderTime || duration >= opts.deqAvgCost * avgRenderTime) { break; } } else if (frameDuration >= opts.deqNoDrawCost * fullFpsTime) { break; } } var thisDeqd = opts.deq(self2, pixelRatio, extent2); if (thisDeqd.length > 0) { for (var i2 = 0; i2 < thisDeqd.length; i2++) { deqd.push(thisDeqd[i2]); } } else { break; } } if (deqd.length > 0) { opts.onDeqd(self2, deqd); if (!willDraw && opts.shouldRedraw(self2, deqd, pixelRatio, extent2)) { queueRedraw(); } } }, "dequeue"); var priority3 = opts.priority || noop$1; r2.beforeRender(dequeue, priority3(self2)); }, "setupDequeueingImpl"); }, "setupDequeueing") }; ElementTextureCacheLookup = /* @__PURE__ */ (function() { function ElementTextureCacheLookup2(getKey3) { var doesEleInvalidateKey = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : falsify; _classCallCheck(this, ElementTextureCacheLookup2); this.idsByKey = new Map$1(); this.keyForId = new Map$1(); this.cachesByLvl = new Map$1(); this.lvls = []; this.getKey = getKey3; this.doesEleInvalidateKey = doesEleInvalidateKey; } __name(ElementTextureCacheLookup2, "ElementTextureCacheLookup"); return _createClass(ElementTextureCacheLookup2, [{ key: "getIdsFor", value: /* @__PURE__ */ __name(function getIdsFor(key) { if (key == null) { error("Can not get id list for null key"); } var idsByKey = this.idsByKey; var ids = this.idsByKey.get(key); if (!ids) { ids = new Set$1(); idsByKey.set(key, ids); } return ids; }, "getIdsFor") }, { key: "addIdForKey", value: /* @__PURE__ */ __name(function addIdForKey(key, id30) { if (key != null) { this.getIdsFor(key).add(id30); } }, "addIdForKey") }, { key: "deleteIdForKey", value: /* @__PURE__ */ __name(function deleteIdForKey(key, id30) { if (key != null) { this.getIdsFor(key)["delete"](id30); } }, "deleteIdForKey") }, { key: "getNumberOfIdsForKey", value: /* @__PURE__ */ __name(function getNumberOfIdsForKey(key) { if (key == null) { return 0; } else { return this.getIdsFor(key).size; } }, "getNumberOfIdsForKey") }, { key: "updateKeyMappingFor", value: /* @__PURE__ */ __name(function updateKeyMappingFor(ele) { var id30 = ele.id(); var prevKey = this.keyForId.get(id30); var currKey = this.getKey(ele); this.deleteIdForKey(prevKey, id30); this.addIdForKey(currKey, id30); this.keyForId.set(id30, currKey); }, "updateKeyMappingFor") }, { key: "deleteKeyMappingFor", value: /* @__PURE__ */ __name(function deleteKeyMappingFor(ele) { var id30 = ele.id(); var prevKey = this.keyForId.get(id30); this.deleteIdForKey(prevKey, id30); this.keyForId["delete"](id30); }, "deleteKeyMappingFor") }, { key: "keyHasChangedFor", value: /* @__PURE__ */ __name(function keyHasChangedFor(ele) { var id30 = ele.id(); var prevKey = this.keyForId.get(id30); var newKey = this.getKey(ele); return prevKey !== newKey; }, "keyHasChangedFor") }, { key: "isInvalid", value: /* @__PURE__ */ __name(function isInvalid(ele) { return this.keyHasChangedFor(ele) || this.doesEleInvalidateKey(ele); }, "isInvalid") }, { key: "getCachesAt", value: /* @__PURE__ */ __name(function getCachesAt(lvl) { var cachesByLvl = this.cachesByLvl, lvls = this.lvls; var caches = cachesByLvl.get(lvl); if (!caches) { caches = new Map$1(); cachesByLvl.set(lvl, caches); lvls.push(lvl); } return caches; }, "getCachesAt") }, { key: "getCache", value: /* @__PURE__ */ __name(function getCache(key, lvl) { return this.getCachesAt(lvl).get(key); }, "getCache") }, { key: "get", value: /* @__PURE__ */ __name(function get5(ele, lvl) { var key = this.getKey(ele); var cache3 = this.getCache(key, lvl); if (cache3 != null) { this.updateKeyMappingFor(ele); } return cache3; }, "get") }, { key: "getForCachedKey", value: /* @__PURE__ */ __name(function getForCachedKey(ele, lvl) { var key = this.keyForId.get(ele.id()); var cache3 = this.getCache(key, lvl); return cache3; }, "getForCachedKey") }, { key: "hasCache", value: /* @__PURE__ */ __name(function hasCache(key, lvl) { return this.getCachesAt(lvl).has(key); }, "hasCache") }, { key: "has", value: /* @__PURE__ */ __name(function has2(ele, lvl) { var key = this.getKey(ele); return this.hasCache(key, lvl); }, "has") }, { key: "setCache", value: /* @__PURE__ */ __name(function setCache(key, lvl, cache3) { cache3.key = key; this.getCachesAt(lvl).set(key, cache3); }, "setCache") }, { key: "set", value: /* @__PURE__ */ __name(function set5(ele, lvl, cache3) { var key = this.getKey(ele); this.setCache(key, lvl, cache3); this.updateKeyMappingFor(ele); }, "set") }, { key: "deleteCache", value: /* @__PURE__ */ __name(function deleteCache(key, lvl) { this.getCachesAt(lvl)["delete"](key); }, "deleteCache") }, { key: "delete", value: /* @__PURE__ */ __name(function _delete(ele, lvl) { var key = this.getKey(ele); this.deleteCache(key, lvl); }, "_delete") }, { key: "invalidateKey", value: /* @__PURE__ */ __name(function invalidateKey(key) { var _this = this; this.lvls.forEach(function(lvl) { return _this.deleteCache(key, lvl); }); }, "invalidateKey") // returns true if no other eles reference the invalidated cache (n.b. other eles may need the cache with the same key) }, { key: "invalidate", value: /* @__PURE__ */ __name(function invalidate(ele) { var id30 = ele.id(); var key = this.keyForId.get(id30); this.deleteKeyMappingFor(ele); var entireKeyInvalidated = this.doesEleInvalidateKey(ele); if (entireKeyInvalidated) { this.invalidateKey(key); } return entireKeyInvalidated || this.getNumberOfIdsForKey(key) === 0; }, "invalidate") }]); })(); minTxrH = 25; txrStepH = 50; minLvl$1 = -4; maxLvl$1 = 3; maxZoom$1 = 7.99; eleTxrSpacing = 8; defTxrWidth = 1024; maxTxrW = 1024; maxTxrH = 1024; minUtility = 0.2; maxFullness = 0.8; maxFullnessChecks = 10; deqCost$1 = 0.15; deqAvgCost$1 = 0.1; deqNoDrawCost$1 = 0.9; deqFastCost$1 = 0.9; deqRedrawThreshold$1 = 100; maxDeqSize$1 = 1; getTxrReasons = { dequeue: "dequeue", downscale: "downscale", highQuality: "highQuality" }; initDefaults = defaults$g({ getKey: null, doesEleInvalidateKey: falsify, drawElement: null, getBoundingBox: null, getRotationPoint: null, getRotationOffset: null, isVisible: trueify, allowEdgeTxrCaching: true, allowParentTxrCaching: true }); ElementTextureCache = /* @__PURE__ */ __name(function ElementTextureCache2(renderer10, initOptions) { var self2 = this; self2.renderer = renderer10; self2.onDequeues = []; var opts = initDefaults(initOptions); extend4(self2, opts); self2.lookup = new ElementTextureCacheLookup(opts.getKey, opts.doesEleInvalidateKey); self2.setupDequeueing(); }, "ElementTextureCache"); ETCp = ElementTextureCache.prototype; ETCp.reasons = getTxrReasons; ETCp.getTextureQueue = function(txrH) { var self2 = this; self2.eleImgCaches = self2.eleImgCaches || {}; return self2.eleImgCaches[txrH] = self2.eleImgCaches[txrH] || []; }; ETCp.getRetiredTextureQueue = function(txrH) { var self2 = this; var rtxtrQs = self2.eleImgCaches.retired = self2.eleImgCaches.retired || {}; var rtxtrQ = rtxtrQs[txrH] = rtxtrQs[txrH] || []; return rtxtrQ; }; ETCp.getElementQueue = function() { var self2 = this; var q3 = self2.eleCacheQueue = self2.eleCacheQueue || new Heap(function(a2, b3) { return b3.reqs - a2.reqs; }); return q3; }; ETCp.getElementKeyToQueue = function() { var self2 = this; var k2q = self2.eleKeyToCacheQueue = self2.eleKeyToCacheQueue || {}; return k2q; }; ETCp.getElement = function(ele, bb, pxRatio, lvl, reason) { var self2 = this; var r2 = this.renderer; var zoom2 = r2.cy.zoom(); var lookup2 = this.lookup; if (!bb || bb.w === 0 || bb.h === 0 || isNaN(bb.w) || isNaN(bb.h) || !ele.visible() || ele.removed()) { return null; } if (!self2.allowEdgeTxrCaching && ele.isEdge() || !self2.allowParentTxrCaching && ele.isParent()) { return null; } if (lvl == null) { lvl = Math.ceil(log22(zoom2 * pxRatio)); } if (lvl < minLvl$1) { lvl = minLvl$1; } else if (zoom2 >= maxZoom$1 || lvl > maxLvl$1) { return null; } var scale2 = Math.pow(2, lvl); var eleScaledH = bb.h * scale2; var eleScaledW = bb.w * scale2; var scaledLabelShown = r2.eleTextBiggerThanMin(ele, scale2); if (!this.isVisible(ele, scaledLabelShown)) { return null; } var eleCache = lookup2.get(ele, lvl); if (eleCache && eleCache.invalidated) { eleCache.invalidated = false; eleCache.texture.invalidatedWidth -= eleCache.width; } if (eleCache) { return eleCache; } var txrH; if (eleScaledH <= minTxrH) { txrH = minTxrH; } else if (eleScaledH <= txrStepH) { txrH = txrStepH; } else { txrH = Math.ceil(eleScaledH / txrStepH) * txrStepH; } if (eleScaledH > maxTxrH || eleScaledW > maxTxrW) { return null; } var txrQ = self2.getTextureQueue(txrH); var txr = txrQ[txrQ.length - 2]; var addNewTxr = /* @__PURE__ */ __name(function addNewTxr2() { return self2.recycleTexture(txrH, eleScaledW) || self2.addTexture(txrH, eleScaledW); }, "addNewTxr"); if (!txr) { txr = txrQ[txrQ.length - 1]; } if (!txr) { txr = addNewTxr(); } if (txr.width - txr.usedWidth < eleScaledW) { txr = addNewTxr(); } var scalableFrom = /* @__PURE__ */ __name(function scalableFrom2(otherCache) { return otherCache && otherCache.scaledLabelShown === scaledLabelShown; }, "scalableFrom"); var deqing = reason && reason === getTxrReasons.dequeue; var highQualityReq = reason && reason === getTxrReasons.highQuality; var downscaleReq = reason && reason === getTxrReasons.downscale; var higherCache; for (var l4 = lvl + 1; l4 <= maxLvl$1; l4++) { var c3 = lookup2.get(ele, l4); if (c3) { higherCache = c3; break; } } var oneUpCache = higherCache && higherCache.level === lvl + 1 ? higherCache : null; var downscale = /* @__PURE__ */ __name(function downscale2() { txr.context.drawImage(oneUpCache.texture.canvas, oneUpCache.x, 0, oneUpCache.width, oneUpCache.height, txr.usedWidth, 0, eleScaledW, eleScaledH); }, "downscale"); txr.context.setTransform(1, 0, 0, 1, 0, 0); txr.context.clearRect(txr.usedWidth, 0, eleScaledW, txrH); if (scalableFrom(oneUpCache)) { downscale(); } else if (scalableFrom(higherCache)) { if (highQualityReq) { for (var _l = higherCache.level; _l > lvl; _l--) { oneUpCache = self2.getElement(ele, bb, pxRatio, _l, getTxrReasons.downscale); } downscale(); } else { self2.queueElement(ele, higherCache.level - 1); return higherCache; } } else { var lowerCache; if (!deqing && !highQualityReq && !downscaleReq) { for (var _l2 = lvl - 1; _l2 >= minLvl$1; _l2--) { var _c = lookup2.get(ele, _l2); if (_c) { lowerCache = _c; break; } } } if (scalableFrom(lowerCache)) { self2.queueElement(ele, lvl); return lowerCache; } txr.context.translate(txr.usedWidth, 0); txr.context.scale(scale2, scale2); this.drawElement(txr.context, ele, bb, scaledLabelShown, false); txr.context.scale(1 / scale2, 1 / scale2); txr.context.translate(-txr.usedWidth, 0); } eleCache = { x: txr.usedWidth, texture: txr, level: lvl, scale: scale2, width: eleScaledW, height: eleScaledH, scaledLabelShown }; txr.usedWidth += Math.ceil(eleScaledW + eleTxrSpacing); txr.eleCaches.push(eleCache); lookup2.set(ele, lvl, eleCache); self2.checkTextureFullness(txr); return eleCache; }; ETCp.invalidateElements = function(eles) { for (var i2 = 0; i2 < eles.length; i2++) { this.invalidateElement(eles[i2]); } }; ETCp.invalidateElement = function(ele) { var self2 = this; var lookup2 = self2.lookup; var caches = []; var invalid = lookup2.isInvalid(ele); if (!invalid) { return; } for (var lvl = minLvl$1; lvl <= maxLvl$1; lvl++) { var cache3 = lookup2.getForCachedKey(ele, lvl); if (cache3) { caches.push(cache3); } } var noOtherElesUseCache = lookup2.invalidate(ele); if (noOtherElesUseCache) { for (var i2 = 0; i2 < caches.length; i2++) { var _cache = caches[i2]; var txr = _cache.texture; txr.invalidatedWidth += _cache.width; _cache.invalidated = true; self2.checkTextureUtility(txr); } } self2.removeFromQueue(ele); }; ETCp.checkTextureUtility = function(txr) { if (txr.invalidatedWidth >= minUtility * txr.width) { this.retireTexture(txr); } }; ETCp.checkTextureFullness = function(txr) { var self2 = this; var txrQ = self2.getTextureQueue(txr.height); if (txr.usedWidth / txr.width > maxFullness && txr.fullnessChecks >= maxFullnessChecks) { removeFromArray(txrQ, txr); } else { txr.fullnessChecks++; } }; ETCp.retireTexture = function(txr) { var self2 = this; var txrH = txr.height; var txrQ = self2.getTextureQueue(txrH); var lookup2 = this.lookup; removeFromArray(txrQ, txr); txr.retired = true; var eleCaches = txr.eleCaches; for (var i2 = 0; i2 < eleCaches.length; i2++) { var eleCache = eleCaches[i2]; lookup2.deleteCache(eleCache.key, eleCache.level); } clearArray(eleCaches); var rtxtrQ = self2.getRetiredTextureQueue(txrH); rtxtrQ.push(txr); }; ETCp.addTexture = function(txrH, minW) { var self2 = this; var txrQ = self2.getTextureQueue(txrH); var txr = {}; txrQ.push(txr); txr.eleCaches = []; txr.height = txrH; txr.width = Math.max(defTxrWidth, minW); txr.usedWidth = 0; txr.invalidatedWidth = 0; txr.fullnessChecks = 0; txr.canvas = self2.renderer.makeOffscreenCanvas(txr.width, txr.height); txr.context = txr.canvas.getContext("2d"); return txr; }; ETCp.recycleTexture = function(txrH, minW) { var self2 = this; var txrQ = self2.getTextureQueue(txrH); var rtxtrQ = self2.getRetiredTextureQueue(txrH); for (var i2 = 0; i2 < rtxtrQ.length; i2++) { var txr = rtxtrQ[i2]; if (txr.width >= minW) { txr.retired = false; txr.usedWidth = 0; txr.invalidatedWidth = 0; txr.fullnessChecks = 0; clearArray(txr.eleCaches); txr.context.setTransform(1, 0, 0, 1, 0, 0); txr.context.clearRect(0, 0, txr.width, txr.height); removeFromArray(rtxtrQ, txr); txrQ.push(txr); return txr; } } }; ETCp.queueElement = function(ele, lvl) { var self2 = this; var q3 = self2.getElementQueue(); var k2q = self2.getElementKeyToQueue(); var key = this.getKey(ele); var existingReq = k2q[key]; if (existingReq) { existingReq.level = Math.max(existingReq.level, lvl); existingReq.eles.merge(ele); existingReq.reqs++; q3.updateItem(existingReq); } else { var req = { eles: ele.spawn().merge(ele), level: lvl, reqs: 1, key }; q3.push(req); k2q[key] = req; } }; ETCp.dequeue = function(pxRatio) { var self2 = this; var q3 = self2.getElementQueue(); var k2q = self2.getElementKeyToQueue(); var dequeued = []; var lookup2 = self2.lookup; for (var i2 = 0; i2 < maxDeqSize$1; i2++) { if (q3.size() > 0) { var req = q3.pop(); var key = req.key; var ele = req.eles[0]; var cacheExists = lookup2.hasCache(ele, req.level); k2q[key] = null; if (cacheExists) { continue; } dequeued.push(req); var bb = self2.getBoundingBox(ele); self2.getElement(ele, bb, pxRatio, req.level, getTxrReasons.dequeue); } else { break; } } return dequeued; }; ETCp.removeFromQueue = function(ele) { var self2 = this; var q3 = self2.getElementQueue(); var k2q = self2.getElementKeyToQueue(); var key = this.getKey(ele); var req = k2q[key]; if (req != null) { if (req.eles.length === 1) { req.reqs = MAX_INT$1; q3.updateItem(req); q3.pop(); k2q[key] = null; } else { req.eles.unmerge(ele); } } }; ETCp.onDequeue = function(fn3) { this.onDequeues.push(fn3); }; ETCp.offDequeue = function(fn3) { removeFromArray(this.onDequeues, fn3); }; ETCp.setupDequeueing = defs.setupDequeueing({ deqRedrawThreshold: deqRedrawThreshold$1, deqCost: deqCost$1, deqAvgCost: deqAvgCost$1, deqNoDrawCost: deqNoDrawCost$1, deqFastCost: deqFastCost$1, deq: /* @__PURE__ */ __name(function deq(self2, pxRatio, extent2) { return self2.dequeue(pxRatio, extent2); }, "deq"), onDeqd: /* @__PURE__ */ __name(function onDeqd(self2, deqd) { for (var i2 = 0; i2 < self2.onDequeues.length; i2++) { var fn3 = self2.onDequeues[i2]; fn3(deqd); } }, "onDeqd"), shouldRedraw: /* @__PURE__ */ __name(function shouldRedraw(self2, deqd, pxRatio, extent2) { for (var i2 = 0; i2 < deqd.length; i2++) { var eles = deqd[i2].eles; for (var j3 = 0; j3 < eles.length; j3++) { var bb = eles[j3].boundingBox(); if (boundingBoxesIntersect(bb, extent2)) { return true; } } } return false; }, "shouldRedraw"), priority: /* @__PURE__ */ __name(function priority(self2) { return self2.renderer.beforeRenderPriorities.eleTxrDeq; }, "priority") }); defNumLayers = 1; minLvl = -4; maxLvl = 2; maxZoom2 = 3.99; deqRedrawThreshold = 50; refineEleDebounceTime = 50; deqCost = 0.15; deqAvgCost = 0.1; deqNoDrawCost = 0.9; deqFastCost = 0.9; maxDeqSize = 1; invalidThreshold = 250; maxLayerArea = 4e3 * 4e3; maxLayerDim = 32767; useHighQualityEleTxrReqs = true; LayeredTextureCache = /* @__PURE__ */ __name(function LayeredTextureCache2(renderer10) { var self2 = this; var r2 = self2.renderer = renderer10; var cy = r2.cy; self2.layersByLevel = {}; self2.firstGet = true; self2.lastInvalidationTime = performanceNow() - 2 * invalidThreshold; self2.skipping = false; self2.eleTxrDeqs = cy.collection(); self2.scheduleElementRefinement = debounce(function() { self2.refineElementTextures(self2.eleTxrDeqs); self2.eleTxrDeqs.unmerge(self2.eleTxrDeqs); }, refineEleDebounceTime); r2.beforeRender(function(willDraw, now3) { if (now3 - self2.lastInvalidationTime <= invalidThreshold) { self2.skipping = true; } else { self2.skipping = false; } }, r2.beforeRenderPriorities.lyrTxrSkip); var qSort = /* @__PURE__ */ __name(function qSort2(a2, b3) { return b3.reqs - a2.reqs; }, "qSort"); self2.layersQueue = new Heap(qSort); self2.setupDequeueing(); }, "LayeredTextureCache"); LTCp = LayeredTextureCache.prototype; layerIdPool = 0; MAX_INT = Math.pow(2, 53) - 1; LTCp.makeLayer = function(bb, lvl) { var scale2 = Math.pow(2, lvl); var w4 = Math.ceil(bb.w * scale2); var h3 = Math.ceil(bb.h * scale2); var canvas = this.renderer.makeOffscreenCanvas(w4, h3); var layer = { id: layerIdPool = ++layerIdPool % MAX_INT, bb, level: lvl, width: w4, height: h3, canvas, context: canvas.getContext("2d"), eles: [], elesQueue: [], reqs: 0 }; var cxt = layer.context; var dx = -layer.bb.x1; var dy = -layer.bb.y1; cxt.scale(scale2, scale2); cxt.translate(dx, dy); return layer; }; LTCp.getLayers = function(eles, pxRatio, lvl) { var self2 = this; var r2 = self2.renderer; var cy = r2.cy; var zoom2 = cy.zoom(); var firstGet = self2.firstGet; self2.firstGet = false; if (lvl == null) { lvl = Math.ceil(log22(zoom2 * pxRatio)); if (lvl < minLvl) { lvl = minLvl; } else if (zoom2 >= maxZoom2 || lvl > maxLvl) { return null; } } self2.validateLayersElesOrdering(lvl, eles); var layersByLvl = self2.layersByLevel; var scale2 = Math.pow(2, lvl); var layers = layersByLvl[lvl] = layersByLvl[lvl] || []; var bb; var lvlComplete = self2.levelIsComplete(lvl, eles); var tmpLayers; var checkTempLevels = /* @__PURE__ */ __name(function checkTempLevels2() { var canUseAsTmpLvl = /* @__PURE__ */ __name(function canUseAsTmpLvl2(l4) { self2.validateLayersElesOrdering(l4, eles); if (self2.levelIsComplete(l4, eles)) { tmpLayers = layersByLvl[l4]; return true; } }, "canUseAsTmpLvl"); var checkLvls = /* @__PURE__ */ __name(function checkLvls2(dir2) { if (tmpLayers) { return; } for (var l4 = lvl + dir2; minLvl <= l4 && l4 <= maxLvl; l4 += dir2) { if (canUseAsTmpLvl(l4)) { break; } } }, "checkLvls"); checkLvls(1); checkLvls(-1); for (var i3 = layers.length - 1; i3 >= 0; i3--) { var layer2 = layers[i3]; if (layer2.invalid) { removeFromArray(layers, layer2); } } }, "checkTempLevels"); if (!lvlComplete) { checkTempLevels(); } else { return layers; } var getBb = /* @__PURE__ */ __name(function getBb2() { if (!bb) { bb = makeBoundingBox(); for (var i3 = 0; i3 < eles.length; i3++) { updateBoundingBox(bb, eles[i3].boundingBox()); } } return bb; }, "getBb"); var makeLayer = /* @__PURE__ */ __name(function makeLayer2(opts) { opts = opts || {}; var after = opts.after; getBb(); var w4 = Math.ceil(bb.w * scale2); var h3 = Math.ceil(bb.h * scale2); if (w4 > maxLayerDim || h3 > maxLayerDim) { return null; } var area = w4 * h3; if (area > maxLayerArea) { return null; } var layer2 = self2.makeLayer(bb, lvl); if (after != null) { var index = layers.indexOf(after) + 1; layers.splice(index, 0, layer2); } else if (opts.insert === void 0 || opts.insert) { layers.unshift(layer2); } return layer2; }, "makeLayer"); if (self2.skipping && !firstGet) { return null; } var layer = null; var maxElesPerLayer = eles.length / defNumLayers; var allowLazyQueueing = !firstGet; for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; var rs = ele._private.rscratch; var caches = rs.imgLayerCaches = rs.imgLayerCaches || {}; var existingLayer = caches[lvl]; if (existingLayer) { layer = existingLayer; continue; } if (!layer || layer.eles.length >= maxElesPerLayer || !boundingBoxInBoundingBox(layer.bb, ele.boundingBox())) { layer = makeLayer({ insert: true, after: layer }); if (!layer) { return null; } } if (tmpLayers || allowLazyQueueing) { self2.queueLayer(layer, ele); } else { self2.drawEleInLayer(layer, ele, lvl, pxRatio); } layer.eles.push(ele); caches[lvl] = layer; } if (tmpLayers) { return tmpLayers; } if (allowLazyQueueing) { return null; } return layers; }; LTCp.getEleLevelForLayerLevel = function(lvl, pxRatio) { return lvl; }; LTCp.drawEleInLayer = function(layer, ele, lvl, pxRatio) { var self2 = this; var r2 = this.renderer; var context = layer.context; var bb = ele.boundingBox(); if (bb.w === 0 || bb.h === 0 || !ele.visible()) { return; } lvl = self2.getEleLevelForLayerLevel(lvl, pxRatio); { r2.setImgSmoothing(context, false); } { r2.drawCachedElement(context, ele, null, null, lvl, useHighQualityEleTxrReqs); } { r2.setImgSmoothing(context, true); } }; LTCp.levelIsComplete = function(lvl, eles) { var self2 = this; var layers = self2.layersByLevel[lvl]; if (!layers || layers.length === 0) { return false; } var numElesInLayers = 0; for (var i2 = 0; i2 < layers.length; i2++) { var layer = layers[i2]; if (layer.reqs > 0) { return false; } if (layer.invalid) { return false; } numElesInLayers += layer.eles.length; } if (numElesInLayers !== eles.length) { return false; } return true; }; LTCp.validateLayersElesOrdering = function(lvl, eles) { var layers = this.layersByLevel[lvl]; if (!layers) { return; } for (var i2 = 0; i2 < layers.length; i2++) { var layer = layers[i2]; var offset = -1; for (var j3 = 0; j3 < eles.length; j3++) { if (layer.eles[0] === eles[j3]) { offset = j3; break; } } if (offset < 0) { this.invalidateLayer(layer); continue; } var o2 = offset; for (var j3 = 0; j3 < layer.eles.length; j3++) { if (layer.eles[j3] !== eles[o2 + j3]) { this.invalidateLayer(layer); break; } } } }; LTCp.updateElementsInLayers = function(eles, update2) { var self2 = this; var isEles = element(eles[0]); for (var i2 = 0; i2 < eles.length; i2++) { var req = isEles ? null : eles[i2]; var ele = isEles ? eles[i2] : eles[i2].ele; var rs = ele._private.rscratch; var caches = rs.imgLayerCaches = rs.imgLayerCaches || {}; for (var l4 = minLvl; l4 <= maxLvl; l4++) { var layer = caches[l4]; if (!layer) { continue; } if (req && self2.getEleLevelForLayerLevel(layer.level) !== req.level) { continue; } update2(layer, ele, req); } } }; LTCp.haveLayers = function() { var self2 = this; var haveLayers = false; for (var l4 = minLvl; l4 <= maxLvl; l4++) { var layers = self2.layersByLevel[l4]; if (layers && layers.length > 0) { haveLayers = true; break; } } return haveLayers; }; LTCp.invalidateElements = function(eles) { var self2 = this; if (eles.length === 0) { return; } self2.lastInvalidationTime = performanceNow(); if (eles.length === 0 || !self2.haveLayers()) { return; } self2.updateElementsInLayers(eles, /* @__PURE__ */ __name(function invalAssocLayers(layer, ele, req) { self2.invalidateLayer(layer); }, "invalAssocLayers")); }; LTCp.invalidateLayer = function(layer) { this.lastInvalidationTime = performanceNow(); if (layer.invalid) { return; } var lvl = layer.level; var eles = layer.eles; var layers = this.layersByLevel[lvl]; removeFromArray(layers, layer); layer.elesQueue = []; layer.invalid = true; if (layer.replacement) { layer.replacement.invalid = true; } for (var i2 = 0; i2 < eles.length; i2++) { var caches = eles[i2]._private.rscratch.imgLayerCaches; if (caches) { caches[lvl] = null; } } }; LTCp.refineElementTextures = function(eles) { var self2 = this; self2.updateElementsInLayers(eles, /* @__PURE__ */ __name(function refineEachEle(layer, ele, req) { var rLyr = layer.replacement; if (!rLyr) { rLyr = layer.replacement = self2.makeLayer(layer.bb, layer.level); rLyr.replaces = layer; rLyr.eles = layer.eles; } if (!rLyr.reqs) { for (var i2 = 0; i2 < rLyr.eles.length; i2++) { self2.queueLayer(rLyr, rLyr.eles[i2]); } } }, "refineEachEle")); }; LTCp.enqueueElementRefinement = function(ele) { this.eleTxrDeqs.merge(ele); this.scheduleElementRefinement(); }; LTCp.queueLayer = function(layer, ele) { var self2 = this; var q3 = self2.layersQueue; var elesQ = layer.elesQueue; var hasId = elesQ.hasId = elesQ.hasId || {}; if (layer.replacement) { return; } if (ele) { if (hasId[ele.id()]) { return; } elesQ.push(ele); hasId[ele.id()] = true; } if (layer.reqs) { layer.reqs++; q3.updateItem(layer); } else { layer.reqs = 1; q3.push(layer); } }; LTCp.dequeue = function(pxRatio) { var self2 = this; var q3 = self2.layersQueue; var deqd = []; var eleDeqs = 0; while (eleDeqs < maxDeqSize) { if (q3.size() === 0) { break; } var layer = q3.peek(); if (layer.replacement) { q3.pop(); continue; } if (layer.replaces && layer !== layer.replaces.replacement) { q3.pop(); continue; } if (layer.invalid) { q3.pop(); continue; } var ele = layer.elesQueue.shift(); if (ele) { self2.drawEleInLayer(layer, ele, layer.level, pxRatio); eleDeqs++; } if (deqd.length === 0) { deqd.push(true); } if (layer.elesQueue.length === 0) { q3.pop(); layer.reqs = 0; if (layer.replaces) { self2.applyLayerReplacement(layer); } self2.requestRedraw(); } } return deqd; }; LTCp.applyLayerReplacement = function(layer) { var self2 = this; var layersInLevel = self2.layersByLevel[layer.level]; var replaced = layer.replaces; var index = layersInLevel.indexOf(replaced); if (index < 0 || replaced.invalid) { return; } layersInLevel[index] = layer; for (var i2 = 0; i2 < layer.eles.length; i2++) { var _p = layer.eles[i2]._private; var cache3 = _p.imgLayerCaches = _p.imgLayerCaches || {}; if (cache3) { cache3[layer.level] = layer; } } self2.requestRedraw(); }; LTCp.requestRedraw = debounce(function() { var r2 = this.renderer; r2.redrawHint("eles", true); r2.redrawHint("drag", true); r2.redraw(); }, 100); LTCp.setupDequeueing = defs.setupDequeueing({ deqRedrawThreshold, deqCost, deqAvgCost, deqNoDrawCost, deqFastCost, deq: /* @__PURE__ */ __name(function deq2(self2, pxRatio) { return self2.dequeue(pxRatio); }, "deq"), onDeqd: noop$1, shouldRedraw: trueify, priority: /* @__PURE__ */ __name(function priority2(self2) { return self2.renderer.beforeRenderPriorities.lyrTxrDeq; }, "priority") }); CRp$b = {}; __name(polygon, "polygon"); __name(triangleBackcurve, "triangleBackcurve"); __name(triangleTee, "triangleTee"); __name(circleTriangle, "circleTriangle"); __name(circle$1, "circle$1"); CRp$b.arrowShapeImpl = function(name) { return (impl || (impl = { "polygon": polygon, "triangle-backcurve": triangleBackcurve, "triangle-tee": triangleTee, "circle-triangle": circleTriangle, "triangle-cross": triangleTee, "circle": circle$1 }))[name]; }; CRp$a = {}; CRp$a.drawElement = function(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity) { var r2 = this; if (ele.isNode()) { r2.drawNode(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity); } else { r2.drawEdge(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity); } }; CRp$a.drawElementOverlay = function(context, ele) { var r2 = this; if (ele.isNode()) { r2.drawNodeOverlay(context, ele); } else { r2.drawEdgeOverlay(context, ele); } }; CRp$a.drawElementUnderlay = function(context, ele) { var r2 = this; if (ele.isNode()) { r2.drawNodeUnderlay(context, ele); } else { r2.drawEdgeUnderlay(context, ele); } }; CRp$a.drawCachedElementPortion = function(context, ele, eleTxrCache, pxRatio, lvl, reason, getRotation, getOpacity3) { var r2 = this; var bb = eleTxrCache.getBoundingBox(ele); if (bb.w === 0 || bb.h === 0) { return; } var eleCache = eleTxrCache.getElement(ele, bb, pxRatio, lvl, reason); if (eleCache != null) { var opacity = getOpacity3(r2, ele); if (opacity === 0) { return; } var theta = getRotation(r2, ele); var x1 = bb.x1, y1 = bb.y1, w4 = bb.w, h3 = bb.h; var x5, y6, sx, sy, smooth; if (theta !== 0) { var rotPt = eleTxrCache.getRotationPoint(ele); sx = rotPt.x; sy = rotPt.y; context.translate(sx, sy); context.rotate(theta); smooth = r2.getImgSmoothing(context); if (!smooth) { r2.setImgSmoothing(context, true); } var off = eleTxrCache.getRotationOffset(ele); x5 = off.x; y6 = off.y; } else { x5 = x1; y6 = y1; } var oldGlobalAlpha; if (opacity !== 1) { oldGlobalAlpha = context.globalAlpha; context.globalAlpha = oldGlobalAlpha * opacity; } context.drawImage(eleCache.texture.canvas, eleCache.x, 0, eleCache.width, eleCache.height, x5, y6, w4, h3); if (opacity !== 1) { context.globalAlpha = oldGlobalAlpha; } if (theta !== 0) { context.rotate(-theta); context.translate(-sx, -sy); if (!smooth) { r2.setImgSmoothing(context, false); } } } else { eleTxrCache.drawElement(context, ele); } }; getZeroRotation = /* @__PURE__ */ __name(function getZeroRotation2() { return 0; }, "getZeroRotation"); getLabelRotation = /* @__PURE__ */ __name(function getLabelRotation2(r2, ele) { return r2.getTextAngle(ele, null); }, "getLabelRotation"); getSourceLabelRotation = /* @__PURE__ */ __name(function getSourceLabelRotation2(r2, ele) { return r2.getTextAngle(ele, "source"); }, "getSourceLabelRotation"); getTargetLabelRotation = /* @__PURE__ */ __name(function getTargetLabelRotation2(r2, ele) { return r2.getTextAngle(ele, "target"); }, "getTargetLabelRotation"); getOpacity = /* @__PURE__ */ __name(function getOpacity2(r2, ele) { return ele.effectiveOpacity(); }, "getOpacity"); getTextOpacity = /* @__PURE__ */ __name(function getTextOpacity2(e3, ele) { return ele.pstyle("text-opacity").pfValue * ele.effectiveOpacity(); }, "getTextOpacity"); CRp$a.drawCachedElement = function(context, ele, pxRatio, extent2, lvl, requestHighQuality) { var r2 = this; var _r$data = r2.data, eleTxrCache = _r$data.eleTxrCache, lblTxrCache = _r$data.lblTxrCache, slbTxrCache = _r$data.slbTxrCache, tlbTxrCache = _r$data.tlbTxrCache; var bb = ele.boundingBox(); var reason = requestHighQuality === true ? eleTxrCache.reasons.highQuality : null; if (bb.w === 0 || bb.h === 0 || !ele.visible()) { return; } if (!extent2 || boundingBoxesIntersect(bb, extent2)) { var isEdge2 = ele.isEdge(); var badLine = ele.element()._private.rscratch.badLine; r2.drawElementUnderlay(context, ele); r2.drawCachedElementPortion(context, ele, eleTxrCache, pxRatio, lvl, reason, getZeroRotation, getOpacity); if (!isEdge2 || !badLine) { r2.drawCachedElementPortion(context, ele, lblTxrCache, pxRatio, lvl, reason, getLabelRotation, getTextOpacity); } if (isEdge2 && !badLine) { r2.drawCachedElementPortion(context, ele, slbTxrCache, pxRatio, lvl, reason, getSourceLabelRotation, getTextOpacity); r2.drawCachedElementPortion(context, ele, tlbTxrCache, pxRatio, lvl, reason, getTargetLabelRotation, getTextOpacity); } r2.drawElementOverlay(context, ele); } }; CRp$a.drawElements = function(context, eles) { var r2 = this; for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; r2.drawElement(context, ele); } }; CRp$a.drawCachedElements = function(context, eles, pxRatio, extent2) { var r2 = this; for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; r2.drawCachedElement(context, ele, pxRatio, extent2); } }; CRp$a.drawCachedNodes = function(context, eles, pxRatio, extent2) { var r2 = this; for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; if (!ele.isNode()) { continue; } r2.drawCachedElement(context, ele, pxRatio, extent2); } }; CRp$a.drawLayeredElements = function(context, eles, pxRatio, extent2) { var r2 = this; var layers = r2.data.lyrTxrCache.getLayers(eles, pxRatio); if (layers) { for (var i2 = 0; i2 < layers.length; i2++) { var layer = layers[i2]; var bb = layer.bb; if (bb.w === 0 || bb.h === 0) { continue; } context.drawImage(layer.canvas, bb.x1, bb.y1, bb.w, bb.h); } } else { r2.drawCachedElements(context, eles, pxRatio, extent2); } }; CRp$9 = {}; CRp$9.drawEdge = function(context, edge, shiftToOriginWithBb) { var drawLabel4 = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : true; var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : true; var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : true; var r2 = this; var rs = edge._private.rscratch; if (shouldDrawOpacity && !edge.visible()) { return; } if (rs.badLine || rs.allpts == null || isNaN(rs.allpts[0])) { return; } var bb; if (shiftToOriginWithBb) { bb = shiftToOriginWithBb; context.translate(-bb.x1, -bb.y1); } var opacity = shouldDrawOpacity ? edge.pstyle("opacity").value : 1; var lineOpacity = shouldDrawOpacity ? edge.pstyle("line-opacity").value : 1; var curveStyle = edge.pstyle("curve-style").value; var lineStyle = edge.pstyle("line-style").value; var edgeWidth = edge.pstyle("width").pfValue; var lineCap = edge.pstyle("line-cap").value; var lineOutlineWidth = edge.pstyle("line-outline-width").value; var lineOutlineColor = edge.pstyle("line-outline-color").value; var effectiveLineOpacity = opacity * lineOpacity; var effectiveArrowOpacity = opacity * lineOpacity; var drawLine = /* @__PURE__ */ __name(function drawLine2() { var strokeOpacity = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : effectiveLineOpacity; if (curveStyle === "straight-triangle") { r2.eleStrokeStyle(context, edge, strokeOpacity); r2.drawEdgeTrianglePath(edge, context, rs.allpts); } else { context.lineWidth = edgeWidth; context.lineCap = lineCap; r2.eleStrokeStyle(context, edge, strokeOpacity); r2.drawEdgePath(edge, context, rs.allpts, lineStyle); context.lineCap = "butt"; } }, "drawLine"); var drawLineOutline = /* @__PURE__ */ __name(function drawLineOutline2() { var strokeOpacity = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : effectiveLineOpacity; context.lineWidth = edgeWidth + lineOutlineWidth; context.lineCap = lineCap; if (lineOutlineWidth > 0) { r2.colorStrokeStyle(context, lineOutlineColor[0], lineOutlineColor[1], lineOutlineColor[2], strokeOpacity); } else { context.lineCap = "butt"; return; } if (curveStyle === "straight-triangle") { r2.drawEdgeTrianglePath(edge, context, rs.allpts); } else { r2.drawEdgePath(edge, context, rs.allpts, lineStyle); context.lineCap = "butt"; } }, "drawLineOutline"); var drawOverlay = /* @__PURE__ */ __name(function drawOverlay2() { if (!shouldDrawOverlay) { return; } r2.drawEdgeOverlay(context, edge); }, "drawOverlay"); var drawUnderlay = /* @__PURE__ */ __name(function drawUnderlay2() { if (!shouldDrawOverlay) { return; } r2.drawEdgeUnderlay(context, edge); }, "drawUnderlay"); var drawArrows2 = /* @__PURE__ */ __name(function drawArrows3() { var arrowOpacity = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : effectiveArrowOpacity; r2.drawArrowheads(context, edge, arrowOpacity); }, "drawArrows"); var drawText6 = /* @__PURE__ */ __name(function drawText7() { r2.drawElementText(context, edge, null, drawLabel4); }, "drawText"); context.lineJoin = "round"; var ghost = edge.pstyle("ghost").value === "yes"; if (ghost) { var gx = edge.pstyle("ghost-offset-x").pfValue; var gy = edge.pstyle("ghost-offset-y").pfValue; var ghostOpacity = edge.pstyle("ghost-opacity").value; var effectiveGhostOpacity = effectiveLineOpacity * ghostOpacity; context.translate(gx, gy); drawLine(effectiveGhostOpacity); drawArrows2(effectiveGhostOpacity); context.translate(-gx, -gy); } else { drawLineOutline(); } drawUnderlay(); drawLine(); drawArrows2(); drawOverlay(); drawText6(); if (shiftToOriginWithBb) { context.translate(bb.x1, bb.y1); } }; drawEdgeOverlayUnderlay = /* @__PURE__ */ __name(function drawEdgeOverlayUnderlay2(overlayOrUnderlay) { if (!["overlay", "underlay"].includes(overlayOrUnderlay)) { throw new Error("Invalid state"); } return function(context, edge) { if (!edge.visible()) { return; } var opacity = edge.pstyle("".concat(overlayOrUnderlay, "-opacity")).value; if (opacity === 0) { return; } var r2 = this; var usePaths = r2.usePaths(); var rs = edge._private.rscratch; var padding2 = edge.pstyle("".concat(overlayOrUnderlay, "-padding")).pfValue; var width3 = 2 * padding2; var color2 = edge.pstyle("".concat(overlayOrUnderlay, "-color")).value; context.lineWidth = width3; if (rs.edgeType === "self" && !usePaths) { context.lineCap = "butt"; } else { context.lineCap = "round"; } r2.colorStrokeStyle(context, color2[0], color2[1], color2[2], opacity); r2.drawEdgePath(edge, context, rs.allpts, "solid"); }; }, "drawEdgeOverlayUnderlay"); CRp$9.drawEdgeOverlay = drawEdgeOverlayUnderlay("overlay"); CRp$9.drawEdgeUnderlay = drawEdgeOverlayUnderlay("underlay"); CRp$9.drawEdgePath = function(edge, context, pts2, type3) { var rs = edge._private.rscratch; var canvasCxt = context; var path4; var pathCacheHit = false; var usePaths = this.usePaths(); var lineDashPattern = edge.pstyle("line-dash-pattern").pfValue; var lineDashOffset = edge.pstyle("line-dash-offset").pfValue; if (usePaths) { var pathCacheKey = pts2.join("$"); var keyMatches = rs.pathCacheKey && rs.pathCacheKey === pathCacheKey; if (keyMatches) { path4 = context = rs.pathCache; pathCacheHit = true; } else { path4 = context = new Path2D(); rs.pathCacheKey = pathCacheKey; rs.pathCache = path4; } } if (canvasCxt.setLineDash) { switch (type3) { case "dotted": canvasCxt.setLineDash([1, 1]); break; case "dashed": canvasCxt.setLineDash(lineDashPattern); canvasCxt.lineDashOffset = lineDashOffset; break; case "solid": canvasCxt.setLineDash([]); break; } } if (!pathCacheHit && !rs.badLine) { if (context.beginPath) { context.beginPath(); } context.moveTo(pts2[0], pts2[1]); switch (rs.edgeType) { case "bezier": case "self": case "compound": case "multibezier": for (var i2 = 2; i2 + 3 < pts2.length; i2 += 4) { context.quadraticCurveTo(pts2[i2], pts2[i2 + 1], pts2[i2 + 2], pts2[i2 + 3]); } break; case "straight": case "haystack": for (var _i = 2; _i + 1 < pts2.length; _i += 2) { context.lineTo(pts2[_i], pts2[_i + 1]); } break; case "segments": if (rs.isRound) { var _iterator = _createForOfIteratorHelper(rs.roundCorners), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done; ) { var corner = _step.value; drawPreparedRoundCorner(context, corner); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } context.lineTo(pts2[pts2.length - 2], pts2[pts2.length - 1]); } else { for (var _i2 = 2; _i2 + 1 < pts2.length; _i2 += 2) { context.lineTo(pts2[_i2], pts2[_i2 + 1]); } } break; } } context = canvasCxt; if (usePaths) { context.stroke(path4); } else { context.stroke(); } if (context.setLineDash) { context.setLineDash([]); } }; CRp$9.drawEdgeTrianglePath = function(edge, context, pts2) { context.fillStyle = context.strokeStyle; var edgeWidth = edge.pstyle("width").pfValue; for (var i2 = 0; i2 + 1 < pts2.length; i2 += 2) { var vector = [pts2[i2 + 2] - pts2[i2], pts2[i2 + 3] - pts2[i2 + 1]]; var length2 = Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1]); var normal = [vector[1] / length2, -vector[0] / length2]; var triangleHead = [normal[0] * edgeWidth / 2, normal[1] * edgeWidth / 2]; context.beginPath(); context.moveTo(pts2[i2] - triangleHead[0], pts2[i2 + 1] - triangleHead[1]); context.lineTo(pts2[i2] + triangleHead[0], pts2[i2 + 1] + triangleHead[1]); context.lineTo(pts2[i2 + 2], pts2[i2 + 3]); context.closePath(); context.fill(); } }; CRp$9.drawArrowheads = function(context, edge, opacity) { var rs = edge._private.rscratch; var isHaystack = rs.edgeType === "haystack"; if (!isHaystack) { this.drawArrowhead(context, edge, "source", rs.arrowStartX, rs.arrowStartY, rs.srcArrowAngle, opacity); } this.drawArrowhead(context, edge, "mid-target", rs.midX, rs.midY, rs.midtgtArrowAngle, opacity); this.drawArrowhead(context, edge, "mid-source", rs.midX, rs.midY, rs.midsrcArrowAngle, opacity); if (!isHaystack) { this.drawArrowhead(context, edge, "target", rs.arrowEndX, rs.arrowEndY, rs.tgtArrowAngle, opacity); } }; CRp$9.drawArrowhead = function(context, edge, prefix, x5, y6, angle2, opacity) { if (isNaN(x5) || x5 == null || isNaN(y6) || y6 == null || isNaN(angle2) || angle2 == null) { return; } var self2 = this; var arrowShape = edge.pstyle(prefix + "-arrow-shape").value; if (arrowShape === "none") { return; } var arrowClearFill = edge.pstyle(prefix + "-arrow-fill").value === "hollow" ? "both" : "filled"; var arrowFill = edge.pstyle(prefix + "-arrow-fill").value; var edgeWidth = edge.pstyle("width").pfValue; var pArrowWidth = edge.pstyle(prefix + "-arrow-width"); var arrowWidth = pArrowWidth.value === "match-line" ? edgeWidth : pArrowWidth.pfValue; if (pArrowWidth.units === "%") arrowWidth *= edgeWidth; var edgeOpacity = edge.pstyle("opacity").value; if (opacity === void 0) { opacity = edgeOpacity; } var gco = context.globalCompositeOperation; if (opacity !== 1 || arrowFill === "hollow") { context.globalCompositeOperation = "destination-out"; self2.colorFillStyle(context, 255, 255, 255, 1); self2.colorStrokeStyle(context, 255, 255, 255, 1); self2.drawArrowShape(edge, context, arrowClearFill, edgeWidth, arrowShape, arrowWidth, x5, y6, angle2); context.globalCompositeOperation = gco; } var color2 = edge.pstyle(prefix + "-arrow-color").value; self2.colorFillStyle(context, color2[0], color2[1], color2[2], opacity); self2.colorStrokeStyle(context, color2[0], color2[1], color2[2], opacity); self2.drawArrowShape(edge, context, arrowFill, edgeWidth, arrowShape, arrowWidth, x5, y6, angle2); }; CRp$9.drawArrowShape = function(edge, context, fill, edgeWidth, shape, shapeWidth, x5, y6, angle2) { var r2 = this; var usePaths = this.usePaths() && shape !== "triangle-cross"; var pathCacheHit = false; var path4; var canvasContext = context; var translation = { x: x5, y: y6 }; var scale2 = edge.pstyle("arrow-scale").value; var size4 = this.getArrowWidth(edgeWidth, scale2); var shapeImpl = r2.arrowShapes[shape]; if (usePaths) { var cache3 = r2.arrowPathCache = r2.arrowPathCache || []; var key = hashString(shape); var cachedPath = cache3[key]; if (cachedPath != null) { path4 = context = cachedPath; pathCacheHit = true; } else { path4 = context = new Path2D(); cache3[key] = path4; } } if (!pathCacheHit) { if (context.beginPath) { context.beginPath(); } if (usePaths) { shapeImpl.draw(context, 1, 0, { x: 0, y: 0 }, 1); } else { shapeImpl.draw(context, size4, angle2, translation, edgeWidth); } if (context.closePath) { context.closePath(); } } context = canvasContext; if (usePaths) { context.translate(x5, y6); context.rotate(angle2); context.scale(size4, size4); } if (fill === "filled" || fill === "both") { if (usePaths) { context.fill(path4); } else { context.fill(); } } if (fill === "hollow" || fill === "both") { context.lineWidth = shapeWidth / (usePaths ? size4 : 1); context.lineJoin = "miter"; if (usePaths) { context.stroke(path4); } else { context.stroke(); } } if (usePaths) { context.scale(1 / size4, 1 / size4); context.rotate(-angle2); context.translate(-x5, -y6); } }; CRp$8 = {}; CRp$8.safeDrawImage = function(context, img, ix, iy, iw, ih, x5, y6, w4, h3) { if (iw <= 0 || ih <= 0 || w4 <= 0 || h3 <= 0) { return; } try { context.drawImage(img, ix, iy, iw, ih, x5, y6, w4, h3); } catch (e3) { warn(e3); } }; CRp$8.drawInscribedImage = function(context, img, node2, index, nodeOpacity) { var r2 = this; var pos = node2.position(); var nodeX = pos.x; var nodeY = pos.y; var styleObj = node2.cy().style(); var getIndexedStyle = styleObj.getIndexedStyle.bind(styleObj); var fit2 = getIndexedStyle(node2, "background-fit", "value", index); var repeat2 = getIndexedStyle(node2, "background-repeat", "value", index); var nodeW = node2.width(); var nodeH = node2.height(); var paddingX2 = node2.padding() * 2; var nodeTW = nodeW + (getIndexedStyle(node2, "background-width-relative-to", "value", index) === "inner" ? 0 : paddingX2); var nodeTH = nodeH + (getIndexedStyle(node2, "background-height-relative-to", "value", index) === "inner" ? 0 : paddingX2); var rs = node2._private.rscratch; var clip = getIndexedStyle(node2, "background-clip", "value", index); var shouldClip = clip === "node"; var imgOpacity = getIndexedStyle(node2, "background-image-opacity", "value", index) * nodeOpacity; var smooth = getIndexedStyle(node2, "background-image-smoothing", "value", index); var cornerRadius = node2.pstyle("corner-radius").value; if (cornerRadius !== "auto") cornerRadius = node2.pstyle("corner-radius").pfValue; var imgW = img.width || img.cachedW; var imgH = img.height || img.cachedH; if (null == imgW || null == imgH) { document.body.appendChild(img); imgW = img.cachedW = img.width || img.offsetWidth; imgH = img.cachedH = img.height || img.offsetHeight; document.body.removeChild(img); } var w4 = imgW; var h3 = imgH; if (getIndexedStyle(node2, "background-width", "value", index) !== "auto") { if (getIndexedStyle(node2, "background-width", "units", index) === "%") { w4 = getIndexedStyle(node2, "background-width", "pfValue", index) * nodeTW; } else { w4 = getIndexedStyle(node2, "background-width", "pfValue", index); } } if (getIndexedStyle(node2, "background-height", "value", index) !== "auto") { if (getIndexedStyle(node2, "background-height", "units", index) === "%") { h3 = getIndexedStyle(node2, "background-height", "pfValue", index) * nodeTH; } else { h3 = getIndexedStyle(node2, "background-height", "pfValue", index); } } if (w4 === 0 || h3 === 0) { return; } if (fit2 === "contain") { var scale2 = Math.min(nodeTW / w4, nodeTH / h3); w4 *= scale2; h3 *= scale2; } else if (fit2 === "cover") { var scale2 = Math.max(nodeTW / w4, nodeTH / h3); w4 *= scale2; h3 *= scale2; } var x5 = nodeX - nodeTW / 2; var posXUnits = getIndexedStyle(node2, "background-position-x", "units", index); var posXPfVal = getIndexedStyle(node2, "background-position-x", "pfValue", index); if (posXUnits === "%") { x5 += (nodeTW - w4) * posXPfVal; } else { x5 += posXPfVal; } var offXUnits = getIndexedStyle(node2, "background-offset-x", "units", index); var offXPfVal = getIndexedStyle(node2, "background-offset-x", "pfValue", index); if (offXUnits === "%") { x5 += (nodeTW - w4) * offXPfVal; } else { x5 += offXPfVal; } var y6 = nodeY - nodeTH / 2; var posYUnits = getIndexedStyle(node2, "background-position-y", "units", index); var posYPfVal = getIndexedStyle(node2, "background-position-y", "pfValue", index); if (posYUnits === "%") { y6 += (nodeTH - h3) * posYPfVal; } else { y6 += posYPfVal; } var offYUnits = getIndexedStyle(node2, "background-offset-y", "units", index); var offYPfVal = getIndexedStyle(node2, "background-offset-y", "pfValue", index); if (offYUnits === "%") { y6 += (nodeTH - h3) * offYPfVal; } else { y6 += offYPfVal; } if (rs.pathCache) { x5 -= nodeX; y6 -= nodeY; nodeX = 0; nodeY = 0; } var gAlpha = context.globalAlpha; context.globalAlpha = imgOpacity; var smoothingEnabled = r2.getImgSmoothing(context); var isSmoothingSwitched = false; if (smooth === "no" && smoothingEnabled) { r2.setImgSmoothing(context, false); isSmoothingSwitched = true; } else if (smooth === "yes" && !smoothingEnabled) { r2.setImgSmoothing(context, true); isSmoothingSwitched = true; } if (repeat2 === "no-repeat") { if (shouldClip) { context.save(); if (rs.pathCache) { context.clip(rs.pathCache); } else { r2.nodeShapes[r2.getNodeShape(node2)].draw(context, nodeX, nodeY, nodeTW, nodeTH, cornerRadius, rs); context.clip(); } } r2.safeDrawImage(context, img, 0, 0, imgW, imgH, x5, y6, w4, h3); if (shouldClip) { context.restore(); } } else { var pattern = context.createPattern(img, repeat2); context.fillStyle = pattern; r2.nodeShapes[r2.getNodeShape(node2)].draw(context, nodeX, nodeY, nodeTW, nodeTH, cornerRadius, rs); context.translate(x5, y6); context.fill(); context.translate(-x5, -y6); } context.globalAlpha = gAlpha; if (isSmoothingSwitched) { r2.setImgSmoothing(context, smoothingEnabled); } }; CRp$7 = {}; CRp$7.eleTextBiggerThanMin = function(ele, scale2) { if (!scale2) { var zoom2 = ele.cy().zoom(); var pxRatio = this.getPixelRatio(); var lvl = Math.ceil(log22(zoom2 * pxRatio)); scale2 = Math.pow(2, lvl); } var computedSize = ele.pstyle("font-size").pfValue * scale2; var minSize = ele.pstyle("min-zoomed-font-size").pfValue; if (computedSize < minSize) { return false; } return true; }; CRp$7.drawElementText = function(context, ele, shiftToOriginWithBb, force, prefix) { var useEleOpacity = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : true; var r2 = this; if (force == null) { if (useEleOpacity && !r2.eleTextBiggerThanMin(ele)) { return; } } else if (force === false) { return; } if (ele.isNode()) { var label = ele.pstyle("label"); if (!label || !label.value) { return; } var justification = r2.getLabelJustification(ele); context.textAlign = justification; context.textBaseline = "bottom"; } else { var badLine = ele.element()._private.rscratch.badLine; var _label = ele.pstyle("label"); var srcLabel = ele.pstyle("source-label"); var tgtLabel = ele.pstyle("target-label"); if (badLine || (!_label || !_label.value) && (!srcLabel || !srcLabel.value) && (!tgtLabel || !tgtLabel.value)) { return; } context.textAlign = "center"; context.textBaseline = "bottom"; } var applyRotation = !shiftToOriginWithBb; var bb; if (shiftToOriginWithBb) { bb = shiftToOriginWithBb; context.translate(-bb.x1, -bb.y1); } if (prefix == null) { r2.drawText(context, ele, null, applyRotation, useEleOpacity); if (ele.isEdge()) { r2.drawText(context, ele, "source", applyRotation, useEleOpacity); r2.drawText(context, ele, "target", applyRotation, useEleOpacity); } } else { r2.drawText(context, ele, prefix, applyRotation, useEleOpacity); } if (shiftToOriginWithBb) { context.translate(bb.x1, bb.y1); } }; CRp$7.getFontCache = function(context) { var cache3; this.fontCaches = this.fontCaches || []; for (var i2 = 0; i2 < this.fontCaches.length; i2++) { cache3 = this.fontCaches[i2]; if (cache3.context === context) { return cache3; } } cache3 = { context }; this.fontCaches.push(cache3); return cache3; }; CRp$7.setupTextStyle = function(context, ele) { var useEleOpacity = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true; var labelStyle = ele.pstyle("font-style").strValue; var labelSize = ele.pstyle("font-size").pfValue + "px"; var labelFamily = ele.pstyle("font-family").strValue; var labelWeight = ele.pstyle("font-weight").strValue; var opacity = useEleOpacity ? ele.effectiveOpacity() * ele.pstyle("text-opacity").value : 1; var outlineOpacity = ele.pstyle("text-outline-opacity").value * opacity; var color2 = ele.pstyle("color").value; var outlineColor = ele.pstyle("text-outline-color").value; context.font = labelStyle + " " + labelWeight + " " + labelSize + " " + labelFamily; context.lineJoin = "round"; this.colorFillStyle(context, color2[0], color2[1], color2[2], opacity); this.colorStrokeStyle(context, outlineColor[0], outlineColor[1], outlineColor[2], outlineOpacity); }; __name(circle3, "circle"); __name(roundRect, "roundRect"); CRp$7.getTextAngle = function(ele, prefix) { var theta; var _p = ele._private; var rscratch = _p.rscratch; var pdash = prefix ? prefix + "-" : ""; var rotation = ele.pstyle(pdash + "text-rotation"); if (rotation.strValue === "autorotate") { var textAngle = getPrefixedProperty(rscratch, "labelAngle", prefix); theta = ele.isEdge() ? textAngle : 0; } else if (rotation.strValue === "none") { theta = 0; } else { theta = rotation.pfValue; } return theta; }; CRp$7.drawText = function(context, ele, prefix) { var applyRotation = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : true; var useEleOpacity = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : true; var _p = ele._private; var rscratch = _p.rscratch; var parentOpacity = useEleOpacity ? ele.effectiveOpacity() : 1; if (useEleOpacity && (parentOpacity === 0 || ele.pstyle("text-opacity").value === 0)) { return; } if (prefix === "main") { prefix = null; } var textX = getPrefixedProperty(rscratch, "labelX", prefix); var textY = getPrefixedProperty(rscratch, "labelY", prefix); var orgTextX, orgTextY; var text4 = this.getLabelText(ele, prefix); if (text4 != null && text4 !== "" && !isNaN(textX) && !isNaN(textY)) { this.setupTextStyle(context, ele, useEleOpacity); var pdash = prefix ? prefix + "-" : ""; var textW = getPrefixedProperty(rscratch, "labelWidth", prefix); var textH = getPrefixedProperty(rscratch, "labelHeight", prefix); var marginX = ele.pstyle(pdash + "text-margin-x").pfValue; var marginY = ele.pstyle(pdash + "text-margin-y").pfValue; var isEdge2 = ele.isEdge(); var halign = ele.pstyle("text-halign").value; var valign = ele.pstyle("text-valign").value; if (isEdge2) { halign = "center"; valign = "center"; } textX += marginX; textY += marginY; var theta; if (!applyRotation) { theta = 0; } else { theta = this.getTextAngle(ele, prefix); } if (theta !== 0) { orgTextX = textX; orgTextY = textY; context.translate(orgTextX, orgTextY); context.rotate(theta); textX = 0; textY = 0; } switch (valign) { case "top": break; case "center": textY += textH / 2; break; case "bottom": textY += textH; break; } var backgroundOpacity = ele.pstyle("text-background-opacity").value; var borderOpacity = ele.pstyle("text-border-opacity").value; var textBorderWidth = ele.pstyle("text-border-width").pfValue; var backgroundPadding = ele.pstyle("text-background-padding").pfValue; var styleShape = ele.pstyle("text-background-shape").strValue; var rounded = styleShape === "round-rectangle" || styleShape === "roundrectangle"; var circled = styleShape === "circle"; var roundRadius = 2; if (backgroundOpacity > 0 || textBorderWidth > 0 && borderOpacity > 0) { var textFill = context.fillStyle; var textStroke = context.strokeStyle; var textLineWidth = context.lineWidth; var textBackgroundColor = ele.pstyle("text-background-color").value; var textBorderColor = ele.pstyle("text-border-color").value; var textBorderStyle = ele.pstyle("text-border-style").value; var doFill = backgroundOpacity > 0; var doStroke = textBorderWidth > 0 && borderOpacity > 0; var bgX = textX - backgroundPadding; switch (halign) { case "left": bgX -= textW; break; case "center": bgX -= textW / 2; break; } var bgY = textY - textH - backgroundPadding; var bgW = textW + 2 * backgroundPadding; var bgH = textH + 2 * backgroundPadding; if (doFill) { context.fillStyle = "rgba(".concat(textBackgroundColor[0], ",").concat(textBackgroundColor[1], ",").concat(textBackgroundColor[2], ",").concat(backgroundOpacity * parentOpacity, ")"); } if (doStroke) { context.strokeStyle = "rgba(".concat(textBorderColor[0], ",").concat(textBorderColor[1], ",").concat(textBorderColor[2], ",").concat(borderOpacity * parentOpacity, ")"); context.lineWidth = textBorderWidth; if (context.setLineDash) { switch (textBorderStyle) { case "dotted": context.setLineDash([1, 1]); break; case "dashed": context.setLineDash([4, 2]); break; case "double": context.lineWidth = textBorderWidth / 4; context.setLineDash([]); break; case "solid": default: context.setLineDash([]); break; } } } if (rounded) { context.beginPath(); roundRect(context, bgX, bgY, bgW, bgH, roundRadius); } else if (circled) { context.beginPath(); circle3(context, bgX, bgY, bgW, bgH); } else { context.beginPath(); context.rect(bgX, bgY, bgW, bgH); } if (doFill) context.fill(); if (doStroke) context.stroke(); if (doStroke && textBorderStyle === "double") { var whiteWidth = textBorderWidth / 2; context.beginPath(); if (rounded) { roundRect(context, bgX + whiteWidth, bgY + whiteWidth, bgW - 2 * whiteWidth, bgH - 2 * whiteWidth, roundRadius); } else { context.rect(bgX + whiteWidth, bgY + whiteWidth, bgW - 2 * whiteWidth, bgH - 2 * whiteWidth); } context.stroke(); } context.fillStyle = textFill; context.strokeStyle = textStroke; context.lineWidth = textLineWidth; if (context.setLineDash) context.setLineDash([]); } var lineWidth = 2 * ele.pstyle("text-outline-width").pfValue; if (lineWidth > 0) { context.lineWidth = lineWidth; } if (ele.pstyle("text-wrap").value === "wrap") { var lines = getPrefixedProperty(rscratch, "labelWrapCachedLines", prefix); var lineHeight = getPrefixedProperty(rscratch, "labelLineHeight", prefix); var halfTextW = textW / 2; var justification = this.getLabelJustification(ele); if (justification === "auto") ; else if (halign === "left") { if (justification === "left") { textX += -textW; } else if (justification === "center") { textX += -halfTextW; } } else if (halign === "center") { if (justification === "left") { textX += -halfTextW; } else if (justification === "right") { textX += halfTextW; } } else if (halign === "right") { if (justification === "center") { textX += halfTextW; } else if (justification === "right") { textX += textW; } } switch (valign) { case "top": textY -= (lines.length - 1) * lineHeight; break; case "center": case "bottom": textY -= (lines.length - 1) * lineHeight; break; } for (var l4 = 0; l4 < lines.length; l4++) { if (lineWidth > 0) { context.strokeText(lines[l4], textX, textY); } context.fillText(lines[l4], textX, textY); textY += lineHeight; } } else { if (lineWidth > 0) { context.strokeText(text4, textX, textY); } context.fillText(text4, textX, textY); } if (theta !== 0) { context.rotate(-theta); context.translate(-orgTextX, -orgTextY); } } }; CRp$6 = {}; CRp$6.drawNode = function(context, node2, shiftToOriginWithBb) { var drawLabel4 = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : true; var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : true; var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : true; var r2 = this; var nodeWidth, nodeHeight; var _p = node2._private; var rs = _p.rscratch; var pos = node2.position(); if (!number$1(pos.x) || !number$1(pos.y)) { return; } if (shouldDrawOpacity && !node2.visible()) { return; } var eleOpacity = shouldDrawOpacity ? node2.effectiveOpacity() : 1; var usePaths = r2.usePaths(); var path4; var pathCacheHit = false; var padding2 = node2.padding(); nodeWidth = node2.width() + 2 * padding2; nodeHeight = node2.height() + 2 * padding2; var bb; if (shiftToOriginWithBb) { bb = shiftToOriginWithBb; context.translate(-bb.x1, -bb.y1); } var bgImgProp = node2.pstyle("background-image"); var urls = bgImgProp.value; var urlDefined = new Array(urls.length); var image = new Array(urls.length); var numImages = 0; for (var i2 = 0; i2 < urls.length; i2++) { var url = urls[i2]; var defd = urlDefined[i2] = url != null && url !== "none"; if (defd) { var bgImgCrossOrigin = node2.cy().style().getIndexedStyle(node2, "background-image-crossorigin", "value", i2); numImages++; image[i2] = r2.getCachedImage(url, bgImgCrossOrigin, function() { _p.backgroundTimestamp = Date.now(); node2.emitAndNotify("background"); }); } } var darkness = node2.pstyle("background-blacken").value; var borderWidth = node2.pstyle("border-width").pfValue; var bgOpacity = node2.pstyle("background-opacity").value * eleOpacity; var borderColor = node2.pstyle("border-color").value; var borderStyle = node2.pstyle("border-style").value; var borderJoin = node2.pstyle("border-join").value; var borderCap = node2.pstyle("border-cap").value; var borderPosition = node2.pstyle("border-position").value; var borderPattern = node2.pstyle("border-dash-pattern").pfValue; var borderOffset = node2.pstyle("border-dash-offset").pfValue; var borderOpacity = node2.pstyle("border-opacity").value * eleOpacity; var outlineWidth = node2.pstyle("outline-width").pfValue; var outlineColor = node2.pstyle("outline-color").value; var outlineStyle = node2.pstyle("outline-style").value; var outlineOpacity = node2.pstyle("outline-opacity").value * eleOpacity; var outlineOffset = node2.pstyle("outline-offset").value; var cornerRadius = node2.pstyle("corner-radius").value; if (cornerRadius !== "auto") cornerRadius = node2.pstyle("corner-radius").pfValue; var setupShapeColor = /* @__PURE__ */ __name(function setupShapeColor2() { var bgOpy = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : bgOpacity; r2.eleFillStyle(context, node2, bgOpy); }, "setupShapeColor"); var setupBorderColor = /* @__PURE__ */ __name(function setupBorderColor2() { var bdrOpy = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : borderOpacity; r2.colorStrokeStyle(context, borderColor[0], borderColor[1], borderColor[2], bdrOpy); }, "setupBorderColor"); var setupOutlineColor = /* @__PURE__ */ __name(function setupOutlineColor2() { var otlnOpy = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : outlineOpacity; r2.colorStrokeStyle(context, outlineColor[0], outlineColor[1], outlineColor[2], otlnOpy); }, "setupOutlineColor"); var getPath = /* @__PURE__ */ __name(function getPath2(width3, height2, shape, points) { var pathCache = r2.nodePathCache = r2.nodePathCache || []; var key = hashStrings(shape === "polygon" ? shape + "," + points.join(",") : shape, "" + height2, "" + width3, "" + cornerRadius); var cachedPath = pathCache[key]; var path5; var cacheHit = false; if (cachedPath != null) { path5 = cachedPath; cacheHit = true; rs.pathCache = path5; } else { path5 = new Path2D(); pathCache[key] = rs.pathCache = path5; } return { path: path5, cacheHit }; }, "getPath"); var styleShape = node2.pstyle("shape").strValue; var shapePts = node2.pstyle("shape-polygon-points").pfValue; if (usePaths) { context.translate(pos.x, pos.y); var shapePath = getPath(nodeWidth, nodeHeight, styleShape, shapePts); path4 = shapePath.path; pathCacheHit = shapePath.cacheHit; } var drawShape = /* @__PURE__ */ __name(function drawShape2() { if (!pathCacheHit) { var npos = pos; if (usePaths) { npos = { x: 0, y: 0 }; } r2.nodeShapes[r2.getNodeShape(node2)].draw(path4 || context, npos.x, npos.y, nodeWidth, nodeHeight, cornerRadius, rs); } if (usePaths) { context.fill(path4); } else { context.fill(); } }, "drawShape"); var drawImages = /* @__PURE__ */ __name(function drawImages2() { var nodeOpacity = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : eleOpacity; var inside = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true; var prevBging = _p.backgrounding; var totalCompleted = 0; for (var _i = 0; _i < image.length; _i++) { var bgContainment = node2.cy().style().getIndexedStyle(node2, "background-image-containment", "value", _i); if (inside && bgContainment === "over" || !inside && bgContainment === "inside") { totalCompleted++; continue; } if (urlDefined[_i] && image[_i].complete && !image[_i].error) { totalCompleted++; r2.drawInscribedImage(context, image[_i], node2, _i, nodeOpacity); } } _p.backgrounding = !(totalCompleted === numImages); if (prevBging !== _p.backgrounding) { node2.updateStyle(false); } }, "drawImages"); var drawPie = /* @__PURE__ */ __name(function drawPie2() { var redrawShape = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false; var pieOpacity = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : eleOpacity; if (r2.hasPie(node2)) { r2.drawPie(context, node2, pieOpacity); if (redrawShape) { if (!usePaths) { r2.nodeShapes[r2.getNodeShape(node2)].draw(context, pos.x, pos.y, nodeWidth, nodeHeight, cornerRadius, rs); } } } }, "drawPie"); var drawStripe = /* @__PURE__ */ __name(function drawStripe2() { var redrawShape = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false; var stripeOpacity = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : eleOpacity; if (r2.hasStripe(node2)) { context.save(); if (usePaths) { context.clip(rs.pathCache); } else { r2.nodeShapes[r2.getNodeShape(node2)].draw(context, pos.x, pos.y, nodeWidth, nodeHeight, cornerRadius, rs); context.clip(); } r2.drawStripe(context, node2, stripeOpacity); context.restore(); if (redrawShape) { if (!usePaths) { r2.nodeShapes[r2.getNodeShape(node2)].draw(context, pos.x, pos.y, nodeWidth, nodeHeight, cornerRadius, rs); } } } }, "drawStripe"); var darken2 = /* @__PURE__ */ __name(function darken3() { var darkenOpacity = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : eleOpacity; var opacity = (darkness > 0 ? darkness : -darkness) * darkenOpacity; var c3 = darkness > 0 ? 0 : 255; if (darkness !== 0) { r2.colorFillStyle(context, c3, c3, c3, opacity); if (usePaths) { context.fill(path4); } else { context.fill(); } } }, "darken"); var drawBorder = /* @__PURE__ */ __name(function drawBorder2() { if (borderWidth > 0) { context.lineWidth = borderWidth; context.lineCap = borderCap; context.lineJoin = borderJoin; if (context.setLineDash) { switch (borderStyle) { case "dotted": context.setLineDash([1, 1]); break; case "dashed": context.setLineDash(borderPattern); context.lineDashOffset = borderOffset; break; case "solid": case "double": context.setLineDash([]); break; } } if (borderPosition !== "center") { context.save(); context.lineWidth *= 2; if (borderPosition === "inside") { usePaths ? context.clip(path4) : context.clip(); } else { var region = new Path2D(); region.rect(-nodeWidth / 2 - borderWidth, -nodeHeight / 2 - borderWidth, nodeWidth + 2 * borderWidth, nodeHeight + 2 * borderWidth); region.addPath(path4); context.clip(region, "evenodd"); } usePaths ? context.stroke(path4) : context.stroke(); context.restore(); } else { usePaths ? context.stroke(path4) : context.stroke(); } if (borderStyle === "double") { context.lineWidth = borderWidth / 3; var gco = context.globalCompositeOperation; context.globalCompositeOperation = "destination-out"; if (usePaths) { context.stroke(path4); } else { context.stroke(); } context.globalCompositeOperation = gco; } if (context.setLineDash) { context.setLineDash([]); } } }, "drawBorder"); var drawOutline = /* @__PURE__ */ __name(function drawOutline2() { if (outlineWidth > 0) { context.lineWidth = outlineWidth; context.lineCap = "butt"; if (context.setLineDash) { switch (outlineStyle) { case "dotted": context.setLineDash([1, 1]); break; case "dashed": context.setLineDash([4, 2]); break; case "solid": case "double": context.setLineDash([]); break; } } var npos = pos; if (usePaths) { npos = { x: 0, y: 0 }; } var shape = r2.getNodeShape(node2); var bWidth = borderWidth; if (borderPosition === "inside") bWidth = 0; if (borderPosition === "outside") bWidth *= 2; var scaleX = (nodeWidth + bWidth + (outlineWidth + outlineOffset)) / nodeWidth; var scaleY = (nodeHeight + bWidth + (outlineWidth + outlineOffset)) / nodeHeight; var sWidth = nodeWidth * scaleX; var sHeight = nodeHeight * scaleY; var points = r2.nodeShapes[shape].points; var _path; if (usePaths) { var outlinePath = getPath(sWidth, sHeight, shape, points); _path = outlinePath.path; } if (shape === "ellipse") { r2.drawEllipsePath(_path || context, npos.x, npos.y, sWidth, sHeight); } else if (["round-diamond", "round-heptagon", "round-hexagon", "round-octagon", "round-pentagon", "round-polygon", "round-triangle", "round-tag"].includes(shape)) { var sMult = 0; var offsetX = 0; var offsetY = 0; if (shape === "round-diamond") { sMult = (bWidth + outlineOffset + outlineWidth) * 1.4; } else if (shape === "round-heptagon") { sMult = (bWidth + outlineOffset + outlineWidth) * 1.075; offsetY = -(bWidth / 2 + outlineOffset + outlineWidth) / 35; } else if (shape === "round-hexagon") { sMult = (bWidth + outlineOffset + outlineWidth) * 1.12; } else if (shape === "round-pentagon") { sMult = (bWidth + outlineOffset + outlineWidth) * 1.13; offsetY = -(bWidth / 2 + outlineOffset + outlineWidth) / 15; } else if (shape === "round-tag") { sMult = (bWidth + outlineOffset + outlineWidth) * 1.12; offsetX = (bWidth / 2 + outlineWidth + outlineOffset) * 0.07; } else if (shape === "round-triangle") { sMult = (bWidth + outlineOffset + outlineWidth) * (Math.PI / 2); offsetY = -(bWidth + outlineOffset / 2 + outlineWidth) / Math.PI; } if (sMult !== 0) { scaleX = (nodeWidth + sMult) / nodeWidth; sWidth = nodeWidth * scaleX; if (!["round-hexagon", "round-tag"].includes(shape)) { scaleY = (nodeHeight + sMult) / nodeHeight; sHeight = nodeHeight * scaleY; } } cornerRadius = cornerRadius === "auto" ? getRoundPolygonRadius(sWidth, sHeight) : cornerRadius; var halfW = sWidth / 2; var halfH = sHeight / 2; var radius2 = cornerRadius + (bWidth + outlineWidth + outlineOffset) / 2; var p3 = new Array(points.length / 2); var corners = new Array(points.length / 2); for (var _i2 = 0; _i2 < points.length / 2; _i2++) { p3[_i2] = { x: npos.x + offsetX + halfW * points[_i2 * 2], y: npos.y + offsetY + halfH * points[_i2 * 2 + 1] }; } var _i3, p1, p22, p32, len = p3.length; p1 = p3[len - 1]; for (_i3 = 0; _i3 < len; _i3++) { p22 = p3[_i3 % len]; p32 = p3[(_i3 + 1) % len]; corners[_i3] = getRoundCorner(p1, p22, p32, radius2); p1 = p22; p22 = p32; } r2.drawRoundPolygonPath(_path || context, npos.x + offsetX, npos.y + offsetY, nodeWidth * scaleX, nodeHeight * scaleY, points, corners); } else if (["roundrectangle", "round-rectangle"].includes(shape)) { cornerRadius = cornerRadius === "auto" ? getRoundRectangleRadius(sWidth, sHeight) : cornerRadius; r2.drawRoundRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight, cornerRadius + (bWidth + outlineWidth + outlineOffset) / 2); } else if (["cutrectangle", "cut-rectangle"].includes(shape)) { cornerRadius = cornerRadius === "auto" ? getCutRectangleCornerLength() : cornerRadius; r2.drawCutRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight, null, cornerRadius + (bWidth + outlineWidth + outlineOffset) / 4); } else if (["bottomroundrectangle", "bottom-round-rectangle"].includes(shape)) { cornerRadius = cornerRadius === "auto" ? getRoundRectangleRadius(sWidth, sHeight) : cornerRadius; r2.drawBottomRoundRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight, cornerRadius + (bWidth + outlineWidth + outlineOffset) / 2); } else if (shape === "barrel") { r2.drawBarrelPath(_path || context, npos.x, npos.y, sWidth, sHeight); } else if (shape.startsWith("polygon") || ["rhomboid", "right-rhomboid", "round-tag", "tag", "vee"].includes(shape)) { var pad3 = (bWidth + outlineWidth + outlineOffset) / nodeWidth; points = joinLines(expandPolygon(points, pad3)); r2.drawPolygonPath(_path || context, npos.x, npos.y, nodeWidth, nodeHeight, points); } else { var _pad = (bWidth + outlineWidth + outlineOffset) / nodeWidth; points = joinLines(expandPolygon(points, -_pad)); r2.drawPolygonPath(_path || context, npos.x, npos.y, nodeWidth, nodeHeight, points); } if (usePaths) { context.stroke(_path); } else { context.stroke(); } if (outlineStyle === "double") { context.lineWidth = bWidth / 3; var gco = context.globalCompositeOperation; context.globalCompositeOperation = "destination-out"; if (usePaths) { context.stroke(_path); } else { context.stroke(); } context.globalCompositeOperation = gco; } if (context.setLineDash) { context.setLineDash([]); } } }, "drawOutline"); var drawOverlay = /* @__PURE__ */ __name(function drawOverlay2() { if (shouldDrawOverlay) { r2.drawNodeOverlay(context, node2, pos, nodeWidth, nodeHeight); } }, "drawOverlay"); var drawUnderlay = /* @__PURE__ */ __name(function drawUnderlay2() { if (shouldDrawOverlay) { r2.drawNodeUnderlay(context, node2, pos, nodeWidth, nodeHeight); } }, "drawUnderlay"); var drawText6 = /* @__PURE__ */ __name(function drawText7() { r2.drawElementText(context, node2, null, drawLabel4); }, "drawText"); var ghost = node2.pstyle("ghost").value === "yes"; if (ghost) { var gx = node2.pstyle("ghost-offset-x").pfValue; var gy = node2.pstyle("ghost-offset-y").pfValue; var ghostOpacity = node2.pstyle("ghost-opacity").value; var effGhostOpacity = ghostOpacity * eleOpacity; context.translate(gx, gy); setupOutlineColor(); drawOutline(); setupShapeColor(ghostOpacity * bgOpacity); drawShape(); drawImages(effGhostOpacity, true); setupBorderColor(ghostOpacity * borderOpacity); drawBorder(); drawPie(darkness !== 0 || borderWidth !== 0); drawStripe(darkness !== 0 || borderWidth !== 0); drawImages(effGhostOpacity, false); darken2(effGhostOpacity); context.translate(-gx, -gy); } if (usePaths) { context.translate(-pos.x, -pos.y); } drawUnderlay(); if (usePaths) { context.translate(pos.x, pos.y); } setupOutlineColor(); drawOutline(); setupShapeColor(); drawShape(); drawImages(eleOpacity, true); setupBorderColor(); drawBorder(); drawPie(darkness !== 0 || borderWidth !== 0); drawStripe(darkness !== 0 || borderWidth !== 0); drawImages(eleOpacity, false); darken2(); if (usePaths) { context.translate(-pos.x, -pos.y); } drawText6(); drawOverlay(); if (shiftToOriginWithBb) { context.translate(bb.x1, bb.y1); } }; drawNodeOverlayUnderlay = /* @__PURE__ */ __name(function drawNodeOverlayUnderlay2(overlayOrUnderlay) { if (!["overlay", "underlay"].includes(overlayOrUnderlay)) { throw new Error("Invalid state"); } return function(context, node2, pos, nodeWidth, nodeHeight) { var r2 = this; if (!node2.visible()) { return; } var padding2 = node2.pstyle("".concat(overlayOrUnderlay, "-padding")).pfValue; var opacity = node2.pstyle("".concat(overlayOrUnderlay, "-opacity")).value; var color2 = node2.pstyle("".concat(overlayOrUnderlay, "-color")).value; var shape = node2.pstyle("".concat(overlayOrUnderlay, "-shape")).value; var radius2 = node2.pstyle("".concat(overlayOrUnderlay, "-corner-radius")).value; if (opacity > 0) { pos = pos || node2.position(); if (nodeWidth == null || nodeHeight == null) { var _padding = node2.padding(); nodeWidth = node2.width() + 2 * _padding; nodeHeight = node2.height() + 2 * _padding; } r2.colorFillStyle(context, color2[0], color2[1], color2[2], opacity); r2.nodeShapes[shape].draw(context, pos.x, pos.y, nodeWidth + padding2 * 2, nodeHeight + padding2 * 2, radius2); context.fill(); } }; }, "drawNodeOverlayUnderlay"); CRp$6.drawNodeOverlay = drawNodeOverlayUnderlay("overlay"); CRp$6.drawNodeUnderlay = drawNodeOverlayUnderlay("underlay"); CRp$6.hasPie = function(node2) { node2 = node2[0]; return node2._private.hasPie; }; CRp$6.hasStripe = function(node2) { node2 = node2[0]; return node2._private.hasStripe; }; CRp$6.drawPie = function(context, node2, nodeOpacity, pos) { node2 = node2[0]; pos = pos || node2.position(); var cyStyle = node2.cy().style(); var pieSize = node2.pstyle("pie-size"); var hole = node2.pstyle("pie-hole"); var overallStartAngle = node2.pstyle("pie-start-angle").pfValue; var x5 = pos.x; var y6 = pos.y; var nodeW = node2.width(); var nodeH = node2.height(); var radius2 = Math.min(nodeW, nodeH) / 2; var holeRadius; var lastPercent = 0; var usePaths = this.usePaths(); if (usePaths) { x5 = 0; y6 = 0; } if (pieSize.units === "%") { radius2 = radius2 * pieSize.pfValue; } else if (pieSize.pfValue !== void 0) { radius2 = pieSize.pfValue / 2; } if (hole.units === "%") { holeRadius = radius2 * hole.pfValue; } else if (hole.pfValue !== void 0) { holeRadius = hole.pfValue / 2; } if (holeRadius >= radius2) { return; } for (var i2 = 1; i2 <= cyStyle.pieBackgroundN; i2++) { var size4 = node2.pstyle("pie-" + i2 + "-background-size").value; var color2 = node2.pstyle("pie-" + i2 + "-background-color").value; var opacity = node2.pstyle("pie-" + i2 + "-background-opacity").value * nodeOpacity; var percent = size4 / 100; if (percent + lastPercent > 1) { percent = 1 - lastPercent; } var angleStart = 1.5 * Math.PI + 2 * Math.PI * lastPercent; angleStart += overallStartAngle; var angleDelta = 2 * Math.PI * percent; var angleEnd = angleStart + angleDelta; if (size4 === 0 || lastPercent >= 1 || lastPercent + percent > 1) { continue; } if (holeRadius === 0) { context.beginPath(); context.moveTo(x5, y6); context.arc(x5, y6, radius2, angleStart, angleEnd); context.closePath(); } else { context.beginPath(); context.arc(x5, y6, radius2, angleStart, angleEnd); context.arc(x5, y6, holeRadius, angleEnd, angleStart, true); context.closePath(); } this.colorFillStyle(context, color2[0], color2[1], color2[2], opacity); context.fill(); lastPercent += percent; } }; CRp$6.drawStripe = function(context, node2, nodeOpacity, pos) { node2 = node2[0]; pos = pos || node2.position(); var cyStyle = node2.cy().style(); var x5 = pos.x; var y6 = pos.y; var nodeW = node2.width(); var nodeH = node2.height(); var lastPercent = 0; var usePaths = this.usePaths(); context.save(); var direction = node2.pstyle("stripe-direction").value; var stripeSize = node2.pstyle("stripe-size"); switch (direction) { case "vertical": break; // default case "righward": context.rotate(-Math.PI / 2); break; } var stripeW = nodeW; var stripeH = nodeH; if (stripeSize.units === "%") { stripeW = stripeW * stripeSize.pfValue; stripeH = stripeH * stripeSize.pfValue; } else if (stripeSize.pfValue !== void 0) { stripeW = stripeSize.pfValue; stripeH = stripeSize.pfValue; } if (usePaths) { x5 = 0; y6 = 0; } y6 -= stripeW / 2; x5 -= stripeH / 2; for (var i2 = 1; i2 <= cyStyle.stripeBackgroundN; i2++) { var size4 = node2.pstyle("stripe-" + i2 + "-background-size").value; var color2 = node2.pstyle("stripe-" + i2 + "-background-color").value; var opacity = node2.pstyle("stripe-" + i2 + "-background-opacity").value * nodeOpacity; var percent = size4 / 100; if (percent + lastPercent > 1) { percent = 1 - lastPercent; } if (size4 === 0 || lastPercent >= 1 || lastPercent + percent > 1) { continue; } context.beginPath(); context.rect(x5, y6 + stripeH * lastPercent, stripeW, stripeH * percent); context.closePath(); this.colorFillStyle(context, color2[0], color2[1], color2[2], opacity); context.fill(); lastPercent += percent; } context.restore(); }; CRp$5 = {}; motionBlurDelay = 100; CRp$5.getPixelRatio = function() { var context = this.data.contexts[0]; if (this.forcedPixelRatio != null) { return this.forcedPixelRatio; } var containerWindow = this.cy.window(); var backingStore = context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1; return (containerWindow.devicePixelRatio || 1) / backingStore; }; CRp$5.paintCache = function(context) { var caches = this.paintCaches = this.paintCaches || []; var needToCreateCache = true; var cache3; for (var i2 = 0; i2 < caches.length; i2++) { cache3 = caches[i2]; if (cache3.context === context) { needToCreateCache = false; break; } } if (needToCreateCache) { cache3 = { context }; caches.push(cache3); } return cache3; }; CRp$5.createGradientStyleFor = function(context, shapeStyleName, ele, fill, opacity) { var gradientStyle; var usePaths = this.usePaths(); var colors2 = ele.pstyle(shapeStyleName + "-gradient-stop-colors").value, positions2 = ele.pstyle(shapeStyleName + "-gradient-stop-positions").pfValue; if (fill === "radial-gradient") { if (ele.isEdge()) { var start3 = ele.sourceEndpoint(), end2 = ele.targetEndpoint(), mid = ele.midpoint(); var d1 = dist(start3, mid); var d22 = dist(end2, mid); gradientStyle = context.createRadialGradient(mid.x, mid.y, 0, mid.x, mid.y, Math.max(d1, d22)); } else { var pos = usePaths ? { x: 0, y: 0 } : ele.position(), width3 = ele.paddedWidth(), height2 = ele.paddedHeight(); gradientStyle = context.createRadialGradient(pos.x, pos.y, 0, pos.x, pos.y, Math.max(width3, height2)); } } else { if (ele.isEdge()) { var _start = ele.sourceEndpoint(), _end = ele.targetEndpoint(); gradientStyle = context.createLinearGradient(_start.x, _start.y, _end.x, _end.y); } else { var _pos = usePaths ? { x: 0, y: 0 } : ele.position(), _width = ele.paddedWidth(), _height = ele.paddedHeight(), halfWidth = _width / 2, halfHeight = _height / 2; var direction = ele.pstyle("background-gradient-direction").value; switch (direction) { case "to-bottom": gradientStyle = context.createLinearGradient(_pos.x, _pos.y - halfHeight, _pos.x, _pos.y + halfHeight); break; case "to-top": gradientStyle = context.createLinearGradient(_pos.x, _pos.y + halfHeight, _pos.x, _pos.y - halfHeight); break; case "to-left": gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y, _pos.x - halfWidth, _pos.y); break; case "to-right": gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y, _pos.x + halfWidth, _pos.y); break; case "to-bottom-right": case "to-right-bottom": gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y - halfHeight, _pos.x + halfWidth, _pos.y + halfHeight); break; case "to-top-right": case "to-right-top": gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y + halfHeight, _pos.x + halfWidth, _pos.y - halfHeight); break; case "to-bottom-left": case "to-left-bottom": gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y - halfHeight, _pos.x - halfWidth, _pos.y + halfHeight); break; case "to-top-left": case "to-left-top": gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y + halfHeight, _pos.x - halfWidth, _pos.y - halfHeight); break; } } } if (!gradientStyle) return null; var hasPositions = positions2.length === colors2.length; var length2 = colors2.length; for (var i2 = 0; i2 < length2; i2++) { gradientStyle.addColorStop(hasPositions ? positions2[i2] : i2 / (length2 - 1), "rgba(" + colors2[i2][0] + "," + colors2[i2][1] + "," + colors2[i2][2] + "," + opacity + ")"); } return gradientStyle; }; CRp$5.gradientFillStyle = function(context, ele, fill, opacity) { var gradientStyle = this.createGradientStyleFor(context, "background", ele, fill, opacity); if (!gradientStyle) return null; context.fillStyle = gradientStyle; }; CRp$5.colorFillStyle = function(context, r2, g2, b3, a2) { context.fillStyle = "rgba(" + r2 + "," + g2 + "," + b3 + "," + a2 + ")"; }; CRp$5.eleFillStyle = function(context, ele, opacity) { var backgroundFill = ele.pstyle("background-fill").value; if (backgroundFill === "linear-gradient" || backgroundFill === "radial-gradient") { this.gradientFillStyle(context, ele, backgroundFill, opacity); } else { var backgroundColor = ele.pstyle("background-color").value; this.colorFillStyle(context, backgroundColor[0], backgroundColor[1], backgroundColor[2], opacity); } }; CRp$5.gradientStrokeStyle = function(context, ele, fill, opacity) { var gradientStyle = this.createGradientStyleFor(context, "line", ele, fill, opacity); if (!gradientStyle) return null; context.strokeStyle = gradientStyle; }; CRp$5.colorStrokeStyle = function(context, r2, g2, b3, a2) { context.strokeStyle = "rgba(" + r2 + "," + g2 + "," + b3 + "," + a2 + ")"; }; CRp$5.eleStrokeStyle = function(context, ele, opacity) { var lineFill = ele.pstyle("line-fill").value; if (lineFill === "linear-gradient" || lineFill === "radial-gradient") { this.gradientStrokeStyle(context, ele, lineFill, opacity); } else { var lineColor = ele.pstyle("line-color").value; this.colorStrokeStyle(context, lineColor[0], lineColor[1], lineColor[2], opacity); } }; CRp$5.matchCanvasSize = function(container2) { var r2 = this; var data5 = r2.data; var bb = r2.findContainerClientCoords(); var width3 = bb[2]; var height2 = bb[3]; var pixelRatio = r2.getPixelRatio(); var mbPxRatio = r2.motionBlurPxRatio; if (container2 === r2.data.bufferCanvases[r2.MOTIONBLUR_BUFFER_NODE] || container2 === r2.data.bufferCanvases[r2.MOTIONBLUR_BUFFER_DRAG]) { pixelRatio = mbPxRatio; } var canvasWidth = width3 * pixelRatio; var canvasHeight = height2 * pixelRatio; var canvas; if (canvasWidth === r2.canvasWidth && canvasHeight === r2.canvasHeight) { return; } r2.fontCaches = null; var canvasContainer = data5.canvasContainer; canvasContainer.style.width = width3 + "px"; canvasContainer.style.height = height2 + "px"; for (var i2 = 0; i2 < r2.CANVAS_LAYERS; i2++) { canvas = data5.canvases[i2]; canvas.width = canvasWidth; canvas.height = canvasHeight; canvas.style.width = width3 + "px"; canvas.style.height = height2 + "px"; } for (var i2 = 0; i2 < r2.BUFFER_COUNT; i2++) { canvas = data5.bufferCanvases[i2]; canvas.width = canvasWidth; canvas.height = canvasHeight; canvas.style.width = width3 + "px"; canvas.style.height = height2 + "px"; } r2.textureMult = 1; if (pixelRatio <= 1) { canvas = data5.bufferCanvases[r2.TEXTURE_BUFFER]; r2.textureMult = 2; canvas.width = canvasWidth * r2.textureMult; canvas.height = canvasHeight * r2.textureMult; } r2.canvasWidth = canvasWidth; r2.canvasHeight = canvasHeight; r2.pixelRatio = pixelRatio; }; CRp$5.renderTo = function(cxt, zoom2, pan2, pxRatio) { this.render({ forcedContext: cxt, forcedZoom: zoom2, forcedPan: pan2, drawAllLayers: true, forcedPxRatio: pxRatio }); }; CRp$5.clearCanvas = function() { var r2 = this; var data5 = r2.data; function clear19(context) { context.clearRect(0, 0, r2.canvasWidth, r2.canvasHeight); } __name(clear19, "clear"); clear19(data5.contexts[r2.NODE]); clear19(data5.contexts[r2.DRAG]); }; CRp$5.render = function(options2) { var r2 = this; options2 = options2 || staticEmptyObject(); var cy = r2.cy; var forcedContext = options2.forcedContext; var drawAllLayers = options2.drawAllLayers; var drawOnlyNodeLayer = options2.drawOnlyNodeLayer; var forcedZoom = options2.forcedZoom; var forcedPan = options2.forcedPan; var pixelRatio = options2.forcedPxRatio === void 0 ? this.getPixelRatio() : options2.forcedPxRatio; var data5 = r2.data; var needDraw = data5.canvasNeedsRedraw; var textureDraw = r2.textureOnViewport && !forcedContext && (r2.pinching || r2.hoverData.dragging || r2.swipePanning || r2.data.wheelZooming); var motionBlur = options2.motionBlur !== void 0 ? options2.motionBlur : r2.motionBlur; var mbPxRatio = r2.motionBlurPxRatio; var hasCompoundNodes2 = cy.hasCompoundNodes(); var inNodeDragGesture = r2.hoverData.draggingEles; var inBoxSelection = r2.hoverData.selecting || r2.touchData.selecting ? true : false; motionBlur = motionBlur && !forcedContext && r2.motionBlurEnabled && !inBoxSelection; var motionBlurFadeEffect = motionBlur; if (!forcedContext) { if (r2.prevPxRatio !== pixelRatio) { r2.invalidateContainerClientCoordsCache(); r2.matchCanvasSize(r2.container); r2.redrawHint("eles", true); r2.redrawHint("drag", true); } r2.prevPxRatio = pixelRatio; } if (!forcedContext && r2.motionBlurTimeout) { clearTimeout(r2.motionBlurTimeout); } if (motionBlur) { if (r2.mbFrames == null) { r2.mbFrames = 0; } r2.mbFrames++; if (r2.mbFrames < 3) { motionBlurFadeEffect = false; } if (r2.mbFrames > r2.minMbLowQualFrames) { r2.motionBlurPxRatio = r2.mbPxRBlurry; } } if (r2.clearingMotionBlur) { r2.motionBlurPxRatio = 1; } if (r2.textureDrawLastFrame && !textureDraw) { needDraw[r2.NODE] = true; needDraw[r2.SELECT_BOX] = true; } var style3 = cy.style(); var zoom2 = cy.zoom(); var effectiveZoom = forcedZoom !== void 0 ? forcedZoom : zoom2; var pan2 = cy.pan(); var effectivePan = { x: pan2.x, y: pan2.y }; var vp = { zoom: zoom2, pan: { x: pan2.x, y: pan2.y } }; var prevVp = r2.prevViewport; var viewportIsDiff = prevVp === void 0 || vp.zoom !== prevVp.zoom || vp.pan.x !== prevVp.pan.x || vp.pan.y !== prevVp.pan.y; if (!viewportIsDiff && !(inNodeDragGesture && !hasCompoundNodes2)) { r2.motionBlurPxRatio = 1; } if (forcedPan) { effectivePan = forcedPan; } effectiveZoom *= pixelRatio; effectivePan.x *= pixelRatio; effectivePan.y *= pixelRatio; var eles = r2.getCachedZSortedEles(); function mbclear(context2, x5, y6, w4, h3) { var gco = context2.globalCompositeOperation; context2.globalCompositeOperation = "destination-out"; r2.colorFillStyle(context2, 255, 255, 255, r2.motionBlurTransparency); context2.fillRect(x5, y6, w4, h3); context2.globalCompositeOperation = gco; } __name(mbclear, "mbclear"); function setContextTransform2(context2, clear20) { var ePan, eZoom, w4, h3; if (!r2.clearingMotionBlur && (context2 === data5.bufferContexts[r2.MOTIONBLUR_BUFFER_NODE] || context2 === data5.bufferContexts[r2.MOTIONBLUR_BUFFER_DRAG])) { ePan = { x: pan2.x * mbPxRatio, y: pan2.y * mbPxRatio }; eZoom = zoom2 * mbPxRatio; w4 = r2.canvasWidth * mbPxRatio; h3 = r2.canvasHeight * mbPxRatio; } else { ePan = effectivePan; eZoom = effectiveZoom; w4 = r2.canvasWidth; h3 = r2.canvasHeight; } context2.setTransform(1, 0, 0, 1, 0, 0); if (clear20 === "motionBlur") { mbclear(context2, 0, 0, w4, h3); } else if (!forcedContext && (clear20 === void 0 || clear20)) { context2.clearRect(0, 0, w4, h3); } if (!drawAllLayers) { context2.translate(ePan.x, ePan.y); context2.scale(eZoom, eZoom); } if (forcedPan) { context2.translate(forcedPan.x, forcedPan.y); } if (forcedZoom) { context2.scale(forcedZoom, forcedZoom); } } __name(setContextTransform2, "setContextTransform"); if (!textureDraw) { r2.textureDrawLastFrame = false; } if (textureDraw) { r2.textureDrawLastFrame = true; if (!r2.textureCache) { r2.textureCache = {}; r2.textureCache.bb = cy.mutableElements().boundingBox(); r2.textureCache.texture = r2.data.bufferCanvases[r2.TEXTURE_BUFFER]; var cxt = r2.data.bufferContexts[r2.TEXTURE_BUFFER]; cxt.setTransform(1, 0, 0, 1, 0, 0); cxt.clearRect(0, 0, r2.canvasWidth * r2.textureMult, r2.canvasHeight * r2.textureMult); r2.render({ forcedContext: cxt, drawOnlyNodeLayer: true, forcedPxRatio: pixelRatio * r2.textureMult }); var vp = r2.textureCache.viewport = { zoom: cy.zoom(), pan: cy.pan(), width: r2.canvasWidth, height: r2.canvasHeight }; vp.mpan = { x: (0 - vp.pan.x) / vp.zoom, y: (0 - vp.pan.y) / vp.zoom }; } needDraw[r2.DRAG] = false; needDraw[r2.NODE] = false; var context = data5.contexts[r2.NODE]; var texture = r2.textureCache.texture; var vp = r2.textureCache.viewport; context.setTransform(1, 0, 0, 1, 0, 0); if (motionBlur) { mbclear(context, 0, 0, vp.width, vp.height); } else { context.clearRect(0, 0, vp.width, vp.height); } var outsideBgColor = style3.core("outside-texture-bg-color").value; var outsideBgOpacity = style3.core("outside-texture-bg-opacity").value; r2.colorFillStyle(context, outsideBgColor[0], outsideBgColor[1], outsideBgColor[2], outsideBgOpacity); context.fillRect(0, 0, vp.width, vp.height); var zoom2 = cy.zoom(); setContextTransform2(context, false); context.clearRect(vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio); context.drawImage(texture, vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio); } else if (r2.textureOnViewport && !forcedContext) { r2.textureCache = null; } var extent2 = cy.extent(); var vpManip = r2.pinching || r2.hoverData.dragging || r2.swipePanning || r2.data.wheelZooming || r2.hoverData.draggingEles || r2.cy.animated(); var hideEdges = r2.hideEdgesOnViewport && vpManip; var needMbClear = []; needMbClear[r2.NODE] = !needDraw[r2.NODE] && motionBlur && !r2.clearedForMotionBlur[r2.NODE] || r2.clearingMotionBlur; if (needMbClear[r2.NODE]) { r2.clearedForMotionBlur[r2.NODE] = true; } needMbClear[r2.DRAG] = !needDraw[r2.DRAG] && motionBlur && !r2.clearedForMotionBlur[r2.DRAG] || r2.clearingMotionBlur; if (needMbClear[r2.DRAG]) { r2.clearedForMotionBlur[r2.DRAG] = true; } if (needDraw[r2.NODE] || drawAllLayers || drawOnlyNodeLayer || needMbClear[r2.NODE]) { var useBuffer = motionBlur && !needMbClear[r2.NODE] && mbPxRatio !== 1; var context = forcedContext || (useBuffer ? r2.data.bufferContexts[r2.MOTIONBLUR_BUFFER_NODE] : data5.contexts[r2.NODE]); var clear19 = motionBlur && !useBuffer ? "motionBlur" : void 0; setContextTransform2(context, clear19); if (hideEdges) { r2.drawCachedNodes(context, eles.nondrag, pixelRatio, extent2); } else { r2.drawLayeredElements(context, eles.nondrag, pixelRatio, extent2); } if (r2.debug) { r2.drawDebugPoints(context, eles.nondrag); } if (!drawAllLayers && !motionBlur) { needDraw[r2.NODE] = false; } } if (!drawOnlyNodeLayer && (needDraw[r2.DRAG] || drawAllLayers || needMbClear[r2.DRAG])) { var useBuffer = motionBlur && !needMbClear[r2.DRAG] && mbPxRatio !== 1; var context = forcedContext || (useBuffer ? r2.data.bufferContexts[r2.MOTIONBLUR_BUFFER_DRAG] : data5.contexts[r2.DRAG]); setContextTransform2(context, motionBlur && !useBuffer ? "motionBlur" : void 0); if (hideEdges) { r2.drawCachedNodes(context, eles.drag, pixelRatio, extent2); } else { r2.drawCachedElements(context, eles.drag, pixelRatio, extent2); } if (r2.debug) { r2.drawDebugPoints(context, eles.drag); } if (!drawAllLayers && !motionBlur) { needDraw[r2.DRAG] = false; } } this.drawSelectionRectangle(options2, setContextTransform2); if (motionBlur && mbPxRatio !== 1) { var cxtNode = data5.contexts[r2.NODE]; var txtNode = r2.data.bufferCanvases[r2.MOTIONBLUR_BUFFER_NODE]; var cxtDrag = data5.contexts[r2.DRAG]; var txtDrag = r2.data.bufferCanvases[r2.MOTIONBLUR_BUFFER_DRAG]; var drawMotionBlur = /* @__PURE__ */ __name(function drawMotionBlur2(cxt2, txt, needClear) { cxt2.setTransform(1, 0, 0, 1, 0, 0); if (needClear || !motionBlurFadeEffect) { cxt2.clearRect(0, 0, r2.canvasWidth, r2.canvasHeight); } else { mbclear(cxt2, 0, 0, r2.canvasWidth, r2.canvasHeight); } var pxr = mbPxRatio; cxt2.drawImage( txt, // img 0, 0, // sx, sy r2.canvasWidth * pxr, r2.canvasHeight * pxr, // sw, sh 0, 0, // x, y r2.canvasWidth, r2.canvasHeight // w, h ); }, "drawMotionBlur"); if (needDraw[r2.NODE] || needMbClear[r2.NODE]) { drawMotionBlur(cxtNode, txtNode, needMbClear[r2.NODE]); needDraw[r2.NODE] = false; } if (needDraw[r2.DRAG] || needMbClear[r2.DRAG]) { drawMotionBlur(cxtDrag, txtDrag, needMbClear[r2.DRAG]); needDraw[r2.DRAG] = false; } } r2.prevViewport = vp; if (r2.clearingMotionBlur) { r2.clearingMotionBlur = false; r2.motionBlurCleared = true; r2.motionBlur = true; } if (motionBlur) { r2.motionBlurTimeout = setTimeout(function() { r2.motionBlurTimeout = null; r2.clearedForMotionBlur[r2.NODE] = false; r2.clearedForMotionBlur[r2.DRAG] = false; r2.motionBlur = false; r2.clearingMotionBlur = !textureDraw; r2.mbFrames = 0; needDraw[r2.NODE] = true; needDraw[r2.DRAG] = true; r2.redraw(); }, motionBlurDelay); } if (!forcedContext) { cy.emit("render"); } }; CRp$5.drawSelectionRectangle = function(options2, setContextTransform2) { var r2 = this; var cy = r2.cy; var data5 = r2.data; var style3 = cy.style(); var drawOnlyNodeLayer = options2.drawOnlyNodeLayer; var drawAllLayers = options2.drawAllLayers; var needDraw = data5.canvasNeedsRedraw; var forcedContext = options2.forcedContext; if (r2.showFps || !drawOnlyNodeLayer && needDraw[r2.SELECT_BOX] && !drawAllLayers) { var context = forcedContext || data5.contexts[r2.SELECT_BOX]; setContextTransform2(context); if (r2.selection[4] == 1 && (r2.hoverData.selecting || r2.touchData.selecting)) { var zoom2 = r2.cy.zoom(); var borderWidth = style3.core("selection-box-border-width").value / zoom2; context.lineWidth = borderWidth; context.fillStyle = "rgba(" + style3.core("selection-box-color").value[0] + "," + style3.core("selection-box-color").value[1] + "," + style3.core("selection-box-color").value[2] + "," + style3.core("selection-box-opacity").value + ")"; context.fillRect(r2.selection[0], r2.selection[1], r2.selection[2] - r2.selection[0], r2.selection[3] - r2.selection[1]); if (borderWidth > 0) { context.strokeStyle = "rgba(" + style3.core("selection-box-border-color").value[0] + "," + style3.core("selection-box-border-color").value[1] + "," + style3.core("selection-box-border-color").value[2] + "," + style3.core("selection-box-opacity").value + ")"; context.strokeRect(r2.selection[0], r2.selection[1], r2.selection[2] - r2.selection[0], r2.selection[3] - r2.selection[1]); } } if (data5.bgActivePosistion && !r2.hoverData.selecting) { var zoom2 = r2.cy.zoom(); var pos = data5.bgActivePosistion; context.fillStyle = "rgba(" + style3.core("active-bg-color").value[0] + "," + style3.core("active-bg-color").value[1] + "," + style3.core("active-bg-color").value[2] + "," + style3.core("active-bg-opacity").value + ")"; context.beginPath(); context.arc(pos.x, pos.y, style3.core("active-bg-size").pfValue / zoom2, 0, 2 * Math.PI); context.fill(); } var timeToRender = r2.lastRedrawTime; if (r2.showFps && timeToRender) { timeToRender = Math.round(timeToRender); var fps = Math.round(1e3 / timeToRender); var text4 = "1 frame = " + timeToRender + " ms = " + fps + " fps"; context.setTransform(1, 0, 0, 1, 0, 0); context.fillStyle = "rgba(255, 0, 0, 0.75)"; context.strokeStyle = "rgba(255, 0, 0, 0.75)"; context.font = "30px Arial"; if (!fpsHeight) { var dims = context.measureText(text4); fpsHeight = dims.actualBoundingBoxAscent; } context.fillText(text4, 0, fpsHeight); var maxFps = 60; context.strokeRect(0, fpsHeight + 10, 250, 20); context.fillRect(0, fpsHeight + 10, 250 * Math.min(fps / maxFps, 1), 20); } if (!drawAllLayers) { needDraw[r2.SELECT_BOX] = false; } } }; __name(compileShader, "compileShader"); __name(createProgram, "createProgram"); __name(createTextureCanvas, "createTextureCanvas"); __name(getEffectivePanZoom, "getEffectivePanZoom"); __name(getEffectiveZoom, "getEffectiveZoom"); __name(modelToRenderedPosition2, "modelToRenderedPosition"); __name(isSimpleShape, "isSimpleShape"); __name(arrayEqual, "arrayEqual"); __name(toWebGLColor, "toWebGLColor"); __name(indexToVec4, "indexToVec4"); __name(vec4ToIndex, "vec4ToIndex"); __name(createTexture, "createTexture"); __name(getTypeInfo, "getTypeInfo"); __name(createTypedArray, "createTypedArray"); __name(createTypedArrayView, "createTypedArrayView"); __name(createBufferStaticDraw, "createBufferStaticDraw"); __name(createBufferDynamicDraw, "createBufferDynamicDraw"); __name(create3x3MatrixBufferDynamicDraw, "create3x3MatrixBufferDynamicDraw"); __name(createPickingFrameBuffer, "createPickingFrameBuffer"); ARRAY_TYPE = typeof Float32Array !== "undefined" ? Float32Array : Array; if (!Math.hypot) Math.hypot = function() { var y6 = 0, i2 = arguments.length; while (i2--) { y6 += arguments[i2] * arguments[i2]; } return Math.sqrt(y6); }; __name(create3, "create"); __name(identity6, "identity"); __name(multiply, "multiply"); __name(translate, "translate"); __name(rotate, "rotate"); __name(scale, "scale"); __name(projection, "projection"); Atlas = /* @__PURE__ */ (function() { function Atlas2(r2, texSize, texRows, createTextureCanvas2) { _classCallCheck(this, Atlas2); this.debugID = Math.floor(Math.random() * 1e4); this.r = r2; this.texSize = texSize; this.texRows = texRows; this.texHeight = Math.floor(texSize / texRows); this.enableWrapping = true; this.locked = false; this.texture = null; this.needsBuffer = true; this.freePointer = { x: 0, row: 0 }; this.keyToLocation = /* @__PURE__ */ new Map(); this.canvas = createTextureCanvas2(r2, texSize, texSize); this.scratch = createTextureCanvas2(r2, texSize, this.texHeight, "scratch"); } __name(Atlas2, "Atlas"); return _createClass(Atlas2, [{ key: "lock", value: /* @__PURE__ */ __name(function lock() { this.locked = true; }, "lock") }, { key: "getKeys", value: /* @__PURE__ */ __name(function getKeys() { return new Set(this.keyToLocation.keys()); }, "getKeys") }, { key: "getScale", value: /* @__PURE__ */ __name(function getScale(_ref) { var w4 = _ref.w, h3 = _ref.h; var texHeight = this.texHeight, maxTexWidth = this.texSize; var scale2 = texHeight / h3; var texW = w4 * scale2; var texH = h3 * scale2; if (texW > maxTexWidth) { scale2 = maxTexWidth / w4; texW = w4 * scale2; texH = h3 * scale2; } return { scale: scale2, texW, texH }; }, "getScale") }, { key: "draw", value: /* @__PURE__ */ __name(function draw26(key, bb, doDrawing) { var _this = this; if (this.locked) throw new Error("can't draw, atlas is locked"); var texSize = this.texSize, texRows = this.texRows, texHeight = this.texHeight; var _this$getScale = this.getScale(bb), scale2 = _this$getScale.scale, texW = _this$getScale.texW, texH = _this$getScale.texH; var drawAt = /* @__PURE__ */ __name(function drawAt2(location, canvas) { if (doDrawing && canvas) { var context = canvas.context; var x5 = location.x, row = location.row; var xOffset = x5; var yOffset = texHeight * row; context.save(); context.translate(xOffset, yOffset); context.scale(scale2, scale2); doDrawing(context, bb); context.restore(); } }, "drawAt"); var locations = [null, null]; var drawNormal = /* @__PURE__ */ __name(function drawNormal2() { drawAt(_this.freePointer, _this.canvas); locations[0] = { x: _this.freePointer.x, y: _this.freePointer.row * texHeight, w: texW, h: texH }; locations[1] = { // create a second location with a width of 0, for convenience x: _this.freePointer.x + texW, y: _this.freePointer.row * texHeight, w: 0, h: texH }; _this.freePointer.x += texW; if (_this.freePointer.x == texSize) { _this.freePointer.x = 0; _this.freePointer.row++; } }, "drawNormal"); var drawWrapped = /* @__PURE__ */ __name(function drawWrapped2() { var scratch = _this.scratch, canvas = _this.canvas; scratch.clear(); drawAt({ x: 0, row: 0 }, scratch); var firstTexW = texSize - _this.freePointer.x; var secondTexW = texW - firstTexW; var h3 = texHeight; { var dx = _this.freePointer.x; var dy = _this.freePointer.row * texHeight; var w4 = firstTexW; canvas.context.drawImage(scratch, 0, 0, w4, h3, dx, dy, w4, h3); locations[0] = { x: dx, y: dy, w: w4, h: texH }; } { var sx = firstTexW; var _dy = (_this.freePointer.row + 1) * texHeight; var _w = secondTexW; if (canvas) { canvas.context.drawImage(scratch, sx, 0, _w, h3, 0, _dy, _w, h3); } locations[1] = { x: 0, y: _dy, w: _w, h: texH }; } _this.freePointer.x = secondTexW; _this.freePointer.row++; }, "drawWrapped"); var moveToStartOfNextRow = /* @__PURE__ */ __name(function moveToStartOfNextRow2() { _this.freePointer.x = 0; _this.freePointer.row++; }, "moveToStartOfNextRow"); if (this.freePointer.x + texW <= texSize) { drawNormal(); } else if (this.freePointer.row >= texRows - 1) { return false; } else if (this.freePointer.x === texSize) { moveToStartOfNextRow(); drawNormal(); } else if (this.enableWrapping) { drawWrapped(); } else { moveToStartOfNextRow(); drawNormal(); } this.keyToLocation.set(key, locations); this.needsBuffer = true; return locations; }, "draw") }, { key: "getOffsets", value: /* @__PURE__ */ __name(function getOffsets(key) { return this.keyToLocation.get(key); }, "getOffsets") }, { key: "isEmpty", value: /* @__PURE__ */ __name(function isEmpty2() { return this.freePointer.x === 0 && this.freePointer.row === 0; }, "isEmpty") }, { key: "canFit", value: /* @__PURE__ */ __name(function canFit(bb) { if (this.locked) return false; var texSize = this.texSize, texRows = this.texRows; var _this$getScale2 = this.getScale(bb), texW = _this$getScale2.texW; if (this.freePointer.x + texW > texSize) { return this.freePointer.row < texRows - 1; } return true; }, "canFit") // called on every frame }, { key: "bufferIfNeeded", value: /* @__PURE__ */ __name(function bufferIfNeeded(gl) { if (!this.texture) { this.texture = createTexture(gl, this.debugID); } if (this.needsBuffer) { this.texture.buffer(this.canvas); this.needsBuffer = false; if (this.locked) { this.canvas = null; this.scratch = null; } } }, "bufferIfNeeded") }, { key: "dispose", value: /* @__PURE__ */ __name(function dispose() { if (this.texture) { this.texture.deleteTexture(); this.texture = null; } this.canvas = null; this.scratch = null; this.locked = true; }, "dispose") }]); })(); AtlasCollection = /* @__PURE__ */ (function() { function AtlasCollection2(r2, texSize, texRows, createTextureCanvas2) { _classCallCheck(this, AtlasCollection2); this.r = r2; this.texSize = texSize; this.texRows = texRows; this.createTextureCanvas = createTextureCanvas2; this.atlases = []; this.styleKeyToAtlas = /* @__PURE__ */ new Map(); this.markedKeys = /* @__PURE__ */ new Set(); } __name(AtlasCollection2, "AtlasCollection"); return _createClass(AtlasCollection2, [{ key: "getKeys", value: /* @__PURE__ */ __name(function getKeys() { return new Set(this.styleKeyToAtlas.keys()); }, "getKeys") }, { key: "_createAtlas", value: /* @__PURE__ */ __name(function _createAtlas() { var r2 = this.r, texSize = this.texSize, texRows = this.texRows, createTextureCanvas2 = this.createTextureCanvas; return new Atlas(r2, texSize, texRows, createTextureCanvas2); }, "_createAtlas") }, { key: "_getScratchCanvas", value: /* @__PURE__ */ __name(function _getScratchCanvas() { if (!this.scratch) { var r2 = this.r, texSize = this.texSize, texRows = this.texRows, createTextureCanvas2 = this.createTextureCanvas; var texHeight = Math.floor(texSize / texRows); this.scratch = createTextureCanvas2(r2, texSize, texHeight, "scratch"); } return this.scratch; }, "_getScratchCanvas") }, { key: "draw", value: /* @__PURE__ */ __name(function draw26(key, bb, doDrawing) { var atlas = this.styleKeyToAtlas.get(key); if (!atlas) { atlas = this.atlases[this.atlases.length - 1]; if (!atlas || !atlas.canFit(bb)) { if (atlas) atlas.lock(); atlas = this._createAtlas(); this.atlases.push(atlas); } atlas.draw(key, bb, doDrawing); this.styleKeyToAtlas.set(key, atlas); } return atlas; }, "draw") }, { key: "getAtlas", value: /* @__PURE__ */ __name(function getAtlas(key) { return this.styleKeyToAtlas.get(key); }, "getAtlas") }, { key: "hasAtlas", value: /* @__PURE__ */ __name(function hasAtlas(key) { return this.styleKeyToAtlas.has(key); }, "hasAtlas") }, { key: "markKeyForGC", value: /* @__PURE__ */ __name(function markKeyForGC(key) { this.markedKeys.add(key); }, "markKeyForGC") }, { key: "gc", value: /* @__PURE__ */ __name(function gc2() { var _this2 = this; var markedKeys = this.markedKeys; if (markedKeys.size === 0) { console.log("nothing to garbage collect"); return; } var newAtlases = []; var newStyleKeyToAtlas = /* @__PURE__ */ new Map(); var newAtlas = null; var _iterator = _createForOfIteratorHelper(this.atlases), _step; try { var _loop = /* @__PURE__ */ __name(function _loop2() { var atlas = _step.value; var keys2 = atlas.getKeys(); var keysToCollect = intersection2(markedKeys, keys2); if (keysToCollect.size === 0) { newAtlases.push(atlas); keys2.forEach(function(k2) { return newStyleKeyToAtlas.set(k2, atlas); }); return 1; } if (!newAtlas) { newAtlas = _this2._createAtlas(); newAtlases.push(newAtlas); } var _iterator2 = _createForOfIteratorHelper(keys2), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) { var key = _step2.value; if (!keysToCollect.has(key)) { var _atlas$getOffsets = atlas.getOffsets(key), _atlas$getOffsets2 = _slicedToArray(_atlas$getOffsets, 2), s1 = _atlas$getOffsets2[0], s2 = _atlas$getOffsets2[1]; if (!newAtlas.canFit({ w: s1.w + s2.w, h: s1.h })) { newAtlas.lock(); newAtlas = _this2._createAtlas(); newAtlases.push(newAtlas); } if (atlas.canvas) { _this2._copyTextureToNewAtlas(key, atlas, newAtlas); newStyleKeyToAtlas.set(key, newAtlas); } } } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } atlas.dispose(); }, "_loop"); for (_iterator.s(); !(_step = _iterator.n()).done; ) { if (_loop()) continue; } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } this.atlases = newAtlases; this.styleKeyToAtlas = newStyleKeyToAtlas; this.markedKeys = /* @__PURE__ */ new Set(); }, "gc") }, { key: "_copyTextureToNewAtlas", value: /* @__PURE__ */ __name(function _copyTextureToNewAtlas(key, oldAtlas, newAtlas) { var _oldAtlas$getOffsets = oldAtlas.getOffsets(key), _oldAtlas$getOffsets2 = _slicedToArray(_oldAtlas$getOffsets, 2), s1 = _oldAtlas$getOffsets2[0], s2 = _oldAtlas$getOffsets2[1]; if (s2.w === 0) { newAtlas.draw(key, s1, function(context) { context.drawImage(oldAtlas.canvas, s1.x, s1.y, s1.w, s1.h, 0, 0, s1.w, s1.h); }); } else { var scratch = this._getScratchCanvas(); scratch.clear(); scratch.context.drawImage(oldAtlas.canvas, s1.x, s1.y, s1.w, s1.h, 0, 0, s1.w, s1.h); scratch.context.drawImage(oldAtlas.canvas, s2.x, s2.y, s2.w, s2.h, s1.w, 0, s2.w, s2.h); var w4 = s1.w + s2.w; var h3 = s1.h; newAtlas.draw(key, { w: w4, h: h3 }, function(context) { context.drawImage( scratch, 0, 0, w4, h3, 0, 0, w4, h3 // the destination context has already been translated to the correct position ); }); } }, "_copyTextureToNewAtlas") }, { key: "getCounts", value: /* @__PURE__ */ __name(function getCounts() { return { keyCount: this.styleKeyToAtlas.size, atlasCount: new Set(this.styleKeyToAtlas.values()).size }; }, "getCounts") }]); })(); __name(intersection2, "intersection"); AtlasManager = /* @__PURE__ */ (function() { function AtlasManager2(r2, globalOptions) { _classCallCheck(this, AtlasManager2); this.r = r2; this.globalOptions = globalOptions; this.atlasSize = globalOptions.webglTexSize; this.maxAtlasesPerBatch = globalOptions.webglTexPerBatch; this.renderTypes = /* @__PURE__ */ new Map(); this.collections = /* @__PURE__ */ new Map(); this.typeAndIdToKey = /* @__PURE__ */ new Map(); } __name(AtlasManager2, "AtlasManager"); return _createClass(AtlasManager2, [{ key: "getAtlasSize", value: /* @__PURE__ */ __name(function getAtlasSize() { return this.atlasSize; }, "getAtlasSize") }, { key: "addAtlasCollection", value: /* @__PURE__ */ __name(function addAtlasCollection(collectionName, atlasCollectionOptions) { var _this$globalOptions = this.globalOptions, webglTexSize = _this$globalOptions.webglTexSize, createTextureCanvas2 = _this$globalOptions.createTextureCanvas; var texRows = atlasCollectionOptions.texRows; var cachedCreateTextureCanvas = this._cacheScratchCanvas(createTextureCanvas2); var atlasCollection = new AtlasCollection(this.r, webglTexSize, texRows, cachedCreateTextureCanvas); this.collections.set(collectionName, atlasCollection); }, "addAtlasCollection") }, { key: "addRenderType", value: /* @__PURE__ */ __name(function addRenderType(type3, renderTypeOptions) { var collection4 = renderTypeOptions.collection; if (!this.collections.has(collection4)) throw new Error("invalid atlas collection name '".concat(collection4, "'")); var atlasCollection = this.collections.get(collection4); var opts = extend4({ type: type3, atlasCollection }, renderTypeOptions); this.renderTypes.set(type3, opts); }, "addRenderType") }, { key: "getRenderTypeOpts", value: /* @__PURE__ */ __name(function getRenderTypeOpts(type3) { return this.renderTypes.get(type3); }, "getRenderTypeOpts") }, { key: "getAtlasCollection", value: /* @__PURE__ */ __name(function getAtlasCollection(name) { return this.collections.get(name); }, "getAtlasCollection") }, { key: "_cacheScratchCanvas", value: /* @__PURE__ */ __name(function _cacheScratchCanvas(createTextureCanvas2) { var prevW = -1; var prevH = -1; var scratchCanvas = null; return function(r2, w4, h3, scratch) { if (scratch) { if (!scratchCanvas || w4 != prevW || h3 != prevH) { prevW = w4; prevH = h3; scratchCanvas = createTextureCanvas2(r2, w4, h3); } return scratchCanvas; } else { return createTextureCanvas2(r2, w4, h3); } }; }, "_cacheScratchCanvas") }, { key: "_key", value: /* @__PURE__ */ __name(function _key(renderType, id30) { return "".concat(renderType, "-").concat(id30); }, "_key") /** Marks textues associated with the element for garbage collection. */ }, { key: "invalidate", value: /* @__PURE__ */ __name(function invalidate(eles) { var _this3 = this; var _ref2 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, _ref2$forceRedraw = _ref2.forceRedraw, forceRedraw = _ref2$forceRedraw === void 0 ? false : _ref2$forceRedraw, _ref2$filterEle = _ref2.filterEle, filterEle = _ref2$filterEle === void 0 ? function() { return true; } : _ref2$filterEle, _ref2$filterType = _ref2.filterType, filterType = _ref2$filterType === void 0 ? function() { return true; } : _ref2$filterType; var needGC = false; var runGCNow = false; var _iterator3 = _createForOfIteratorHelper(eles), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done; ) { var ele = _step3.value; if (filterEle(ele)) { var _iterator4 = _createForOfIteratorHelper(this.renderTypes.values()), _step4; try { var _loop2 = /* @__PURE__ */ __name(function _loop22() { var opts = _step4.value; var renderType = opts.type; if (filterType(renderType)) { var atlasCollection = _this3.collections.get(opts.collection); var key = opts.getKey(ele); var keyArray = Array.isArray(key) ? key : [key]; if (forceRedraw) { keyArray.forEach(function(key2) { return atlasCollection.markKeyForGC(key2); }); runGCNow = true; } else { var id30 = opts.getID ? opts.getID(ele) : ele.id(); var mapKey = _this3._key(renderType, id30); var oldKeyArray = _this3.typeAndIdToKey.get(mapKey); if (oldKeyArray !== void 0 && !arrayEqual(keyArray, oldKeyArray)) { needGC = true; _this3.typeAndIdToKey["delete"](mapKey); oldKeyArray.forEach(function(oldKey) { return atlasCollection.markKeyForGC(oldKey); }); } } } }, "_loop2"); for (_iterator4.s(); !(_step4 = _iterator4.n()).done; ) { _loop2(); } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } } } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } if (runGCNow) { this.gc(); needGC = false; } return needGC; }, "invalidate") /** Garbage collect */ }, { key: "gc", value: /* @__PURE__ */ __name(function gc2() { var _iterator5 = _createForOfIteratorHelper(this.collections.values()), _step5; try { for (_iterator5.s(); !(_step5 = _iterator5.n()).done; ) { var collection4 = _step5.value; collection4.gc(); } } catch (err) { _iterator5.e(err); } finally { _iterator5.f(); } }, "gc") }, { key: "getOrCreateAtlas", value: /* @__PURE__ */ __name(function getOrCreateAtlas(ele, type3, bb, styleKey) { var opts = this.renderTypes.get(type3); var atlasCollection = this.collections.get(opts.collection); var drawn = false; var atlas = atlasCollection.draw(styleKey, bb, function(context) { if (opts.drawClipped) { context.save(); context.beginPath(); context.rect(0, 0, bb.w, bb.h); context.clip(); opts.drawElement(context, ele, bb, true, true); context.restore(); } else { opts.drawElement(context, ele, bb, true, true); } drawn = true; }); if (drawn) { var id30 = opts.getID ? opts.getID(ele) : ele.id(); var mapKey = this._key(type3, id30); if (this.typeAndIdToKey.has(mapKey)) { this.typeAndIdToKey.get(mapKey).push(styleKey); } else { this.typeAndIdToKey.set(mapKey, [styleKey]); } } return atlas; }, "getOrCreateAtlas") }, { key: "getAtlasInfo", value: /* @__PURE__ */ __name(function getAtlasInfo(ele, type3) { var _this4 = this; var opts = this.renderTypes.get(type3); var key = opts.getKey(ele); var keyArray = Array.isArray(key) ? key : [key]; return keyArray.map(function(styleKey) { var bb = opts.getBoundingBox(ele, styleKey); var atlas = _this4.getOrCreateAtlas(ele, type3, bb, styleKey); var _atlas$getOffsets3 = atlas.getOffsets(styleKey), _atlas$getOffsets4 = _slicedToArray(_atlas$getOffsets3, 2), tex1 = _atlas$getOffsets4[0], tex2 = _atlas$getOffsets4[1]; return { atlas, tex: tex1, tex1, tex2, bb }; }); }, "getAtlasInfo") }, { key: "getDebugInfo", value: /* @__PURE__ */ __name(function getDebugInfo() { var debugInfo = []; var _iterator6 = _createForOfIteratorHelper(this.collections), _step6; try { for (_iterator6.s(); !(_step6 = _iterator6.n()).done; ) { var _step6$value = _slicedToArray(_step6.value, 2), name = _step6$value[0], collection4 = _step6$value[1]; var _collection$getCounts = collection4.getCounts(), keyCount = _collection$getCounts.keyCount, atlasCount = _collection$getCounts.atlasCount; debugInfo.push({ type: name, keyCount, atlasCount }); } } catch (err) { _iterator6.e(err); } finally { _iterator6.f(); } return debugInfo; }, "getDebugInfo") }]); })(); AtlasBatchManager = /* @__PURE__ */ (function() { function AtlasBatchManager2(globalOptions) { _classCallCheck(this, AtlasBatchManager2); this.globalOptions = globalOptions; this.atlasSize = globalOptions.webglTexSize; this.maxAtlasesPerBatch = globalOptions.webglTexPerBatch; this.batchAtlases = []; } __name(AtlasBatchManager2, "AtlasBatchManager"); return _createClass(AtlasBatchManager2, [{ key: "getMaxAtlasesPerBatch", value: /* @__PURE__ */ __name(function getMaxAtlasesPerBatch() { return this.maxAtlasesPerBatch; }, "getMaxAtlasesPerBatch") }, { key: "getAtlasSize", value: /* @__PURE__ */ __name(function getAtlasSize() { return this.atlasSize; }, "getAtlasSize") }, { key: "getIndexArray", value: /* @__PURE__ */ __name(function getIndexArray() { return Array.from({ length: this.maxAtlasesPerBatch }, function(v3, i2) { return i2; }); }, "getIndexArray") }, { key: "startBatch", value: /* @__PURE__ */ __name(function startBatch2() { this.batchAtlases = []; }, "startBatch") }, { key: "getAtlasCount", value: /* @__PURE__ */ __name(function getAtlasCount() { return this.batchAtlases.length; }, "getAtlasCount") }, { key: "getAtlases", value: /* @__PURE__ */ __name(function getAtlases() { return this.batchAtlases; }, "getAtlases") }, { key: "canAddToCurrentBatch", value: /* @__PURE__ */ __name(function canAddToCurrentBatch(atlas) { if (this.batchAtlases.length === this.maxAtlasesPerBatch) { return this.batchAtlases.includes(atlas); } return true; }, "canAddToCurrentBatch") }, { key: "getAtlasIndexForBatch", value: /* @__PURE__ */ __name(function getAtlasIndexForBatch(atlas) { var atlasID = this.batchAtlases.indexOf(atlas); if (atlasID < 0) { if (this.batchAtlases.length === this.maxAtlasesPerBatch) { throw new Error("cannot add more atlases to batch"); } this.batchAtlases.push(atlas); atlasID = this.batchAtlases.length - 1; } return atlasID; }, "getAtlasIndexForBatch") }]); })(); circleSD = "\n float circleSD(vec2 p, float r) {\n return distance(vec2(0), p) - r; // signed distance\n }\n"; rectangleSD = "\n float rectangleSD(vec2 p, vec2 b) {\n vec2 d = abs(p)-b;\n return distance(vec2(0),max(d,0.0)) + min(max(d.x,d.y),0.0);\n }\n"; roundRectangleSD = "\n float roundRectangleSD(vec2 p, vec2 b, vec4 cr) {\n cr.xy = (p.x > 0.0) ? cr.xy : cr.zw;\n cr.x = (p.y > 0.0) ? cr.x : cr.y;\n vec2 q = abs(p) - b + cr.x;\n return min(max(q.x, q.y), 0.0) + distance(vec2(0), max(q, 0.0)) - cr.x;\n }\n"; ellipseSD = "\n float ellipseSD(vec2 p, vec2 ab) {\n p = abs( p ); // symmetry\n\n // find root with Newton solver\n vec2 q = ab*(p-ab);\n float w = (q.x1.0) ? d : -d;\n }\n"; RENDER_TARGET = { SCREEN: { name: "screen", screen: true }, PICKING: { name: "picking", picking: true } }; TEX_PICKING_MODE = { // render the texture just like in RENDER_TARGET.SCREEN mode IGNORE: 1, // don't render the texture at all USE_BB: 2 // render the bounding box as an opaque rectangle }; TEXTURE = 0; EDGE_STRAIGHT = 1; EDGE_CURVE_SEGMENT = 2; EDGE_ARROW = 3; RECTANGLE = 4; ROUND_RECTANGLE = 5; BOTTOM_ROUND_RECTANGLE = 6; ELLIPSE = 7; ElementDrawingWebGL = /* @__PURE__ */ (function() { function ElementDrawingWebGL2(r2, gl, opts) { _classCallCheck(this, ElementDrawingWebGL2); this.r = r2; this.gl = gl; this.maxInstances = opts.webglBatchSize; this.atlasSize = opts.webglTexSize; this.bgColor = opts.bgColor; this.debug = opts.webglDebug; this.batchDebugInfo = []; opts.enableWrapping = true; opts.createTextureCanvas = createTextureCanvas; this.atlasManager = new AtlasManager(r2, opts); this.batchManager = new AtlasBatchManager(opts); this.simpleShapeOptions = /* @__PURE__ */ new Map(); this.program = this._createShaderProgram(RENDER_TARGET.SCREEN); this.pickingProgram = this._createShaderProgram(RENDER_TARGET.PICKING); this.vao = this._createVAO(); } __name(ElementDrawingWebGL2, "ElementDrawingWebGL"); return _createClass(ElementDrawingWebGL2, [{ key: "addAtlasCollection", value: /* @__PURE__ */ __name(function addAtlasCollection(collectionName, opts) { this.atlasManager.addAtlasCollection(collectionName, opts); }, "addAtlasCollection") /** * @typedef { Object } TextureRenderTypeOpts * @property { string } collection - name of atlas collection to render textures to * @property { function } getKey - returns the "style key" for an element, may be a single value or an array for multi-line lables * @property { function } drawElement - uses a canvas renderer to draw the element to the texture atlas * @property { boolean } drawClipped - if true the context will be clipped to the bounding box before drawElement() is called, may affect performance * @property { function } getBoundingBox - returns the bounding box for an element * @property { function } getRotation * @property { function } getRotationPoint * @property { function } getRotationOffset * @property { function } isVisible - an extra check for visibility in addition to ele.visible() * @property { function } getTexPickingMode - returns a value from the TEX_PICKING_MODE enum */ /** * @param { string } typeName * @param { TextureRenderTypeOpts } opts */ }, { key: "addTextureAtlasRenderType", value: /* @__PURE__ */ __name(function addTextureAtlasRenderType(typeName, opts) { this.atlasManager.addRenderType(typeName, opts); }, "addTextureAtlasRenderType") /** * @typedef { Object } SimpleShapeRenderTypeOpts * @property { function } getBoundingBox - returns the bounding box for an element * @property { function } isVisible - this is an extra check for visibility in addition to ele.visible() * @property { function } isSimple - check if element is a simple shape, or if it needs to fall back to texture rendering * @property { ShapeVisualProperties } shapeProps */ /** * @typedef { Object } ShapeVisualProperties * @property { string } shape * @property { string } color * @property { string } opacity * @property { string } padding * @property { string } radius * @property { boolean } border */ /** * @param { string } typeName * @param { SimpleShapeRenderTypeOpts } opts */ }, { key: "addSimpleShapeRenderType", value: /* @__PURE__ */ __name(function addSimpleShapeRenderType(typeName, opts) { this.simpleShapeOptions.set(typeName, opts); }, "addSimpleShapeRenderType") /** * Inform the atlasManager when element style keys may have changed. * The atlasManager can then mark unused textures for "garbage collection". */ }, { key: "invalidate", value: /* @__PURE__ */ __name(function invalidate(eles) { var _ref = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, type3 = _ref.type; var atlasManager = this.atlasManager; if (type3) { return atlasManager.invalidate(eles, { filterType: /* @__PURE__ */ __name(function filterType(t4) { return t4 === type3; }, "filterType"), forceRedraw: true }); } else { return atlasManager.invalidate(eles); } }, "invalidate") /** * Run texture garbage collection. */ }, { key: "gc", value: /* @__PURE__ */ __name(function gc2() { this.atlasManager.gc(); }, "gc") }, { key: "_createShaderProgram", value: /* @__PURE__ */ __name(function _createShaderProgram(renderTarget) { var gl = this.gl; var vertexShaderSource = "#version 300 es\n precision highp float;\n\n uniform mat3 uPanZoomMatrix;\n uniform int uAtlasSize;\n \n // instanced\n in vec2 aPosition; // a vertex from the unit square\n \n in mat3 aTransform; // used to transform verticies, eg into a bounding box\n in int aVertType; // the type of thing we are rendering\n\n // the z-index that is output when using picking mode\n in vec4 aIndex;\n \n // For textures\n in int aAtlasId; // which shader unit/atlas to use\n in vec4 aTex; // x/y/w/h of texture in atlas\n\n // for edges\n in vec4 aPointAPointB;\n in vec4 aPointCPointD;\n in vec2 aLineWidth; // also used for node border width\n\n // simple shapes\n in vec4 aCornerRadius; // for round-rectangle [top-right, bottom-right, top-left, bottom-left]\n in vec4 aColor; // also used for edges\n in vec4 aBorderColor; // aLineWidth is used for border width\n\n // output values passed to the fragment shader\n out vec2 vTexCoord;\n out vec4 vColor;\n out vec2 vPosition;\n // flat values are not interpolated\n flat out int vAtlasId; \n flat out int vVertType;\n flat out vec2 vTopRight;\n flat out vec2 vBotLeft;\n flat out vec4 vCornerRadius;\n flat out vec4 vBorderColor;\n flat out vec2 vBorderWidth;\n flat out vec4 vIndex;\n \n void main(void) {\n int vid = gl_VertexID;\n vec2 position = aPosition; // TODO make this a vec3, simplifies some code below\n\n if(aVertType == ".concat(TEXTURE, ") {\n float texX = aTex.x; // texture coordinates\n float texY = aTex.y;\n float texW = aTex.z;\n float texH = aTex.w;\n\n if(vid == 1 || vid == 2 || vid == 4) {\n texX += texW;\n }\n if(vid == 2 || vid == 4 || vid == 5) {\n texY += texH;\n }\n\n float d = float(uAtlasSize);\n vTexCoord = vec2(texX / d, texY / d); // tex coords must be between 0 and 1\n\n gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0);\n }\n else if(aVertType == ").concat(RECTANGLE, " || aVertType == ").concat(ELLIPSE, " \n || aVertType == ").concat(ROUND_RECTANGLE, " || aVertType == ").concat(BOTTOM_ROUND_RECTANGLE, ") { // simple shapes\n\n // the bounding box is needed by the fragment shader\n vBotLeft = (aTransform * vec3(0, 0, 1)).xy; // flat\n vTopRight = (aTransform * vec3(1, 1, 1)).xy; // flat\n vPosition = (aTransform * vec3(position, 1)).xy; // will be interpolated\n\n // calculations are done in the fragment shader, just pass these along\n vColor = aColor;\n vCornerRadius = aCornerRadius;\n vBorderColor = aBorderColor;\n vBorderWidth = aLineWidth;\n\n gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0);\n }\n else if(aVertType == ").concat(EDGE_STRAIGHT, ") {\n vec2 source = aPointAPointB.xy;\n vec2 target = aPointAPointB.zw;\n\n // adjust the geometry so that the line is centered on the edge\n position.y = position.y - 0.5;\n\n // stretch the unit square into a long skinny rectangle\n vec2 xBasis = target - source;\n vec2 yBasis = normalize(vec2(-xBasis.y, xBasis.x));\n vec2 point = source + xBasis * position.x + yBasis * aLineWidth[0] * position.y;\n\n gl_Position = vec4(uPanZoomMatrix * vec3(point, 1.0), 1.0);\n vColor = aColor;\n } \n else if(aVertType == ").concat(EDGE_CURVE_SEGMENT, ") {\n vec2 pointA = aPointAPointB.xy;\n vec2 pointB = aPointAPointB.zw;\n vec2 pointC = aPointCPointD.xy;\n vec2 pointD = aPointCPointD.zw;\n\n // adjust the geometry so that the line is centered on the edge\n position.y = position.y - 0.5;\n\n vec2 p0, p1, p2, pos;\n if(position.x == 0.0) { // The left side of the unit square\n p0 = pointA;\n p1 = pointB;\n p2 = pointC;\n pos = position;\n } else { // The right side of the unit square, use same approach but flip the geometry upside down\n p0 = pointD;\n p1 = pointC;\n p2 = pointB;\n pos = vec2(0.0, -position.y);\n }\n\n vec2 p01 = p1 - p0;\n vec2 p12 = p2 - p1;\n vec2 p21 = p1 - p2;\n\n // Find the normal vector.\n vec2 tangent = normalize(normalize(p12) + normalize(p01));\n vec2 normal = vec2(-tangent.y, tangent.x);\n\n // Find the vector perpendicular to p0 -> p1.\n vec2 p01Norm = normalize(vec2(-p01.y, p01.x));\n\n // Determine the bend direction.\n float sigma = sign(dot(p01 + p21, normal));\n float width = aLineWidth[0];\n\n if(sign(pos.y) == -sigma) {\n // This is an intersecting vertex. Adjust the position so that there's no overlap.\n vec2 point = 0.5 * width * normal * -sigma / dot(normal, p01Norm);\n gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0);\n } else {\n // This is a non-intersecting vertex. Treat it like a mitre join.\n vec2 point = 0.5 * width * normal * sigma * dot(normal, p01Norm);\n gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0);\n }\n\n vColor = aColor;\n } \n else if(aVertType == ").concat(EDGE_ARROW, " && vid < 3) {\n // massage the first triangle into an edge arrow\n if(vid == 0)\n position = vec2(-0.15, -0.3);\n if(vid == 1)\n position = vec2( 0.0, 0.0);\n if(vid == 2)\n position = vec2( 0.15, -0.3);\n\n gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0);\n vColor = aColor;\n }\n else {\n gl_Position = vec4(2.0, 0.0, 0.0, 1.0); // discard vertex by putting it outside webgl clip space\n }\n\n vAtlasId = aAtlasId;\n vVertType = aVertType;\n vIndex = aIndex;\n }\n "); var idxs = this.batchManager.getIndexArray(); var fragmentShaderSource = "#version 300 es\n precision highp float;\n\n // declare texture unit for each texture atlas in the batch\n ".concat(idxs.map(function(i3) { return "uniform sampler2D uTexture".concat(i3, ";"); }).join("\n "), "\n\n uniform vec4 uBGColor;\n uniform float uZoom;\n\n in vec2 vTexCoord;\n in vec4 vColor;\n in vec2 vPosition; // model coordinates\n\n flat in int vAtlasId;\n flat in vec4 vIndex;\n flat in int vVertType;\n flat in vec2 vTopRight;\n flat in vec2 vBotLeft;\n flat in vec4 vCornerRadius;\n flat in vec4 vBorderColor;\n flat in vec2 vBorderWidth;\n\n out vec4 outColor;\n\n ").concat(circleSD, "\n ").concat(rectangleSD, "\n ").concat(roundRectangleSD, "\n ").concat(ellipseSD, "\n\n vec4 blend(vec4 top, vec4 bot) { // blend colors with premultiplied alpha\n return vec4( \n top.rgb + (bot.rgb * (1.0 - top.a)),\n top.a + (bot.a * (1.0 - top.a)) \n );\n }\n\n vec4 distInterp(vec4 cA, vec4 cB, float d) { // interpolate color using Signed Distance\n // scale to the zoom level so that borders don't look blurry when zoomed in\n // note 1.5 is an aribitrary value chosen because it looks good\n return mix(cA, cB, 1.0 - smoothstep(0.0, 1.5 / uZoom, abs(d))); \n }\n\n void main(void) {\n if(vVertType == ").concat(TEXTURE, ") {\n // look up the texel from the texture unit\n ").concat(idxs.map(function(i3) { return "if(vAtlasId == ".concat(i3, ") outColor = texture(uTexture").concat(i3, ", vTexCoord);"); }).join("\n else "), "\n } \n else if(vVertType == ").concat(EDGE_ARROW, ") {\n // mimics how canvas renderer uses context.globalCompositeOperation = 'destination-out';\n outColor = blend(vColor, uBGColor);\n outColor.a = 1.0; // make opaque, masks out line under arrow\n }\n else if(vVertType == ").concat(RECTANGLE, " && vBorderWidth == vec2(0.0)) { // simple rectangle with no border\n outColor = vColor; // unit square is already transformed to the rectangle, nothing else needs to be done\n }\n else if(vVertType == ").concat(RECTANGLE, " || vVertType == ").concat(ELLIPSE, " \n || vVertType == ").concat(ROUND_RECTANGLE, " || vVertType == ").concat(BOTTOM_ROUND_RECTANGLE, ") { // use SDF\n\n float outerBorder = vBorderWidth[0];\n float innerBorder = vBorderWidth[1];\n float borderPadding = outerBorder * 2.0;\n float w = vTopRight.x - vBotLeft.x - borderPadding;\n float h = vTopRight.y - vBotLeft.y - borderPadding;\n vec2 b = vec2(w/2.0, h/2.0); // half width, half height\n vec2 p = vPosition - vec2(vTopRight.x - b[0] - outerBorder, vTopRight.y - b[1] - outerBorder); // translate to center\n\n float d; // signed distance\n if(vVertType == ").concat(RECTANGLE, ") {\n d = rectangleSD(p, b);\n } else if(vVertType == ").concat(ELLIPSE, " && w == h) {\n d = circleSD(p, b.x); // faster than ellipse\n } else if(vVertType == ").concat(ELLIPSE, ") {\n d = ellipseSD(p, b);\n } else {\n d = roundRectangleSD(p, b, vCornerRadius.wzyx);\n }\n\n // use the distance to interpolate a color to smooth the edges of the shape, doesn't need multisampling\n // we must smooth colors inwards, because we can't change pixels outside the shape's bounding box\n if(d > 0.0) {\n if(d > outerBorder) {\n discard;\n } else {\n outColor = distInterp(vBorderColor, vec4(0), d - outerBorder);\n }\n } else {\n if(d > innerBorder) {\n vec4 outerColor = outerBorder == 0.0 ? vec4(0) : vBorderColor;\n vec4 innerBorderColor = blend(vBorderColor, vColor);\n outColor = distInterp(innerBorderColor, outerColor, d);\n } \n else {\n vec4 outerColor;\n if(innerBorder == 0.0 && outerBorder == 0.0) {\n outerColor = vec4(0);\n } else if(innerBorder == 0.0) {\n outerColor = vBorderColor;\n } else {\n outerColor = blend(vBorderColor, vColor);\n }\n outColor = distInterp(vColor, outerColor, d - innerBorder);\n }\n }\n }\n else {\n outColor = vColor;\n }\n\n ").concat(renderTarget.picking ? "if(outColor.a == 0.0) discard;\n else outColor = vIndex;" : "", "\n }\n "); var program = createProgram(gl, vertexShaderSource, fragmentShaderSource); program.aPosition = gl.getAttribLocation(program, "aPosition"); program.aIndex = gl.getAttribLocation(program, "aIndex"); program.aVertType = gl.getAttribLocation(program, "aVertType"); program.aTransform = gl.getAttribLocation(program, "aTransform"); program.aAtlasId = gl.getAttribLocation(program, "aAtlasId"); program.aTex = gl.getAttribLocation(program, "aTex"); program.aPointAPointB = gl.getAttribLocation(program, "aPointAPointB"); program.aPointCPointD = gl.getAttribLocation(program, "aPointCPointD"); program.aLineWidth = gl.getAttribLocation(program, "aLineWidth"); program.aColor = gl.getAttribLocation(program, "aColor"); program.aCornerRadius = gl.getAttribLocation(program, "aCornerRadius"); program.aBorderColor = gl.getAttribLocation(program, "aBorderColor"); program.uPanZoomMatrix = gl.getUniformLocation(program, "uPanZoomMatrix"); program.uAtlasSize = gl.getUniformLocation(program, "uAtlasSize"); program.uBGColor = gl.getUniformLocation(program, "uBGColor"); program.uZoom = gl.getUniformLocation(program, "uZoom"); program.uTextures = []; for (var i2 = 0; i2 < this.batchManager.getMaxAtlasesPerBatch(); i2++) { program.uTextures.push(gl.getUniformLocation(program, "uTexture".concat(i2))); } return program; }, "_createShaderProgram") }, { key: "_createVAO", value: /* @__PURE__ */ __name(function _createVAO() { var unitSquare = [0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1]; this.vertexCount = unitSquare.length / 2; var n2 = this.maxInstances; var gl = this.gl, program = this.program; var vao = gl.createVertexArray(); gl.bindVertexArray(vao); createBufferStaticDraw(gl, "vec2", program.aPosition, unitSquare); this.transformBuffer = create3x3MatrixBufferDynamicDraw(gl, n2, program.aTransform); this.indexBuffer = createBufferDynamicDraw(gl, n2, "vec4", program.aIndex); this.vertTypeBuffer = createBufferDynamicDraw(gl, n2, "int", program.aVertType); this.atlasIdBuffer = createBufferDynamicDraw(gl, n2, "int", program.aAtlasId); this.texBuffer = createBufferDynamicDraw(gl, n2, "vec4", program.aTex); this.pointAPointBBuffer = createBufferDynamicDraw(gl, n2, "vec4", program.aPointAPointB); this.pointCPointDBuffer = createBufferDynamicDraw(gl, n2, "vec4", program.aPointCPointD); this.lineWidthBuffer = createBufferDynamicDraw(gl, n2, "vec2", program.aLineWidth); this.colorBuffer = createBufferDynamicDraw(gl, n2, "vec4", program.aColor); this.cornerRadiusBuffer = createBufferDynamicDraw(gl, n2, "vec4", program.aCornerRadius); this.borderColorBuffer = createBufferDynamicDraw(gl, n2, "vec4", program.aBorderColor); gl.bindVertexArray(null); return vao; }, "_createVAO") }, { key: "buffers", get: /* @__PURE__ */ __name(function get5() { var _this = this; if (!this._buffers) { this._buffers = Object.keys(this).filter(function(k2) { return endsWith(k2, "Buffer"); }).map(function(k2) { return _this[k2]; }); } return this._buffers; }, "get") }, { key: "startFrame", value: /* @__PURE__ */ __name(function startFrame(panZoomMatrix) { var renderTarget = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : RENDER_TARGET.SCREEN; this.panZoomMatrix = panZoomMatrix; this.renderTarget = renderTarget; this.batchDebugInfo = []; this.wrappedCount = 0; this.simpleCount = 0; this.startBatch(); }, "startFrame") }, { key: "startBatch", value: /* @__PURE__ */ __name(function startBatch2() { this.instanceCount = 0; this.batchManager.startBatch(); }, "startBatch") }, { key: "endFrame", value: /* @__PURE__ */ __name(function endFrame() { this.endBatch(); }, "endFrame") }, { key: "_isVisible", value: /* @__PURE__ */ __name(function _isVisible(ele, opts) { if (ele.visible()) { if (opts && opts.isVisible) { return opts.isVisible(ele); } return true; } return false; }, "_isVisible") /** * Draws a texture using the texture atlas. */ }, { key: "drawTexture", value: /* @__PURE__ */ __name(function drawTexture(ele, eleIndex, type3) { var atlasManager = this.atlasManager, batchManager = this.batchManager; var opts = atlasManager.getRenderTypeOpts(type3); if (!this._isVisible(ele, opts)) { return; } if (ele.isEdge() && !this._isValidEdge(ele)) { return; } if (this.renderTarget.picking && opts.getTexPickingMode) { var mode = opts.getTexPickingMode(ele); if (mode === TEX_PICKING_MODE.IGNORE) { return; } else if (mode == TEX_PICKING_MODE.USE_BB) { this.drawPickingRectangle(ele, eleIndex, type3); return; } } var atlasInfoArray = atlasManager.getAtlasInfo(ele, type3); var _iterator = _createForOfIteratorHelper(atlasInfoArray), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done; ) { var atlasInfo = _step.value; var atlas = atlasInfo.atlas, tex1 = atlasInfo.tex1, tex2 = atlasInfo.tex2; if (!batchManager.canAddToCurrentBatch(atlas)) { this.endBatch(); } var atlasIndex = batchManager.getAtlasIndexForBatch(atlas); for (var _i = 0, _arr = [[tex1, true], [tex2, false]]; _i < _arr.length; _i++) { var _arr$_i = _slicedToArray(_arr[_i], 2), tex = _arr$_i[0], first3 = _arr$_i[1]; if (tex.w != 0) { var instance2 = this.instanceCount; this.vertTypeBuffer.getView(instance2)[0] = TEXTURE; var indexView = this.indexBuffer.getView(instance2); indexToVec4(eleIndex, indexView); var atlasIdView = this.atlasIdBuffer.getView(instance2); atlasIdView[0] = atlasIndex; var texView = this.texBuffer.getView(instance2); texView[0] = tex.x; texView[1] = tex.y; texView[2] = tex.w; texView[3] = tex.h; var matrixView = this.transformBuffer.getMatrixView(instance2); this.setTransformMatrix(ele, matrixView, opts, atlasInfo, first3); this.instanceCount++; if (!first3) this.wrappedCount++; if (this.instanceCount >= this.maxInstances) { this.endBatch(); } } } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } }, "drawTexture") /** * matrix is expected to be a 9 element array * this function follows same pattern as CRp.drawCachedElementPortion(...) */ }, { key: "setTransformMatrix", value: /* @__PURE__ */ __name(function setTransformMatrix(ele, matrix, opts, atlasInfo) { var first3 = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : true; var padding2 = 0; if (opts.shapeProps && opts.shapeProps.padding) { padding2 = ele.pstyle(opts.shapeProps.padding).pfValue; } if (atlasInfo) { var bb = atlasInfo.bb, tex1 = atlasInfo.tex1, tex2 = atlasInfo.tex2; var ratio = tex1.w / (tex1.w + tex2.w); if (!first3) { ratio = 1 - ratio; } var adjBB = this._getAdjustedBB(bb, padding2, first3, ratio); this._applyTransformMatrix(matrix, adjBB, opts, ele); } else { var _bb = opts.getBoundingBox(ele); var _adjBB = this._getAdjustedBB(_bb, padding2, true, 1); this._applyTransformMatrix(matrix, _adjBB, opts, ele); } }, "setTransformMatrix") }, { key: "_applyTransformMatrix", value: /* @__PURE__ */ __name(function _applyTransformMatrix(matrix, adjBB, opts, ele) { var x5, y6; identity6(matrix); var theta = opts.getRotation ? opts.getRotation(ele) : 0; if (theta !== 0) { var _opts$getRotationPoin = opts.getRotationPoint(ele), sx = _opts$getRotationPoin.x, sy = _opts$getRotationPoin.y; translate(matrix, matrix, [sx, sy]); rotate(matrix, matrix, theta); var offset = opts.getRotationOffset(ele); x5 = offset.x + (adjBB.xOffset || 0); y6 = offset.y + (adjBB.yOffset || 0); } else { x5 = adjBB.x1; y6 = adjBB.y1; } translate(matrix, matrix, [x5, y6]); scale(matrix, matrix, [adjBB.w, adjBB.h]); }, "_applyTransformMatrix") /** * Adjusts a node or label BB to accomodate padding and split for wrapped textures. * @param bb - the original bounding box * @param padding - the padding to add to the bounding box * @param first - whether this is the first part of a wrapped texture * @param ratio - the ratio of the texture width of part of the text to the entire texture */ }, { key: "_getAdjustedBB", value: /* @__PURE__ */ __name(function _getAdjustedBB(bb, padding2, first3, ratio) { var x1 = bb.x1, y1 = bb.y1, w4 = bb.w, h3 = bb.h, yOffset = bb.yOffset; if (padding2) { x1 -= padding2; y1 -= padding2; w4 += 2 * padding2; h3 += 2 * padding2; } var xOffset = 0; var adjW = w4 * ratio; if (first3 && ratio < 1) { w4 = adjW; } else if (!first3 && ratio < 1) { xOffset = w4 - adjW; x1 += xOffset; w4 = adjW; } return { x1, y1, w: w4, h: h3, xOffset, yOffset }; }, "_getAdjustedBB") /** * Draw a solid opaque rectangle matching the element's Bounding Box. * Used by the PICKING mode to make the entire BB of a label clickable. */ }, { key: "drawPickingRectangle", value: /* @__PURE__ */ __name(function drawPickingRectangle(ele, eleIndex, type3) { var opts = this.atlasManager.getRenderTypeOpts(type3); var instance2 = this.instanceCount; this.vertTypeBuffer.getView(instance2)[0] = RECTANGLE; var indexView = this.indexBuffer.getView(instance2); indexToVec4(eleIndex, indexView); var colorView = this.colorBuffer.getView(instance2); toWebGLColor([0, 0, 0], 1, colorView); var matrixView = this.transformBuffer.getMatrixView(instance2); this.setTransformMatrix(ele, matrixView, opts); this.simpleCount++; this.instanceCount++; if (this.instanceCount >= this.maxInstances) { this.endBatch(); } }, "drawPickingRectangle") /** * Draw a node using either a texture or a "simple shape". */ }, { key: "drawNode", value: /* @__PURE__ */ __name(function drawNode2(node2, eleIndex, type3) { var opts = this.simpleShapeOptions.get(type3); if (!this._isVisible(node2, opts)) { return; } var props = opts.shapeProps; var vertType = this._getVertTypeForShape(node2, props.shape); if (vertType === void 0 || opts.isSimple && !opts.isSimple(node2)) { this.drawTexture(node2, eleIndex, type3); return; } var instance2 = this.instanceCount; this.vertTypeBuffer.getView(instance2)[0] = vertType; if (vertType === ROUND_RECTANGLE || vertType === BOTTOM_ROUND_RECTANGLE) { var bb = opts.getBoundingBox(node2); var radius2 = this._getCornerRadius(node2, props.radius, bb); var radiusView = this.cornerRadiusBuffer.getView(instance2); radiusView[0] = radius2; radiusView[1] = radius2; radiusView[2] = radius2; radiusView[3] = radius2; if (vertType === BOTTOM_ROUND_RECTANGLE) { radiusView[0] = 0; radiusView[2] = 0; } } var indexView = this.indexBuffer.getView(instance2); indexToVec4(eleIndex, indexView); var color2 = node2.pstyle(props.color).value; var opacity = node2.pstyle(props.opacity).value; var colorView = this.colorBuffer.getView(instance2); toWebGLColor(color2, opacity, colorView); var lineWidthView = this.lineWidthBuffer.getView(instance2); lineWidthView[0] = 0; lineWidthView[1] = 0; if (props.border) { var borderWidth = node2.pstyle("border-width").value; if (borderWidth > 0) { var borderColor = node2.pstyle("border-color").value; var borderOpacity = node2.pstyle("border-opacity").value; var borderColorView = this.borderColorBuffer.getView(instance2); toWebGLColor(borderColor, borderOpacity, borderColorView); var borderPos = node2.pstyle("border-position").value; if (borderPos === "inside") { lineWidthView[0] = 0; lineWidthView[1] = -borderWidth; } else if (borderPos === "outside") { lineWidthView[0] = borderWidth; lineWidthView[1] = 0; } else { var halfWidth = borderWidth / 2; lineWidthView[0] = halfWidth; lineWidthView[1] = -halfWidth; } } } var matrixView = this.transformBuffer.getMatrixView(instance2); this.setTransformMatrix(node2, matrixView, opts); this.simpleCount++; this.instanceCount++; if (this.instanceCount >= this.maxInstances) { this.endBatch(); } }, "drawNode") }, { key: "_getVertTypeForShape", value: /* @__PURE__ */ __name(function _getVertTypeForShape(node2, shapeProp) { var shape = node2.pstyle(shapeProp).value; switch (shape) { case "rectangle": return RECTANGLE; case "ellipse": return ELLIPSE; case "roundrectangle": case "round-rectangle": return ROUND_RECTANGLE; case "bottom-round-rectangle": return BOTTOM_ROUND_RECTANGLE; default: return void 0; } }, "_getVertTypeForShape") }, { key: "_getCornerRadius", value: /* @__PURE__ */ __name(function _getCornerRadius(node2, radiusProp, _ref2) { var w4 = _ref2.w, h3 = _ref2.h; if (node2.pstyle(radiusProp).value === "auto") { return getRoundRectangleRadius(w4, h3); } else { var radius2 = node2.pstyle(radiusProp).pfValue; var halfWidth = w4 / 2; var halfHeight = h3 / 2; return Math.min(radius2, halfHeight, halfWidth); } }, "_getCornerRadius") /** * Only supports drawing triangles at the moment. */ }, { key: "drawEdgeArrow", value: /* @__PURE__ */ __name(function drawEdgeArrow(edge, eleIndex, prefix) { if (!edge.visible()) { return; } var rs = edge._private.rscratch; var x5, y6, angle2; if (prefix === "source") { x5 = rs.arrowStartX; y6 = rs.arrowStartY; angle2 = rs.srcArrowAngle; } else { x5 = rs.arrowEndX; y6 = rs.arrowEndY; angle2 = rs.tgtArrowAngle; } if (isNaN(x5) || x5 == null || isNaN(y6) || y6 == null || isNaN(angle2) || angle2 == null) { return; } var arrowShape = edge.pstyle(prefix + "-arrow-shape").value; if (arrowShape === "none") { return; } var color2 = edge.pstyle(prefix + "-arrow-color").value; var baseOpacity = edge.pstyle("opacity").value; var lineOpacity = edge.pstyle("line-opacity").value; var opacity = baseOpacity * lineOpacity; var lineWidth = edge.pstyle("width").pfValue; var scale$1 = edge.pstyle("arrow-scale").value; var size4 = this.r.getArrowWidth(lineWidth, scale$1); var instance2 = this.instanceCount; var transform8 = this.transformBuffer.getMatrixView(instance2); identity6(transform8); translate(transform8, transform8, [x5, y6]); scale(transform8, transform8, [size4, size4]); rotate(transform8, transform8, angle2); this.vertTypeBuffer.getView(instance2)[0] = EDGE_ARROW; var indexView = this.indexBuffer.getView(instance2); indexToVec4(eleIndex, indexView); var colorView = this.colorBuffer.getView(instance2); toWebGLColor(color2, opacity, colorView); this.instanceCount++; if (this.instanceCount >= this.maxInstances) { this.endBatch(); } }, "drawEdgeArrow") /** * Draw straight-line or bezier curve edges. */ }, { key: "drawEdgeLine", value: /* @__PURE__ */ __name(function drawEdgeLine(edge, eleIndex) { if (!edge.visible()) { return; } var points = this._getEdgePoints(edge); if (!points) { return; } var baseOpacity = edge.pstyle("opacity").value; var lineOpacity = edge.pstyle("line-opacity").value; var width3 = edge.pstyle("width").pfValue; var color2 = edge.pstyle("line-color").value; var opacity = baseOpacity * lineOpacity; if (points.length / 2 + this.instanceCount > this.maxInstances) { this.endBatch(); } if (points.length == 4) { var instance2 = this.instanceCount; this.vertTypeBuffer.getView(instance2)[0] = EDGE_STRAIGHT; var indexView = this.indexBuffer.getView(instance2); indexToVec4(eleIndex, indexView); var colorView = this.colorBuffer.getView(instance2); toWebGLColor(color2, opacity, colorView); var lineWidthBuffer = this.lineWidthBuffer.getView(instance2); lineWidthBuffer[0] = width3; var sourceTargetView = this.pointAPointBBuffer.getView(instance2); sourceTargetView[0] = points[0]; sourceTargetView[1] = points[1]; sourceTargetView[2] = points[2]; sourceTargetView[3] = points[3]; this.instanceCount++; if (this.instanceCount >= this.maxInstances) { this.endBatch(); } } else { for (var i2 = 0; i2 < points.length - 2; i2 += 2) { var _instance = this.instanceCount; this.vertTypeBuffer.getView(_instance)[0] = EDGE_CURVE_SEGMENT; var _indexView = this.indexBuffer.getView(_instance); indexToVec4(eleIndex, _indexView); var _colorView = this.colorBuffer.getView(_instance); toWebGLColor(color2, opacity, _colorView); var _lineWidthBuffer = this.lineWidthBuffer.getView(_instance); _lineWidthBuffer[0] = width3; var pAx = points[i2 - 2], pAy = points[i2 - 1]; var pBx = points[i2], pBy = points[i2 + 1]; var pCx = points[i2 + 2], pCy = points[i2 + 3]; var pDx = points[i2 + 4], pDy = points[i2 + 5]; if (i2 == 0) { pAx = 2 * pBx - pCx + 1e-3; pAy = 2 * pBy - pCy + 1e-3; } if (i2 == points.length - 4) { pDx = 2 * pCx - pBx + 1e-3; pDy = 2 * pCy - pBy + 1e-3; } var pointABView = this.pointAPointBBuffer.getView(_instance); pointABView[0] = pAx; pointABView[1] = pAy; pointABView[2] = pBx; pointABView[3] = pBy; var pointCDView = this.pointCPointDBuffer.getView(_instance); pointCDView[0] = pCx; pointCDView[1] = pCy; pointCDView[2] = pDx; pointCDView[3] = pDy; this.instanceCount++; if (this.instanceCount >= this.maxInstances) { this.endBatch(); } } } }, "drawEdgeLine") }, { key: "_isValidEdge", value: /* @__PURE__ */ __name(function _isValidEdge(edge) { var rs = edge._private.rscratch; if (rs.badLine || rs.allpts == null || isNaN(rs.allpts[0])) { return false; } return true; }, "_isValidEdge") }, { key: "_getEdgePoints", value: /* @__PURE__ */ __name(function _getEdgePoints(edge) { var rs = edge._private.rscratch; if (!this._isValidEdge(edge)) { return; } var controlPoints4 = rs.allpts; if (controlPoints4.length == 4) { return controlPoints4; } var numSegments = this._getNumSegments(edge); return this._getCurveSegmentPoints(controlPoints4, numSegments); }, "_getEdgePoints") }, { key: "_getNumSegments", value: /* @__PURE__ */ __name(function _getNumSegments(edge) { var numSegments = 15; return Math.min(Math.max(numSegments, 5), this.maxInstances); }, "_getNumSegments") }, { key: "_getCurveSegmentPoints", value: /* @__PURE__ */ __name(function _getCurveSegmentPoints(controlPoints4, segments) { if (controlPoints4.length == 4) { return controlPoints4; } var curvePoints = Array((segments + 1) * 2); for (var i2 = 0; i2 <= segments; i2++) { if (i2 == 0) { curvePoints[0] = controlPoints4[0]; curvePoints[1] = controlPoints4[1]; } else if (i2 == segments) { curvePoints[i2 * 2] = controlPoints4[controlPoints4.length - 2]; curvePoints[i2 * 2 + 1] = controlPoints4[controlPoints4.length - 1]; } else { var t4 = i2 / segments; this._setCurvePoint(controlPoints4, t4, curvePoints, i2 * 2); } } return curvePoints; }, "_getCurveSegmentPoints") }, { key: "_setCurvePoint", value: /* @__PURE__ */ __name(function _setCurvePoint(points, t4, curvePoints, cpi) { if (points.length <= 2) { curvePoints[cpi] = points[0]; curvePoints[cpi + 1] = points[1]; } else { var newpoints = Array(points.length - 2); for (var i2 = 0; i2 < newpoints.length; i2 += 2) { var x5 = (1 - t4) * points[i2] + t4 * points[i2 + 2]; var y6 = (1 - t4) * points[i2 + 1] + t4 * points[i2 + 3]; newpoints[i2] = x5; newpoints[i2 + 1] = y6; } return this._setCurvePoint(newpoints, t4, curvePoints, cpi); } }, "_setCurvePoint") }, { key: "endBatch", value: /* @__PURE__ */ __name(function endBatch2() { var gl = this.gl, vao = this.vao, vertexCount = this.vertexCount, count2 = this.instanceCount; if (count2 === 0) return; var program = this.renderTarget.picking ? this.pickingProgram : this.program; gl.useProgram(program); gl.bindVertexArray(vao); var _iterator2 = _createForOfIteratorHelper(this.buffers), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) { var buffer = _step2.value; buffer.bufferSubData(count2); } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } var atlases = this.batchManager.getAtlases(); for (var i2 = 0; i2 < atlases.length; i2++) { atlases[i2].bufferIfNeeded(gl); } for (var _i2 = 0; _i2 < atlases.length; _i2++) { gl.activeTexture(gl.TEXTURE0 + _i2); gl.bindTexture(gl.TEXTURE_2D, atlases[_i2].texture); gl.uniform1i(program.uTextures[_i2], _i2); } gl.uniform1f(program.uZoom, getEffectiveZoom(this.r)); gl.uniformMatrix3fv(program.uPanZoomMatrix, false, this.panZoomMatrix); gl.uniform1i(program.uAtlasSize, this.batchManager.getAtlasSize()); var webglBgColor = toWebGLColor(this.bgColor, 1); gl.uniform4fv(program.uBGColor, webglBgColor); gl.drawArraysInstanced(gl.TRIANGLES, 0, vertexCount, count2); gl.bindVertexArray(null); gl.bindTexture(gl.TEXTURE_2D, null); if (this.debug) { this.batchDebugInfo.push({ count: count2, // instance count atlasCount: atlases.length }); } this.startBatch(); }, "endBatch") }, { key: "getDebugInfo", value: /* @__PURE__ */ __name(function getDebugInfo() { var atlasInfo = this.atlasManager.getDebugInfo(); var totalAtlases = atlasInfo.reduce(function(count2, info2) { return count2 + info2.atlasCount; }, 0); var batchInfo = this.batchDebugInfo; var totalInstances = batchInfo.reduce(function(count2, info2) { return count2 + info2.count; }, 0); return { atlasInfo, totalAtlases, wrappedCount: this.wrappedCount, simpleCount: this.simpleCount, batchCount: batchInfo.length, batchInfo, totalInstances }; }, "getDebugInfo") }]); })(); CRp$4 = {}; CRp$4.initWebgl = function(opts, fns) { var r2 = this; var gl = r2.data.contexts[r2.WEBGL]; opts.bgColor = getBGColor(r2); opts.webglTexSize = Math.min(opts.webglTexSize, gl.getParameter(gl.MAX_TEXTURE_SIZE)); opts.webglTexRows = Math.min(opts.webglTexRows, 54); opts.webglTexRowsNodes = Math.min(opts.webglTexRowsNodes, 54); opts.webglBatchSize = Math.min(opts.webglBatchSize, 16384); opts.webglTexPerBatch = Math.min(opts.webglTexPerBatch, gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS)); r2.webglDebug = opts.webglDebug; r2.webglDebugShowAtlases = opts.webglDebugShowAtlases; r2.pickingFrameBuffer = createPickingFrameBuffer(gl); r2.pickingFrameBuffer.needsDraw = true; r2.drawing = new ElementDrawingWebGL(r2, gl, opts); var getLabelRotation3 = /* @__PURE__ */ __name(function getLabelRotation4(prop) { return function(ele) { return r2.getTextAngle(ele, prop); }; }, "getLabelRotation"); var isLabelVisible = /* @__PURE__ */ __name(function isLabelVisible2(prop) { return function(ele) { var label = ele.pstyle(prop); return label && label.value; }; }, "isLabelVisible"); var isLayerVisible = /* @__PURE__ */ __name(function isLayerVisible2(prefix) { return function(node2) { return node2.pstyle("".concat(prefix, "-opacity")).value > 0; }; }, "isLayerVisible"); var getTexPickingMode = /* @__PURE__ */ __name(function getTexPickingMode2(ele) { var enabled = ele.pstyle("text-events").strValue === "yes"; return enabled ? TEX_PICKING_MODE.USE_BB : TEX_PICKING_MODE.IGNORE; }, "getTexPickingMode"); var getBBForSimpleShape = /* @__PURE__ */ __name(function getBBForSimpleShape2(node2) { var _node$position = node2.position(), x5 = _node$position.x, y6 = _node$position.y; var w4 = node2.outerWidth(); var h3 = node2.outerHeight(); return { w: w4, h: h3, x1: x5 - w4 / 2, y1: y6 - h3 / 2 }; }, "getBBForSimpleShape"); r2.drawing.addAtlasCollection("node", { texRows: opts.webglTexRowsNodes }); r2.drawing.addAtlasCollection("label", { texRows: opts.webglTexRows }); r2.drawing.addTextureAtlasRenderType("node-body", { collection: "node", getKey: fns.getStyleKey, getBoundingBox: fns.getElementBox, drawElement: fns.drawElement }); r2.drawing.addSimpleShapeRenderType("node-body", { getBoundingBox: getBBForSimpleShape, isSimple: isSimpleShape, shapeProps: { shape: "shape", color: "background-color", opacity: "background-opacity", radius: "corner-radius", border: true } }); r2.drawing.addSimpleShapeRenderType("node-overlay", { getBoundingBox: getBBForSimpleShape, isVisible: isLayerVisible("overlay"), shapeProps: { shape: "overlay-shape", color: "overlay-color", opacity: "overlay-opacity", padding: "overlay-padding", radius: "overlay-corner-radius" } }); r2.drawing.addSimpleShapeRenderType("node-underlay", { getBoundingBox: getBBForSimpleShape, isVisible: isLayerVisible("underlay"), shapeProps: { shape: "underlay-shape", color: "underlay-color", opacity: "underlay-opacity", padding: "underlay-padding", radius: "underlay-corner-radius" } }); r2.drawing.addTextureAtlasRenderType("label", { // node label or edge mid label collection: "label", getTexPickingMode, getKey: getStyleKeysForLabel(fns.getLabelKey, null), getBoundingBox: getBoundingBoxForLabel(fns.getLabelBox, null), drawClipped: true, drawElement: fns.drawLabel, getRotation: getLabelRotation3(null), getRotationPoint: fns.getLabelRotationPoint, getRotationOffset: fns.getLabelRotationOffset, isVisible: isLabelVisible("label") }); r2.drawing.addTextureAtlasRenderType("edge-source-label", { collection: "label", getTexPickingMode, getKey: getStyleKeysForLabel(fns.getSourceLabelKey, "source"), getBoundingBox: getBoundingBoxForLabel(fns.getSourceLabelBox, "source"), drawClipped: true, drawElement: fns.drawSourceLabel, getRotation: getLabelRotation3("source"), getRotationPoint: fns.getSourceLabelRotationPoint, getRotationOffset: fns.getSourceLabelRotationOffset, isVisible: isLabelVisible("source-label") }); r2.drawing.addTextureAtlasRenderType("edge-target-label", { collection: "label", getTexPickingMode, getKey: getStyleKeysForLabel(fns.getTargetLabelKey, "target"), getBoundingBox: getBoundingBoxForLabel(fns.getTargetLabelBox, "target"), drawClipped: true, drawElement: fns.drawTargetLabel, getRotation: getLabelRotation3("target"), getRotationPoint: fns.getTargetLabelRotationPoint, getRotationOffset: fns.getTargetLabelRotationOffset, isVisible: isLabelVisible("target-label") }); var setGCFlag = debounce(function() { console.log("garbage collect flag set"); r2.data.gc = true; }, 1e4); r2.onUpdateEleCalcs(function(willDraw, eles) { var gcNeeded = false; if (eles && eles.length > 0) { gcNeeded |= r2.drawing.invalidate(eles); } if (gcNeeded) { setGCFlag(); } }); overrideCanvasRendererFunctions(r2); }; __name(getBGColor, "getBGColor"); __name(getLabelLines, "getLabelLines"); getStyleKeysForLabel = /* @__PURE__ */ __name(function getStyleKeysForLabel2(getKey3, prefix) { return function(ele) { var key = getKey3(ele); var lines = getLabelLines(ele, prefix); if (lines.length > 1) { return lines.map(function(line2, index) { return "".concat(key, "_").concat(index); }); } return key; }; }, "getStyleKeysForLabel"); getBoundingBoxForLabel = /* @__PURE__ */ __name(function getBoundingBoxForLabel2(getBoundingBox, prefix) { return function(ele, styleKey) { var bb = getBoundingBox(ele); if (typeof styleKey === "string") { var ui = styleKey.indexOf("_"); if (ui > 0) { var lineIndex = Number(styleKey.substring(ui + 1)); var lines = getLabelLines(ele, prefix); var h3 = bb.h / lines.length; var yOffset = h3 * lineIndex; var y1 = bb.y1 + yOffset; return { x1: bb.x1, w: bb.w, y1, h: h3, yOffset }; } } return bb; }; }, "getBoundingBoxForLabel"); __name(overrideCanvasRendererFunctions, "overrideCanvasRendererFunctions"); __name(clearWebgl, "clearWebgl"); __name(clearCanvas, "clearCanvas"); __name(createPanZoomMatrix, "createPanZoomMatrix"); __name(setContextTransform, "setContextTransform"); __name(drawSelectionRectangle, "drawSelectionRectangle"); __name(drawAxes, "drawAxes"); __name(drawAtlases, "drawAtlases"); __name(getPickingIndexes, "getPickingIndexes"); __name(findNearestElementsWebgl, "findNearestElementsWebgl"); __name(drawEle, "drawEle"); __name(renderWebgl, "renderWebgl"); CRp$3 = {}; CRp$3.drawPolygonPath = function(context, x5, y6, width3, height2, points) { var halfW = width3 / 2; var halfH = height2 / 2; if (context.beginPath) { context.beginPath(); } context.moveTo(x5 + halfW * points[0], y6 + halfH * points[1]); for (var i2 = 1; i2 < points.length / 2; i2++) { context.lineTo(x5 + halfW * points[i2 * 2], y6 + halfH * points[i2 * 2 + 1]); } context.closePath(); }; CRp$3.drawRoundPolygonPath = function(context, x5, y6, width3, height2, points, corners) { corners.forEach(function(corner) { return drawPreparedRoundCorner(context, corner); }); context.closePath(); }; CRp$3.drawRoundRectanglePath = function(context, x5, y6, width3, height2, radius2) { var halfWidth = width3 / 2; var halfHeight = height2 / 2; var cornerRadius = radius2 === "auto" ? getRoundRectangleRadius(width3, height2) : Math.min(radius2, halfHeight, halfWidth); if (context.beginPath) { context.beginPath(); } context.moveTo(x5, y6 - halfHeight); context.arcTo(x5 + halfWidth, y6 - halfHeight, x5 + halfWidth, y6, cornerRadius); context.arcTo(x5 + halfWidth, y6 + halfHeight, x5, y6 + halfHeight, cornerRadius); context.arcTo(x5 - halfWidth, y6 + halfHeight, x5 - halfWidth, y6, cornerRadius); context.arcTo(x5 - halfWidth, y6 - halfHeight, x5, y6 - halfHeight, cornerRadius); context.lineTo(x5, y6 - halfHeight); context.closePath(); }; CRp$3.drawBottomRoundRectanglePath = function(context, x5, y6, width3, height2, radius2) { var halfWidth = width3 / 2; var halfHeight = height2 / 2; var cornerRadius = radius2 === "auto" ? getRoundRectangleRadius(width3, height2) : radius2; if (context.beginPath) { context.beginPath(); } context.moveTo(x5, y6 - halfHeight); context.lineTo(x5 + halfWidth, y6 - halfHeight); context.lineTo(x5 + halfWidth, y6); context.arcTo(x5 + halfWidth, y6 + halfHeight, x5, y6 + halfHeight, cornerRadius); context.arcTo(x5 - halfWidth, y6 + halfHeight, x5 - halfWidth, y6, cornerRadius); context.lineTo(x5 - halfWidth, y6 - halfHeight); context.lineTo(x5, y6 - halfHeight); context.closePath(); }; CRp$3.drawCutRectanglePath = function(context, x5, y6, width3, height2, points, corners) { var halfWidth = width3 / 2; var halfHeight = height2 / 2; var cornerLength = corners === "auto" ? getCutRectangleCornerLength() : corners; if (context.beginPath) { context.beginPath(); } context.moveTo(x5 - halfWidth + cornerLength, y6 - halfHeight); context.lineTo(x5 + halfWidth - cornerLength, y6 - halfHeight); context.lineTo(x5 + halfWidth, y6 - halfHeight + cornerLength); context.lineTo(x5 + halfWidth, y6 + halfHeight - cornerLength); context.lineTo(x5 + halfWidth - cornerLength, y6 + halfHeight); context.lineTo(x5 - halfWidth + cornerLength, y6 + halfHeight); context.lineTo(x5 - halfWidth, y6 + halfHeight - cornerLength); context.lineTo(x5 - halfWidth, y6 - halfHeight + cornerLength); context.closePath(); }; CRp$3.drawBarrelPath = function(context, x5, y6, width3, height2) { var halfWidth = width3 / 2; var halfHeight = height2 / 2; var xBegin = x5 - halfWidth; var xEnd = x5 + halfWidth; var yBegin = y6 - halfHeight; var yEnd = y6 + halfHeight; var barrelCurveConstants = getBarrelCurveConstants(width3, height2); var wOffset = barrelCurveConstants.widthOffset; var hOffset = barrelCurveConstants.heightOffset; var ctrlPtXOffset = barrelCurveConstants.ctrlPtOffsetPct * wOffset; if (context.beginPath) { context.beginPath(); } context.moveTo(xBegin, yBegin + hOffset); context.lineTo(xBegin, yEnd - hOffset); context.quadraticCurveTo(xBegin + ctrlPtXOffset, yEnd, xBegin + wOffset, yEnd); context.lineTo(xEnd - wOffset, yEnd); context.quadraticCurveTo(xEnd - ctrlPtXOffset, yEnd, xEnd, yEnd - hOffset); context.lineTo(xEnd, yBegin + hOffset); context.quadraticCurveTo(xEnd - ctrlPtXOffset, yBegin, xEnd - wOffset, yBegin); context.lineTo(xBegin + wOffset, yBegin); context.quadraticCurveTo(xBegin + ctrlPtXOffset, yBegin, xBegin, yBegin + hOffset); context.closePath(); }; sin0 = Math.sin(0); cos0 = Math.cos(0); sin2 = {}; cos2 = {}; ellipseStepSize = Math.PI / 40; for (i2 = 0 * Math.PI; i2 < 2 * Math.PI; i2 += ellipseStepSize) { sin2[i2] = Math.sin(i2); cos2[i2] = Math.cos(i2); } CRp$3.drawEllipsePath = function(context, centerX, centerY, width3, height2) { if (context.beginPath) { context.beginPath(); } if (context.ellipse) { context.ellipse(centerX, centerY, width3 / 2, height2 / 2, 0, 0, 2 * Math.PI); } else { var xPos, yPos; var rw = width3 / 2; var rh = height2 / 2; for (var i2 = 0 * Math.PI; i2 < 2 * Math.PI; i2 += ellipseStepSize) { xPos = centerX - rw * sin2[i2] * sin0 + rw * cos2[i2] * cos0; yPos = centerY + rh * cos2[i2] * sin0 + rh * sin2[i2] * cos0; if (i2 === 0) { context.moveTo(xPos, yPos); } else { context.lineTo(xPos, yPos); } } } context.closePath(); }; CRp$2 = {}; CRp$2.createBuffer = function(w4, h3) { var buffer = document.createElement("canvas"); buffer.width = w4; buffer.height = h3; return [buffer, buffer.getContext("2d")]; }; CRp$2.bufferCanvasImage = function(options2) { var cy = this.cy; var eles = cy.mutableElements(); var bb = eles.boundingBox(); var ctrRect = this.findContainerClientCoords(); var width3 = options2.full ? Math.ceil(bb.w) : ctrRect[2]; var height2 = options2.full ? Math.ceil(bb.h) : ctrRect[3]; var specdMaxDims = number$1(options2.maxWidth) || number$1(options2.maxHeight); var pxRatio = this.getPixelRatio(); var scale2 = 1; if (options2.scale !== void 0) { width3 *= options2.scale; height2 *= options2.scale; scale2 = options2.scale; } else if (specdMaxDims) { var maxScaleW = Infinity; var maxScaleH = Infinity; if (number$1(options2.maxWidth)) { maxScaleW = scale2 * options2.maxWidth / width3; } if (number$1(options2.maxHeight)) { maxScaleH = scale2 * options2.maxHeight / height2; } scale2 = Math.min(maxScaleW, maxScaleH); width3 *= scale2; height2 *= scale2; } if (!specdMaxDims) { width3 *= pxRatio; height2 *= pxRatio; scale2 *= pxRatio; } var buffCanvas = document.createElement("canvas"); buffCanvas.width = width3; buffCanvas.height = height2; buffCanvas.style.width = width3 + "px"; buffCanvas.style.height = height2 + "px"; var buffCxt = buffCanvas.getContext("2d"); if (width3 > 0 && height2 > 0) { buffCxt.clearRect(0, 0, width3, height2); buffCxt.globalCompositeOperation = "source-over"; var zsortedEles = this.getCachedZSortedEles(); if (options2.full) { buffCxt.translate(-bb.x1 * scale2, -bb.y1 * scale2); buffCxt.scale(scale2, scale2); this.drawElements(buffCxt, zsortedEles); buffCxt.scale(1 / scale2, 1 / scale2); buffCxt.translate(bb.x1 * scale2, bb.y1 * scale2); } else { var pan2 = cy.pan(); var translation = { x: pan2.x * scale2, y: pan2.y * scale2 }; scale2 *= cy.zoom(); buffCxt.translate(translation.x, translation.y); buffCxt.scale(scale2, scale2); this.drawElements(buffCxt, zsortedEles); buffCxt.scale(1 / scale2, 1 / scale2); buffCxt.translate(-translation.x, -translation.y); } if (options2.bg) { buffCxt.globalCompositeOperation = "destination-over"; buffCxt.fillStyle = options2.bg; buffCxt.rect(0, 0, width3, height2); buffCxt.fill(); } } return buffCanvas; }; __name(b64ToBlob, "b64ToBlob"); __name(b64UriToB64, "b64UriToB64"); __name(output, "output"); CRp$2.png = function(options2) { return output(options2, this.bufferCanvasImage(options2), "image/png"); }; CRp$2.jpg = function(options2) { return output(options2, this.bufferCanvasImage(options2), "image/jpeg"); }; CRp$1 = {}; CRp$1.nodeShapeImpl = function(name, context, centerX, centerY, width3, height2, points, corners) { switch (name) { case "ellipse": return this.drawEllipsePath(context, centerX, centerY, width3, height2); case "polygon": return this.drawPolygonPath(context, centerX, centerY, width3, height2, points); case "round-polygon": return this.drawRoundPolygonPath(context, centerX, centerY, width3, height2, points, corners); case "roundrectangle": case "round-rectangle": return this.drawRoundRectanglePath(context, centerX, centerY, width3, height2, corners); case "cutrectangle": case "cut-rectangle": return this.drawCutRectanglePath(context, centerX, centerY, width3, height2, points, corners); case "bottomroundrectangle": case "bottom-round-rectangle": return this.drawBottomRoundRectanglePath(context, centerX, centerY, width3, height2, corners); case "barrel": return this.drawBarrelPath(context, centerX, centerY, width3, height2); } }; CR = CanvasRenderer; CRp = CanvasRenderer.prototype; CRp.CANVAS_LAYERS = 3; CRp.SELECT_BOX = 0; CRp.DRAG = 1; CRp.NODE = 2; CRp.WEBGL = 3; CRp.CANVAS_TYPES = ["2d", "2d", "2d", "webgl2"]; CRp.BUFFER_COUNT = 3; CRp.TEXTURE_BUFFER = 0; CRp.MOTIONBLUR_BUFFER_NODE = 1; CRp.MOTIONBLUR_BUFFER_DRAG = 2; __name(CanvasRenderer, "CanvasRenderer"); CRp.redrawHint = function(group2, bool2) { var r2 = this; switch (group2) { case "eles": r2.data.canvasNeedsRedraw[CRp.NODE] = bool2; break; case "drag": r2.data.canvasNeedsRedraw[CRp.DRAG] = bool2; break; case "select": r2.data.canvasNeedsRedraw[CRp.SELECT_BOX] = bool2; break; case "gc": r2.data.gc = true; break; } }; pathsImpld = typeof Path2D !== "undefined"; CRp.path2dEnabled = function(on3) { if (on3 === void 0) { return this.pathsEnabled; } this.pathsEnabled = on3 ? true : false; }; CRp.usePaths = function() { return pathsImpld && this.pathsEnabled; }; CRp.setImgSmoothing = function(context, bool2) { if (context.imageSmoothingEnabled != null) { context.imageSmoothingEnabled = bool2; } else { context.webkitImageSmoothingEnabled = bool2; context.mozImageSmoothingEnabled = bool2; context.msImageSmoothingEnabled = bool2; } }; CRp.getImgSmoothing = function(context) { if (context.imageSmoothingEnabled != null) { return context.imageSmoothingEnabled; } else { return context.webkitImageSmoothingEnabled || context.mozImageSmoothingEnabled || context.msImageSmoothingEnabled; } }; CRp.makeOffscreenCanvas = function(width3, height2) { var canvas; if ((typeof OffscreenCanvas === "undefined" ? "undefined" : _typeof(OffscreenCanvas)) !== "undefined") { canvas = new OffscreenCanvas(width3, height2); } else { var containerWindow = this.cy.window(); var document2 = containerWindow.document; canvas = document2.createElement("canvas"); canvas.width = width3; canvas.height = height2; } return canvas; }; [CRp$b, CRp$a, CRp$9, CRp$8, CRp$7, CRp$6, CRp$5, CRp$4, CRp$3, CRp$2, CRp$1].forEach(function(props) { extend4(CRp, props); }); renderer2 = [{ name: "null", impl: NullRenderer }, { name: "base", impl: BR }, { name: "canvas", impl: CR }]; incExts = [{ type: "layout", extensions: layout4 }, { type: "renderer", extensions: renderer2 }]; extensions = {}; modules = {}; __name(setExtension, "setExtension"); __name(getExtension, "getExtension"); __name(setModule, "setModule"); __name(getModule, "getModule"); extension2 = /* @__PURE__ */ __name(function extension3() { if (arguments.length === 2) { return getExtension.apply(null, arguments); } else if (arguments.length === 3) { return setExtension.apply(null, arguments); } else if (arguments.length === 4) { return getModule.apply(null, arguments); } else if (arguments.length === 5) { return setModule.apply(null, arguments); } else { error("Invalid extension access syntax"); } }, "extension"); Core.prototype.extension = extension2; incExts.forEach(function(group2) { group2.extensions.forEach(function(ext) { setExtension(group2.type, ext.name, ext.impl); }); }); _Stylesheet = /* @__PURE__ */ __name(function Stylesheet() { if (!(this instanceof _Stylesheet)) { return new _Stylesheet(); } this.length = 0; }, "Stylesheet"); sheetfn = _Stylesheet.prototype; sheetfn.instanceString = function() { return "stylesheet"; }; sheetfn.selector = function(selector) { var i2 = this.length++; this[i2] = { selector, properties: [] }; return this; }; sheetfn.css = function(name, value2) { var i2 = this.length - 1; if (string(name)) { this[i2].properties.push({ name, value: value2 }); } else if (plainObject(name)) { var map5 = name; var propNames = Object.keys(map5); for (var j3 = 0; j3 < propNames.length; j3++) { var key = propNames[j3]; var mapVal = map5[key]; if (mapVal == null) { continue; } var prop = _Style.properties[key] || _Style.properties[dash2camel(key)]; if (prop == null) { continue; } var _name = prop.name; var _value = mapVal; this[i2].properties.push({ name: _name, value: _value }); } } return this; }; sheetfn.style = sheetfn.css; sheetfn.generateStyle = function(cy) { var style3 = new _Style(cy); return this.appendToStyle(style3); }; sheetfn.appendToStyle = function(style3) { for (var i2 = 0; i2 < this.length; i2++) { var context = this[i2]; var selector = context.selector; var props = context.properties; style3.selector(selector); for (var j3 = 0; j3 < props.length; j3++) { var prop = props[j3]; style3.css(prop.name, prop.value); } } return style3; }; version2 = "3.33.1"; cytoscape2 = /* @__PURE__ */ __name(function cytoscape3(options2) { if (options2 === void 0) { options2 = {}; } if (plainObject(options2)) { return new Core(options2); } else if (string(options2)) { return extension2.apply(extension2, arguments); } }, "cytoscape"); cytoscape2.use = function(ext) { var args = Array.prototype.slice.call(arguments, 1); args.unshift(cytoscape2); ext.apply(null, args); return this; }; cytoscape2.warnings = function(bool2) { return warnings(bool2); }; cytoscape2.version = version2; cytoscape2.stylesheet = cytoscape2.Stylesheet = _Stylesheet; } }); // ../../node_modules/.pnpm/layout-base@1.0.2/node_modules/layout-base/layout-base.js var require_layout_base = __commonJS({ "../../node_modules/.pnpm/layout-base@1.0.2/node_modules/layout-base/layout-base.js"(exports2, module2) { "use strict"; (/* @__PURE__ */ __name((function webpackUniversalModuleDefinition(root3, factory) { if (typeof exports2 === "object" && typeof module2 === "object") module2.exports = factory(); else if (typeof define === "function" && define.amd) define([], factory); else if (typeof exports2 === "object") exports2["layoutBase"] = factory(); else root3["layoutBase"] = factory(); }), "webpackUniversalModuleDefinition"))(exports2, function() { return ( /******/ (function(modules2) { var installedModules = {}; function __webpack_require__(moduleId) { if (installedModules[moduleId]) { return installedModules[moduleId].exports; } var module3 = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; modules2[moduleId].call(module3.exports, module3, module3.exports, __webpack_require__); module3.l = true; return module3.exports; } __name(__webpack_require__, "__webpack_require__"); __webpack_require__.m = modules2; __webpack_require__.c = installedModules; __webpack_require__.i = function(value2) { return value2; }; __webpack_require__.d = function(exports3, name, getter) { if (!__webpack_require__.o(exports3, name)) { Object.defineProperty(exports3, name, { /******/ configurable: false, /******/ enumerable: true, /******/ get: getter /******/ }); } }; __webpack_require__.n = function(module3) { var getter = module3 && module3.__esModule ? ( /******/ /* @__PURE__ */ __name(function getDefault() { return module3["default"]; }, "getDefault") ) : ( /******/ /* @__PURE__ */ __name(function getModuleExports() { return module3; }, "getModuleExports") ); __webpack_require__.d(getter, "a", getter); return getter; }; __webpack_require__.o = function(object3, property2) { return Object.prototype.hasOwnProperty.call(object3, property2); }; __webpack_require__.p = ""; return __webpack_require__(__webpack_require__.s = 26); })([ /* 0 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function LayoutConstants() { } __name(LayoutConstants, "LayoutConstants"); LayoutConstants.QUALITY = 1; LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED = false; LayoutConstants.DEFAULT_INCREMENTAL = false; LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT = true; LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT = false; LayoutConstants.DEFAULT_ANIMATION_PERIOD = 50; LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = false; LayoutConstants.DEFAULT_GRAPH_MARGIN = 15; LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = false; LayoutConstants.SIMPLE_NODE_SIZE = 40; LayoutConstants.SIMPLE_NODE_HALF_SIZE = LayoutConstants.SIMPLE_NODE_SIZE / 2; LayoutConstants.EMPTY_COMPOUND_NODE_SIZE = 40; LayoutConstants.MIN_EDGE_LENGTH = 1; LayoutConstants.WORLD_BOUNDARY = 1e6; LayoutConstants.INITIAL_WORLD_BOUNDARY = LayoutConstants.WORLD_BOUNDARY / 1e3; LayoutConstants.WORLD_CENTER_X = 1200; LayoutConstants.WORLD_CENTER_Y = 900; module3.exports = LayoutConstants; }), /* 1 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var LGraphObject = __webpack_require__(2); var IGeometry = __webpack_require__(8); var IMath = __webpack_require__(9); function LEdge(source, target, vEdge) { LGraphObject.call(this, vEdge); this.isOverlapingSourceAndTarget = false; this.vGraphObject = vEdge; this.bendpoints = []; this.source = source; this.target = target; } __name(LEdge, "LEdge"); LEdge.prototype = Object.create(LGraphObject.prototype); for (var prop in LGraphObject) { LEdge[prop] = LGraphObject[prop]; } LEdge.prototype.getSource = function() { return this.source; }; LEdge.prototype.getTarget = function() { return this.target; }; LEdge.prototype.isInterGraph = function() { return this.isInterGraph; }; LEdge.prototype.getLength = function() { return this.length; }; LEdge.prototype.isOverlapingSourceAndTarget = function() { return this.isOverlapingSourceAndTarget; }; LEdge.prototype.getBendpoints = function() { return this.bendpoints; }; LEdge.prototype.getLca = function() { return this.lca; }; LEdge.prototype.getSourceInLca = function() { return this.sourceInLca; }; LEdge.prototype.getTargetInLca = function() { return this.targetInLca; }; LEdge.prototype.getOtherEnd = function(node2) { if (this.source === node2) { return this.target; } else if (this.target === node2) { return this.source; } else { throw "Node is not incident with this edge"; } }; LEdge.prototype.getOtherEndInGraph = function(node2, graph) { var otherEnd = this.getOtherEnd(node2); var root3 = graph.getGraphManager().getRoot(); while (true) { if (otherEnd.getOwner() == graph) { return otherEnd; } if (otherEnd.getOwner() == root3) { break; } otherEnd = otherEnd.getOwner().getParent(); } return null; }; LEdge.prototype.updateLength = function() { var clipPointCoordinates = new Array(4); this.isOverlapingSourceAndTarget = IGeometry.getIntersection(this.target.getRect(), this.source.getRect(), clipPointCoordinates); if (!this.isOverlapingSourceAndTarget) { this.lengthX = clipPointCoordinates[0] - clipPointCoordinates[2]; this.lengthY = clipPointCoordinates[1] - clipPointCoordinates[3]; if (Math.abs(this.lengthX) < 1) { this.lengthX = IMath.sign(this.lengthX); } if (Math.abs(this.lengthY) < 1) { this.lengthY = IMath.sign(this.lengthY); } this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY); } }; LEdge.prototype.updateLengthSimple = function() { this.lengthX = this.target.getCenterX() - this.source.getCenterX(); this.lengthY = this.target.getCenterY() - this.source.getCenterY(); if (Math.abs(this.lengthX) < 1) { this.lengthX = IMath.sign(this.lengthX); } if (Math.abs(this.lengthY) < 1) { this.lengthY = IMath.sign(this.lengthY); } this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY); }; module3.exports = LEdge; }), /* 2 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function LGraphObject(vGraphObject) { this.vGraphObject = vGraphObject; } __name(LGraphObject, "LGraphObject"); module3.exports = LGraphObject; }), /* 3 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var LGraphObject = __webpack_require__(2); var Integer = __webpack_require__(10); var RectangleD = __webpack_require__(13); var LayoutConstants = __webpack_require__(0); var RandomSeed = __webpack_require__(16); var PointD = __webpack_require__(4); function LNode(gm, loc, size4, vNode) { if (size4 == null && vNode == null) { vNode = loc; } LGraphObject.call(this, vNode); if (gm.graphManager != null) gm = gm.graphManager; this.estimatedSize = Integer.MIN_VALUE; this.inclusionTreeDepth = Integer.MAX_VALUE; this.vGraphObject = vNode; this.edges = []; this.graphManager = gm; if (size4 != null && loc != null) this.rect = new RectangleD(loc.x, loc.y, size4.width, size4.height); else this.rect = new RectangleD(); } __name(LNode, "LNode"); LNode.prototype = Object.create(LGraphObject.prototype); for (var prop in LGraphObject) { LNode[prop] = LGraphObject[prop]; } LNode.prototype.getEdges = function() { return this.edges; }; LNode.prototype.getChild = function() { return this.child; }; LNode.prototype.getOwner = function() { return this.owner; }; LNode.prototype.getWidth = function() { return this.rect.width; }; LNode.prototype.setWidth = function(width3) { this.rect.width = width3; }; LNode.prototype.getHeight = function() { return this.rect.height; }; LNode.prototype.setHeight = function(height2) { this.rect.height = height2; }; LNode.prototype.getCenterX = function() { return this.rect.x + this.rect.width / 2; }; LNode.prototype.getCenterY = function() { return this.rect.y + this.rect.height / 2; }; LNode.prototype.getCenter = function() { return new PointD(this.rect.x + this.rect.width / 2, this.rect.y + this.rect.height / 2); }; LNode.prototype.getLocation = function() { return new PointD(this.rect.x, this.rect.y); }; LNode.prototype.getRect = function() { return this.rect; }; LNode.prototype.getDiagonal = function() { return Math.sqrt(this.rect.width * this.rect.width + this.rect.height * this.rect.height); }; LNode.prototype.getHalfTheDiagonal = function() { return Math.sqrt(this.rect.height * this.rect.height + this.rect.width * this.rect.width) / 2; }; LNode.prototype.setRect = function(upperLeft, dimension) { this.rect.x = upperLeft.x; this.rect.y = upperLeft.y; this.rect.width = dimension.width; this.rect.height = dimension.height; }; LNode.prototype.setCenter = function(cx, cy) { this.rect.x = cx - this.rect.width / 2; this.rect.y = cy - this.rect.height / 2; }; LNode.prototype.setLocation = function(x5, y6) { this.rect.x = x5; this.rect.y = y6; }; LNode.prototype.moveBy = function(dx, dy) { this.rect.x += dx; this.rect.y += dy; }; LNode.prototype.getEdgeListToNode = function(to) { var edgeList2 = []; var edge; var self2 = this; self2.edges.forEach(function(edge2) { if (edge2.target == to) { if (edge2.source != self2) throw "Incorrect edge source!"; edgeList2.push(edge2); } }); return edgeList2; }; LNode.prototype.getEdgesBetween = function(other) { var edgeList2 = []; var edge; var self2 = this; self2.edges.forEach(function(edge2) { if (!(edge2.source == self2 || edge2.target == self2)) throw "Incorrect edge source and/or target"; if (edge2.target == other || edge2.source == other) { edgeList2.push(edge2); } }); return edgeList2; }; LNode.prototype.getNeighborsList = function() { var neighbors = /* @__PURE__ */ new Set(); var self2 = this; self2.edges.forEach(function(edge) { if (edge.source == self2) { neighbors.add(edge.target); } else { if (edge.target != self2) { throw "Incorrect incidency!"; } neighbors.add(edge.source); } }); return neighbors; }; LNode.prototype.withChildren = function() { var withNeighborsList = /* @__PURE__ */ new Set(); var childNode; var children2; withNeighborsList.add(this); if (this.child != null) { var nodes5 = this.child.getNodes(); for (var i2 = 0; i2 < nodes5.length; i2++) { childNode = nodes5[i2]; children2 = childNode.withChildren(); children2.forEach(function(node2) { withNeighborsList.add(node2); }); } } return withNeighborsList; }; LNode.prototype.getNoOfChildren = function() { var noOfChildren = 0; var childNode; if (this.child == null) { noOfChildren = 1; } else { var nodes5 = this.child.getNodes(); for (var i2 = 0; i2 < nodes5.length; i2++) { childNode = nodes5[i2]; noOfChildren += childNode.getNoOfChildren(); } } if (noOfChildren == 0) { noOfChildren = 1; } return noOfChildren; }; LNode.prototype.getEstimatedSize = function() { if (this.estimatedSize == Integer.MIN_VALUE) { throw "assert failed"; } return this.estimatedSize; }; LNode.prototype.calcEstimatedSize = function() { if (this.child == null) { return this.estimatedSize = (this.rect.width + this.rect.height) / 2; } else { this.estimatedSize = this.child.calcEstimatedSize(); this.rect.width = this.estimatedSize; this.rect.height = this.estimatedSize; return this.estimatedSize; } }; LNode.prototype.scatter = function() { var randomCenterX; var randomCenterY; var minX = -LayoutConstants.INITIAL_WORLD_BOUNDARY; var maxX = LayoutConstants.INITIAL_WORLD_BOUNDARY; randomCenterX = LayoutConstants.WORLD_CENTER_X + RandomSeed.nextDouble() * (maxX - minX) + minX; var minY = -LayoutConstants.INITIAL_WORLD_BOUNDARY; var maxY = LayoutConstants.INITIAL_WORLD_BOUNDARY; randomCenterY = LayoutConstants.WORLD_CENTER_Y + RandomSeed.nextDouble() * (maxY - minY) + minY; this.rect.x = randomCenterX; this.rect.y = randomCenterY; }; LNode.prototype.updateBounds = function() { if (this.getChild() == null) { throw "assert failed"; } if (this.getChild().getNodes().length != 0) { var childGraph = this.getChild(); childGraph.updateBounds(true); this.rect.x = childGraph.getLeft(); this.rect.y = childGraph.getTop(); this.setWidth(childGraph.getRight() - childGraph.getLeft()); this.setHeight(childGraph.getBottom() - childGraph.getTop()); if (LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS) { var width3 = childGraph.getRight() - childGraph.getLeft(); var height2 = childGraph.getBottom() - childGraph.getTop(); if (this.labelWidth > width3) { this.rect.x -= (this.labelWidth - width3) / 2; this.setWidth(this.labelWidth); } if (this.labelHeight > height2) { if (this.labelPos == "center") { this.rect.y -= (this.labelHeight - height2) / 2; } else if (this.labelPos == "top") { this.rect.y -= this.labelHeight - height2; } this.setHeight(this.labelHeight); } } } }; LNode.prototype.getInclusionTreeDepth = function() { if (this.inclusionTreeDepth == Integer.MAX_VALUE) { throw "assert failed"; } return this.inclusionTreeDepth; }; LNode.prototype.transform = function(trans) { var left3 = this.rect.x; if (left3 > LayoutConstants.WORLD_BOUNDARY) { left3 = LayoutConstants.WORLD_BOUNDARY; } else if (left3 < -LayoutConstants.WORLD_BOUNDARY) { left3 = -LayoutConstants.WORLD_BOUNDARY; } var top2 = this.rect.y; if (top2 > LayoutConstants.WORLD_BOUNDARY) { top2 = LayoutConstants.WORLD_BOUNDARY; } else if (top2 < -LayoutConstants.WORLD_BOUNDARY) { top2 = -LayoutConstants.WORLD_BOUNDARY; } var leftTop = new PointD(left3, top2); var vLeftTop = trans.inverseTransformPoint(leftTop); this.setLocation(vLeftTop.x, vLeftTop.y); }; LNode.prototype.getLeft = function() { return this.rect.x; }; LNode.prototype.getRight = function() { return this.rect.x + this.rect.width; }; LNode.prototype.getTop = function() { return this.rect.y; }; LNode.prototype.getBottom = function() { return this.rect.y + this.rect.height; }; LNode.prototype.getParent = function() { if (this.owner == null) { return null; } return this.owner.getParent(); }; module3.exports = LNode; }), /* 4 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function PointD(x5, y6) { if (x5 == null && y6 == null) { this.x = 0; this.y = 0; } else { this.x = x5; this.y = y6; } } __name(PointD, "PointD"); PointD.prototype.getX = function() { return this.x; }; PointD.prototype.getY = function() { return this.y; }; PointD.prototype.setX = function(x5) { this.x = x5; }; PointD.prototype.setY = function(y6) { this.y = y6; }; PointD.prototype.getDifference = function(pt) { return new DimensionD(this.x - pt.x, this.y - pt.y); }; PointD.prototype.getCopy = function() { return new PointD(this.x, this.y); }; PointD.prototype.translate = function(dim) { this.x += dim.width; this.y += dim.height; return this; }; module3.exports = PointD; }), /* 5 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var LGraphObject = __webpack_require__(2); var Integer = __webpack_require__(10); var LayoutConstants = __webpack_require__(0); var LGraphManager = __webpack_require__(6); var LNode = __webpack_require__(3); var LEdge = __webpack_require__(1); var RectangleD = __webpack_require__(13); var Point3 = __webpack_require__(12); var LinkedList = __webpack_require__(11); function LGraph(parent4, obj2, vGraph) { LGraphObject.call(this, vGraph); this.estimatedSize = Integer.MIN_VALUE; this.margin = LayoutConstants.DEFAULT_GRAPH_MARGIN; this.edges = []; this.nodes = []; this.isConnected = false; this.parent = parent4; if (obj2 != null && obj2 instanceof LGraphManager) { this.graphManager = obj2; } else if (obj2 != null && obj2 instanceof Layout) { this.graphManager = obj2.graphManager; } } __name(LGraph, "LGraph"); LGraph.prototype = Object.create(LGraphObject.prototype); for (var prop in LGraphObject) { LGraph[prop] = LGraphObject[prop]; } LGraph.prototype.getNodes = function() { return this.nodes; }; LGraph.prototype.getEdges = function() { return this.edges; }; LGraph.prototype.getGraphManager = function() { return this.graphManager; }; LGraph.prototype.getParent = function() { return this.parent; }; LGraph.prototype.getLeft = function() { return this.left; }; LGraph.prototype.getRight = function() { return this.right; }; LGraph.prototype.getTop = function() { return this.top; }; LGraph.prototype.getBottom = function() { return this.bottom; }; LGraph.prototype.isConnected = function() { return this.isConnected; }; LGraph.prototype.add = function(obj1, sourceNode, targetNode) { if (sourceNode == null && targetNode == null) { var newNode = obj1; if (this.graphManager == null) { throw "Graph has no graph mgr!"; } if (this.getNodes().indexOf(newNode) > -1) { throw "Node already in graph!"; } newNode.owner = this; this.getNodes().push(newNode); return newNode; } else { var newEdge = obj1; if (!(this.getNodes().indexOf(sourceNode) > -1 && this.getNodes().indexOf(targetNode) > -1)) { throw "Source or target not in graph!"; } if (!(sourceNode.owner == targetNode.owner && sourceNode.owner == this)) { throw "Both owners must be this graph!"; } if (sourceNode.owner != targetNode.owner) { return null; } newEdge.source = sourceNode; newEdge.target = targetNode; newEdge.isInterGraph = false; this.getEdges().push(newEdge); sourceNode.edges.push(newEdge); if (targetNode != sourceNode) { targetNode.edges.push(newEdge); } return newEdge; } }; LGraph.prototype.remove = function(obj) { var node2 = obj; if (obj instanceof LNode) { if (node2 == null) { throw "Node is null!"; } if (!(node2.owner != null && node2.owner == this)) { throw "Owner graph is invalid!"; } if (this.graphManager == null) { throw "Owner graph manager is invalid!"; } var edgesToBeRemoved = node2.edges.slice(); var edge; var s2 = edgesToBeRemoved.length; for (var i2 = 0; i2 < s2; i2++) { edge = edgesToBeRemoved[i2]; if (edge.isInterGraph) { this.graphManager.remove(edge); } else { edge.source.owner.remove(edge); } } var index = this.nodes.indexOf(node2); if (index == -1) { throw "Node not in owner node list!"; } this.nodes.splice(index, 1); } else if (obj instanceof LEdge) { var edge = obj; if (edge == null) { throw "Edge is null!"; } if (!(edge.source != null && edge.target != null)) { throw "Source and/or target is null!"; } if (!(edge.source.owner != null && edge.target.owner != null && edge.source.owner == this && edge.target.owner == this)) { throw "Source and/or target owner is invalid!"; } var sourceIndex = edge.source.edges.indexOf(edge); var targetIndex = edge.target.edges.indexOf(edge); if (!(sourceIndex > -1 && targetIndex > -1)) { throw "Source and/or target doesn't know this edge!"; } edge.source.edges.splice(sourceIndex, 1); if (edge.target != edge.source) { edge.target.edges.splice(targetIndex, 1); } var index = edge.source.owner.getEdges().indexOf(edge); if (index == -1) { throw "Not in owner's edge list!"; } edge.source.owner.getEdges().splice(index, 1); } }; LGraph.prototype.updateLeftTop = function() { var top2 = Integer.MAX_VALUE; var left3 = Integer.MAX_VALUE; var nodeTop; var nodeLeft; var margin; var nodes5 = this.getNodes(); var s2 = nodes5.length; for (var i2 = 0; i2 < s2; i2++) { var lNode = nodes5[i2]; nodeTop = lNode.getTop(); nodeLeft = lNode.getLeft(); if (top2 > nodeTop) { top2 = nodeTop; } if (left3 > nodeLeft) { left3 = nodeLeft; } } if (top2 == Integer.MAX_VALUE) { return null; } if (nodes5[0].getParent().paddingLeft != void 0) { margin = nodes5[0].getParent().paddingLeft; } else { margin = this.margin; } this.left = left3 - margin; this.top = top2 - margin; return new Point3(this.left, this.top); }; LGraph.prototype.updateBounds = function(recursive) { var left3 = Integer.MAX_VALUE; var right3 = -Integer.MAX_VALUE; var top2 = Integer.MAX_VALUE; var bottom2 = -Integer.MAX_VALUE; var nodeLeft; var nodeRight; var nodeTop; var nodeBottom; var margin; var nodes5 = this.nodes; var s2 = nodes5.length; for (var i2 = 0; i2 < s2; i2++) { var lNode = nodes5[i2]; if (recursive && lNode.child != null) { lNode.updateBounds(); } nodeLeft = lNode.getLeft(); nodeRight = lNode.getRight(); nodeTop = lNode.getTop(); nodeBottom = lNode.getBottom(); if (left3 > nodeLeft) { left3 = nodeLeft; } if (right3 < nodeRight) { right3 = nodeRight; } if (top2 > nodeTop) { top2 = nodeTop; } if (bottom2 < nodeBottom) { bottom2 = nodeBottom; } } var boundingRect = new RectangleD(left3, top2, right3 - left3, bottom2 - top2); if (left3 == Integer.MAX_VALUE) { this.left = this.parent.getLeft(); this.right = this.parent.getRight(); this.top = this.parent.getTop(); this.bottom = this.parent.getBottom(); } if (nodes5[0].getParent().paddingLeft != void 0) { margin = nodes5[0].getParent().paddingLeft; } else { margin = this.margin; } this.left = boundingRect.x - margin; this.right = boundingRect.x + boundingRect.width + margin; this.top = boundingRect.y - margin; this.bottom = boundingRect.y + boundingRect.height + margin; }; LGraph.calculateBounds = function(nodes5) { var left3 = Integer.MAX_VALUE; var right3 = -Integer.MAX_VALUE; var top2 = Integer.MAX_VALUE; var bottom2 = -Integer.MAX_VALUE; var nodeLeft; var nodeRight; var nodeTop; var nodeBottom; var s2 = nodes5.length; for (var i2 = 0; i2 < s2; i2++) { var lNode = nodes5[i2]; nodeLeft = lNode.getLeft(); nodeRight = lNode.getRight(); nodeTop = lNode.getTop(); nodeBottom = lNode.getBottom(); if (left3 > nodeLeft) { left3 = nodeLeft; } if (right3 < nodeRight) { right3 = nodeRight; } if (top2 > nodeTop) { top2 = nodeTop; } if (bottom2 < nodeBottom) { bottom2 = nodeBottom; } } var boundingRect = new RectangleD(left3, top2, right3 - left3, bottom2 - top2); return boundingRect; }; LGraph.prototype.getInclusionTreeDepth = function() { if (this == this.graphManager.getRoot()) { return 1; } else { return this.parent.getInclusionTreeDepth(); } }; LGraph.prototype.getEstimatedSize = function() { if (this.estimatedSize == Integer.MIN_VALUE) { throw "assert failed"; } return this.estimatedSize; }; LGraph.prototype.calcEstimatedSize = function() { var size4 = 0; var nodes5 = this.nodes; var s2 = nodes5.length; for (var i2 = 0; i2 < s2; i2++) { var lNode = nodes5[i2]; size4 += lNode.calcEstimatedSize(); } if (size4 == 0) { this.estimatedSize = LayoutConstants.EMPTY_COMPOUND_NODE_SIZE; } else { this.estimatedSize = size4 / Math.sqrt(this.nodes.length); } return this.estimatedSize; }; LGraph.prototype.updateConnected = function() { var self2 = this; if (this.nodes.length == 0) { this.isConnected = true; return; } var queue = new LinkedList(); var visited = /* @__PURE__ */ new Set(); var currentNode = this.nodes[0]; var neighborEdges; var currentNeighbor; var childrenOfNode = currentNode.withChildren(); childrenOfNode.forEach(function(node2) { queue.push(node2); visited.add(node2); }); while (queue.length !== 0) { currentNode = queue.shift(); neighborEdges = currentNode.getEdges(); var size4 = neighborEdges.length; for (var i2 = 0; i2 < size4; i2++) { var neighborEdge = neighborEdges[i2]; currentNeighbor = neighborEdge.getOtherEndInGraph(currentNode, this); if (currentNeighbor != null && !visited.has(currentNeighbor)) { var childrenOfNeighbor = currentNeighbor.withChildren(); childrenOfNeighbor.forEach(function(node2) { queue.push(node2); visited.add(node2); }); } } } this.isConnected = false; if (visited.size >= this.nodes.length) { var noOfVisitedInThisGraph = 0; visited.forEach(function(visitedNode) { if (visitedNode.owner == self2) { noOfVisitedInThisGraph++; } }); if (noOfVisitedInThisGraph == this.nodes.length) { this.isConnected = true; } } }; module3.exports = LGraph; }), /* 6 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var LGraph; var LEdge = __webpack_require__(1); function LGraphManager(layout6) { LGraph = __webpack_require__(5); this.layout = layout6; this.graphs = []; this.edges = []; } __name(LGraphManager, "LGraphManager"); LGraphManager.prototype.addRoot = function() { var ngraph = this.layout.newGraph(); var nnode = this.layout.newNode(null); var root3 = this.add(ngraph, nnode); this.setRootGraph(root3); return this.rootGraph; }; LGraphManager.prototype.add = function(newGraph, parentNode, newEdge, sourceNode, targetNode) { if (newEdge == null && sourceNode == null && targetNode == null) { if (newGraph == null) { throw "Graph is null!"; } if (parentNode == null) { throw "Parent node is null!"; } if (this.graphs.indexOf(newGraph) > -1) { throw "Graph already in this graph mgr!"; } this.graphs.push(newGraph); if (newGraph.parent != null) { throw "Already has a parent!"; } if (parentNode.child != null) { throw "Already has a child!"; } newGraph.parent = parentNode; parentNode.child = newGraph; return newGraph; } else { targetNode = newEdge; sourceNode = parentNode; newEdge = newGraph; var sourceGraph = sourceNode.getOwner(); var targetGraph = targetNode.getOwner(); if (!(sourceGraph != null && sourceGraph.getGraphManager() == this)) { throw "Source not in this graph mgr!"; } if (!(targetGraph != null && targetGraph.getGraphManager() == this)) { throw "Target not in this graph mgr!"; } if (sourceGraph == targetGraph) { newEdge.isInterGraph = false; return sourceGraph.add(newEdge, sourceNode, targetNode); } else { newEdge.isInterGraph = true; newEdge.source = sourceNode; newEdge.target = targetNode; if (this.edges.indexOf(newEdge) > -1) { throw "Edge already in inter-graph edge list!"; } this.edges.push(newEdge); if (!(newEdge.source != null && newEdge.target != null)) { throw "Edge source and/or target is null!"; } if (!(newEdge.source.edges.indexOf(newEdge) == -1 && newEdge.target.edges.indexOf(newEdge) == -1)) { throw "Edge already in source and/or target incidency list!"; } newEdge.source.edges.push(newEdge); newEdge.target.edges.push(newEdge); return newEdge; } } }; LGraphManager.prototype.remove = function(lObj) { if (lObj instanceof LGraph) { var graph = lObj; if (graph.getGraphManager() != this) { throw "Graph not in this graph mgr"; } if (!(graph == this.rootGraph || graph.parent != null && graph.parent.graphManager == this)) { throw "Invalid parent node!"; } var edgesToBeRemoved = []; edgesToBeRemoved = edgesToBeRemoved.concat(graph.getEdges()); var edge; var s2 = edgesToBeRemoved.length; for (var i2 = 0; i2 < s2; i2++) { edge = edgesToBeRemoved[i2]; graph.remove(edge); } var nodesToBeRemoved = []; nodesToBeRemoved = nodesToBeRemoved.concat(graph.getNodes()); var node2; s2 = nodesToBeRemoved.length; for (var i2 = 0; i2 < s2; i2++) { node2 = nodesToBeRemoved[i2]; graph.remove(node2); } if (graph == this.rootGraph) { this.setRootGraph(null); } var index = this.graphs.indexOf(graph); this.graphs.splice(index, 1); graph.parent = null; } else if (lObj instanceof LEdge) { edge = lObj; if (edge == null) { throw "Edge is null!"; } if (!edge.isInterGraph) { throw "Not an inter-graph edge!"; } if (!(edge.source != null && edge.target != null)) { throw "Source and/or target is null!"; } if (!(edge.source.edges.indexOf(edge) != -1 && edge.target.edges.indexOf(edge) != -1)) { throw "Source and/or target doesn't know this edge!"; } var index = edge.source.edges.indexOf(edge); edge.source.edges.splice(index, 1); index = edge.target.edges.indexOf(edge); edge.target.edges.splice(index, 1); if (!(edge.source.owner != null && edge.source.owner.getGraphManager() != null)) { throw "Edge owner graph or owner graph manager is null!"; } if (edge.source.owner.getGraphManager().edges.indexOf(edge) == -1) { throw "Not in owner graph manager's edge list!"; } var index = edge.source.owner.getGraphManager().edges.indexOf(edge); edge.source.owner.getGraphManager().edges.splice(index, 1); } }; LGraphManager.prototype.updateBounds = function() { this.rootGraph.updateBounds(true); }; LGraphManager.prototype.getGraphs = function() { return this.graphs; }; LGraphManager.prototype.getAllNodes = function() { if (this.allNodes == null) { var nodeList = []; var graphs = this.getGraphs(); var s2 = graphs.length; for (var i2 = 0; i2 < s2; i2++) { nodeList = nodeList.concat(graphs[i2].getNodes()); } this.allNodes = nodeList; } return this.allNodes; }; LGraphManager.prototype.resetAllNodes = function() { this.allNodes = null; }; LGraphManager.prototype.resetAllEdges = function() { this.allEdges = null; }; LGraphManager.prototype.resetAllNodesToApplyGravitation = function() { this.allNodesToApplyGravitation = null; }; LGraphManager.prototype.getAllEdges = function() { if (this.allEdges == null) { var edgeList2 = []; var graphs = this.getGraphs(); var s2 = graphs.length; for (var i2 = 0; i2 < graphs.length; i2++) { edgeList2 = edgeList2.concat(graphs[i2].getEdges()); } edgeList2 = edgeList2.concat(this.edges); this.allEdges = edgeList2; } return this.allEdges; }; LGraphManager.prototype.getAllNodesToApplyGravitation = function() { return this.allNodesToApplyGravitation; }; LGraphManager.prototype.setAllNodesToApplyGravitation = function(nodeList) { if (this.allNodesToApplyGravitation != null) { throw "assert failed"; } this.allNodesToApplyGravitation = nodeList; }; LGraphManager.prototype.getRoot = function() { return this.rootGraph; }; LGraphManager.prototype.setRootGraph = function(graph) { if (graph.getGraphManager() != this) { throw "Root not in this graph mgr!"; } this.rootGraph = graph; if (graph.parent == null) { graph.parent = this.layout.newNode("Root node"); } }; LGraphManager.prototype.getLayout = function() { return this.layout; }; LGraphManager.prototype.isOneAncestorOfOther = function(firstNode, secondNode) { if (!(firstNode != null && secondNode != null)) { throw "assert failed"; } if (firstNode == secondNode) { return true; } var ownerGraph = firstNode.getOwner(); var parentNode; do { parentNode = ownerGraph.getParent(); if (parentNode == null) { break; } if (parentNode == secondNode) { return true; } ownerGraph = parentNode.getOwner(); if (ownerGraph == null) { break; } } while (true); ownerGraph = secondNode.getOwner(); do { parentNode = ownerGraph.getParent(); if (parentNode == null) { break; } if (parentNode == firstNode) { return true; } ownerGraph = parentNode.getOwner(); if (ownerGraph == null) { break; } } while (true); return false; }; LGraphManager.prototype.calcLowestCommonAncestors = function() { var edge; var sourceNode; var targetNode; var sourceAncestorGraph; var targetAncestorGraph; var edges3 = this.getAllEdges(); var s2 = edges3.length; for (var i2 = 0; i2 < s2; i2++) { edge = edges3[i2]; sourceNode = edge.source; targetNode = edge.target; edge.lca = null; edge.sourceInLca = sourceNode; edge.targetInLca = targetNode; if (sourceNode == targetNode) { edge.lca = sourceNode.getOwner(); continue; } sourceAncestorGraph = sourceNode.getOwner(); while (edge.lca == null) { edge.targetInLca = targetNode; targetAncestorGraph = targetNode.getOwner(); while (edge.lca == null) { if (targetAncestorGraph == sourceAncestorGraph) { edge.lca = targetAncestorGraph; break; } if (targetAncestorGraph == this.rootGraph) { break; } if (edge.lca != null) { throw "assert failed"; } edge.targetInLca = targetAncestorGraph.getParent(); targetAncestorGraph = edge.targetInLca.getOwner(); } if (sourceAncestorGraph == this.rootGraph) { break; } if (edge.lca == null) { edge.sourceInLca = sourceAncestorGraph.getParent(); sourceAncestorGraph = edge.sourceInLca.getOwner(); } } if (edge.lca == null) { throw "assert failed"; } } }; LGraphManager.prototype.calcLowestCommonAncestor = function(firstNode, secondNode) { if (firstNode == secondNode) { return firstNode.getOwner(); } var firstOwnerGraph = firstNode.getOwner(); do { if (firstOwnerGraph == null) { break; } var secondOwnerGraph = secondNode.getOwner(); do { if (secondOwnerGraph == null) { break; } if (secondOwnerGraph == firstOwnerGraph) { return secondOwnerGraph; } secondOwnerGraph = secondOwnerGraph.getParent().getOwner(); } while (true); firstOwnerGraph = firstOwnerGraph.getParent().getOwner(); } while (true); return firstOwnerGraph; }; LGraphManager.prototype.calcInclusionTreeDepths = function(graph, depth) { if (graph == null && depth == null) { graph = this.rootGraph; depth = 1; } var node2; var nodes5 = graph.getNodes(); var s2 = nodes5.length; for (var i2 = 0; i2 < s2; i2++) { node2 = nodes5[i2]; node2.inclusionTreeDepth = depth; if (node2.child != null) { this.calcInclusionTreeDepths(node2.child, depth + 1); } } }; LGraphManager.prototype.includesInvalidEdge = function() { var edge; var s2 = this.edges.length; for (var i2 = 0; i2 < s2; i2++) { edge = this.edges[i2]; if (this.isOneAncestorOfOther(edge.source, edge.target)) { return true; } } return false; }; module3.exports = LGraphManager; }), /* 7 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var LayoutConstants = __webpack_require__(0); function FDLayoutConstants() { } __name(FDLayoutConstants, "FDLayoutConstants"); for (var prop in LayoutConstants) { FDLayoutConstants[prop] = LayoutConstants[prop]; } FDLayoutConstants.MAX_ITERATIONS = 2500; FDLayoutConstants.DEFAULT_EDGE_LENGTH = 50; FDLayoutConstants.DEFAULT_SPRING_STRENGTH = 0.45; FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = 4500; FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = 0.4; FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = 1; FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = 3.8; FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = 1.5; FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION = true; FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION = true; FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = 0.3; FDLayoutConstants.COOLING_ADAPTATION_FACTOR = 0.33; FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT = 1e3; FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT = 5e3; FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL = 100; FDLayoutConstants.MAX_NODE_DISPLACEMENT = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL * 3; FDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10; FDLayoutConstants.CONVERGENCE_CHECK_PERIOD = 100; FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = 0.1; FDLayoutConstants.MIN_EDGE_LENGTH = 1; FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD = 10; module3.exports = FDLayoutConstants; }), /* 8 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var Point3 = __webpack_require__(12); function IGeometry() { } __name(IGeometry, "IGeometry"); IGeometry.calcSeparationAmount = function(rectA, rectB, overlapAmount, separationBuffer) { if (!rectA.intersects(rectB)) { throw "assert failed"; } var directions = new Array(2); this.decideDirectionsForOverlappingNodes(rectA, rectB, directions); overlapAmount[0] = Math.min(rectA.getRight(), rectB.getRight()) - Math.max(rectA.x, rectB.x); overlapAmount[1] = Math.min(rectA.getBottom(), rectB.getBottom()) - Math.max(rectA.y, rectB.y); if (rectA.getX() <= rectB.getX() && rectA.getRight() >= rectB.getRight()) { overlapAmount[0] += Math.min(rectB.getX() - rectA.getX(), rectA.getRight() - rectB.getRight()); } else if (rectB.getX() <= rectA.getX() && rectB.getRight() >= rectA.getRight()) { overlapAmount[0] += Math.min(rectA.getX() - rectB.getX(), rectB.getRight() - rectA.getRight()); } if (rectA.getY() <= rectB.getY() && rectA.getBottom() >= rectB.getBottom()) { overlapAmount[1] += Math.min(rectB.getY() - rectA.getY(), rectA.getBottom() - rectB.getBottom()); } else if (rectB.getY() <= rectA.getY() && rectB.getBottom() >= rectA.getBottom()) { overlapAmount[1] += Math.min(rectA.getY() - rectB.getY(), rectB.getBottom() - rectA.getBottom()); } var slope = Math.abs((rectB.getCenterY() - rectA.getCenterY()) / (rectB.getCenterX() - rectA.getCenterX())); if (rectB.getCenterY() === rectA.getCenterY() && rectB.getCenterX() === rectA.getCenterX()) { slope = 1; } var moveByY = slope * overlapAmount[0]; var moveByX = overlapAmount[1] / slope; if (overlapAmount[0] < moveByX) { moveByX = overlapAmount[0]; } else { moveByY = overlapAmount[1]; } overlapAmount[0] = -1 * directions[0] * (moveByX / 2 + separationBuffer); overlapAmount[1] = -1 * directions[1] * (moveByY / 2 + separationBuffer); }; IGeometry.decideDirectionsForOverlappingNodes = function(rectA, rectB, directions) { if (rectA.getCenterX() < rectB.getCenterX()) { directions[0] = -1; } else { directions[0] = 1; } if (rectA.getCenterY() < rectB.getCenterY()) { directions[1] = -1; } else { directions[1] = 1; } }; IGeometry.getIntersection2 = function(rectA, rectB, result) { var p1x = rectA.getCenterX(); var p1y = rectA.getCenterY(); var p2x = rectB.getCenterX(); var p2y = rectB.getCenterY(); if (rectA.intersects(rectB)) { result[0] = p1x; result[1] = p1y; result[2] = p2x; result[3] = p2y; return true; } var topLeftAx = rectA.getX(); var topLeftAy = rectA.getY(); var topRightAx = rectA.getRight(); var bottomLeftAx = rectA.getX(); var bottomLeftAy = rectA.getBottom(); var bottomRightAx = rectA.getRight(); var halfWidthA = rectA.getWidthHalf(); var halfHeightA = rectA.getHeightHalf(); var topLeftBx = rectB.getX(); var topLeftBy = rectB.getY(); var topRightBx = rectB.getRight(); var bottomLeftBx = rectB.getX(); var bottomLeftBy = rectB.getBottom(); var bottomRightBx = rectB.getRight(); var halfWidthB = rectB.getWidthHalf(); var halfHeightB = rectB.getHeightHalf(); var clipPointAFound = false; var clipPointBFound = false; if (p1x === p2x) { if (p1y > p2y) { result[0] = p1x; result[1] = topLeftAy; result[2] = p2x; result[3] = bottomLeftBy; return false; } else if (p1y < p2y) { result[0] = p1x; result[1] = bottomLeftAy; result[2] = p2x; result[3] = topLeftBy; return false; } else { } } else if (p1y === p2y) { if (p1x > p2x) { result[0] = topLeftAx; result[1] = p1y; result[2] = topRightBx; result[3] = p2y; return false; } else if (p1x < p2x) { result[0] = topRightAx; result[1] = p1y; result[2] = topLeftBx; result[3] = p2y; return false; } else { } } else { var slopeA = rectA.height / rectA.width; var slopeB = rectB.height / rectB.width; var slopePrime = (p2y - p1y) / (p2x - p1x); var cardinalDirectionA = void 0; var cardinalDirectionB = void 0; var tempPointAx = void 0; var tempPointAy = void 0; var tempPointBx = void 0; var tempPointBy = void 0; if (-slopeA === slopePrime) { if (p1x > p2x) { result[0] = bottomLeftAx; result[1] = bottomLeftAy; clipPointAFound = true; } else { result[0] = topRightAx; result[1] = topLeftAy; clipPointAFound = true; } } else if (slopeA === slopePrime) { if (p1x > p2x) { result[0] = topLeftAx; result[1] = topLeftAy; clipPointAFound = true; } else { result[0] = bottomRightAx; result[1] = bottomLeftAy; clipPointAFound = true; } } if (-slopeB === slopePrime) { if (p2x > p1x) { result[2] = bottomLeftBx; result[3] = bottomLeftBy; clipPointBFound = true; } else { result[2] = topRightBx; result[3] = topLeftBy; clipPointBFound = true; } } else if (slopeB === slopePrime) { if (p2x > p1x) { result[2] = topLeftBx; result[3] = topLeftBy; clipPointBFound = true; } else { result[2] = bottomRightBx; result[3] = bottomLeftBy; clipPointBFound = true; } } if (clipPointAFound && clipPointBFound) { return false; } if (p1x > p2x) { if (p1y > p2y) { cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 4); cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 2); } else { cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 3); cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 1); } } else { if (p1y > p2y) { cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 1); cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 3); } else { cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 2); cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 4); } } if (!clipPointAFound) { switch (cardinalDirectionA) { case 1: tempPointAy = topLeftAy; tempPointAx = p1x + -halfHeightA / slopePrime; result[0] = tempPointAx; result[1] = tempPointAy; break; case 2: tempPointAx = bottomRightAx; tempPointAy = p1y + halfWidthA * slopePrime; result[0] = tempPointAx; result[1] = tempPointAy; break; case 3: tempPointAy = bottomLeftAy; tempPointAx = p1x + halfHeightA / slopePrime; result[0] = tempPointAx; result[1] = tempPointAy; break; case 4: tempPointAx = bottomLeftAx; tempPointAy = p1y + -halfWidthA * slopePrime; result[0] = tempPointAx; result[1] = tempPointAy; break; } } if (!clipPointBFound) { switch (cardinalDirectionB) { case 1: tempPointBy = topLeftBy; tempPointBx = p2x + -halfHeightB / slopePrime; result[2] = tempPointBx; result[3] = tempPointBy; break; case 2: tempPointBx = bottomRightBx; tempPointBy = p2y + halfWidthB * slopePrime; result[2] = tempPointBx; result[3] = tempPointBy; break; case 3: tempPointBy = bottomLeftBy; tempPointBx = p2x + halfHeightB / slopePrime; result[2] = tempPointBx; result[3] = tempPointBy; break; case 4: tempPointBx = bottomLeftBx; tempPointBy = p2y + -halfWidthB * slopePrime; result[2] = tempPointBx; result[3] = tempPointBy; break; } } } return false; }; IGeometry.getCardinalDirection = function(slope, slopePrime, line2) { if (slope > slopePrime) { return line2; } else { return 1 + line2 % 4; } }; IGeometry.getIntersection = function(s1, s2, f1, f2) { if (f2 == null) { return this.getIntersection2(s1, s2, f1); } var x1 = s1.x; var y1 = s1.y; var x22 = s2.x; var y22 = s2.y; var x32 = f1.x; var y32 = f1.y; var x42 = f2.x; var y42 = f2.y; var x5 = void 0, y6 = void 0; var a1 = void 0, a2 = void 0, b1 = void 0, b22 = void 0, c1 = void 0, c22 = void 0; var denom = void 0; a1 = y22 - y1; b1 = x1 - x22; c1 = x22 * y1 - x1 * y22; a2 = y42 - y32; b22 = x32 - x42; c22 = x42 * y32 - x32 * y42; denom = a1 * b22 - a2 * b1; if (denom === 0) { return null; } x5 = (b1 * c22 - b22 * c1) / denom; y6 = (a2 * c1 - a1 * c22) / denom; return new Point3(x5, y6); }; IGeometry.angleOfVector = function(Cx, Cy, Nx, Ny) { var C_angle = void 0; if (Cx !== Nx) { C_angle = Math.atan((Ny - Cy) / (Nx - Cx)); if (Nx < Cx) { C_angle += Math.PI; } else if (Ny < Cy) { C_angle += this.TWO_PI; } } else if (Ny < Cy) { C_angle = this.ONE_AND_HALF_PI; } else { C_angle = this.HALF_PI; } return C_angle; }; IGeometry.doIntersect = function(p1, p22, p3, p4) { var a2 = p1.x; var b3 = p1.y; var c3 = p22.x; var d3 = p22.y; var p5 = p3.x; var q3 = p3.y; var r2 = p4.x; var s2 = p4.y; var det = (c3 - a2) * (s2 - q3) - (r2 - p5) * (d3 - b3); if (det === 0) { return false; } else { var lambda = ((s2 - q3) * (r2 - a2) + (p5 - r2) * (s2 - b3)) / det; var gamma2 = ((b3 - d3) * (r2 - a2) + (c3 - a2) * (s2 - b3)) / det; return 0 < lambda && lambda < 1 && 0 < gamma2 && gamma2 < 1; } }; IGeometry.HALF_PI = 0.5 * Math.PI; IGeometry.ONE_AND_HALF_PI = 1.5 * Math.PI; IGeometry.TWO_PI = 2 * Math.PI; IGeometry.THREE_PI = 3 * Math.PI; module3.exports = IGeometry; }), /* 9 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function IMath() { } __name(IMath, "IMath"); IMath.sign = function(value2) { if (value2 > 0) { return 1; } else if (value2 < 0) { return -1; } else { return 0; } }; IMath.floor = function(value2) { return value2 < 0 ? Math.ceil(value2) : Math.floor(value2); }; IMath.ceil = function(value2) { return value2 < 0 ? Math.floor(value2) : Math.ceil(value2); }; module3.exports = IMath; }), /* 10 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function Integer() { } __name(Integer, "Integer"); Integer.MAX_VALUE = 2147483647; Integer.MIN_VALUE = -2147483648; module3.exports = Integer; }), /* 11 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var _createClass2 = /* @__PURE__ */ (function() { function defineProperties(target, props) { for (var i2 = 0; i2 < props.length; i2++) { var descriptor = props[i2]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } __name(defineProperties, "defineProperties"); return function(Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); function _classCallCheck2(instance2, Constructor) { if (!(instance2 instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } __name(_classCallCheck2, "_classCallCheck"); var nodeFrom = /* @__PURE__ */ __name(function nodeFrom2(value2) { return { value: value2, next: null, prev: null }; }, "nodeFrom"); var add3 = /* @__PURE__ */ __name(function add4(prev2, node2, next3, list) { if (prev2 !== null) { prev2.next = node2; } else { list.head = node2; } if (next3 !== null) { next3.prev = node2; } else { list.tail = node2; } node2.prev = prev2; node2.next = next3; list.length++; return node2; }, "add"); var _remove = /* @__PURE__ */ __name(function _remove2(node2, list) { var prev2 = node2.prev, next3 = node2.next; if (prev2 !== null) { prev2.next = next3; } else { list.head = next3; } if (next3 !== null) { next3.prev = prev2; } else { list.tail = prev2; } node2.prev = node2.next = null; list.length--; return node2; }, "_remove"); var LinkedList = (function() { function LinkedList2(vals) { var _this = this; _classCallCheck2(this, LinkedList2); this.length = 0; this.head = null; this.tail = null; if (vals != null) { vals.forEach(function(v3) { return _this.push(v3); }); } } __name(LinkedList2, "LinkedList"); _createClass2(LinkedList2, [{ key: "size", value: /* @__PURE__ */ __name(function size4() { return this.length; }, "size") }, { key: "insertBefore", value: /* @__PURE__ */ __name(function insertBefore(val, otherNode) { return add3(otherNode.prev, nodeFrom(val), otherNode, this); }, "insertBefore") }, { key: "insertAfter", value: /* @__PURE__ */ __name(function insertAfter(val, otherNode) { return add3(otherNode, nodeFrom(val), otherNode.next, this); }, "insertAfter") }, { key: "insertNodeBefore", value: /* @__PURE__ */ __name(function insertNodeBefore(newNode, otherNode) { return add3(otherNode.prev, newNode, otherNode, this); }, "insertNodeBefore") }, { key: "insertNodeAfter", value: /* @__PURE__ */ __name(function insertNodeAfter(newNode, otherNode) { return add3(otherNode, newNode, otherNode.next, this); }, "insertNodeAfter") }, { key: "push", value: /* @__PURE__ */ __name(function push3(val) { return add3(this.tail, nodeFrom(val), null, this); }, "push") }, { key: "unshift", value: /* @__PURE__ */ __name(function unshift(val) { return add3(null, nodeFrom(val), this.head, this); }, "unshift") }, { key: "remove", value: /* @__PURE__ */ __name(function remove3(node2) { return _remove(node2, this); }, "remove") }, { key: "pop", value: /* @__PURE__ */ __name(function pop() { return _remove(this.tail, this).value; }, "pop") }, { key: "popNode", value: /* @__PURE__ */ __name(function popNode() { return _remove(this.tail, this); }, "popNode") }, { key: "shift", value: /* @__PURE__ */ __name(function shift2() { return _remove(this.head, this).value; }, "shift") }, { key: "shiftNode", value: /* @__PURE__ */ __name(function shiftNode() { return _remove(this.head, this); }, "shiftNode") }, { key: "get_object_at", value: /* @__PURE__ */ __name(function get_object_at(index) { if (index <= this.length()) { var i2 = 1; var current = this.head; while (i2 < index) { current = current.next; i2++; } return current.value; } }, "get_object_at") }, { key: "set_object_at", value: /* @__PURE__ */ __name(function set_object_at(index, value2) { if (index <= this.length()) { var i2 = 1; var current = this.head; while (i2 < index) { current = current.next; i2++; } current.value = value2; } }, "set_object_at") }]); return LinkedList2; })(); module3.exports = LinkedList; }), /* 12 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function Point3(x5, y6, p3) { this.x = null; this.y = null; if (x5 == null && y6 == null && p3 == null) { this.x = 0; this.y = 0; } else if (typeof x5 == "number" && typeof y6 == "number" && p3 == null) { this.x = x5; this.y = y6; } else if (x5.constructor.name == "Point" && y6 == null && p3 == null) { p3 = x5; this.x = p3.x; this.y = p3.y; } } __name(Point3, "Point"); Point3.prototype.getX = function() { return this.x; }; Point3.prototype.getY = function() { return this.y; }; Point3.prototype.getLocation = function() { return new Point3(this.x, this.y); }; Point3.prototype.setLocation = function(x5, y6, p3) { if (x5.constructor.name == "Point" && y6 == null && p3 == null) { p3 = x5; this.setLocation(p3.x, p3.y); } else if (typeof x5 == "number" && typeof y6 == "number" && p3 == null) { if (parseInt(x5) == x5 && parseInt(y6) == y6) { this.move(x5, y6); } else { this.x = Math.floor(x5 + 0.5); this.y = Math.floor(y6 + 0.5); } } }; Point3.prototype.move = function(x5, y6) { this.x = x5; this.y = y6; }; Point3.prototype.translate = function(dx, dy) { this.x += dx; this.y += dy; }; Point3.prototype.equals = function(obj) { if (obj.constructor.name == "Point") { var pt = obj; return this.x == pt.x && this.y == pt.y; } return this == obj; }; Point3.prototype.toString = function() { return new Point3().constructor.name + "[x=" + this.x + ",y=" + this.y + "]"; }; module3.exports = Point3; }), /* 13 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function RectangleD(x5, y6, width3, height2) { this.x = 0; this.y = 0; this.width = 0; this.height = 0; if (x5 != null && y6 != null && width3 != null && height2 != null) { this.x = x5; this.y = y6; this.width = width3; this.height = height2; } } __name(RectangleD, "RectangleD"); RectangleD.prototype.getX = function() { return this.x; }; RectangleD.prototype.setX = function(x5) { this.x = x5; }; RectangleD.prototype.getY = function() { return this.y; }; RectangleD.prototype.setY = function(y6) { this.y = y6; }; RectangleD.prototype.getWidth = function() { return this.width; }; RectangleD.prototype.setWidth = function(width3) { this.width = width3; }; RectangleD.prototype.getHeight = function() { return this.height; }; RectangleD.prototype.setHeight = function(height2) { this.height = height2; }; RectangleD.prototype.getRight = function() { return this.x + this.width; }; RectangleD.prototype.getBottom = function() { return this.y + this.height; }; RectangleD.prototype.intersects = function(a2) { if (this.getRight() < a2.x) { return false; } if (this.getBottom() < a2.y) { return false; } if (a2.getRight() < this.x) { return false; } if (a2.getBottom() < this.y) { return false; } return true; }; RectangleD.prototype.getCenterX = function() { return this.x + this.width / 2; }; RectangleD.prototype.getMinX = function() { return this.getX(); }; RectangleD.prototype.getMaxX = function() { return this.getX() + this.width; }; RectangleD.prototype.getCenterY = function() { return this.y + this.height / 2; }; RectangleD.prototype.getMinY = function() { return this.getY(); }; RectangleD.prototype.getMaxY = function() { return this.getY() + this.height; }; RectangleD.prototype.getWidthHalf = function() { return this.width / 2; }; RectangleD.prototype.getHeightHalf = function() { return this.height / 2; }; module3.exports = RectangleD; }), /* 14 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var _typeof2 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { return typeof obj; } : function(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; function UniqueIDGeneretor() { } __name(UniqueIDGeneretor, "UniqueIDGeneretor"); UniqueIDGeneretor.lastID = 0; UniqueIDGeneretor.createID = function(obj) { if (UniqueIDGeneretor.isPrimitive(obj)) { return obj; } if (obj.uniqueID != null) { return obj.uniqueID; } obj.uniqueID = UniqueIDGeneretor.getString(); UniqueIDGeneretor.lastID++; return obj.uniqueID; }; UniqueIDGeneretor.getString = function(id30) { if (id30 == null) id30 = UniqueIDGeneretor.lastID; return "Object#" + id30; }; UniqueIDGeneretor.isPrimitive = function(arg) { var type3 = typeof arg === "undefined" ? "undefined" : _typeof2(arg); return arg == null || type3 != "object" && type3 != "function"; }; module3.exports = UniqueIDGeneretor; }), /* 15 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function _toConsumableArray2(arr) { if (Array.isArray(arr)) { for (var i2 = 0, arr2 = Array(arr.length); i2 < arr.length; i2++) { arr2[i2] = arr[i2]; } return arr2; } else { return Array.from(arr); } } __name(_toConsumableArray2, "_toConsumableArray"); var LayoutConstants = __webpack_require__(0); var LGraphManager = __webpack_require__(6); var LNode = __webpack_require__(3); var LEdge = __webpack_require__(1); var LGraph = __webpack_require__(5); var PointD = __webpack_require__(4); var Transform2 = __webpack_require__(17); var Emitter4 = __webpack_require__(27); function Layout2(isRemoteUse) { Emitter4.call(this); this.layoutQuality = LayoutConstants.QUALITY; this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; this.incremental = LayoutConstants.DEFAULT_INCREMENTAL; this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT; this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT; this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD; this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES; this.edgeToDummyNodes = /* @__PURE__ */ new Map(); this.graphManager = new LGraphManager(this); this.isLayoutFinished = false; this.isSubLayout = false; this.isRemoteUse = false; if (isRemoteUse != null) { this.isRemoteUse = isRemoteUse; } } __name(Layout2, "Layout"); Layout2.RANDOM_SEED = 1; Layout2.prototype = Object.create(Emitter4.prototype); Layout2.prototype.getGraphManager = function() { return this.graphManager; }; Layout2.prototype.getAllNodes = function() { return this.graphManager.getAllNodes(); }; Layout2.prototype.getAllEdges = function() { return this.graphManager.getAllEdges(); }; Layout2.prototype.getAllNodesToApplyGravitation = function() { return this.graphManager.getAllNodesToApplyGravitation(); }; Layout2.prototype.newGraphManager = function() { var gm = new LGraphManager(this); this.graphManager = gm; return gm; }; Layout2.prototype.newGraph = function(vGraph) { return new LGraph(null, this.graphManager, vGraph); }; Layout2.prototype.newNode = function(vNode) { return new LNode(this.graphManager, vNode); }; Layout2.prototype.newEdge = function(vEdge) { return new LEdge(null, null, vEdge); }; Layout2.prototype.checkLayoutSuccess = function() { return this.graphManager.getRoot() == null || this.graphManager.getRoot().getNodes().length == 0 || this.graphManager.includesInvalidEdge(); }; Layout2.prototype.runLayout = function() { this.isLayoutFinished = false; if (this.tilingPreLayout) { this.tilingPreLayout(); } this.initParameters(); var isLayoutSuccessfull; if (this.checkLayoutSuccess()) { isLayoutSuccessfull = false; } else { isLayoutSuccessfull = this.layout(); } if (LayoutConstants.ANIMATE === "during") { return false; } if (isLayoutSuccessfull) { if (!this.isSubLayout) { this.doPostLayout(); } } if (this.tilingPostLayout) { this.tilingPostLayout(); } this.isLayoutFinished = true; return isLayoutSuccessfull; }; Layout2.prototype.doPostLayout = function() { if (!this.incremental) { this.transform(); } this.update(); }; Layout2.prototype.update2 = function() { if (this.createBendsAsNeeded) { this.createBendpointsFromDummyNodes(); this.graphManager.resetAllEdges(); } if (!this.isRemoteUse) { var edge; var allEdges = this.graphManager.getAllEdges(); for (var i2 = 0; i2 < allEdges.length; i2++) { edge = allEdges[i2]; } var node2; var nodes5 = this.graphManager.getRoot().getNodes(); for (var i2 = 0; i2 < nodes5.length; i2++) { node2 = nodes5[i2]; } this.update(this.graphManager.getRoot()); } }; Layout2.prototype.update = function(obj) { if (obj == null) { this.update2(); } else if (obj instanceof LNode) { var node2 = obj; if (node2.getChild() != null) { var nodes5 = node2.getChild().getNodes(); for (var i2 = 0; i2 < nodes5.length; i2++) { update(nodes5[i2]); } } if (node2.vGraphObject != null) { var vNode = node2.vGraphObject; vNode.update(node2); } } else if (obj instanceof LEdge) { var edge = obj; if (edge.vGraphObject != null) { var vEdge = edge.vGraphObject; vEdge.update(edge); } } else if (obj instanceof LGraph) { var graph = obj; if (graph.vGraphObject != null) { var vGraph = graph.vGraphObject; vGraph.update(graph); } } }; Layout2.prototype.initParameters = function() { if (!this.isSubLayout) { this.layoutQuality = LayoutConstants.QUALITY; this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT; this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD; this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT; this.incremental = LayoutConstants.DEFAULT_INCREMENTAL; this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES; } if (this.animationDuringLayout) { this.animationOnLayout = false; } }; Layout2.prototype.transform = function(newLeftTop) { if (newLeftTop == void 0) { this.transform(new PointD(0, 0)); } else { var trans = new Transform2(); var leftTop = this.graphManager.getRoot().updateLeftTop(); if (leftTop != null) { trans.setWorldOrgX(newLeftTop.x); trans.setWorldOrgY(newLeftTop.y); trans.setDeviceOrgX(leftTop.x); trans.setDeviceOrgY(leftTop.y); var nodes5 = this.getAllNodes(); var node2; for (var i2 = 0; i2 < nodes5.length; i2++) { node2 = nodes5[i2]; node2.transform(trans); } } } }; Layout2.prototype.positionNodesRandomly = function(graph) { if (graph == void 0) { this.positionNodesRandomly(this.getGraphManager().getRoot()); this.getGraphManager().getRoot().updateBounds(true); } else { var lNode; var childGraph; var nodes5 = graph.getNodes(); for (var i2 = 0; i2 < nodes5.length; i2++) { lNode = nodes5[i2]; childGraph = lNode.getChild(); if (childGraph == null) { lNode.scatter(); } else if (childGraph.getNodes().length == 0) { lNode.scatter(); } else { this.positionNodesRandomly(childGraph); lNode.updateBounds(); } } } }; Layout2.prototype.getFlatForest = function() { var flatForest = []; var isForest = true; var allNodes = this.graphManager.getRoot().getNodes(); var isFlat = true; for (var i2 = 0; i2 < allNodes.length; i2++) { if (allNodes[i2].getChild() != null) { isFlat = false; } } if (!isFlat) { return flatForest; } var visited = /* @__PURE__ */ new Set(); var toBeVisited = []; var parents3 = /* @__PURE__ */ new Map(); var unProcessedNodes = []; unProcessedNodes = unProcessedNodes.concat(allNodes); while (unProcessedNodes.length > 0 && isForest) { toBeVisited.push(unProcessedNodes[0]); while (toBeVisited.length > 0 && isForest) { var currentNode = toBeVisited[0]; toBeVisited.splice(0, 1); visited.add(currentNode); var neighborEdges = currentNode.getEdges(); for (var i2 = 0; i2 < neighborEdges.length; i2++) { var currentNeighbor = neighborEdges[i2].getOtherEnd(currentNode); if (parents3.get(currentNode) != currentNeighbor) { if (!visited.has(currentNeighbor)) { toBeVisited.push(currentNeighbor); parents3.set(currentNeighbor, currentNode); } else { isForest = false; break; } } } } if (!isForest) { flatForest = []; } else { var temp = [].concat(_toConsumableArray2(visited)); flatForest.push(temp); for (var i2 = 0; i2 < temp.length; i2++) { var value2 = temp[i2]; var index = unProcessedNodes.indexOf(value2); if (index > -1) { unProcessedNodes.splice(index, 1); } } visited = /* @__PURE__ */ new Set(); parents3 = /* @__PURE__ */ new Map(); } } return flatForest; }; Layout2.prototype.createDummyNodesForBendpoints = function(edge) { var dummyNodes = []; var prev2 = edge.source; var graph = this.graphManager.calcLowestCommonAncestor(edge.source, edge.target); for (var i2 = 0; i2 < edge.bendpoints.length; i2++) { var dummyNode = this.newNode(null); dummyNode.setRect(new Point(0, 0), new Dimension(1, 1)); graph.add(dummyNode); var dummyEdge = this.newEdge(null); this.graphManager.add(dummyEdge, prev2, dummyNode); dummyNodes.add(dummyNode); prev2 = dummyNode; } var dummyEdge = this.newEdge(null); this.graphManager.add(dummyEdge, prev2, edge.target); this.edgeToDummyNodes.set(edge, dummyNodes); if (edge.isInterGraph()) { this.graphManager.remove(edge); } else { graph.remove(edge); } return dummyNodes; }; Layout2.prototype.createBendpointsFromDummyNodes = function() { var edges3 = []; edges3 = edges3.concat(this.graphManager.getAllEdges()); edges3 = [].concat(_toConsumableArray2(this.edgeToDummyNodes.keys())).concat(edges3); for (var k2 = 0; k2 < edges3.length; k2++) { var lEdge = edges3[k2]; if (lEdge.bendpoints.length > 0) { var path4 = this.edgeToDummyNodes.get(lEdge); for (var i2 = 0; i2 < path4.length; i2++) { var dummyNode = path4[i2]; var p3 = new PointD(dummyNode.getCenterX(), dummyNode.getCenterY()); var ebp = lEdge.bendpoints.get(i2); ebp.x = p3.x; ebp.y = p3.y; dummyNode.getOwner().remove(dummyNode); } this.graphManager.add(lEdge, lEdge.source, lEdge.target); } } }; Layout2.transform = function(sliderValue, defaultValue, minDiv, maxMul) { if (minDiv != void 0 && maxMul != void 0) { var value2 = defaultValue; if (sliderValue <= 50) { var minValue = defaultValue / minDiv; value2 -= (defaultValue - minValue) / 50 * (50 - sliderValue); } else { var maxValue = defaultValue * maxMul; value2 += (maxValue - defaultValue) / 50 * (sliderValue - 50); } return value2; } else { var a2, b3; if (sliderValue <= 50) { a2 = 9 * defaultValue / 500; b3 = defaultValue / 10; } else { a2 = 9 * defaultValue / 50; b3 = -8 * defaultValue; } return a2 * sliderValue + b3; } }; Layout2.findCenterOfTree = function(nodes5) { var list = []; list = list.concat(nodes5); var removedNodes = []; var remainingDegrees = /* @__PURE__ */ new Map(); var foundCenter = false; var centerNode = null; if (list.length == 1 || list.length == 2) { foundCenter = true; centerNode = list[0]; } for (var i2 = 0; i2 < list.length; i2++) { var node2 = list[i2]; var degree = node2.getNeighborsList().size; remainingDegrees.set(node2, node2.getNeighborsList().size); if (degree == 1) { removedNodes.push(node2); } } var tempList = []; tempList = tempList.concat(removedNodes); while (!foundCenter) { var tempList2 = []; tempList2 = tempList2.concat(tempList); tempList = []; for (var i2 = 0; i2 < list.length; i2++) { var node2 = list[i2]; var index = list.indexOf(node2); if (index >= 0) { list.splice(index, 1); } var neighbours = node2.getNeighborsList(); neighbours.forEach(function(neighbour) { if (removedNodes.indexOf(neighbour) < 0) { var otherDegree = remainingDegrees.get(neighbour); var newDegree = otherDegree - 1; if (newDegree == 1) { tempList.push(neighbour); } remainingDegrees.set(neighbour, newDegree); } }); } removedNodes = removedNodes.concat(tempList); if (list.length == 1 || list.length == 2) { foundCenter = true; centerNode = list[0]; } } return centerNode; }; Layout2.prototype.setGraphManager = function(gm) { this.graphManager = gm; }; module3.exports = Layout2; }), /* 16 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function RandomSeed() { } __name(RandomSeed, "RandomSeed"); RandomSeed.seed = 1; RandomSeed.x = 0; RandomSeed.nextDouble = function() { RandomSeed.x = Math.sin(RandomSeed.seed++) * 1e4; return RandomSeed.x - Math.floor(RandomSeed.x); }; module3.exports = RandomSeed; }), /* 17 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var PointD = __webpack_require__(4); function Transform2(x5, y6) { this.lworldOrgX = 0; this.lworldOrgY = 0; this.ldeviceOrgX = 0; this.ldeviceOrgY = 0; this.lworldExtX = 1; this.lworldExtY = 1; this.ldeviceExtX = 1; this.ldeviceExtY = 1; } __name(Transform2, "Transform"); Transform2.prototype.getWorldOrgX = function() { return this.lworldOrgX; }; Transform2.prototype.setWorldOrgX = function(wox) { this.lworldOrgX = wox; }; Transform2.prototype.getWorldOrgY = function() { return this.lworldOrgY; }; Transform2.prototype.setWorldOrgY = function(woy) { this.lworldOrgY = woy; }; Transform2.prototype.getWorldExtX = function() { return this.lworldExtX; }; Transform2.prototype.setWorldExtX = function(wex) { this.lworldExtX = wex; }; Transform2.prototype.getWorldExtY = function() { return this.lworldExtY; }; Transform2.prototype.setWorldExtY = function(wey) { this.lworldExtY = wey; }; Transform2.prototype.getDeviceOrgX = function() { return this.ldeviceOrgX; }; Transform2.prototype.setDeviceOrgX = function(dox) { this.ldeviceOrgX = dox; }; Transform2.prototype.getDeviceOrgY = function() { return this.ldeviceOrgY; }; Transform2.prototype.setDeviceOrgY = function(doy) { this.ldeviceOrgY = doy; }; Transform2.prototype.getDeviceExtX = function() { return this.ldeviceExtX; }; Transform2.prototype.setDeviceExtX = function(dex) { this.ldeviceExtX = dex; }; Transform2.prototype.getDeviceExtY = function() { return this.ldeviceExtY; }; Transform2.prototype.setDeviceExtY = function(dey) { this.ldeviceExtY = dey; }; Transform2.prototype.transformX = function(x5) { var xDevice = 0; var worldExtX = this.lworldExtX; if (worldExtX != 0) { xDevice = this.ldeviceOrgX + (x5 - this.lworldOrgX) * this.ldeviceExtX / worldExtX; } return xDevice; }; Transform2.prototype.transformY = function(y6) { var yDevice = 0; var worldExtY = this.lworldExtY; if (worldExtY != 0) { yDevice = this.ldeviceOrgY + (y6 - this.lworldOrgY) * this.ldeviceExtY / worldExtY; } return yDevice; }; Transform2.prototype.inverseTransformX = function(x5) { var xWorld = 0; var deviceExtX = this.ldeviceExtX; if (deviceExtX != 0) { xWorld = this.lworldOrgX + (x5 - this.ldeviceOrgX) * this.lworldExtX / deviceExtX; } return xWorld; }; Transform2.prototype.inverseTransformY = function(y6) { var yWorld = 0; var deviceExtY = this.ldeviceExtY; if (deviceExtY != 0) { yWorld = this.lworldOrgY + (y6 - this.ldeviceOrgY) * this.lworldExtY / deviceExtY; } return yWorld; }; Transform2.prototype.inverseTransformPoint = function(inPoint) { var outPoint = new PointD(this.inverseTransformX(inPoint.x), this.inverseTransformY(inPoint.y)); return outPoint; }; module3.exports = Transform2; }), /* 18 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function _toConsumableArray2(arr) { if (Array.isArray(arr)) { for (var i2 = 0, arr2 = Array(arr.length); i2 < arr.length; i2++) { arr2[i2] = arr[i2]; } return arr2; } else { return Array.from(arr); } } __name(_toConsumableArray2, "_toConsumableArray"); var Layout2 = __webpack_require__(15); var FDLayoutConstants = __webpack_require__(7); var LayoutConstants = __webpack_require__(0); var IGeometry = __webpack_require__(8); var IMath = __webpack_require__(9); function FDLayout() { Layout2.call(this); this.useSmartIdealEdgeLengthCalculation = FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION; this.idealEdgeLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH; this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH; this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH; this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH; this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH; this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR; this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR; this.displacementThresholdPerNode = 3 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100; this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; this.initialCoolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; this.totalDisplacement = 0; this.oldTotalDisplacement = 0; this.maxIterations = FDLayoutConstants.MAX_ITERATIONS; } __name(FDLayout, "FDLayout"); FDLayout.prototype = Object.create(Layout2.prototype); for (var prop in Layout2) { FDLayout[prop] = Layout2[prop]; } FDLayout.prototype.initParameters = function() { Layout2.prototype.initParameters.call(this, arguments); this.totalIterations = 0; this.notAnimatedIterations = 0; this.useFRGridVariant = FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION; this.grid = []; }; FDLayout.prototype.calcIdealEdgeLengths = function() { var edge; var lcaDepth; var source; var target; var sizeOfSourceInLca; var sizeOfTargetInLca; var allEdges = this.getGraphManager().getAllEdges(); for (var i2 = 0; i2 < allEdges.length; i2++) { edge = allEdges[i2]; edge.idealLength = this.idealEdgeLength; if (edge.isInterGraph) { source = edge.getSource(); target = edge.getTarget(); sizeOfSourceInLca = edge.getSourceInLca().getEstimatedSize(); sizeOfTargetInLca = edge.getTargetInLca().getEstimatedSize(); if (this.useSmartIdealEdgeLengthCalculation) { edge.idealLength += sizeOfSourceInLca + sizeOfTargetInLca - 2 * LayoutConstants.SIMPLE_NODE_SIZE; } lcaDepth = edge.getLca().getInclusionTreeDepth(); edge.idealLength += FDLayoutConstants.DEFAULT_EDGE_LENGTH * FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR * (source.getInclusionTreeDepth() + target.getInclusionTreeDepth() - 2 * lcaDepth); } } }; FDLayout.prototype.initSpringEmbedder = function() { var s2 = this.getAllNodes().length; if (this.incremental) { if (s2 > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) { this.coolingFactor = Math.max(this.coolingFactor * FDLayoutConstants.COOLING_ADAPTATION_FACTOR, this.coolingFactor - (s2 - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * this.coolingFactor * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR)); } this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL; } else { if (s2 > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) { this.coolingFactor = Math.max(FDLayoutConstants.COOLING_ADAPTATION_FACTOR, 1 - (s2 - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR)); } else { this.coolingFactor = 1; } this.initialCoolingFactor = this.coolingFactor; this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT; } this.maxIterations = Math.max(this.getAllNodes().length * 5, this.maxIterations); this.totalDisplacementThreshold = this.displacementThresholdPerNode * this.getAllNodes().length; this.repulsionRange = this.calcRepulsionRange(); }; FDLayout.prototype.calcSpringForces = function() { var lEdges = this.getAllEdges(); var edge; for (var i2 = 0; i2 < lEdges.length; i2++) { edge = lEdges[i2]; this.calcSpringForce(edge, edge.idealLength); } }; FDLayout.prototype.calcRepulsionForces = function() { var gridUpdateAllowed = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true; var forceToNodeSurroundingUpdate = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; var i2, j3; var nodeA, nodeB; var lNodes = this.getAllNodes(); var processedNodeSet; if (this.useFRGridVariant) { if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed) { this.updateGrid(); } processedNodeSet = /* @__PURE__ */ new Set(); for (i2 = 0; i2 < lNodes.length; i2++) { nodeA = lNodes[i2]; this.calculateRepulsionForceOfANode(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate); processedNodeSet.add(nodeA); } } else { for (i2 = 0; i2 < lNodes.length; i2++) { nodeA = lNodes[i2]; for (j3 = i2 + 1; j3 < lNodes.length; j3++) { nodeB = lNodes[j3]; if (nodeA.getOwner() != nodeB.getOwner()) { continue; } this.calcRepulsionForce(nodeA, nodeB); } } } }; FDLayout.prototype.calcGravitationalForces = function() { var node2; var lNodes = this.getAllNodesToApplyGravitation(); for (var i2 = 0; i2 < lNodes.length; i2++) { node2 = lNodes[i2]; this.calcGravitationalForce(node2); } }; FDLayout.prototype.moveNodes = function() { var lNodes = this.getAllNodes(); var node2; for (var i2 = 0; i2 < lNodes.length; i2++) { node2 = lNodes[i2]; node2.move(); } }; FDLayout.prototype.calcSpringForce = function(edge, idealLength) { var sourceNode = edge.getSource(); var targetNode = edge.getTarget(); var length2; var springForce; var springForceX; var springForceY; if (this.uniformLeafNodeSizes && sourceNode.getChild() == null && targetNode.getChild() == null) { edge.updateLengthSimple(); } else { edge.updateLength(); if (edge.isOverlapingSourceAndTarget) { return; } } length2 = edge.getLength(); if (length2 == 0) return; springForce = this.springConstant * (length2 - idealLength); springForceX = springForce * (edge.lengthX / length2); springForceY = springForce * (edge.lengthY / length2); sourceNode.springForceX += springForceX; sourceNode.springForceY += springForceY; targetNode.springForceX -= springForceX; targetNode.springForceY -= springForceY; }; FDLayout.prototype.calcRepulsionForce = function(nodeA, nodeB) { var rectA = nodeA.getRect(); var rectB = nodeB.getRect(); var overlapAmount = new Array(2); var clipPoints = new Array(4); var distanceX; var distanceY; var distanceSquared; var distance2; var repulsionForce; var repulsionForceX; var repulsionForceY; if (rectA.intersects(rectB)) { IGeometry.calcSeparationAmount(rectA, rectB, overlapAmount, FDLayoutConstants.DEFAULT_EDGE_LENGTH / 2); repulsionForceX = 2 * overlapAmount[0]; repulsionForceY = 2 * overlapAmount[1]; var childrenConstant = nodeA.noOfChildren * nodeB.noOfChildren / (nodeA.noOfChildren + nodeB.noOfChildren); nodeA.repulsionForceX -= childrenConstant * repulsionForceX; nodeA.repulsionForceY -= childrenConstant * repulsionForceY; nodeB.repulsionForceX += childrenConstant * repulsionForceX; nodeB.repulsionForceY += childrenConstant * repulsionForceY; } else { if (this.uniformLeafNodeSizes && nodeA.getChild() == null && nodeB.getChild() == null) { distanceX = rectB.getCenterX() - rectA.getCenterX(); distanceY = rectB.getCenterY() - rectA.getCenterY(); } else { IGeometry.getIntersection(rectA, rectB, clipPoints); distanceX = clipPoints[2] - clipPoints[0]; distanceY = clipPoints[3] - clipPoints[1]; } if (Math.abs(distanceX) < FDLayoutConstants.MIN_REPULSION_DIST) { distanceX = IMath.sign(distanceX) * FDLayoutConstants.MIN_REPULSION_DIST; } if (Math.abs(distanceY) < FDLayoutConstants.MIN_REPULSION_DIST) { distanceY = IMath.sign(distanceY) * FDLayoutConstants.MIN_REPULSION_DIST; } distanceSquared = distanceX * distanceX + distanceY * distanceY; distance2 = Math.sqrt(distanceSquared); repulsionForce = this.repulsionConstant * nodeA.noOfChildren * nodeB.noOfChildren / distanceSquared; repulsionForceX = repulsionForce * distanceX / distance2; repulsionForceY = repulsionForce * distanceY / distance2; nodeA.repulsionForceX -= repulsionForceX; nodeA.repulsionForceY -= repulsionForceY; nodeB.repulsionForceX += repulsionForceX; nodeB.repulsionForceY += repulsionForceY; } }; FDLayout.prototype.calcGravitationalForce = function(node2) { var ownerGraph; var ownerCenterX; var ownerCenterY; var distanceX; var distanceY; var absDistanceX; var absDistanceY; var estimatedSize; ownerGraph = node2.getOwner(); ownerCenterX = (ownerGraph.getRight() + ownerGraph.getLeft()) / 2; ownerCenterY = (ownerGraph.getTop() + ownerGraph.getBottom()) / 2; distanceX = node2.getCenterX() - ownerCenterX; distanceY = node2.getCenterY() - ownerCenterY; absDistanceX = Math.abs(distanceX) + node2.getWidth() / 2; absDistanceY = Math.abs(distanceY) + node2.getHeight() / 2; if (node2.getOwner() == this.graphManager.getRoot()) { estimatedSize = ownerGraph.getEstimatedSize() * this.gravityRangeFactor; if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) { node2.gravitationForceX = -this.gravityConstant * distanceX; node2.gravitationForceY = -this.gravityConstant * distanceY; } } else { estimatedSize = ownerGraph.getEstimatedSize() * this.compoundGravityRangeFactor; if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) { node2.gravitationForceX = -this.gravityConstant * distanceX * this.compoundGravityConstant; node2.gravitationForceY = -this.gravityConstant * distanceY * this.compoundGravityConstant; } } }; FDLayout.prototype.isConverged = function() { var converged; var oscilating = false; if (this.totalIterations > this.maxIterations / 3) { oscilating = Math.abs(this.totalDisplacement - this.oldTotalDisplacement) < 2; } converged = this.totalDisplacement < this.totalDisplacementThreshold; this.oldTotalDisplacement = this.totalDisplacement; return converged || oscilating; }; FDLayout.prototype.animate = function() { if (this.animationDuringLayout && !this.isSubLayout) { if (this.notAnimatedIterations == this.animationPeriod) { this.update(); this.notAnimatedIterations = 0; } else { this.notAnimatedIterations++; } } }; FDLayout.prototype.calcNoOfChildrenForAllNodes = function() { var node2; var allNodes = this.graphManager.getAllNodes(); for (var i2 = 0; i2 < allNodes.length; i2++) { node2 = allNodes[i2]; node2.noOfChildren = node2.getNoOfChildren(); } }; FDLayout.prototype.calcGrid = function(graph) { var sizeX = 0; var sizeY = 0; sizeX = parseInt(Math.ceil((graph.getRight() - graph.getLeft()) / this.repulsionRange)); sizeY = parseInt(Math.ceil((graph.getBottom() - graph.getTop()) / this.repulsionRange)); var grid = new Array(sizeX); for (var i2 = 0; i2 < sizeX; i2++) { grid[i2] = new Array(sizeY); } for (var i2 = 0; i2 < sizeX; i2++) { for (var j3 = 0; j3 < sizeY; j3++) { grid[i2][j3] = new Array(); } } return grid; }; FDLayout.prototype.addNodeToGrid = function(v3, left3, top2) { var startX2 = 0; var finishX = 0; var startY2 = 0; var finishY = 0; startX2 = parseInt(Math.floor((v3.getRect().x - left3) / this.repulsionRange)); finishX = parseInt(Math.floor((v3.getRect().width + v3.getRect().x - left3) / this.repulsionRange)); startY2 = parseInt(Math.floor((v3.getRect().y - top2) / this.repulsionRange)); finishY = parseInt(Math.floor((v3.getRect().height + v3.getRect().y - top2) / this.repulsionRange)); for (var i2 = startX2; i2 <= finishX; i2++) { for (var j3 = startY2; j3 <= finishY; j3++) { this.grid[i2][j3].push(v3); v3.setGridCoordinates(startX2, finishX, startY2, finishY); } } }; FDLayout.prototype.updateGrid = function() { var i2; var nodeA; var lNodes = this.getAllNodes(); this.grid = this.calcGrid(this.graphManager.getRoot()); for (i2 = 0; i2 < lNodes.length; i2++) { nodeA = lNodes[i2]; this.addNodeToGrid(nodeA, this.graphManager.getRoot().getLeft(), this.graphManager.getRoot().getTop()); } }; FDLayout.prototype.calculateRepulsionForceOfANode = function(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate) { if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed || forceToNodeSurroundingUpdate) { var surrounding = /* @__PURE__ */ new Set(); nodeA.surrounding = new Array(); var nodeB; var grid = this.grid; for (var i2 = nodeA.startX - 1; i2 < nodeA.finishX + 2; i2++) { for (var j3 = nodeA.startY - 1; j3 < nodeA.finishY + 2; j3++) { if (!(i2 < 0 || j3 < 0 || i2 >= grid.length || j3 >= grid[0].length)) { for (var k2 = 0; k2 < grid[i2][j3].length; k2++) { nodeB = grid[i2][j3][k2]; if (nodeA.getOwner() != nodeB.getOwner() || nodeA == nodeB) { continue; } if (!processedNodeSet.has(nodeB) && !surrounding.has(nodeB)) { var distanceX = Math.abs(nodeA.getCenterX() - nodeB.getCenterX()) - (nodeA.getWidth() / 2 + nodeB.getWidth() / 2); var distanceY = Math.abs(nodeA.getCenterY() - nodeB.getCenterY()) - (nodeA.getHeight() / 2 + nodeB.getHeight() / 2); if (distanceX <= this.repulsionRange && distanceY <= this.repulsionRange) { surrounding.add(nodeB); } } } } } } nodeA.surrounding = [].concat(_toConsumableArray2(surrounding)); } for (i2 = 0; i2 < nodeA.surrounding.length; i2++) { this.calcRepulsionForce(nodeA, nodeA.surrounding[i2]); } }; FDLayout.prototype.calcRepulsionRange = function() { return 0; }; module3.exports = FDLayout; }), /* 19 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var LEdge = __webpack_require__(1); var FDLayoutConstants = __webpack_require__(7); function FDLayoutEdge(source, target, vEdge) { LEdge.call(this, source, target, vEdge); this.idealLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH; } __name(FDLayoutEdge, "FDLayoutEdge"); FDLayoutEdge.prototype = Object.create(LEdge.prototype); for (var prop in LEdge) { FDLayoutEdge[prop] = LEdge[prop]; } module3.exports = FDLayoutEdge; }), /* 20 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var LNode = __webpack_require__(3); function FDLayoutNode(gm, loc, size4, vNode) { LNode.call(this, gm, loc, size4, vNode); this.springForceX = 0; this.springForceY = 0; this.repulsionForceX = 0; this.repulsionForceY = 0; this.gravitationForceX = 0; this.gravitationForceY = 0; this.displacementX = 0; this.displacementY = 0; this.startX = 0; this.finishX = 0; this.startY = 0; this.finishY = 0; this.surrounding = []; } __name(FDLayoutNode, "FDLayoutNode"); FDLayoutNode.prototype = Object.create(LNode.prototype); for (var prop in LNode) { FDLayoutNode[prop] = LNode[prop]; } FDLayoutNode.prototype.setGridCoordinates = function(_startX, _finishX, _startY, _finishY) { this.startX = _startX; this.finishX = _finishX; this.startY = _startY; this.finishY = _finishY; }; module3.exports = FDLayoutNode; }), /* 21 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function DimensionD2(width3, height2) { this.width = 0; this.height = 0; if (width3 !== null && height2 !== null) { this.height = height2; this.width = width3; } } __name(DimensionD2, "DimensionD"); DimensionD2.prototype.getWidth = function() { return this.width; }; DimensionD2.prototype.setWidth = function(width3) { this.width = width3; }; DimensionD2.prototype.getHeight = function() { return this.height; }; DimensionD2.prototype.setHeight = function(height2) { this.height = height2; }; module3.exports = DimensionD2; }), /* 22 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var UniqueIDGeneretor = __webpack_require__(14); function HashMap() { this.map = {}; this.keys = []; } __name(HashMap, "HashMap"); HashMap.prototype.put = function(key, value2) { var theId = UniqueIDGeneretor.createID(key); if (!this.contains(theId)) { this.map[theId] = value2; this.keys.push(key); } }; HashMap.prototype.contains = function(key) { var theId = UniqueIDGeneretor.createID(key); return this.map[key] != null; }; HashMap.prototype.get = function(key) { var theId = UniqueIDGeneretor.createID(key); return this.map[theId]; }; HashMap.prototype.keySet = function() { return this.keys; }; module3.exports = HashMap; }), /* 23 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var UniqueIDGeneretor = __webpack_require__(14); function HashSet() { this.set = {}; } __name(HashSet, "HashSet"); ; HashSet.prototype.add = function(obj) { var theId = UniqueIDGeneretor.createID(obj); if (!this.contains(theId)) this.set[theId] = obj; }; HashSet.prototype.remove = function(obj) { delete this.set[UniqueIDGeneretor.createID(obj)]; }; HashSet.prototype.clear = function() { this.set = {}; }; HashSet.prototype.contains = function(obj) { return this.set[UniqueIDGeneretor.createID(obj)] == obj; }; HashSet.prototype.isEmpty = function() { return this.size() === 0; }; HashSet.prototype.size = function() { return Object.keys(this.set).length; }; HashSet.prototype.addAllTo = function(list) { var keys2 = Object.keys(this.set); var length2 = keys2.length; for (var i2 = 0; i2 < length2; i2++) { list.push(this.set[keys2[i2]]); } }; HashSet.prototype.size = function() { return Object.keys(this.set).length; }; HashSet.prototype.addAll = function(list) { var s2 = list.length; for (var i2 = 0; i2 < s2; i2++) { var v3 = list[i2]; this.add(v3); } }; module3.exports = HashSet; }), /* 24 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var _createClass2 = /* @__PURE__ */ (function() { function defineProperties(target, props) { for (var i2 = 0; i2 < props.length; i2++) { var descriptor = props[i2]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } __name(defineProperties, "defineProperties"); return function(Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); function _classCallCheck2(instance2, Constructor) { if (!(instance2 instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } __name(_classCallCheck2, "_classCallCheck"); var LinkedList = __webpack_require__(11); var Quicksort = (function() { function Quicksort2(A2, compareFunction) { _classCallCheck2(this, Quicksort2); if (compareFunction !== null || compareFunction !== void 0) this.compareFunction = this._defaultCompareFunction; var length2 = void 0; if (A2 instanceof LinkedList) length2 = A2.size(); else length2 = A2.length; this._quicksort(A2, 0, length2 - 1); } __name(Quicksort2, "Quicksort"); _createClass2(Quicksort2, [{ key: "_quicksort", value: /* @__PURE__ */ __name(function _quicksort(A2, p3, r2) { if (p3 < r2) { var q3 = this._partition(A2, p3, r2); this._quicksort(A2, p3, q3); this._quicksort(A2, q3 + 1, r2); } }, "_quicksort") }, { key: "_partition", value: /* @__PURE__ */ __name(function _partition(A2, p3, r2) { var x5 = this._get(A2, p3); var i2 = p3; var j3 = r2; while (true) { while (this.compareFunction(x5, this._get(A2, j3))) { j3--; } while (this.compareFunction(this._get(A2, i2), x5)) { i2++; } if (i2 < j3) { this._swap(A2, i2, j3); i2++; j3--; } else return j3; } }, "_partition") }, { key: "_get", value: /* @__PURE__ */ __name(function _get(object3, index) { if (object3 instanceof LinkedList) return object3.get_object_at(index); else return object3[index]; }, "_get") }, { key: "_set", value: /* @__PURE__ */ __name(function _set(object3, index, value2) { if (object3 instanceof LinkedList) object3.set_object_at(index, value2); else object3[index] = value2; }, "_set") }, { key: "_swap", value: /* @__PURE__ */ __name(function _swap(A2, i2, j3) { var temp = this._get(A2, i2); this._set(A2, i2, this._get(A2, j3)); this._set(A2, j3, temp); }, "_swap") }, { key: "_defaultCompareFunction", value: /* @__PURE__ */ __name(function _defaultCompareFunction(a2, b3) { return b3 > a2; }, "_defaultCompareFunction") }]); return Quicksort2; })(); module3.exports = Quicksort; }), /* 25 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var _createClass2 = /* @__PURE__ */ (function() { function defineProperties(target, props) { for (var i2 = 0; i2 < props.length; i2++) { var descriptor = props[i2]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } __name(defineProperties, "defineProperties"); return function(Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); function _classCallCheck2(instance2, Constructor) { if (!(instance2 instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } __name(_classCallCheck2, "_classCallCheck"); var NeedlemanWunsch = (function() { function NeedlemanWunsch2(sequence1, sequence2) { var match_score = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 1; var mismatch_penalty = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : -1; var gap_penalty = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : -1; _classCallCheck2(this, NeedlemanWunsch2); this.sequence1 = sequence1; this.sequence2 = sequence2; this.match_score = match_score; this.mismatch_penalty = mismatch_penalty; this.gap_penalty = gap_penalty; this.iMax = sequence1.length + 1; this.jMax = sequence2.length + 1; this.grid = new Array(this.iMax); for (var i2 = 0; i2 < this.iMax; i2++) { this.grid[i2] = new Array(this.jMax); for (var j3 = 0; j3 < this.jMax; j3++) { this.grid[i2][j3] = 0; } } this.tracebackGrid = new Array(this.iMax); for (var _i = 0; _i < this.iMax; _i++) { this.tracebackGrid[_i] = new Array(this.jMax); for (var _j = 0; _j < this.jMax; _j++) { this.tracebackGrid[_i][_j] = [null, null, null]; } } this.alignments = []; this.score = -1; this.computeGrids(); } __name(NeedlemanWunsch2, "NeedlemanWunsch"); _createClass2(NeedlemanWunsch2, [{ key: "getScore", value: /* @__PURE__ */ __name(function getScore() { return this.score; }, "getScore") }, { key: "getAlignments", value: /* @__PURE__ */ __name(function getAlignments2() { return this.alignments; }, "getAlignments") // Main dynamic programming procedure }, { key: "computeGrids", value: /* @__PURE__ */ __name(function computeGrids() { for (var j3 = 1; j3 < this.jMax; j3++) { this.grid[0][j3] = this.grid[0][j3 - 1] + this.gap_penalty; this.tracebackGrid[0][j3] = [false, false, true]; } for (var i2 = 1; i2 < this.iMax; i2++) { this.grid[i2][0] = this.grid[i2 - 1][0] + this.gap_penalty; this.tracebackGrid[i2][0] = [false, true, false]; } for (var _i2 = 1; _i2 < this.iMax; _i2++) { for (var _j2 = 1; _j2 < this.jMax; _j2++) { var diag = void 0; if (this.sequence1[_i2 - 1] === this.sequence2[_j2 - 1]) diag = this.grid[_i2 - 1][_j2 - 1] + this.match_score; else diag = this.grid[_i2 - 1][_j2 - 1] + this.mismatch_penalty; var up = this.grid[_i2 - 1][_j2] + this.gap_penalty; var left3 = this.grid[_i2][_j2 - 1] + this.gap_penalty; var maxOf = [diag, up, left3]; var indices = this.arrayAllMaxIndexes(maxOf); this.grid[_i2][_j2] = maxOf[indices[0]]; this.tracebackGrid[_i2][_j2] = [indices.includes(0), indices.includes(1), indices.includes(2)]; } } this.score = this.grid[this.iMax - 1][this.jMax - 1]; }, "computeGrids") // Gets all possible valid sequence combinations }, { key: "alignmentTraceback", value: /* @__PURE__ */ __name(function alignmentTraceback() { var inProcessAlignments = []; inProcessAlignments.push({ pos: [this.sequence1.length, this.sequence2.length], seq1: "", seq2: "" }); while (inProcessAlignments[0]) { var current = inProcessAlignments[0]; var directions = this.tracebackGrid[current.pos[0]][current.pos[1]]; if (directions[0]) { inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1] - 1], seq1: this.sequence1[current.pos[0] - 1] + current.seq1, seq2: this.sequence2[current.pos[1] - 1] + current.seq2 }); } if (directions[1]) { inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1]], seq1: this.sequence1[current.pos[0] - 1] + current.seq1, seq2: "-" + current.seq2 }); } if (directions[2]) { inProcessAlignments.push({ pos: [current.pos[0], current.pos[1] - 1], seq1: "-" + current.seq1, seq2: this.sequence2[current.pos[1] - 1] + current.seq2 }); } if (current.pos[0] === 0 && current.pos[1] === 0) this.alignments.push({ sequence1: current.seq1, sequence2: current.seq2 }); inProcessAlignments.shift(); } return this.alignments; }, "alignmentTraceback") // Helper Functions }, { key: "getAllIndexes", value: /* @__PURE__ */ __name(function getAllIndexes(arr, val) { var indexes = [], i2 = -1; while ((i2 = arr.indexOf(val, i2 + 1)) !== -1) { indexes.push(i2); } return indexes; }, "getAllIndexes") }, { key: "arrayAllMaxIndexes", value: /* @__PURE__ */ __name(function arrayAllMaxIndexes(array4) { return this.getAllIndexes(array4, Math.max.apply(null, array4)); }, "arrayAllMaxIndexes") }]); return NeedlemanWunsch2; })(); module3.exports = NeedlemanWunsch; }), /* 26 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var layoutBase = /* @__PURE__ */ __name(function layoutBase2() { return; }, "layoutBase"); layoutBase.FDLayout = __webpack_require__(18); layoutBase.FDLayoutConstants = __webpack_require__(7); layoutBase.FDLayoutEdge = __webpack_require__(19); layoutBase.FDLayoutNode = __webpack_require__(20); layoutBase.DimensionD = __webpack_require__(21); layoutBase.HashMap = __webpack_require__(22); layoutBase.HashSet = __webpack_require__(23); layoutBase.IGeometry = __webpack_require__(8); layoutBase.IMath = __webpack_require__(9); layoutBase.Integer = __webpack_require__(10); layoutBase.Point = __webpack_require__(12); layoutBase.PointD = __webpack_require__(4); layoutBase.RandomSeed = __webpack_require__(16); layoutBase.RectangleD = __webpack_require__(13); layoutBase.Transform = __webpack_require__(17); layoutBase.UniqueIDGeneretor = __webpack_require__(14); layoutBase.Quicksort = __webpack_require__(24); layoutBase.LinkedList = __webpack_require__(11); layoutBase.LGraphObject = __webpack_require__(2); layoutBase.LGraph = __webpack_require__(5); layoutBase.LEdge = __webpack_require__(1); layoutBase.LGraphManager = __webpack_require__(6); layoutBase.LNode = __webpack_require__(3); layoutBase.Layout = __webpack_require__(15); layoutBase.LayoutConstants = __webpack_require__(0); layoutBase.NeedlemanWunsch = __webpack_require__(25); module3.exports = layoutBase; }), /* 27 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function Emitter4() { this.listeners = []; } __name(Emitter4, "Emitter"); var p3 = Emitter4.prototype; p3.addListener = function(event3, callback) { this.listeners.push({ event: event3, callback }); }; p3.removeListener = function(event3, callback) { for (var i2 = this.listeners.length; i2 >= 0; i2--) { var l4 = this.listeners[i2]; if (l4.event === event3 && l4.callback === callback) { this.listeners.splice(i2, 1); } } }; p3.emit = function(event3, data5) { for (var i2 = 0; i2 < this.listeners.length; i2++) { var l4 = this.listeners[i2]; if (event3 === l4.event) { l4.callback(data5); } } }; module3.exports = Emitter4; }) /******/ ]) ); }); } }); // ../../node_modules/.pnpm/cose-base@1.0.3/node_modules/cose-base/cose-base.js var require_cose_base = __commonJS({ "../../node_modules/.pnpm/cose-base@1.0.3/node_modules/cose-base/cose-base.js"(exports2, module2) { "use strict"; (/* @__PURE__ */ __name((function webpackUniversalModuleDefinition(root3, factory) { if (typeof exports2 === "object" && typeof module2 === "object") module2.exports = factory(require_layout_base()); else if (typeof define === "function" && define.amd) define(["layout-base"], factory); else if (typeof exports2 === "object") exports2["coseBase"] = factory(require_layout_base()); else root3["coseBase"] = factory(root3["layoutBase"]); }), "webpackUniversalModuleDefinition"))(exports2, function(__WEBPACK_EXTERNAL_MODULE_0__) { return ( /******/ (function(modules2) { var installedModules = {}; function __webpack_require__(moduleId) { if (installedModules[moduleId]) { return installedModules[moduleId].exports; } var module3 = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; modules2[moduleId].call(module3.exports, module3, module3.exports, __webpack_require__); module3.l = true; return module3.exports; } __name(__webpack_require__, "__webpack_require__"); __webpack_require__.m = modules2; __webpack_require__.c = installedModules; __webpack_require__.i = function(value2) { return value2; }; __webpack_require__.d = function(exports3, name, getter) { if (!__webpack_require__.o(exports3, name)) { Object.defineProperty(exports3, name, { /******/ configurable: false, /******/ enumerable: true, /******/ get: getter /******/ }); } }; __webpack_require__.n = function(module3) { var getter = module3 && module3.__esModule ? ( /******/ /* @__PURE__ */ __name(function getDefault() { return module3["default"]; }, "getDefault") ) : ( /******/ /* @__PURE__ */ __name(function getModuleExports() { return module3; }, "getModuleExports") ); __webpack_require__.d(getter, "a", getter); return getter; }; __webpack_require__.o = function(object3, property2) { return Object.prototype.hasOwnProperty.call(object3, property2); }; __webpack_require__.p = ""; return __webpack_require__(__webpack_require__.s = 7); })([ /* 0 */ /***/ (function(module3, exports3) { module3.exports = __WEBPACK_EXTERNAL_MODULE_0__; }), /* 1 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var FDLayoutConstants = __webpack_require__(0).FDLayoutConstants; function CoSEConstants() { } __name(CoSEConstants, "CoSEConstants"); for (var prop in FDLayoutConstants) { CoSEConstants[prop] = FDLayoutConstants[prop]; } CoSEConstants.DEFAULT_USE_MULTI_LEVEL_SCALING = false; CoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH; CoSEConstants.DEFAULT_COMPONENT_SEPERATION = 60; CoSEConstants.TILE = true; CoSEConstants.TILING_PADDING_VERTICAL = 10; CoSEConstants.TILING_PADDING_HORIZONTAL = 10; CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = false; module3.exports = CoSEConstants; }), /* 2 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var FDLayoutEdge = __webpack_require__(0).FDLayoutEdge; function CoSEEdge(source, target, vEdge) { FDLayoutEdge.call(this, source, target, vEdge); } __name(CoSEEdge, "CoSEEdge"); CoSEEdge.prototype = Object.create(FDLayoutEdge.prototype); for (var prop in FDLayoutEdge) { CoSEEdge[prop] = FDLayoutEdge[prop]; } module3.exports = CoSEEdge; }), /* 3 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var LGraph = __webpack_require__(0).LGraph; function CoSEGraph(parent4, graphMgr, vGraph) { LGraph.call(this, parent4, graphMgr, vGraph); } __name(CoSEGraph, "CoSEGraph"); CoSEGraph.prototype = Object.create(LGraph.prototype); for (var prop in LGraph) { CoSEGraph[prop] = LGraph[prop]; } module3.exports = CoSEGraph; }), /* 4 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var LGraphManager = __webpack_require__(0).LGraphManager; function CoSEGraphManager(layout6) { LGraphManager.call(this, layout6); } __name(CoSEGraphManager, "CoSEGraphManager"); CoSEGraphManager.prototype = Object.create(LGraphManager.prototype); for (var prop in LGraphManager) { CoSEGraphManager[prop] = LGraphManager[prop]; } module3.exports = CoSEGraphManager; }), /* 5 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var FDLayoutNode = __webpack_require__(0).FDLayoutNode; var IMath = __webpack_require__(0).IMath; function CoSENode(gm, loc, size4, vNode) { FDLayoutNode.call(this, gm, loc, size4, vNode); } __name(CoSENode, "CoSENode"); CoSENode.prototype = Object.create(FDLayoutNode.prototype); for (var prop in FDLayoutNode) { CoSENode[prop] = FDLayoutNode[prop]; } CoSENode.prototype.move = function() { var layout6 = this.graphManager.getLayout(); this.displacementX = layout6.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.noOfChildren; this.displacementY = layout6.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.noOfChildren; if (Math.abs(this.displacementX) > layout6.coolingFactor * layout6.maxNodeDisplacement) { this.displacementX = layout6.coolingFactor * layout6.maxNodeDisplacement * IMath.sign(this.displacementX); } if (Math.abs(this.displacementY) > layout6.coolingFactor * layout6.maxNodeDisplacement) { this.displacementY = layout6.coolingFactor * layout6.maxNodeDisplacement * IMath.sign(this.displacementY); } if (this.child == null) { this.moveBy(this.displacementX, this.displacementY); } else if (this.child.getNodes().length == 0) { this.moveBy(this.displacementX, this.displacementY); } else { this.propogateDisplacementToChildren(this.displacementX, this.displacementY); } layout6.totalDisplacement += Math.abs(this.displacementX) + Math.abs(this.displacementY); this.springForceX = 0; this.springForceY = 0; this.repulsionForceX = 0; this.repulsionForceY = 0; this.gravitationForceX = 0; this.gravitationForceY = 0; this.displacementX = 0; this.displacementY = 0; }; CoSENode.prototype.propogateDisplacementToChildren = function(dX, dY) { var nodes5 = this.getChild().getNodes(); var node2; for (var i2 = 0; i2 < nodes5.length; i2++) { node2 = nodes5[i2]; if (node2.getChild() == null) { node2.moveBy(dX, dY); node2.displacementX += dX; node2.displacementY += dY; } else { node2.propogateDisplacementToChildren(dX, dY); } } }; CoSENode.prototype.setPred1 = function(pred12) { this.pred1 = pred12; }; CoSENode.prototype.getPred1 = function() { return pred1; }; CoSENode.prototype.getPred2 = function() { return pred2; }; CoSENode.prototype.setNext = function(next3) { this.next = next3; }; CoSENode.prototype.getNext = function() { return next; }; CoSENode.prototype.setProcessed = function(processed2) { this.processed = processed2; }; CoSENode.prototype.isProcessed = function() { return processed; }; module3.exports = CoSENode; }), /* 6 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var FDLayout = __webpack_require__(0).FDLayout; var CoSEGraphManager = __webpack_require__(4); var CoSEGraph = __webpack_require__(3); var CoSENode = __webpack_require__(5); var CoSEEdge = __webpack_require__(2); var CoSEConstants = __webpack_require__(1); var FDLayoutConstants = __webpack_require__(0).FDLayoutConstants; var LayoutConstants = __webpack_require__(0).LayoutConstants; var Point3 = __webpack_require__(0).Point; var PointD = __webpack_require__(0).PointD; var Layout2 = __webpack_require__(0).Layout; var Integer = __webpack_require__(0).Integer; var IGeometry = __webpack_require__(0).IGeometry; var LGraph = __webpack_require__(0).LGraph; var Transform2 = __webpack_require__(0).Transform; function CoSELayout() { FDLayout.call(this); this.toBeTiled = {}; } __name(CoSELayout, "CoSELayout"); CoSELayout.prototype = Object.create(FDLayout.prototype); for (var prop in FDLayout) { CoSELayout[prop] = FDLayout[prop]; } CoSELayout.prototype.newGraphManager = function() { var gm = new CoSEGraphManager(this); this.graphManager = gm; return gm; }; CoSELayout.prototype.newGraph = function(vGraph) { return new CoSEGraph(null, this.graphManager, vGraph); }; CoSELayout.prototype.newNode = function(vNode) { return new CoSENode(this.graphManager, vNode); }; CoSELayout.prototype.newEdge = function(vEdge) { return new CoSEEdge(null, null, vEdge); }; CoSELayout.prototype.initParameters = function() { FDLayout.prototype.initParameters.call(this, arguments); if (!this.isSubLayout) { if (CoSEConstants.DEFAULT_EDGE_LENGTH < 10) { this.idealEdgeLength = 10; } else { this.idealEdgeLength = CoSEConstants.DEFAULT_EDGE_LENGTH; } this.useSmartIdealEdgeLengthCalculation = CoSEConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION; this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH; this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH; this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH; this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH; this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR; this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR; this.prunedNodesAll = []; this.growTreeIterations = 0; this.afterGrowthIterations = 0; this.isTreeGrowing = false; this.isGrowthFinished = false; this.coolingCycle = 0; this.maxCoolingCycle = this.maxIterations / FDLayoutConstants.CONVERGENCE_CHECK_PERIOD; this.finalTemperature = FDLayoutConstants.CONVERGENCE_CHECK_PERIOD / this.maxIterations; this.coolingAdjuster = 1; } }; CoSELayout.prototype.layout = function() { var createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; if (createBendsAsNeeded) { this.createBendpoints(); this.graphManager.resetAllEdges(); } this.level = 0; return this.classicLayout(); }; CoSELayout.prototype.classicLayout = function() { this.nodesWithGravity = this.calculateNodesToApplyGravitationTo(); this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity); this.calcNoOfChildrenForAllNodes(); this.graphManager.calcLowestCommonAncestors(); this.graphManager.calcInclusionTreeDepths(); this.graphManager.getRoot().calcEstimatedSize(); this.calcIdealEdgeLengths(); if (!this.incremental) { var forest = this.getFlatForest(); if (forest.length > 0) { this.positionNodesRadially(forest); } else { this.reduceTrees(); this.graphManager.resetAllNodesToApplyGravitation(); var allNodes = new Set(this.getAllNodes()); var intersection4 = this.nodesWithGravity.filter(function(x5) { return allNodes.has(x5); }); this.graphManager.setAllNodesToApplyGravitation(intersection4); this.positionNodesRandomly(); } } else { if (CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL) { this.reduceTrees(); this.graphManager.resetAllNodesToApplyGravitation(); var allNodes = new Set(this.getAllNodes()); var intersection4 = this.nodesWithGravity.filter(function(x5) { return allNodes.has(x5); }); this.graphManager.setAllNodesToApplyGravitation(intersection4); } } this.initSpringEmbedder(); this.runSpringEmbedder(); return true; }; CoSELayout.prototype.tick = function() { this.totalIterations++; if (this.totalIterations === this.maxIterations && !this.isTreeGrowing && !this.isGrowthFinished) { if (this.prunedNodesAll.length > 0) { this.isTreeGrowing = true; } else { return true; } } if (this.totalIterations % FDLayoutConstants.CONVERGENCE_CHECK_PERIOD == 0 && !this.isTreeGrowing && !this.isGrowthFinished) { if (this.isConverged()) { if (this.prunedNodesAll.length > 0) { this.isTreeGrowing = true; } else { return true; } } this.coolingCycle++; if (this.layoutQuality == 0) { this.coolingAdjuster = this.coolingCycle; } else if (this.layoutQuality == 1) { this.coolingAdjuster = this.coolingCycle / 3; } this.coolingFactor = Math.max(this.initialCoolingFactor - Math.pow(this.coolingCycle, Math.log(100 * (this.initialCoolingFactor - this.finalTemperature)) / Math.log(this.maxCoolingCycle)) / 100 * this.coolingAdjuster, this.finalTemperature); this.animationPeriod = Math.ceil(this.initialAnimationPeriod * Math.sqrt(this.coolingFactor)); } if (this.isTreeGrowing) { if (this.growTreeIterations % 10 == 0) { if (this.prunedNodesAll.length > 0) { this.graphManager.updateBounds(); this.updateGrid(); this.growTree(this.prunedNodesAll); this.graphManager.resetAllNodesToApplyGravitation(); var allNodes = new Set(this.getAllNodes()); var intersection4 = this.nodesWithGravity.filter(function(x5) { return allNodes.has(x5); }); this.graphManager.setAllNodesToApplyGravitation(intersection4); this.graphManager.updateBounds(); this.updateGrid(); this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; } else { this.isTreeGrowing = false; this.isGrowthFinished = true; } } this.growTreeIterations++; } if (this.isGrowthFinished) { if (this.isConverged()) { return true; } if (this.afterGrowthIterations % 10 == 0) { this.graphManager.updateBounds(); this.updateGrid(); } this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL * ((100 - this.afterGrowthIterations) / 100); this.afterGrowthIterations++; } var gridUpdateAllowed = !this.isTreeGrowing && !this.isGrowthFinished; var forceToNodeSurroundingUpdate = this.growTreeIterations % 10 == 1 && this.isTreeGrowing || this.afterGrowthIterations % 10 == 1 && this.isGrowthFinished; this.totalDisplacement = 0; this.graphManager.updateBounds(); this.calcSpringForces(); this.calcRepulsionForces(gridUpdateAllowed, forceToNodeSurroundingUpdate); this.calcGravitationalForces(); this.moveNodes(); this.animate(); return false; }; CoSELayout.prototype.getPositionsData = function() { var allNodes = this.graphManager.getAllNodes(); var pData = {}; for (var i2 = 0; i2 < allNodes.length; i2++) { var rect3 = allNodes[i2].rect; var id30 = allNodes[i2].id; pData[id30] = { id: id30, x: rect3.getCenterX(), y: rect3.getCenterY(), w: rect3.width, h: rect3.height }; } return pData; }; CoSELayout.prototype.runSpringEmbedder = function() { this.initialAnimationPeriod = 25; this.animationPeriod = this.initialAnimationPeriod; var layoutEnded = false; if (FDLayoutConstants.ANIMATE === "during") { this.emit("layoutstarted"); } else { while (!layoutEnded) { layoutEnded = this.tick(); } this.graphManager.updateBounds(); } }; CoSELayout.prototype.calculateNodesToApplyGravitationTo = function() { var nodeList = []; var graph; var graphs = this.graphManager.getGraphs(); var size4 = graphs.length; var i2; for (i2 = 0; i2 < size4; i2++) { graph = graphs[i2]; graph.updateConnected(); if (!graph.isConnected) { nodeList = nodeList.concat(graph.getNodes()); } } return nodeList; }; CoSELayout.prototype.createBendpoints = function() { var edges3 = []; edges3 = edges3.concat(this.graphManager.getAllEdges()); var visited = /* @__PURE__ */ new Set(); var i2; for (i2 = 0; i2 < edges3.length; i2++) { var edge = edges3[i2]; if (!visited.has(edge)) { var source = edge.getSource(); var target = edge.getTarget(); if (source == target) { edge.getBendpoints().push(new PointD()); edge.getBendpoints().push(new PointD()); this.createDummyNodesForBendpoints(edge); visited.add(edge); } else { var edgeList2 = []; edgeList2 = edgeList2.concat(source.getEdgeListToNode(target)); edgeList2 = edgeList2.concat(target.getEdgeListToNode(source)); if (!visited.has(edgeList2[0])) { if (edgeList2.length > 1) { var k2; for (k2 = 0; k2 < edgeList2.length; k2++) { var multiEdge = edgeList2[k2]; multiEdge.getBendpoints().push(new PointD()); this.createDummyNodesForBendpoints(multiEdge); } } edgeList2.forEach(function(edge2) { visited.add(edge2); }); } } } if (visited.size == edges3.length) { break; } } }; CoSELayout.prototype.positionNodesRadially = function(forest) { var currentStartingPoint = new Point3(0, 0); var numberOfColumns = Math.ceil(Math.sqrt(forest.length)); var height2 = 0; var currentY = 0; var currentX = 0; var point8 = new PointD(0, 0); for (var i2 = 0; i2 < forest.length; i2++) { if (i2 % numberOfColumns == 0) { currentX = 0; currentY = height2; if (i2 != 0) { currentY += CoSEConstants.DEFAULT_COMPONENT_SEPERATION; } height2 = 0; } var tree = forest[i2]; var centerNode = Layout2.findCenterOfTree(tree); currentStartingPoint.x = currentX; currentStartingPoint.y = currentY; point8 = CoSELayout.radialLayout(tree, centerNode, currentStartingPoint); if (point8.y > height2) { height2 = Math.floor(point8.y); } currentX = Math.floor(point8.x + CoSEConstants.DEFAULT_COMPONENT_SEPERATION); } this.transform(new PointD(LayoutConstants.WORLD_CENTER_X - point8.x / 2, LayoutConstants.WORLD_CENTER_Y - point8.y / 2)); }; CoSELayout.radialLayout = function(tree, centerNode, startingPoint) { var radialSep = Math.max(this.maxDiagonalInTree(tree), CoSEConstants.DEFAULT_RADIAL_SEPARATION); CoSELayout.branchRadialLayout(centerNode, null, 0, 359, 0, radialSep); var bounds4 = LGraph.calculateBounds(tree); var transform8 = new Transform2(); transform8.setDeviceOrgX(bounds4.getMinX()); transform8.setDeviceOrgY(bounds4.getMinY()); transform8.setWorldOrgX(startingPoint.x); transform8.setWorldOrgY(startingPoint.y); for (var i2 = 0; i2 < tree.length; i2++) { var node2 = tree[i2]; node2.transform(transform8); } var bottomRight = new PointD(bounds4.getMaxX(), bounds4.getMaxY()); return transform8.inverseTransformPoint(bottomRight); }; CoSELayout.branchRadialLayout = function(node2, parentOfNode, startAngle, endAngle, distance2, radialSeparation) { var halfInterval = (endAngle - startAngle + 1) / 2; if (halfInterval < 0) { halfInterval += 180; } var nodeAngle = (halfInterval + startAngle) % 360; var teta = nodeAngle * IGeometry.TWO_PI / 360; var cos_teta = Math.cos(teta); var x_ = distance2 * Math.cos(teta); var y_ = distance2 * Math.sin(teta); node2.setCenter(x_, y_); var neighborEdges = []; neighborEdges = neighborEdges.concat(node2.getEdges()); var childCount = neighborEdges.length; if (parentOfNode != null) { childCount--; } var branchCount = 0; var incEdgesCount = neighborEdges.length; var startIndex; var edges3 = node2.getEdgesBetween(parentOfNode); while (edges3.length > 1) { var temp = edges3[0]; edges3.splice(0, 1); var index = neighborEdges.indexOf(temp); if (index >= 0) { neighborEdges.splice(index, 1); } incEdgesCount--; childCount--; } if (parentOfNode != null) { startIndex = (neighborEdges.indexOf(edges3[0]) + 1) % incEdgesCount; } else { startIndex = 0; } var stepAngle = Math.abs(endAngle - startAngle) / childCount; for (var i2 = startIndex; branchCount != childCount; i2 = ++i2 % incEdgesCount) { var currentNeighbor = neighborEdges[i2].getOtherEnd(node2); if (currentNeighbor == parentOfNode) { continue; } var childStartAngle = (startAngle + branchCount * stepAngle) % 360; var childEndAngle = (childStartAngle + stepAngle) % 360; CoSELayout.branchRadialLayout(currentNeighbor, node2, childStartAngle, childEndAngle, distance2 + radialSeparation, radialSeparation); branchCount++; } }; CoSELayout.maxDiagonalInTree = function(tree) { var maxDiagonal = Integer.MIN_VALUE; for (var i2 = 0; i2 < tree.length; i2++) { var node2 = tree[i2]; var diagonal = node2.getDiagonal(); if (diagonal > maxDiagonal) { maxDiagonal = diagonal; } } return maxDiagonal; }; CoSELayout.prototype.calcRepulsionRange = function() { return 2 * (this.level + 1) * this.idealEdgeLength; }; CoSELayout.prototype.groupZeroDegreeMembers = function() { var self2 = this; var tempMemberGroups = {}; this.memberGroups = {}; this.idToDummyNode = {}; var zeroDegree = []; var allNodes = this.graphManager.getAllNodes(); for (var i2 = 0; i2 < allNodes.length; i2++) { var node2 = allNodes[i2]; var parent4 = node2.getParent(); if (this.getNodeDegreeWithChildren(node2) === 0 && (parent4.id == void 0 || !this.getToBeTiled(parent4))) { zeroDegree.push(node2); } } for (var i2 = 0; i2 < zeroDegree.length; i2++) { var node2 = zeroDegree[i2]; var p_id = node2.getParent().id; if (typeof tempMemberGroups[p_id] === "undefined") tempMemberGroups[p_id] = []; tempMemberGroups[p_id] = tempMemberGroups[p_id].concat(node2); } Object.keys(tempMemberGroups).forEach(function(p_id2) { if (tempMemberGroups[p_id2].length > 1) { var dummyCompoundId = "DummyCompound_" + p_id2; self2.memberGroups[dummyCompoundId] = tempMemberGroups[p_id2]; var parent5 = tempMemberGroups[p_id2][0].getParent(); var dummyCompound = new CoSENode(self2.graphManager); dummyCompound.id = dummyCompoundId; dummyCompound.paddingLeft = parent5.paddingLeft || 0; dummyCompound.paddingRight = parent5.paddingRight || 0; dummyCompound.paddingBottom = parent5.paddingBottom || 0; dummyCompound.paddingTop = parent5.paddingTop || 0; self2.idToDummyNode[dummyCompoundId] = dummyCompound; var dummyParentGraph = self2.getGraphManager().add(self2.newGraph(), dummyCompound); var parentGraph = parent5.getChild(); parentGraph.add(dummyCompound); for (var i3 = 0; i3 < tempMemberGroups[p_id2].length; i3++) { var node3 = tempMemberGroups[p_id2][i3]; parentGraph.remove(node3); dummyParentGraph.add(node3); } } }); }; CoSELayout.prototype.clearCompounds = function() { var childGraphMap = {}; var idToNode = {}; this.performDFSOnCompounds(); for (var i2 = 0; i2 < this.compoundOrder.length; i2++) { idToNode[this.compoundOrder[i2].id] = this.compoundOrder[i2]; childGraphMap[this.compoundOrder[i2].id] = [].concat(this.compoundOrder[i2].getChild().getNodes()); this.graphManager.remove(this.compoundOrder[i2].getChild()); this.compoundOrder[i2].child = null; } this.graphManager.resetAllNodes(); this.tileCompoundMembers(childGraphMap, idToNode); }; CoSELayout.prototype.clearZeroDegreeMembers = function() { var self2 = this; var tiledZeroDegreePack = this.tiledZeroDegreePack = []; Object.keys(this.memberGroups).forEach(function(id30) { var compoundNode = self2.idToDummyNode[id30]; tiledZeroDegreePack[id30] = self2.tileNodes(self2.memberGroups[id30], compoundNode.paddingLeft + compoundNode.paddingRight); compoundNode.rect.width = tiledZeroDegreePack[id30].width; compoundNode.rect.height = tiledZeroDegreePack[id30].height; }); }; CoSELayout.prototype.repopulateCompounds = function() { for (var i2 = this.compoundOrder.length - 1; i2 >= 0; i2--) { var lCompoundNode = this.compoundOrder[i2]; var id30 = lCompoundNode.id; var horizontalMargin = lCompoundNode.paddingLeft; var verticalMargin = lCompoundNode.paddingTop; this.adjustLocations(this.tiledMemberPack[id30], lCompoundNode.rect.x, lCompoundNode.rect.y, horizontalMargin, verticalMargin); } }; CoSELayout.prototype.repopulateZeroDegreeMembers = function() { var self2 = this; var tiledPack = this.tiledZeroDegreePack; Object.keys(tiledPack).forEach(function(id30) { var compoundNode = self2.idToDummyNode[id30]; var horizontalMargin = compoundNode.paddingLeft; var verticalMargin = compoundNode.paddingTop; self2.adjustLocations(tiledPack[id30], compoundNode.rect.x, compoundNode.rect.y, horizontalMargin, verticalMargin); }); }; CoSELayout.prototype.getToBeTiled = function(node2) { var id30 = node2.id; if (this.toBeTiled[id30] != null) { return this.toBeTiled[id30]; } var childGraph = node2.getChild(); if (childGraph == null) { this.toBeTiled[id30] = false; return false; } var children2 = childGraph.getNodes(); for (var i2 = 0; i2 < children2.length; i2++) { var theChild = children2[i2]; if (this.getNodeDegree(theChild) > 0) { this.toBeTiled[id30] = false; return false; } if (theChild.getChild() == null) { this.toBeTiled[theChild.id] = false; continue; } if (!this.getToBeTiled(theChild)) { this.toBeTiled[id30] = false; return false; } } this.toBeTiled[id30] = true; return true; }; CoSELayout.prototype.getNodeDegree = function(node2) { var id30 = node2.id; var edges3 = node2.getEdges(); var degree = 0; for (var i2 = 0; i2 < edges3.length; i2++) { var edge = edges3[i2]; if (edge.getSource().id !== edge.getTarget().id) { degree = degree + 1; } } return degree; }; CoSELayout.prototype.getNodeDegreeWithChildren = function(node2) { var degree = this.getNodeDegree(node2); if (node2.getChild() == null) { return degree; } var children2 = node2.getChild().getNodes(); for (var i2 = 0; i2 < children2.length; i2++) { var child = children2[i2]; degree += this.getNodeDegreeWithChildren(child); } return degree; }; CoSELayout.prototype.performDFSOnCompounds = function() { this.compoundOrder = []; this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes()); }; CoSELayout.prototype.fillCompexOrderByDFS = function(children2) { for (var i2 = 0; i2 < children2.length; i2++) { var child = children2[i2]; if (child.getChild() != null) { this.fillCompexOrderByDFS(child.getChild().getNodes()); } if (this.getToBeTiled(child)) { this.compoundOrder.push(child); } } }; CoSELayout.prototype.adjustLocations = function(organization, x5, y6, compoundHorizontalMargin, compoundVerticalMargin) { x5 += compoundHorizontalMargin; y6 += compoundVerticalMargin; var left3 = x5; for (var i2 = 0; i2 < organization.rows.length; i2++) { var row = organization.rows[i2]; x5 = left3; var maxHeight = 0; for (var j3 = 0; j3 < row.length; j3++) { var lnode = row[j3]; lnode.rect.x = x5; lnode.rect.y = y6; x5 += lnode.rect.width + organization.horizontalPadding; if (lnode.rect.height > maxHeight) maxHeight = lnode.rect.height; } y6 += maxHeight + organization.verticalPadding; } }; CoSELayout.prototype.tileCompoundMembers = function(childGraphMap, idToNode) { var self2 = this; this.tiledMemberPack = []; Object.keys(childGraphMap).forEach(function(id30) { var compoundNode = idToNode[id30]; self2.tiledMemberPack[id30] = self2.tileNodes(childGraphMap[id30], compoundNode.paddingLeft + compoundNode.paddingRight); compoundNode.rect.width = self2.tiledMemberPack[id30].width; compoundNode.rect.height = self2.tiledMemberPack[id30].height; }); }; CoSELayout.prototype.tileNodes = function(nodes5, minWidth) { var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL; var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL; var organization = { rows: [], rowWidth: [], rowHeight: [], width: 0, height: minWidth, // assume minHeight equals to minWidth verticalPadding, horizontalPadding }; nodes5.sort(function(n1, n2) { if (n1.rect.width * n1.rect.height > n2.rect.width * n2.rect.height) return -1; if (n1.rect.width * n1.rect.height < n2.rect.width * n2.rect.height) return 1; return 0; }); for (var i2 = 0; i2 < nodes5.length; i2++) { var lNode = nodes5[i2]; if (organization.rows.length == 0) { this.insertNodeToRow(organization, lNode, 0, minWidth); } else if (this.canAddHorizontal(organization, lNode.rect.width, lNode.rect.height)) { this.insertNodeToRow(organization, lNode, this.getShortestRowIndex(organization), minWidth); } else { this.insertNodeToRow(organization, lNode, organization.rows.length, minWidth); } this.shiftToLastRow(organization); } return organization; }; CoSELayout.prototype.insertNodeToRow = function(organization, node2, rowIndex, minWidth) { var minCompoundSize = minWidth; if (rowIndex == organization.rows.length) { var secondDimension = []; organization.rows.push(secondDimension); organization.rowWidth.push(minCompoundSize); organization.rowHeight.push(0); } var w4 = organization.rowWidth[rowIndex] + node2.rect.width; if (organization.rows[rowIndex].length > 0) { w4 += organization.horizontalPadding; } organization.rowWidth[rowIndex] = w4; if (organization.width < w4) { organization.width = w4; } var h3 = node2.rect.height; if (rowIndex > 0) h3 += organization.verticalPadding; var extraHeight = 0; if (h3 > organization.rowHeight[rowIndex]) { extraHeight = organization.rowHeight[rowIndex]; organization.rowHeight[rowIndex] = h3; extraHeight = organization.rowHeight[rowIndex] - extraHeight; } organization.height += extraHeight; organization.rows[rowIndex].push(node2); }; CoSELayout.prototype.getShortestRowIndex = function(organization) { var r2 = -1; var min9 = Number.MAX_VALUE; for (var i2 = 0; i2 < organization.rows.length; i2++) { if (organization.rowWidth[i2] < min9) { r2 = i2; min9 = organization.rowWidth[i2]; } } return r2; }; CoSELayout.prototype.getLongestRowIndex = function(organization) { var r2 = -1; var max10 = Number.MIN_VALUE; for (var i2 = 0; i2 < organization.rows.length; i2++) { if (organization.rowWidth[i2] > max10) { r2 = i2; max10 = organization.rowWidth[i2]; } } return r2; }; CoSELayout.prototype.canAddHorizontal = function(organization, extraWidth, extraHeight) { var sri = this.getShortestRowIndex(organization); if (sri < 0) { return true; } var min9 = organization.rowWidth[sri]; if (min9 + organization.horizontalPadding + extraWidth <= organization.width) return true; var hDiff = 0; if (organization.rowHeight[sri] < extraHeight) { if (sri > 0) hDiff = extraHeight + organization.verticalPadding - organization.rowHeight[sri]; } var add_to_row_ratio; if (organization.width - min9 >= extraWidth + organization.horizontalPadding) { add_to_row_ratio = (organization.height + hDiff) / (min9 + extraWidth + organization.horizontalPadding); } else { add_to_row_ratio = (organization.height + hDiff) / organization.width; } hDiff = extraHeight + organization.verticalPadding; var add_new_row_ratio; if (organization.width < extraWidth) { add_new_row_ratio = (organization.height + hDiff) / extraWidth; } else { add_new_row_ratio = (organization.height + hDiff) / organization.width; } if (add_new_row_ratio < 1) add_new_row_ratio = 1 / add_new_row_ratio; if (add_to_row_ratio < 1) add_to_row_ratio = 1 / add_to_row_ratio; return add_to_row_ratio < add_new_row_ratio; }; CoSELayout.prototype.shiftToLastRow = function(organization) { var longest = this.getLongestRowIndex(organization); var last3 = organization.rowWidth.length - 1; var row = organization.rows[longest]; var node2 = row[row.length - 1]; var diff2 = node2.width + organization.horizontalPadding; if (organization.width - organization.rowWidth[last3] > diff2 && longest != last3) { row.splice(-1, 1); organization.rows[last3].push(node2); organization.rowWidth[longest] = organization.rowWidth[longest] - diff2; organization.rowWidth[last3] = organization.rowWidth[last3] + diff2; organization.width = organization.rowWidth[instance.getLongestRowIndex(organization)]; var maxHeight = Number.MIN_VALUE; for (var i2 = 0; i2 < row.length; i2++) { if (row[i2].height > maxHeight) maxHeight = row[i2].height; } if (longest > 0) maxHeight += organization.verticalPadding; var prevTotal = organization.rowHeight[longest] + organization.rowHeight[last3]; organization.rowHeight[longest] = maxHeight; if (organization.rowHeight[last3] < node2.height + organization.verticalPadding) organization.rowHeight[last3] = node2.height + organization.verticalPadding; var finalTotal = organization.rowHeight[longest] + organization.rowHeight[last3]; organization.height += finalTotal - prevTotal; this.shiftToLastRow(organization); } }; CoSELayout.prototype.tilingPreLayout = function() { if (CoSEConstants.TILE) { this.groupZeroDegreeMembers(); this.clearCompounds(); this.clearZeroDegreeMembers(); } }; CoSELayout.prototype.tilingPostLayout = function() { if (CoSEConstants.TILE) { this.repopulateZeroDegreeMembers(); this.repopulateCompounds(); } }; CoSELayout.prototype.reduceTrees = function() { var prunedNodesAll = []; var containsLeaf = true; var node2; while (containsLeaf) { var allNodes = this.graphManager.getAllNodes(); var prunedNodesInStepTemp = []; containsLeaf = false; for (var i2 = 0; i2 < allNodes.length; i2++) { node2 = allNodes[i2]; if (node2.getEdges().length == 1 && !node2.getEdges()[0].isInterGraph && node2.getChild() == null) { prunedNodesInStepTemp.push([node2, node2.getEdges()[0], node2.getOwner()]); containsLeaf = true; } } if (containsLeaf == true) { var prunedNodesInStep = []; for (var j3 = 0; j3 < prunedNodesInStepTemp.length; j3++) { if (prunedNodesInStepTemp[j3][0].getEdges().length == 1) { prunedNodesInStep.push(prunedNodesInStepTemp[j3]); prunedNodesInStepTemp[j3][0].getOwner().remove(prunedNodesInStepTemp[j3][0]); } } prunedNodesAll.push(prunedNodesInStep); this.graphManager.resetAllNodes(); this.graphManager.resetAllEdges(); } } this.prunedNodesAll = prunedNodesAll; }; CoSELayout.prototype.growTree = function(prunedNodesAll) { var lengthOfPrunedNodesInStep = prunedNodesAll.length; var prunedNodesInStep = prunedNodesAll[lengthOfPrunedNodesInStep - 1]; var nodeData2; for (var i2 = 0; i2 < prunedNodesInStep.length; i2++) { nodeData2 = prunedNodesInStep[i2]; this.findPlaceforPrunedNode(nodeData2); nodeData2[2].add(nodeData2[0]); nodeData2[2].add(nodeData2[1], nodeData2[1].source, nodeData2[1].target); } prunedNodesAll.splice(prunedNodesAll.length - 1, 1); this.graphManager.resetAllNodes(); this.graphManager.resetAllEdges(); }; CoSELayout.prototype.findPlaceforPrunedNode = function(nodeData2) { var gridForPrunedNode; var nodeToConnect; var prunedNode = nodeData2[0]; if (prunedNode == nodeData2[1].source) { nodeToConnect = nodeData2[1].target; } else { nodeToConnect = nodeData2[1].source; } var startGridX = nodeToConnect.startX; var finishGridX = nodeToConnect.finishX; var startGridY = nodeToConnect.startY; var finishGridY = nodeToConnect.finishY; var upNodeCount = 0; var downNodeCount = 0; var rightNodeCount = 0; var leftNodeCount = 0; var controlRegions = [upNodeCount, rightNodeCount, downNodeCount, leftNodeCount]; if (startGridY > 0) { for (var i2 = startGridX; i2 <= finishGridX; i2++) { controlRegions[0] += this.grid[i2][startGridY - 1].length + this.grid[i2][startGridY].length - 1; } } if (finishGridX < this.grid.length - 1) { for (var i2 = startGridY; i2 <= finishGridY; i2++) { controlRegions[1] += this.grid[finishGridX + 1][i2].length + this.grid[finishGridX][i2].length - 1; } } if (finishGridY < this.grid[0].length - 1) { for (var i2 = startGridX; i2 <= finishGridX; i2++) { controlRegions[2] += this.grid[i2][finishGridY + 1].length + this.grid[i2][finishGridY].length - 1; } } if (startGridX > 0) { for (var i2 = startGridY; i2 <= finishGridY; i2++) { controlRegions[3] += this.grid[startGridX - 1][i2].length + this.grid[startGridX][i2].length - 1; } } var min9 = Integer.MAX_VALUE; var minCount; var minIndex; for (var j3 = 0; j3 < controlRegions.length; j3++) { if (controlRegions[j3] < min9) { min9 = controlRegions[j3]; minCount = 1; minIndex = j3; } else if (controlRegions[j3] == min9) { minCount++; } } if (minCount == 3 && min9 == 0) { if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[2] == 0) { gridForPrunedNode = 1; } else if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[3] == 0) { gridForPrunedNode = 0; } else if (controlRegions[0] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) { gridForPrunedNode = 3; } else if (controlRegions[1] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) { gridForPrunedNode = 2; } } else if (minCount == 2 && min9 == 0) { var random2 = Math.floor(Math.random() * 2); if (controlRegions[0] == 0 && controlRegions[1] == 0) { ; if (random2 == 0) { gridForPrunedNode = 0; } else { gridForPrunedNode = 1; } } else if (controlRegions[0] == 0 && controlRegions[2] == 0) { if (random2 == 0) { gridForPrunedNode = 0; } else { gridForPrunedNode = 2; } } else if (controlRegions[0] == 0 && controlRegions[3] == 0) { if (random2 == 0) { gridForPrunedNode = 0; } else { gridForPrunedNode = 3; } } else if (controlRegions[1] == 0 && controlRegions[2] == 0) { if (random2 == 0) { gridForPrunedNode = 1; } else { gridForPrunedNode = 2; } } else if (controlRegions[1] == 0 && controlRegions[3] == 0) { if (random2 == 0) { gridForPrunedNode = 1; } else { gridForPrunedNode = 3; } } else { if (random2 == 0) { gridForPrunedNode = 2; } else { gridForPrunedNode = 3; } } } else if (minCount == 4 && min9 == 0) { var random2 = Math.floor(Math.random() * 4); gridForPrunedNode = random2; } else { gridForPrunedNode = minIndex; } if (gridForPrunedNode == 0) { prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() - nodeToConnect.getHeight() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getHeight() / 2); } else if (gridForPrunedNode == 1) { prunedNode.setCenter(nodeToConnect.getCenterX() + nodeToConnect.getWidth() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getWidth() / 2, nodeToConnect.getCenterY()); } else if (gridForPrunedNode == 2) { prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() + nodeToConnect.getHeight() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getHeight() / 2); } else { prunedNode.setCenter(nodeToConnect.getCenterX() - nodeToConnect.getWidth() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getWidth() / 2, nodeToConnect.getCenterY()); } }; module3.exports = CoSELayout; }), /* 7 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var coseBase = {}; coseBase.layoutBase = __webpack_require__(0); coseBase.CoSEConstants = __webpack_require__(1); coseBase.CoSEEdge = __webpack_require__(2); coseBase.CoSEGraph = __webpack_require__(3); coseBase.CoSEGraphManager = __webpack_require__(4); coseBase.CoSELayout = __webpack_require__(6); coseBase.CoSENode = __webpack_require__(5); module3.exports = coseBase; }) /******/ ]) ); }); } }); // ../../node_modules/.pnpm/cytoscape-cose-bilkent@4.1.0_cytoscape@3.33.1/node_modules/cytoscape-cose-bilkent/cytoscape-cose-bilkent.js var require_cytoscape_cose_bilkent = __commonJS({ "../../node_modules/.pnpm/cytoscape-cose-bilkent@4.1.0_cytoscape@3.33.1/node_modules/cytoscape-cose-bilkent/cytoscape-cose-bilkent.js"(exports2, module2) { "use strict"; (/* @__PURE__ */ __name((function webpackUniversalModuleDefinition(root3, factory) { if (typeof exports2 === "object" && typeof module2 === "object") module2.exports = factory(require_cose_base()); else if (typeof define === "function" && define.amd) define(["cose-base"], factory); else if (typeof exports2 === "object") exports2["cytoscapeCoseBilkent"] = factory(require_cose_base()); else root3["cytoscapeCoseBilkent"] = factory(root3["coseBase"]); }), "webpackUniversalModuleDefinition"))(exports2, function(__WEBPACK_EXTERNAL_MODULE_0__) { return ( /******/ (function(modules2) { var installedModules = {}; function __webpack_require__(moduleId) { if (installedModules[moduleId]) { return installedModules[moduleId].exports; } var module3 = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; modules2[moduleId].call(module3.exports, module3, module3.exports, __webpack_require__); module3.l = true; return module3.exports; } __name(__webpack_require__, "__webpack_require__"); __webpack_require__.m = modules2; __webpack_require__.c = installedModules; __webpack_require__.i = function(value2) { return value2; }; __webpack_require__.d = function(exports3, name, getter) { if (!__webpack_require__.o(exports3, name)) { Object.defineProperty(exports3, name, { /******/ configurable: false, /******/ enumerable: true, /******/ get: getter /******/ }); } }; __webpack_require__.n = function(module3) { var getter = module3 && module3.__esModule ? ( /******/ /* @__PURE__ */ __name(function getDefault() { return module3["default"]; }, "getDefault") ) : ( /******/ /* @__PURE__ */ __name(function getModuleExports() { return module3; }, "getModuleExports") ); __webpack_require__.d(getter, "a", getter); return getter; }; __webpack_require__.o = function(object3, property2) { return Object.prototype.hasOwnProperty.call(object3, property2); }; __webpack_require__.p = ""; return __webpack_require__(__webpack_require__.s = 1); })([ /* 0 */ /***/ (function(module3, exports3) { module3.exports = __WEBPACK_EXTERNAL_MODULE_0__; }), /* 1 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var LayoutConstants = __webpack_require__(0).layoutBase.LayoutConstants; var FDLayoutConstants = __webpack_require__(0).layoutBase.FDLayoutConstants; var CoSEConstants = __webpack_require__(0).CoSEConstants; var CoSELayout = __webpack_require__(0).CoSELayout; var CoSENode = __webpack_require__(0).CoSENode; var PointD = __webpack_require__(0).layoutBase.PointD; var DimensionD2 = __webpack_require__(0).layoutBase.DimensionD; var defaults4 = { // Called on `layoutready` ready: /* @__PURE__ */ __name(function ready4() { }, "ready"), // Called on `layoutstop` stop: /* @__PURE__ */ __name(function stop5() { }, "stop"), // 'draft', 'default' or 'proof" // - 'draft' fast cooling rate // - 'default' moderate cooling rate // - "proof" slow cooling rate quality: "default", // include labels in node dimensions nodeDimensionsIncludeLabels: false, // number of ticks per frame; higher is faster but more jerky refresh: 30, // Whether to fit the network view after when done fit: true, // Padding on fit padding: 10, // Whether to enable incremental mode randomize: true, // Node repulsion (non overlapping) multiplier nodeRepulsion: 4500, // Ideal edge (non nested) length idealEdgeLength: 50, // Divisor to compute edge forces edgeElasticity: 0.45, // Nesting factor (multiplier) to compute ideal edge length for nested edges nestingFactor: 0.1, // Gravity force (constant) gravity: 0.25, // Maximum number of iterations to perform numIter: 2500, // For enabling tiling tile: true, // Type of layout animation. The option set is {'during', 'end', false} animate: "end", // Duration for animate:end animationDuration: 500, // Represents the amount of the vertical space to put between the zero degree members during the tiling operation(can also be a function) tilingPaddingVertical: 10, // Represents the amount of the horizontal space to put between the zero degree members during the tiling operation(can also be a function) tilingPaddingHorizontal: 10, // Gravity range (constant) for compounds gravityRangeCompound: 1.5, // Gravity force (constant) for compounds gravityCompound: 1, // Gravity range (constant) gravityRange: 3.8, // Initial cooling factor for incremental layout initialEnergyOnIncremental: 0.5 }; function extend5(defaults5, options2) { var obj = {}; for (var i2 in defaults5) { obj[i2] = defaults5[i2]; } for (var i2 in options2) { obj[i2] = options2[i2]; } return obj; } __name(extend5, "extend"); ; function _CoSELayout(_options) { this.options = extend5(defaults4, _options); getUserOptions(this.options); } __name(_CoSELayout, "_CoSELayout"); var getUserOptions = /* @__PURE__ */ __name(function getUserOptions2(options2) { if (options2.nodeRepulsion != null) CoSEConstants.DEFAULT_REPULSION_STRENGTH = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = options2.nodeRepulsion; if (options2.idealEdgeLength != null) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = options2.idealEdgeLength; if (options2.edgeElasticity != null) CoSEConstants.DEFAULT_SPRING_STRENGTH = FDLayoutConstants.DEFAULT_SPRING_STRENGTH = options2.edgeElasticity; if (options2.nestingFactor != null) CoSEConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = options2.nestingFactor; if (options2.gravity != null) CoSEConstants.DEFAULT_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = options2.gravity; if (options2.numIter != null) CoSEConstants.MAX_ITERATIONS = FDLayoutConstants.MAX_ITERATIONS = options2.numIter; if (options2.gravityRange != null) CoSEConstants.DEFAULT_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = options2.gravityRange; if (options2.gravityCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = options2.gravityCompound; if (options2.gravityRangeCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = options2.gravityRangeCompound; if (options2.initialEnergyOnIncremental != null) CoSEConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = options2.initialEnergyOnIncremental; if (options2.quality == "draft") LayoutConstants.QUALITY = 0; else if (options2.quality == "proof") LayoutConstants.QUALITY = 2; else LayoutConstants.QUALITY = 1; CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS = FDLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = options2.nodeDimensionsIncludeLabels; CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = !options2.randomize; CoSEConstants.ANIMATE = FDLayoutConstants.ANIMATE = LayoutConstants.ANIMATE = options2.animate; CoSEConstants.TILE = options2.tile; CoSEConstants.TILING_PADDING_VERTICAL = typeof options2.tilingPaddingVertical === "function" ? options2.tilingPaddingVertical.call() : options2.tilingPaddingVertical; CoSEConstants.TILING_PADDING_HORIZONTAL = typeof options2.tilingPaddingHorizontal === "function" ? options2.tilingPaddingHorizontal.call() : options2.tilingPaddingHorizontal; }, "getUserOptions"); _CoSELayout.prototype.run = function() { var ready4; var frameId; var options2 = this.options; var idToLNode = this.idToLNode = {}; var layout6 = this.layout = new CoSELayout(); var self2 = this; self2.stopped = false; this.cy = this.options.cy; this.cy.trigger({ type: "layoutstart", layout: this }); var gm = layout6.newGraphManager(); this.gm = gm; var nodes5 = this.options.eles.nodes(); var edges3 = this.options.eles.edges(); this.root = gm.addRoot(); this.processChildrenList(this.root, this.getTopMostNodes(nodes5), layout6); for (var i2 = 0; i2 < edges3.length; i2++) { var edge = edges3[i2]; var sourceNode = this.idToLNode[edge.data("source")]; var targetNode = this.idToLNode[edge.data("target")]; if (sourceNode !== targetNode && sourceNode.getEdgesBetween(targetNode).length == 0) { var e1 = gm.add(layout6.newEdge(), sourceNode, targetNode); e1.id = edge.id(); } } var getPositions = /* @__PURE__ */ __name(function getPositions2(ele, i3) { if (typeof ele === "number") { ele = i3; } var theId = ele.data("id"); var lNode = self2.idToLNode[theId]; return { x: lNode.getRect().getCenterX(), y: lNode.getRect().getCenterY() }; }, "getPositions"); var iterateAnimated = /* @__PURE__ */ __name(function iterateAnimated2() { var afterReposition = /* @__PURE__ */ __name(function afterReposition2() { if (options2.fit) { options2.cy.fit(options2.eles, options2.padding); } if (!ready4) { ready4 = true; self2.cy.one("layoutready", options2.ready); self2.cy.trigger({ type: "layoutready", layout: self2 }); } }, "afterReposition"); var ticksPerFrame = self2.options.refresh; var isDone; for (var i3 = 0; i3 < ticksPerFrame && !isDone; i3++) { isDone = self2.stopped || self2.layout.tick(); } if (isDone) { if (layout6.checkLayoutSuccess() && !layout6.isSubLayout) { layout6.doPostLayout(); } if (layout6.tilingPostLayout) { layout6.tilingPostLayout(); } layout6.isLayoutFinished = true; self2.options.eles.nodes().positions(getPositions); afterReposition(); self2.cy.one("layoutstop", self2.options.stop); self2.cy.trigger({ type: "layoutstop", layout: self2 }); if (frameId) { cancelAnimationFrame(frameId); } ready4 = false; return; } var animationData = self2.layout.getPositionsData(); options2.eles.nodes().positions(function(ele, i4) { if (typeof ele === "number") { ele = i4; } if (!ele.isParent()) { var theId = ele.id(); var pNode = animationData[theId]; var temp = ele; while (pNode == null) { pNode = animationData[temp.data("parent")] || animationData["DummyCompound_" + temp.data("parent")]; animationData[theId] = pNode; temp = temp.parent()[0]; if (temp == void 0) { break; } } if (pNode != null) { return { x: pNode.x, y: pNode.y }; } else { return { x: ele.position("x"), y: ele.position("y") }; } } }); afterReposition(); frameId = requestAnimationFrame(iterateAnimated2); }, "iterateAnimated"); layout6.addListener("layoutstarted", function() { if (self2.options.animate === "during") { frameId = requestAnimationFrame(iterateAnimated); } }); layout6.runLayout(); if (this.options.animate !== "during") { self2.options.eles.nodes().not(":parent").layoutPositions(self2, self2.options, getPositions); ready4 = false; } return this; }; _CoSELayout.prototype.getTopMostNodes = function(nodes5) { var nodesMap2 = {}; for (var i2 = 0; i2 < nodes5.length; i2++) { nodesMap2[nodes5[i2].id()] = true; } var roots = nodes5.filter(function(ele, i3) { if (typeof ele === "number") { ele = i3; } var parent4 = ele.parent()[0]; while (parent4 != null) { if (nodesMap2[parent4.id()]) { return false; } parent4 = parent4.parent()[0]; } return true; }); return roots; }; _CoSELayout.prototype.processChildrenList = function(parent4, children2, layout6) { var size4 = children2.length; for (var i2 = 0; i2 < size4; i2++) { var theChild = children2[i2]; var children_of_children = theChild.children(); var theNode; var dimensions2 = theChild.layoutDimensions({ nodeDimensionsIncludeLabels: this.options.nodeDimensionsIncludeLabels }); if (theChild.outerWidth() != null && theChild.outerHeight() != null) { theNode = parent4.add(new CoSENode(layout6.graphManager, new PointD(theChild.position("x") - dimensions2.w / 2, theChild.position("y") - dimensions2.h / 2), new DimensionD2(parseFloat(dimensions2.w), parseFloat(dimensions2.h)))); } else { theNode = parent4.add(new CoSENode(this.graphManager)); } theNode.id = theChild.data("id"); theNode.paddingLeft = parseInt(theChild.css("padding")); theNode.paddingTop = parseInt(theChild.css("padding")); theNode.paddingRight = parseInt(theChild.css("padding")); theNode.paddingBottom = parseInt(theChild.css("padding")); if (this.options.nodeDimensionsIncludeLabels) { if (theChild.isParent()) { var labelWidth = theChild.boundingBox({ includeLabels: true, includeNodes: false }).w; var labelHeight = theChild.boundingBox({ includeLabels: true, includeNodes: false }).h; var labelPos = theChild.css("text-halign"); theNode.labelWidth = labelWidth; theNode.labelHeight = labelHeight; theNode.labelPos = labelPos; } } this.idToLNode[theChild.data("id")] = theNode; if (isNaN(theNode.rect.x)) { theNode.rect.x = 0; } if (isNaN(theNode.rect.y)) { theNode.rect.y = 0; } if (children_of_children != null && children_of_children.length > 0) { var theNewGraph; theNewGraph = layout6.getGraphManager().add(layout6.newGraph(), theNode); this.processChildrenList(theNewGraph, children_of_children, layout6); } } }; _CoSELayout.prototype.stop = function() { this.stopped = true; return this; }; var register = /* @__PURE__ */ __name(function register2(cytoscape4) { cytoscape4("layout", "cose-bilkent", _CoSELayout); }, "register"); if (typeof cytoscape !== "undefined") { register(cytoscape); } module3.exports = register; }) /******/ ]) ); }); } }); // src/rendering-util/layout-algorithms/cose-bilkent/cytoscape-setup.ts function addNodes(nodes5, cy) { nodes5.forEach((node2) => { const nodeData2 = { id: node2.id, labelText: node2.label, height: node2.height, width: node2.width, padding: node2.padding ?? 0 }; Object.keys(node2).forEach((key) => { if (!["id", "label", "height", "width", "padding", "x", "y"].includes(key)) { nodeData2[key] = node2[key]; } }); cy.add({ group: "nodes", data: nodeData2, position: { x: node2.x ?? 0, y: node2.y ?? 0 } }); }); } function addEdges(edges3, cy) { edges3.forEach((edge) => { const edgeData2 = { id: edge.id, source: edge.start, target: edge.end }; Object.keys(edge).forEach((key) => { if (!["id", "start", "end"].includes(key)) { edgeData2[key] = edge[key]; } }); cy.add({ group: "edges", data: edgeData2 }); }); } function createCytoscapeInstance(data5) { return new Promise((resolve2) => { const renderEl = select_default2("body").append("div").attr("id", "cy").attr("style", "display:none"); const cy = cytoscape2({ container: document.getElementById("cy"), // container to render in style: [ { selector: "edge", style: { "curve-style": "bezier" } } ] }); renderEl.remove(); addNodes(data5.nodes, cy); addEdges(data5.edges, cy); cy.nodes().forEach(function(n2) { n2.layoutDimensions = () => { const nodeData2 = n2.data(); return { w: nodeData2.width, h: nodeData2.height }; }; }); const layoutConfig = { name: "cose-bilkent", // @ts-ignore Types for cose-bilkent are not correct? quality: "proof", styleEnabled: false, animate: false }; cy.layout(layoutConfig).run(); cy.ready((e3) => { log.info("Cytoscape ready", e3); resolve2(cy); }); }); } function extractPositionedNodes(cy) { return cy.nodes().map((node2) => { const data5 = node2.data(); const position5 = node2.position(); const positionedNode = { id: data5.id, x: position5.x, y: position5.y }; Object.keys(data5).forEach((key) => { if (key !== "id") { positionedNode[key] = data5[key]; } }); return positionedNode; }); } function extractPositionedEdges(cy) { return cy.edges().map((edge) => { const data5 = edge.data(); const rscratch = edge._private.rscratch; const positionedEdge = { id: data5.id, source: data5.source, target: data5.target, startX: rscratch.startX, startY: rscratch.startY, midX: rscratch.midX, midY: rscratch.midY, endX: rscratch.endX, endY: rscratch.endY }; Object.keys(data5).forEach((key) => { if (!["id", "source", "target"].includes(key)) { positionedEdge[key] = data5[key]; } }); return positionedEdge; }); } var import_cytoscape_cose_bilkent; var init_cytoscape_setup = __esm({ "src/rendering-util/layout-algorithms/cose-bilkent/cytoscape-setup.ts"() { "use strict"; init_cytoscape_esm(); import_cytoscape_cose_bilkent = __toESM(require_cytoscape_cose_bilkent(), 1); init_src32(); init_logger(); cytoscape2.use(import_cytoscape_cose_bilkent.default); __name(addNodes, "addNodes"); __name(addEdges, "addEdges"); __name(createCytoscapeInstance, "createCytoscapeInstance"); __name(extractPositionedNodes, "extractPositionedNodes"); __name(extractPositionedEdges, "extractPositionedEdges"); } }); // src/rendering-util/layout-algorithms/cose-bilkent/layout.ts async function executeCoseBilkentLayout(data5, _config) { log.debug("Starting cose-bilkent layout algorithm"); try { validateLayoutData(data5); const cy = await createCytoscapeInstance(data5); const positionedNodes = extractPositionedNodes(cy); const positionedEdges = extractPositionedEdges(cy); log.debug(`Layout completed: ${positionedNodes.length} nodes, ${positionedEdges.length} edges`); return { nodes: positionedNodes, edges: positionedEdges }; } catch (error3) { log.error("Error in cose-bilkent layout algorithm:", error3); throw error3; } } function validateLayoutData(data5) { if (!data5) { throw new Error("Layout data is required"); } if (!data5.config) { throw new Error("Configuration is required in layout data"); } if (!data5.rootNode) { throw new Error("Root node is required"); } if (!data5.nodes || !Array.isArray(data5.nodes)) { throw new Error("No nodes found in layout data"); } if (!Array.isArray(data5.edges)) { throw new Error("Edges array is required in layout data"); } return true; } var init_layout2 = __esm({ "src/rendering-util/layout-algorithms/cose-bilkent/layout.ts"() { "use strict"; init_logger(); init_cytoscape_setup(); __name(executeCoseBilkentLayout, "executeCoseBilkentLayout"); __name(validateLayoutData, "validateLayoutData"); } }); // src/rendering-util/layout-algorithms/cose-bilkent/render.ts var render4; var init_render = __esm({ "src/rendering-util/layout-algorithms/cose-bilkent/render.ts"() { "use strict"; init_layout2(); render4 = /* @__PURE__ */ __name(async (data4Layout, svg2, { insertCluster: insertCluster2, insertEdge: insertEdge3, insertEdgeLabel: insertEdgeLabel3, insertMarkers: insertMarkers4, insertNode: insertNode3, log: log3, positionEdgeLabel: positionEdgeLabel3 }, { algorithm: _algorithm }) => { const nodeDb2 = {}; const clusterDb2 = {}; const element3 = svg2.select("g"); insertMarkers4(element3, data4Layout.markers, data4Layout.type, data4Layout.diagramId); const subGraphsEl = element3.insert("g").attr("class", "subgraphs"); const edgePaths = element3.insert("g").attr("class", "edgePaths"); const edgeLabels3 = element3.insert("g").attr("class", "edgeLabels"); const nodes5 = element3.insert("g").attr("class", "nodes"); log3.debug("Inserting nodes into DOM for dimension calculation"); await Promise.all( data4Layout.nodes.map(async (node2) => { if (node2.isGroup) { const clusterNode = { ...node2 }; clusterDb2[node2.id] = clusterNode; nodeDb2[node2.id] = clusterNode; await insertCluster2(subGraphsEl, node2); } else { const nodeWithPosition = { ...node2 }; nodeDb2[node2.id] = nodeWithPosition; const nodeEl = await insertNode3(nodes5, node2, { config: data4Layout.config, dir: data4Layout.direction || "TB" }); const boundingBox3 = nodeEl.node().getBBox(); nodeWithPosition.width = boundingBox3.width; nodeWithPosition.height = boundingBox3.height; nodeWithPosition.domId = nodeEl; log3.debug(`Node ${node2.id} dimensions: ${boundingBox3.width}x${boundingBox3.height}`); } }) ); log3.debug("Running cose-bilkent layout algorithm"); const updatedLayoutData = { ...data4Layout, nodes: data4Layout.nodes.map((node2) => { const nodeWithDimensions = nodeDb2[node2.id]; return { ...node2, width: nodeWithDimensions.width, height: nodeWithDimensions.height }; }) }; const layoutResult = await executeCoseBilkentLayout(updatedLayoutData, data4Layout.config); log3.debug("Positioning nodes based on layout results"); layoutResult.nodes.forEach((positionedNode) => { const node2 = nodeDb2[positionedNode.id]; if (node2?.domId) { node2.domId.attr( "transform", `translate(${positionedNode.x}, ${positionedNode.y})` ); node2.x = positionedNode.x; node2.y = positionedNode.y; log3.debug(`Positioned node ${node2.id} at center (${positionedNode.x}, ${positionedNode.y})`); } }); layoutResult.edges.forEach((positionedEdge) => { const edge = data4Layout.edges.find((e3) => e3.id === positionedEdge.id); if (edge) { edge.points = [ { x: positionedEdge.startX, y: positionedEdge.startY }, { x: positionedEdge.midX, y: positionedEdge.midY }, { x: positionedEdge.endX, y: positionedEdge.endY } ]; } }); log3.debug("Inserting and positioning edges"); await Promise.all( data4Layout.edges.map(async (edge) => { const _edgeLabel = await insertEdgeLabel3(edgeLabels3, edge); const startNode = nodeDb2[edge.start ?? ""]; const endNode = nodeDb2[edge.end ?? ""]; if (startNode && endNode) { const positionedEdge = layoutResult.edges.find((e3) => e3.id === edge.id); if (positionedEdge) { log3.debug("APA01 positionedEdge", positionedEdge); const edgeWithPath = { ...edge }; const paths = insertEdge3( edgePaths, edgeWithPath, clusterDb2, data4Layout.type, startNode, endNode, data4Layout.diagramId ); positionEdgeLabel3(edgeWithPath, paths); } else { const edgeWithPath = { ...edge, points: [ { x: startNode.x || 0, y: startNode.y || 0 }, { x: endNode.x || 0, y: endNode.y || 0 } ] }; const paths = insertEdge3( edgePaths, edgeWithPath, clusterDb2, data4Layout.type, startNode, endNode, data4Layout.diagramId ); positionEdgeLabel3(edgeWithPath, paths); } } }) ); log3.debug("Cose-bilkent rendering completed"); }, "render"); } }); // src/rendering-util/layout-algorithms/cose-bilkent/index.ts var cose_bilkent_exports = {}; __export(cose_bilkent_exports, { render: () => render5 }); var render5; var init_cose_bilkent = __esm({ "src/rendering-util/layout-algorithms/cose-bilkent/index.ts"() { "use strict"; init_render(); render5 = render4; } }); // src/rendering-util/render.ts var layoutAlgorithms, registerLayoutLoaders, registerDefaultLayoutLoaders, render6, getRegisteredLayoutAlgorithm; var init_render2 = __esm({ "src/rendering-util/render.ts"() { "use strict"; init_internals(); init_logger(); layoutAlgorithms = {}; registerLayoutLoaders = /* @__PURE__ */ __name((loaders) => { for (const loader29 of loaders) { layoutAlgorithms[loader29.name] = loader29; } }, "registerLayoutLoaders"); registerDefaultLayoutLoaders = /* @__PURE__ */ __name(() => { registerLayoutLoaders([ { name: "dagre", loader: /* @__PURE__ */ __name(async () => await Promise.resolve().then(() => (init_dagre2(), dagre_exports)), "loader") }, ...true ? [ { name: "cose-bilkent", loader: /* @__PURE__ */ __name(async () => await Promise.resolve().then(() => (init_cose_bilkent(), cose_bilkent_exports)), "loader") } ] : [] ]); }, "registerDefaultLayoutLoaders"); registerDefaultLayoutLoaders(); render6 = /* @__PURE__ */ __name(async (data4Layout, svg2) => { if (!(data4Layout.layoutAlgorithm in layoutAlgorithms)) { throw new Error(`Unknown layout algorithm: ${data4Layout.layoutAlgorithm}`); } const layoutDefinition = layoutAlgorithms[data4Layout.layoutAlgorithm]; const layoutRenderer = await layoutDefinition.loader(); return layoutRenderer.render(data4Layout, svg2, internalHelpers, { algorithm: layoutDefinition.algorithm }); }, "render"); getRegisteredLayoutAlgorithm = /* @__PURE__ */ __name((algorithm = "", { fallback = "dagre" } = {}) => { if (algorithm in layoutAlgorithms) { return algorithm; } if (fallback in layoutAlgorithms) { log.warn(`Layout algorithm ${algorithm} is not registered. Using ${fallback} as fallback.`); return fallback; } throw new Error(`Both layout algorithms ${algorithm} and ${fallback} are not registered.`); }, "getRegisteredLayoutAlgorithm"); } }); // src/rendering-util/setupViewPortForSVG.ts var setupViewPortForSVG, calculateDimensionsWithPadding, createViewBox; var init_setupViewPortForSVG = __esm({ "src/rendering-util/setupViewPortForSVG.ts"() { "use strict"; init_setupGraphViewbox(); init_logger(); setupViewPortForSVG = /* @__PURE__ */ __name((svg2, padding2, cssDiagram, useMaxWidth) => { svg2.attr("class", cssDiagram); const { width: width3, height: height2, x: x5, y: y6 } = calculateDimensionsWithPadding(svg2, padding2); configureSvgSize(svg2, height2, width3, useMaxWidth); const viewBox = createViewBox(x5, y6, width3, height2, padding2); svg2.attr("viewBox", viewBox); log.debug(`viewBox configured: ${viewBox} with padding: ${padding2}`); }, "setupViewPortForSVG"); calculateDimensionsWithPadding = /* @__PURE__ */ __name((svg2, padding2) => { const bounds4 = svg2.node()?.getBBox() || { width: 0, height: 0, x: 0, y: 0 }; return { width: bounds4.width + padding2 * 2, height: bounds4.height + padding2 * 2, x: bounds4.x, y: bounds4.y }; }, "calculateDimensionsWithPadding"); createViewBox = /* @__PURE__ */ __name((x5, y6, width3, height2, padding2) => { return `${x5 - padding2} ${y6 - padding2} ${width3} ${height2}`; }, "createViewBox"); } }); // src/diagrams/flowchart/flowRenderer-v3-unified.ts var getClasses, draw2, flowRenderer_v3_unified_default; var init_flowRenderer_v3_unified = __esm({ "src/diagrams/flowchart/flowRenderer-v3-unified.ts"() { "use strict"; init_src32(); init_diagramAPI(); init_logger(); init_insertElementsForSize(); init_render2(); init_setupViewPortForSVG(); init_utils2(); getClasses = /* @__PURE__ */ __name(function(text4, diagramObj) { return diagramObj.db.getClasses(); }, "getClasses"); draw2 = /* @__PURE__ */ __name(async function(text4, id30, _version, diag) { log.info("REF0:"); log.info("Drawing state diagram (v2)", id30); const { securityLevel, flowchart: conf5, layout: layout6 } = getConfig2(); let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = select_default2("#i" + id30); } const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; log.debug("Before getData: "); const data4Layout = diag.db.getData(); log.debug("Data: ", data4Layout); const svg2 = getDiagramElement(id30, securityLevel); const direction = diag.db.getDirection(); data4Layout.type = diag.type; data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout6); if (data4Layout.layoutAlgorithm === "dagre" && layout6 === "elk") { log.warn( "flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback." ); } data4Layout.direction = direction; data4Layout.nodeSpacing = conf5?.nodeSpacing || 50; data4Layout.rankSpacing = conf5?.rankSpacing || 50; data4Layout.markers = ["point", "circle", "cross"]; data4Layout.diagramId = id30; log.debug("REF1:", data4Layout); await render6(data4Layout, svg2); const padding2 = data4Layout.config.flowchart?.diagramPadding ?? 8; utils_default2.insertTitle( svg2, "flowchartTitleText", conf5?.titleTopMargin || 0, diag.db.getDiagramTitle() ); setupViewPortForSVG(svg2, padding2, "flowchart", conf5?.useMaxWidth || false); for (const vertex of data4Layout.nodes) { const node2 = select_default2(`#${id30} [id="${vertex.id}"]`); if (!node2 || !vertex.link) { continue; } const link2 = doc.createElementNS("http://www.w3.org/2000/svg", "a"); link2.setAttributeNS("http://www.w3.org/2000/svg", "class", vertex.cssClasses); link2.setAttributeNS("http://www.w3.org/2000/svg", "rel", "noopener"); if (securityLevel === "sandbox") { link2.setAttributeNS("http://www.w3.org/2000/svg", "target", "_top"); } else if (vertex.linkTarget) { link2.setAttributeNS("http://www.w3.org/2000/svg", "target", vertex.linkTarget); } const linkNode = node2.insert(function() { return link2; }, ":first-child"); const shape = node2.select(".label-container"); if (shape) { linkNode.append(function() { return shape.node(); }); } const label = node2.select(".label"); if (label) { linkNode.append(function() { return label.node(); }); } } }, "draw"); flowRenderer_v3_unified_default = { getClasses, draw: draw2 }; } }); // src/diagrams/flowchart/parser/flow.jison var parser2, flow_default; var init_flow = __esm({ "src/diagrams/flowchart/parser/flow.jison"() { "use strict"; parser2 = (function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) { for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ; return o3; }, "o"), $V0 = [1, 4], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 8, 9, 10, 11, 27, 34, 36, 38, 44, 60, 84, 85, 86, 87, 88, 89, 102, 105, 106, 109, 111, 114, 115, 116, 121, 122, 123, 124], $V4 = [2, 2], $V5 = [1, 13], $V6 = [1, 14], $V7 = [1, 15], $V8 = [1, 16], $V9 = [1, 23], $Va = [1, 25], $Vb = [1, 26], $Vc = [1, 27], $Vd = [1, 49], $Ve = [1, 48], $Vf = [1, 29], $Vg = [1, 30], $Vh = [1, 31], $Vi = [1, 32], $Vj = [1, 33], $Vk = [1, 44], $Vl = [1, 46], $Vm = [1, 42], $Vn = [1, 47], $Vo = [1, 43], $Vp = [1, 50], $Vq = [1, 45], $Vr = [1, 51], $Vs = [1, 52], $Vt = [1, 34], $Vu = [1, 35], $Vv = [1, 36], $Vw = [1, 37], $Vx = [1, 57], $Vy = [1, 8, 9, 10, 11, 27, 32, 34, 36, 38, 44, 60, 84, 85, 86, 87, 88, 89, 102, 105, 106, 109, 111, 114, 115, 116, 121, 122, 123, 124], $Vz = [1, 61], $VA = [1, 60], $VB = [1, 62], $VC = [8, 9, 11, 75, 77, 78], $VD = [1, 78], $VE = [1, 91], $VF = [1, 96], $VG = [1, 95], $VH = [1, 92], $VI = [1, 88], $VJ = [1, 94], $VK = [1, 90], $VL = [1, 97], $VM = [1, 93], $VN = [1, 98], $VO = [1, 89], $VP = [8, 9, 10, 11, 40, 75, 77, 78], $VQ = [8, 9, 10, 11, 40, 46, 75, 77, 78], $VR = [8, 9, 10, 11, 29, 40, 44, 46, 48, 50, 52, 54, 56, 58, 60, 63, 65, 67, 68, 70, 75, 77, 78, 89, 102, 105, 106, 109, 111, 114, 115, 116], $VS = [8, 9, 11, 44, 60, 75, 77, 78, 89, 102, 105, 106, 109, 111, 114, 115, 116], $VT = [44, 60, 89, 102, 105, 106, 109, 111, 114, 115, 116], $VU = [1, 121], $VV = [1, 122], $VW = [1, 124], $VX = [1, 123], $VY = [44, 60, 62, 74, 89, 102, 105, 106, 109, 111, 114, 115, 116], $VZ = [1, 133], $V_ = [1, 147], $V$ = [1, 148], $V01 = [1, 149], $V11 = [1, 150], $V21 = [1, 135], $V31 = [1, 137], $V41 = [1, 141], $V51 = [1, 142], $V61 = [1, 143], $V71 = [1, 144], $V81 = [1, 145], $V91 = [1, 146], $Va1 = [1, 151], $Vb1 = [1, 152], $Vc1 = [1, 131], $Vd1 = [1, 132], $Ve1 = [1, 139], $Vf1 = [1, 134], $Vg1 = [1, 138], $Vh1 = [1, 136], $Vi1 = [8, 9, 10, 11, 27, 32, 34, 36, 38, 44, 60, 84, 85, 86, 87, 88, 89, 102, 105, 106, 109, 111, 114, 115, 116, 121, 122, 123, 124], $Vj1 = [1, 154], $Vk1 = [1, 156], $Vl1 = [8, 9, 11], $Vm1 = [8, 9, 10, 11, 14, 44, 60, 89, 105, 106, 109, 111, 114, 115, 116], $Vn1 = [1, 176], $Vo1 = [1, 172], $Vp1 = [1, 173], $Vq1 = [1, 177], $Vr1 = [1, 174], $Vs1 = [1, 175], $Vt1 = [77, 116, 119], $Vu1 = [8, 9, 10, 11, 12, 14, 27, 29, 32, 44, 60, 75, 84, 85, 86, 87, 88, 89, 90, 105, 109, 111, 114, 115, 116], $Vv1 = [10, 106], $Vw1 = [31, 49, 51, 53, 55, 57, 62, 64, 66, 67, 69, 71, 116, 117, 118], $Vx1 = [1, 247], $Vy1 = [1, 245], $Vz1 = [1, 249], $VA1 = [1, 243], $VB1 = [1, 244], $VC1 = [1, 246], $VD1 = [1, 248], $VE1 = [1, 250], $VF1 = [1, 268], $VG1 = [8, 9, 11, 106], $VH1 = [8, 9, 10, 11, 60, 84, 105, 106, 109, 110, 111, 112]; var parser24 = { trace: /* @__PURE__ */ __name(function trace() { }, "trace"), yy: {}, symbols_: { "error": 2, "start": 3, "graphConfig": 4, "document": 5, "line": 6, "statement": 7, "SEMI": 8, "NEWLINE": 9, "SPACE": 10, "EOF": 11, "GRAPH": 12, "NODIR": 13, "DIR": 14, "FirstStmtSeparator": 15, "ending": 16, "endToken": 17, "spaceList": 18, "spaceListNewline": 19, "vertexStatement": 20, "separator": 21, "styleStatement": 22, "linkStyleStatement": 23, "classDefStatement": 24, "classStatement": 25, "clickStatement": 26, "subgraph": 27, "textNoTags": 28, "SQS": 29, "text": 30, "SQE": 31, "end": 32, "direction": 33, "acc_title": 34, "acc_title_value": 35, "acc_descr": 36, "acc_descr_value": 37, "acc_descr_multiline_value": 38, "shapeData": 39, "SHAPE_DATA": 40, "link": 41, "node": 42, "styledVertex": 43, "AMP": 44, "vertex": 45, "STYLE_SEPARATOR": 46, "idString": 47, "DOUBLECIRCLESTART": 48, "DOUBLECIRCLEEND": 49, "PS": 50, "PE": 51, "(-": 52, "-)": 53, "STADIUMSTART": 54, "STADIUMEND": 55, "SUBROUTINESTART": 56, "SUBROUTINEEND": 57, "VERTEX_WITH_PROPS_START": 58, "NODE_STRING[field]": 59, "COLON": 60, "NODE_STRING[value]": 61, "PIPE": 62, "CYLINDERSTART": 63, "CYLINDEREND": 64, "DIAMOND_START": 65, "DIAMOND_STOP": 66, "TAGEND": 67, "TRAPSTART": 68, "TRAPEND": 69, "INVTRAPSTART": 70, "INVTRAPEND": 71, "linkStatement": 72, "arrowText": 73, "TESTSTR": 74, "START_LINK": 75, "edgeText": 76, "LINK": 77, "LINK_ID": 78, "edgeTextToken": 79, "STR": 80, "MD_STR": 81, "textToken": 82, "keywords": 83, "STYLE": 84, "LINKSTYLE": 85, "CLASSDEF": 86, "CLASS": 87, "CLICK": 88, "DOWN": 89, "UP": 90, "textNoTagsToken": 91, "stylesOpt": 92, "idString[vertex]": 93, "idString[class]": 94, "CALLBACKNAME": 95, "CALLBACKARGS": 96, "HREF": 97, "LINK_TARGET": 98, "STR[link]": 99, "STR[tooltip]": 100, "alphaNum": 101, "DEFAULT": 102, "numList": 103, "INTERPOLATE": 104, "NUM": 105, "COMMA": 106, "style": 107, "styleComponent": 108, "NODE_STRING": 109, "UNIT": 110, "BRKT": 111, "PCT": 112, "idStringToken": 113, "MINUS": 114, "MULT": 115, "UNICODE_TEXT": 116, "TEXT": 117, "TAGSTART": 118, "EDGE_TEXT": 119, "alphaNumToken": 120, "direction_tb": 121, "direction_bt": 122, "direction_rl": 123, "direction_lr": 124, "$accept": 0, "$end": 1 }, terminals_: { 2: "error", 8: "SEMI", 9: "NEWLINE", 10: "SPACE", 11: "EOF", 12: "GRAPH", 13: "NODIR", 14: "DIR", 27: "subgraph", 29: "SQS", 31: "SQE", 32: "end", 34: "acc_title", 35: "acc_title_value", 36: "acc_descr", 37: "acc_descr_value", 38: "acc_descr_multiline_value", 40: "SHAPE_DATA", 44: "AMP", 46: "STYLE_SEPARATOR", 48: "DOUBLECIRCLESTART", 49: "DOUBLECIRCLEEND", 50: "PS", 51: "PE", 52: "(-", 53: "-)", 54: "STADIUMSTART", 55: "STADIUMEND", 56: "SUBROUTINESTART", 57: "SUBROUTINEEND", 58: "VERTEX_WITH_PROPS_START", 59: "NODE_STRING[field]", 60: "COLON", 61: "NODE_STRING[value]", 62: "PIPE", 63: "CYLINDERSTART", 64: "CYLINDEREND", 65: "DIAMOND_START", 66: "DIAMOND_STOP", 67: "TAGEND", 68: "TRAPSTART", 69: "TRAPEND", 70: "INVTRAPSTART", 71: "INVTRAPEND", 74: "TESTSTR", 75: "START_LINK", 77: "LINK", 78: "LINK_ID", 80: "STR", 81: "MD_STR", 84: "STYLE", 85: "LINKSTYLE", 86: "CLASSDEF", 87: "CLASS", 88: "CLICK", 89: "DOWN", 90: "UP", 93: "idString[vertex]", 94: "idString[class]", 95: "CALLBACKNAME", 96: "CALLBACKARGS", 97: "HREF", 98: "LINK_TARGET", 99: "STR[link]", 100: "STR[tooltip]", 102: "DEFAULT", 104: "INTERPOLATE", 105: "NUM", 106: "COMMA", 109: "NODE_STRING", 110: "UNIT", 111: "BRKT", 112: "PCT", 114: "MINUS", 115: "MULT", 116: "UNICODE_TEXT", 117: "TEXT", 118: "TAGSTART", 119: "EDGE_TEXT", 121: "direction_tb", 122: "direction_bt", 123: "direction_rl", 124: "direction_lr" }, productions_: [0, [3, 2], [5, 0], [5, 2], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [4, 2], [4, 2], [4, 2], [4, 3], [16, 2], [16, 1], [17, 1], [17, 1], [17, 1], [15, 1], [15, 1], [15, 2], [19, 2], [19, 2], [19, 1], [19, 1], [18, 2], [18, 1], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 9], [7, 6], [7, 4], [7, 1], [7, 2], [7, 2], [7, 1], [21, 1], [21, 1], [21, 1], [39, 2], [39, 1], [20, 4], [20, 3], [20, 4], [20, 2], [20, 2], [20, 1], [42, 1], [42, 6], [42, 5], [43, 1], [43, 3], [45, 4], [45, 4], [45, 6], [45, 4], [45, 4], [45, 4], [45, 8], [45, 4], [45, 4], [45, 4], [45, 6], [45, 4], [45, 4], [45, 4], [45, 4], [45, 4], [45, 1], [41, 2], [41, 3], [41, 3], [41, 1], [41, 3], [41, 4], [76, 1], [76, 2], [76, 1], [76, 1], [72, 1], [72, 2], [73, 3], [30, 1], [30, 2], [30, 1], [30, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [28, 1], [28, 2], [28, 1], [28, 1], [24, 5], [25, 5], [26, 2], [26, 4], [26, 3], [26, 5], [26, 3], [26, 5], [26, 5], [26, 7], [26, 2], [26, 4], [26, 2], [26, 4], [26, 4], [26, 6], [22, 5], [23, 5], [23, 5], [23, 9], [23, 9], [23, 7], [23, 7], [103, 1], [103, 3], [92, 1], [92, 3], [107, 1], [107, 2], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [82, 1], [82, 1], [82, 1], [82, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [79, 1], [79, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [47, 1], [47, 2], [101, 1], [101, 2], [33, 1], [33, 1], [33, 1], [33, 1]], performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { var $0 = $$.length - 1; switch (yystate) { case 2: this.$ = []; break; case 3: if (!Array.isArray($$[$0]) || $$[$0].length > 0) { $$[$0 - 1].push($$[$0]); } this.$ = $$[$0 - 1]; break; case 4: case 183: this.$ = $$[$0]; break; case 11: yy.setDirection("TB"); this.$ = "TB"; break; case 12: yy.setDirection($$[$0 - 1]); this.$ = $$[$0 - 1]; break; case 27: this.$ = $$[$0 - 1].nodes; break; case 28: case 29: case 30: case 31: case 32: this.$ = []; break; case 33: this.$ = yy.addSubGraph($$[$0 - 6], $$[$0 - 1], $$[$0 - 4]); break; case 34: this.$ = yy.addSubGraph($$[$0 - 3], $$[$0 - 1], $$[$0 - 3]); break; case 35: this.$ = yy.addSubGraph(void 0, $$[$0 - 1], void 0); break; case 37: this.$ = $$[$0].trim(); yy.setAccTitle(this.$); break; case 38: case 39: this.$ = $$[$0].trim(); yy.setAccDescription(this.$); break; case 43: this.$ = $$[$0 - 1] + $$[$0]; break; case 44: this.$ = $$[$0]; break; case 45: yy.addVertex($$[$0 - 1][$$[$0 - 1].length - 1], void 0, void 0, void 0, void 0, void 0, void 0, $$[$0]); yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]); this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) }; break; case 46: yy.addLink($$[$0 - 2].stmt, $$[$0], $$[$0 - 1]); this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0 - 2].nodes) }; break; case 47: yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]); this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) }; break; case 48: this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1] }; break; case 49: yy.addVertex($$[$0 - 1][$$[$0 - 1].length - 1], void 0, void 0, void 0, void 0, void 0, void 0, $$[$0]); this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1], shapeData: $$[$0] }; break; case 50: this.$ = { stmt: $$[$0], nodes: $$[$0] }; break; case 51: this.$ = [$$[$0]]; break; case 52: yy.addVertex($$[$0 - 5][$$[$0 - 5].length - 1], void 0, void 0, void 0, void 0, void 0, void 0, $$[$0 - 4]); this.$ = $$[$0 - 5].concat($$[$0]); break; case 53: this.$ = $$[$0 - 4].concat($$[$0]); break; case 54: this.$ = $$[$0]; break; case 55: this.$ = $$[$0 - 2]; yy.setClass($$[$0 - 2], $$[$0]); break; case 56: this.$ = $$[$0 - 3]; yy.addVertex($$[$0 - 3], $$[$0 - 1], "square"); break; case 57: this.$ = $$[$0 - 3]; yy.addVertex($$[$0 - 3], $$[$0 - 1], "doublecircle"); break; case 58: this.$ = $$[$0 - 5]; yy.addVertex($$[$0 - 5], $$[$0 - 2], "circle"); break; case 59: this.$ = $$[$0 - 3]; yy.addVertex($$[$0 - 3], $$[$0 - 1], "ellipse"); break; case 60: this.$ = $$[$0 - 3]; yy.addVertex($$[$0 - 3], $$[$0 - 1], "stadium"); break; case 61: this.$ = $$[$0 - 3]; yy.addVertex($$[$0 - 3], $$[$0 - 1], "subroutine"); break; case 62: this.$ = $$[$0 - 7]; yy.addVertex($$[$0 - 7], $$[$0 - 1], "rect", void 0, void 0, void 0, Object.fromEntries([[$$[$0 - 5], $$[$0 - 3]]])); break; case 63: this.$ = $$[$0 - 3]; yy.addVertex($$[$0 - 3], $$[$0 - 1], "cylinder"); break; case 64: this.$ = $$[$0 - 3]; yy.addVertex($$[$0 - 3], $$[$0 - 1], "round"); break; case 65: this.$ = $$[$0 - 3]; yy.addVertex($$[$0 - 3], $$[$0 - 1], "diamond"); break; case 66: this.$ = $$[$0 - 5]; yy.addVertex($$[$0 - 5], $$[$0 - 2], "hexagon"); break; case 67: this.$ = $$[$0 - 3]; yy.addVertex($$[$0 - 3], $$[$0 - 1], "odd"); break; case 68: this.$ = $$[$0 - 3]; yy.addVertex($$[$0 - 3], $$[$0 - 1], "trapezoid"); break; case 69: this.$ = $$[$0 - 3]; yy.addVertex($$[$0 - 3], $$[$0 - 1], "inv_trapezoid"); break; case 70: this.$ = $$[$0 - 3]; yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_right"); break; case 71: this.$ = $$[$0 - 3]; yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_left"); break; case 72: this.$ = $$[$0]; yy.addVertex($$[$0]); break; case 73: $$[$0 - 1].text = $$[$0]; this.$ = $$[$0 - 1]; break; case 74: case 75: $$[$0 - 2].text = $$[$0 - 1]; this.$ = $$[$0 - 2]; break; case 76: this.$ = $$[$0]; break; case 77: var inf = yy.destructLink($$[$0], $$[$0 - 2]); this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length, "text": $$[$0 - 1] }; break; case 78: var inf = yy.destructLink($$[$0], $$[$0 - 2]); this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length, "text": $$[$0 - 1], "id": $$[$0 - 3] }; break; case 79: this.$ = { text: $$[$0], type: "text" }; break; case 80: this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; break; case 81: this.$ = { text: $$[$0], type: "string" }; break; case 82: this.$ = { text: $$[$0], type: "markdown" }; break; case 83: var inf = yy.destructLink($$[$0]); this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length }; break; case 84: var inf = yy.destructLink($$[$0]); this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length, "id": $$[$0 - 1] }; break; case 85: this.$ = $$[$0 - 1]; break; case 86: this.$ = { text: $$[$0], type: "text" }; break; case 87: this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; break; case 88: this.$ = { text: $$[$0], type: "string" }; break; case 89: case 104: this.$ = { text: $$[$0], type: "markdown" }; break; case 101: this.$ = { text: $$[$0], type: "text" }; break; case 102: this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; break; case 103: this.$ = { text: $$[$0], type: "text" }; break; case 105: this.$ = $$[$0 - 4]; yy.addClass($$[$0 - 2], $$[$0]); break; case 106: this.$ = $$[$0 - 4]; yy.setClass($$[$0 - 2], $$[$0]); break; case 107: case 115: this.$ = $$[$0 - 1]; yy.setClickEvent($$[$0 - 1], $$[$0]); break; case 108: case 116: this.$ = $$[$0 - 3]; yy.setClickEvent($$[$0 - 3], $$[$0 - 2]); yy.setTooltip($$[$0 - 3], $$[$0]); break; case 109: this.$ = $$[$0 - 2]; yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); break; case 110: this.$ = $$[$0 - 4]; yy.setClickEvent($$[$0 - 4], $$[$0 - 3], $$[$0 - 2]); yy.setTooltip($$[$0 - 4], $$[$0]); break; case 111: this.$ = $$[$0 - 2]; yy.setLink($$[$0 - 2], $$[$0]); break; case 112: this.$ = $$[$0 - 4]; yy.setLink($$[$0 - 4], $$[$0 - 2]); yy.setTooltip($$[$0 - 4], $$[$0]); break; case 113: this.$ = $$[$0 - 4]; yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); break; case 114: this.$ = $$[$0 - 6]; yy.setLink($$[$0 - 6], $$[$0 - 4], $$[$0]); yy.setTooltip($$[$0 - 6], $$[$0 - 2]); break; case 117: this.$ = $$[$0 - 1]; yy.setLink($$[$0 - 1], $$[$0]); break; case 118: this.$ = $$[$0 - 3]; yy.setLink($$[$0 - 3], $$[$0 - 2]); yy.setTooltip($$[$0 - 3], $$[$0]); break; case 119: this.$ = $$[$0 - 3]; yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); break; case 120: this.$ = $$[$0 - 5]; yy.setLink($$[$0 - 5], $$[$0 - 4], $$[$0]); yy.setTooltip($$[$0 - 5], $$[$0 - 2]); break; case 121: this.$ = $$[$0 - 4]; yy.addVertex($$[$0 - 2], void 0, void 0, $$[$0]); break; case 122: this.$ = $$[$0 - 4]; yy.updateLink([$$[$0 - 2]], $$[$0]); break; case 123: this.$ = $$[$0 - 4]; yy.updateLink($$[$0 - 2], $$[$0]); break; case 124: this.$ = $$[$0 - 8]; yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]); yy.updateLink([$$[$0 - 6]], $$[$0]); break; case 125: this.$ = $$[$0 - 8]; yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]); yy.updateLink($$[$0 - 6], $$[$0]); break; case 126: this.$ = $$[$0 - 6]; yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]); break; case 127: this.$ = $$[$0 - 6]; yy.updateLinkInterpolate($$[$0 - 4], $$[$0]); break; case 128: case 130: this.$ = [$$[$0]]; break; case 129: case 131: $$[$0 - 2].push($$[$0]); this.$ = $$[$0 - 2]; break; case 133: this.$ = $$[$0 - 1] + $$[$0]; break; case 181: this.$ = $$[$0]; break; case 182: this.$ = $$[$0 - 1] + "" + $$[$0]; break; case 184: this.$ = $$[$0 - 1] + "" + $$[$0]; break; case 185: this.$ = { stmt: "dir", value: "TB" }; break; case 186: this.$ = { stmt: "dir", value: "BT" }; break; case 187: this.$ = { stmt: "dir", value: "RL" }; break; case 188: this.$ = { stmt: "dir", value: "LR" }; break; } }, "anonymous"), table: [{ 3: 1, 4: 2, 9: $V0, 10: $V1, 12: $V2 }, { 1: [3] }, o2($V3, $V4, { 5: 6 }), { 4: 7, 9: $V0, 10: $V1, 12: $V2 }, { 4: 8, 9: $V0, 10: $V1, 12: $V2 }, { 13: [1, 9], 14: [1, 10] }, { 1: [2, 1], 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 42: 28, 43: 38, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 84: $Vf, 85: $Vg, 86: $Vh, 87: $Vi, 88: $Vj, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs, 121: $Vt, 122: $Vu, 123: $Vv, 124: $Vw }, o2($V3, [2, 9]), o2($V3, [2, 10]), o2($V3, [2, 11]), { 8: [1, 54], 9: [1, 55], 10: $Vx, 15: 53, 18: 56 }, o2($Vy, [2, 3]), o2($Vy, [2, 4]), o2($Vy, [2, 5]), o2($Vy, [2, 6]), o2($Vy, [2, 7]), o2($Vy, [2, 8]), { 8: $Vz, 9: $VA, 11: $VB, 21: 58, 41: 59, 72: 63, 75: [1, 64], 77: [1, 66], 78: [1, 65] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 67 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 68 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 69 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 70 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 71 }, { 8: $Vz, 9: $VA, 10: [1, 72], 11: $VB, 21: 73 }, o2($Vy, [2, 36]), { 35: [1, 74] }, { 37: [1, 75] }, o2($Vy, [2, 39]), o2($VC, [2, 50], { 18: 76, 39: 77, 10: $Vx, 40: $VD }), { 10: [1, 79] }, { 10: [1, 80] }, { 10: [1, 81] }, { 10: [1, 82] }, { 14: $VE, 44: $VF, 60: $VG, 80: [1, 86], 89: $VH, 95: [1, 83], 97: [1, 84], 101: 85, 105: $VI, 106: $VJ, 109: $VK, 111: $VL, 114: $VM, 115: $VN, 116: $VO, 120: 87 }, o2($Vy, [2, 185]), o2($Vy, [2, 186]), o2($Vy, [2, 187]), o2($Vy, [2, 188]), o2($VP, [2, 51]), o2($VP, [2, 54], { 46: [1, 99] }), o2($VQ, [2, 72], { 113: 112, 29: [1, 100], 44: $Vd, 48: [1, 101], 50: [1, 102], 52: [1, 103], 54: [1, 104], 56: [1, 105], 58: [1, 106], 60: $Ve, 63: [1, 107], 65: [1, 108], 67: [1, 109], 68: [1, 110], 70: [1, 111], 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 114: $Vq, 115: $Vr, 116: $Vs }), o2($VR, [2, 181]), o2($VR, [2, 142]), o2($VR, [2, 143]), o2($VR, [2, 144]), o2($VR, [2, 145]), o2($VR, [2, 146]), o2($VR, [2, 147]), o2($VR, [2, 148]), o2($VR, [2, 149]), o2($VR, [2, 150]), o2($VR, [2, 151]), o2($VR, [2, 152]), o2($V3, [2, 12]), o2($V3, [2, 18]), o2($V3, [2, 19]), { 9: [1, 113] }, o2($VS, [2, 26], { 18: 114, 10: $Vx }), o2($Vy, [2, 27]), { 42: 115, 43: 38, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, o2($Vy, [2, 40]), o2($Vy, [2, 41]), o2($Vy, [2, 42]), o2($VT, [2, 76], { 73: 116, 62: [1, 118], 74: [1, 117] }), { 76: 119, 79: 120, 80: $VU, 81: $VV, 116: $VW, 119: $VX }, { 75: [1, 125], 77: [1, 126] }, o2($VY, [2, 83]), o2($Vy, [2, 28]), o2($Vy, [2, 29]), o2($Vy, [2, 30]), o2($Vy, [2, 31]), o2($Vy, [2, 32]), { 10: $VZ, 12: $V_, 14: $V$, 27: $V01, 28: 127, 32: $V11, 44: $V21, 60: $V31, 75: $V41, 80: [1, 129], 81: [1, 130], 83: 140, 84: $V51, 85: $V61, 86: $V71, 87: $V81, 88: $V91, 89: $Va1, 90: $Vb1, 91: 128, 105: $Vc1, 109: $Vd1, 111: $Ve1, 114: $Vf1, 115: $Vg1, 116: $Vh1 }, o2($Vi1, $V4, { 5: 153 }), o2($Vy, [2, 37]), o2($Vy, [2, 38]), o2($VC, [2, 48], { 44: $Vj1 }), o2($VC, [2, 49], { 18: 155, 10: $Vx, 40: $Vk1 }), o2($VP, [2, 44]), { 44: $Vd, 47: 157, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, { 102: [1, 158], 103: 159, 105: [1, 160] }, { 44: $Vd, 47: 161, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, { 44: $Vd, 47: 162, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, o2($Vl1, [2, 107], { 10: [1, 163], 96: [1, 164] }), { 80: [1, 165] }, o2($Vl1, [2, 115], { 120: 167, 10: [1, 166], 14: $VE, 44: $VF, 60: $VG, 89: $VH, 105: $VI, 106: $VJ, 109: $VK, 111: $VL, 114: $VM, 115: $VN, 116: $VO }), o2($Vl1, [2, 117], { 10: [1, 168] }), o2($Vm1, [2, 183]), o2($Vm1, [2, 170]), o2($Vm1, [2, 171]), o2($Vm1, [2, 172]), o2($Vm1, [2, 173]), o2($Vm1, [2, 174]), o2($Vm1, [2, 175]), o2($Vm1, [2, 176]), o2($Vm1, [2, 177]), o2($Vm1, [2, 178]), o2($Vm1, [2, 179]), o2($Vm1, [2, 180]), { 44: $Vd, 47: 169, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, { 30: 170, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 178, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 180, 50: [1, 179], 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 181, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 182, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 183, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 109: [1, 184] }, { 30: 185, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 186, 65: [1, 187], 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 188, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 189, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 190, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o2($VR, [2, 182]), o2($V3, [2, 20]), o2($VS, [2, 25]), o2($VC, [2, 46], { 39: 191, 18: 192, 10: $Vx, 40: $VD }), o2($VT, [2, 73], { 10: [1, 193] }), { 10: [1, 194] }, { 30: 195, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 77: [1, 196], 79: 197, 116: $VW, 119: $VX }, o2($Vt1, [2, 79]), o2($Vt1, [2, 81]), o2($Vt1, [2, 82]), o2($Vt1, [2, 168]), o2($Vt1, [2, 169]), { 76: 198, 79: 120, 80: $VU, 81: $VV, 116: $VW, 119: $VX }, o2($VY, [2, 84]), { 8: $Vz, 9: $VA, 10: $VZ, 11: $VB, 12: $V_, 14: $V$, 21: 200, 27: $V01, 29: [1, 199], 32: $V11, 44: $V21, 60: $V31, 75: $V41, 83: 140, 84: $V51, 85: $V61, 86: $V71, 87: $V81, 88: $V91, 89: $Va1, 90: $Vb1, 91: 201, 105: $Vc1, 109: $Vd1, 111: $Ve1, 114: $Vf1, 115: $Vg1, 116: $Vh1 }, o2($Vu1, [2, 101]), o2($Vu1, [2, 103]), o2($Vu1, [2, 104]), o2($Vu1, [2, 157]), o2($Vu1, [2, 158]), o2($Vu1, [2, 159]), o2($Vu1, [2, 160]), o2($Vu1, [2, 161]), o2($Vu1, [2, 162]), o2($Vu1, [2, 163]), o2($Vu1, [2, 164]), o2($Vu1, [2, 165]), o2($Vu1, [2, 166]), o2($Vu1, [2, 167]), o2($Vu1, [2, 90]), o2($Vu1, [2, 91]), o2($Vu1, [2, 92]), o2($Vu1, [2, 93]), o2($Vu1, [2, 94]), o2($Vu1, [2, 95]), o2($Vu1, [2, 96]), o2($Vu1, [2, 97]), o2($Vu1, [2, 98]), o2($Vu1, [2, 99]), o2($Vu1, [2, 100]), { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 202], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 42: 28, 43: 38, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 84: $Vf, 85: $Vg, 86: $Vh, 87: $Vi, 88: $Vj, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs, 121: $Vt, 122: $Vu, 123: $Vv, 124: $Vw }, { 10: $Vx, 18: 203 }, { 44: [1, 204] }, o2($VP, [2, 43]), { 10: [1, 205], 44: $Vd, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 112, 114: $Vq, 115: $Vr, 116: $Vs }, { 10: [1, 206] }, { 10: [1, 207], 106: [1, 208] }, o2($Vv1, [2, 128]), { 10: [1, 209], 44: $Vd, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 112, 114: $Vq, 115: $Vr, 116: $Vs }, { 10: [1, 210], 44: $Vd, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 112, 114: $Vq, 115: $Vr, 116: $Vs }, { 80: [1, 211] }, o2($Vl1, [2, 109], { 10: [1, 212] }), o2($Vl1, [2, 111], { 10: [1, 213] }), { 80: [1, 214] }, o2($Vm1, [2, 184]), { 80: [1, 215], 98: [1, 216] }, o2($VP, [2, 55], { 113: 112, 44: $Vd, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 114: $Vq, 115: $Vr, 116: $Vs }), { 31: [1, 217], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o2($Vw1, [2, 86]), o2($Vw1, [2, 88]), o2($Vw1, [2, 89]), o2($Vw1, [2, 153]), o2($Vw1, [2, 154]), o2($Vw1, [2, 155]), o2($Vw1, [2, 156]), { 49: [1, 219], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 220, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 51: [1, 221], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 53: [1, 222], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 55: [1, 223], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 57: [1, 224], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 60: [1, 225] }, { 64: [1, 226], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 66: [1, 227], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 30: 228, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 31: [1, 229], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 67: $Vn1, 69: [1, 230], 71: [1, 231], 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 67: $Vn1, 69: [1, 233], 71: [1, 232], 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o2($VC, [2, 45], { 18: 155, 10: $Vx, 40: $Vk1 }), o2($VC, [2, 47], { 44: $Vj1 }), o2($VT, [2, 75]), o2($VT, [2, 74]), { 62: [1, 234], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o2($VT, [2, 77]), o2($Vt1, [2, 80]), { 77: [1, 235], 79: 197, 116: $VW, 119: $VX }, { 30: 236, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o2($Vi1, $V4, { 5: 237 }), o2($Vu1, [2, 102]), o2($Vy, [2, 35]), { 43: 238, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, { 10: $Vx, 18: 239 }, { 10: $Vx1, 60: $Vy1, 84: $Vz1, 92: 240, 105: $VA1, 107: 241, 108: 242, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }, { 10: $Vx1, 60: $Vy1, 84: $Vz1, 92: 251, 104: [1, 252], 105: $VA1, 107: 241, 108: 242, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }, { 10: $Vx1, 60: $Vy1, 84: $Vz1, 92: 253, 104: [1, 254], 105: $VA1, 107: 241, 108: 242, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }, { 105: [1, 255] }, { 10: $Vx1, 60: $Vy1, 84: $Vz1, 92: 256, 105: $VA1, 107: 241, 108: 242, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }, { 44: $Vd, 47: 257, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, o2($Vl1, [2, 108]), { 80: [1, 258] }, { 80: [1, 259], 98: [1, 260] }, o2($Vl1, [2, 116]), o2($Vl1, [2, 118], { 10: [1, 261] }), o2($Vl1, [2, 119]), o2($VQ, [2, 56]), o2($Vw1, [2, 87]), o2($VQ, [2, 57]), { 51: [1, 262], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o2($VQ, [2, 64]), o2($VQ, [2, 59]), o2($VQ, [2, 60]), o2($VQ, [2, 61]), { 109: [1, 263] }, o2($VQ, [2, 63]), o2($VQ, [2, 65]), { 66: [1, 264], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o2($VQ, [2, 67]), o2($VQ, [2, 68]), o2($VQ, [2, 70]), o2($VQ, [2, 69]), o2($VQ, [2, 71]), o2([10, 44, 60, 89, 102, 105, 106, 109, 111, 114, 115, 116], [2, 85]), o2($VT, [2, 78]), { 31: [1, 265], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 266], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 42: 28, 43: 38, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 84: $Vf, 85: $Vg, 86: $Vh, 87: $Vi, 88: $Vj, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs, 121: $Vt, 122: $Vu, 123: $Vv, 124: $Vw }, o2($VP, [2, 53]), { 43: 267, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs }, o2($Vl1, [2, 121], { 106: $VF1 }), o2($VG1, [2, 130], { 108: 269, 10: $Vx1, 60: $Vy1, 84: $Vz1, 105: $VA1, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }), o2($VH1, [2, 132]), o2($VH1, [2, 134]), o2($VH1, [2, 135]), o2($VH1, [2, 136]), o2($VH1, [2, 137]), o2($VH1, [2, 138]), o2($VH1, [2, 139]), o2($VH1, [2, 140]), o2($VH1, [2, 141]), o2($Vl1, [2, 122], { 106: $VF1 }), { 10: [1, 270] }, o2($Vl1, [2, 123], { 106: $VF1 }), { 10: [1, 271] }, o2($Vv1, [2, 129]), o2($Vl1, [2, 105], { 106: $VF1 }), o2($Vl1, [2, 106], { 113: 112, 44: $Vd, 60: $Ve, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 114: $Vq, 115: $Vr, 116: $Vs }), o2($Vl1, [2, 110]), o2($Vl1, [2, 112], { 10: [1, 272] }), o2($Vl1, [2, 113]), { 98: [1, 273] }, { 51: [1, 274] }, { 62: [1, 275] }, { 66: [1, 276] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 277 }, o2($Vy, [2, 34]), o2($VP, [2, 52]), { 10: $Vx1, 60: $Vy1, 84: $Vz1, 105: $VA1, 107: 278, 108: 242, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }, o2($VH1, [2, 133]), { 14: $VE, 44: $VF, 60: $VG, 89: $VH, 101: 279, 105: $VI, 106: $VJ, 109: $VK, 111: $VL, 114: $VM, 115: $VN, 116: $VO, 120: 87 }, { 14: $VE, 44: $VF, 60: $VG, 89: $VH, 101: 280, 105: $VI, 106: $VJ, 109: $VK, 111: $VL, 114: $VM, 115: $VN, 116: $VO, 120: 87 }, { 98: [1, 281] }, o2($Vl1, [2, 120]), o2($VQ, [2, 58]), { 30: 282, 67: $Vn1, 80: $Vo1, 81: $Vp1, 82: 171, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, o2($VQ, [2, 66]), o2($Vi1, $V4, { 5: 283 }), o2($VG1, [2, 131], { 108: 269, 10: $Vx1, 60: $Vy1, 84: $Vz1, 105: $VA1, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }), o2($Vl1, [2, 126], { 120: 167, 10: [1, 284], 14: $VE, 44: $VF, 60: $VG, 89: $VH, 105: $VI, 106: $VJ, 109: $VK, 111: $VL, 114: $VM, 115: $VN, 116: $VO }), o2($Vl1, [2, 127], { 120: 167, 10: [1, 285], 14: $VE, 44: $VF, 60: $VG, 89: $VH, 105: $VI, 106: $VJ, 109: $VK, 111: $VL, 114: $VM, 115: $VN, 116: $VO }), o2($Vl1, [2, 114]), { 31: [1, 286], 67: $Vn1, 82: 218, 116: $Vq1, 117: $Vr1, 118: $Vs1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 287], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 42: 28, 43: 38, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 84: $Vf, 85: $Vg, 86: $Vh, 87: $Vi, 88: $Vj, 89: $Vk, 102: $Vl, 105: $Vm, 106: $Vn, 109: $Vo, 111: $Vp, 113: 41, 114: $Vq, 115: $Vr, 116: $Vs, 121: $Vt, 122: $Vu, 123: $Vv, 124: $Vw }, { 10: $Vx1, 60: $Vy1, 84: $Vz1, 92: 288, 105: $VA1, 107: 241, 108: 242, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }, { 10: $Vx1, 60: $Vy1, 84: $Vz1, 92: 289, 105: $VA1, 107: 241, 108: 242, 109: $VB1, 110: $VC1, 111: $VD1, 112: $VE1 }, o2($VQ, [2, 62]), o2($Vy, [2, 33]), o2($Vl1, [2, 124], { 106: $VF1 }), o2($Vl1, [2, 125], { 106: $VF1 })], defaultActions: {}, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (hash.recoverable) { this.trace(str2); } else { var error3 = new Error(str2); error3.hash = hash; throw error3; } }, "parseError"), parse: /* @__PURE__ */ __name(function parse7(input) { var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1; var args = lstack.slice.call(arguments, 1); var lexer2 = Object.create(this.lexer); var sharedState = { yy: {} }; for (var k2 in this.yy) { if (Object.prototype.hasOwnProperty.call(this.yy, k2)) { sharedState.yy[k2] = this.yy[k2]; } } lexer2.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer2; sharedState.yy.parser = this; if (typeof lexer2.yylloc == "undefined") { lexer2.yylloc = {}; } var yyloc = lexer2.yylloc; lstack.push(yyloc); var ranges = lexer2.options && lexer2.options.ranges; if (typeof sharedState.yy.parseError === "function") { this.parseError = sharedState.yy.parseError; } else { this.parseError = Object.getPrototypeOf(this).parseError; } function popStack(n2) { stack.length = stack.length - 2 * n2; vstack.length = vstack.length - n2; lstack.length = lstack.length - n2; } __name(popStack, "popStack"); function lex() { var token2; token2 = tstack.pop() || lexer2.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex, "lex"); var symbol, preErrorSymbol, state3, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state3 = stack[stack.length - 1]; if (this.defaultActions[state3]) { action = this.defaultActions[state3]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex(); } action = table[state3] && table[state3][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state3]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer2.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; } else { errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); } this.parseError(errStr, { text: lexer2.match, token: this.terminals_[symbol] || symbol, line: lexer2.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state3 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer2.yytext); lstack.push(lexer2.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer2.yyleng; yytext = lexer2.yytext; yylineno = lexer2.yylineno; yyloc = lexer2.yylloc; if (recovering > 0) { recovering--; } } else { symbol = preErrorSymbol; preErrorSymbol = null; } break; case 2: len = this.productions_[action[1]][1]; yyval.$ = vstack[vstack.length - len]; yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; if (ranges) { yyval._$.range = [ lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1] ]; } r2 = this.performAction.apply(yyval, [ yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack ].concat(args)); if (typeof r2 !== "undefined") { return r2; } if (len) { stack = stack.slice(0, -1 * len * 2); vstack = vstack.slice(0, -1 * len); lstack = lstack.slice(0, -1 * len); } stack.push(this.productions_[action[1]][0]); vstack.push(yyval.$); lstack.push(yyval._$); newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]]; stack.push(newState2); break; case 3: return true; } } return true; }, "parse") }; var lexer = /* @__PURE__ */ (function() { var lexer2 = { EOF: 1, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (this.yy.parser) { this.yy.parser.parseError(str2, hash); } else { throw new Error(str2); } }, "parseError"), // resets the lexer, sets new input setInput: /* @__PURE__ */ __name(function(input, yy) { this.yy = yy || this.yy || {}; this._input = input; this._more = this._backtrack = this.done = false; 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 }; if (this.options.ranges) { this.yylloc.range = [0, 0]; } this.offset = 0; return this; }, "setInput"), // consumes and returns one char from the input input: /* @__PURE__ */ __name(function() { var ch = this._input[0]; this.yytext += ch; this.yyleng++; this.offset++; this.match += ch; this.matched += ch; var lines = ch.match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno++; this.yylloc.last_line++; } else { this.yylloc.last_column++; } if (this.options.ranges) { this.yylloc.range[1]++; } this._input = this._input.slice(1); return ch; }, "input"), // unshifts one char (or a string) into the input unput: /* @__PURE__ */ __name(function(ch) { var len = ch.length; var lines = ch.split(/(?:\r\n?|\n)/g); this._input = ch + this._input; this.yytext = this.yytext.substr(0, this.yytext.length - len); this.offset -= len; var oldLines = 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); if (lines.length - 1) { this.yylineno -= lines.length - 1; } var r2 = this.yylloc.range; this.yylloc = { first_line: this.yylloc.first_line, last_line: this.yylineno + 1, first_column: this.yylloc.first_column, last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len }; if (this.options.ranges) { this.yylloc.range = [r2[0], r2[0] + this.yyleng - len]; } this.yyleng = this.yytext.length; return this; }, "unput"), // When called from action, caches matched text and appends it on next action more: /* @__PURE__ */ __name(function() { this._more = true; return this; }, "more"), // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. reject: /* @__PURE__ */ __name(function() { if (this.options.backtrack_lexer) { this._backtrack = true; } 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"), // retain first n characters of the match less: /* @__PURE__ */ __name(function(n2) { this.unput(this.match.slice(n2)); }, "less"), // displays already matched input, i.e. for error messages pastInput: /* @__PURE__ */ __name(function() { var past = this.matched.substr(0, this.matched.length - this.match.length); return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); }, "pastInput"), // displays upcoming input, i.e. for error messages upcomingInput: /* @__PURE__ */ __name(function() { var next3 = this.match; if (next3.length < 20) { next3 += this._input.substr(0, 20 - next3.length); } return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, ""); }, "upcomingInput"), // displays the character position where the lexing error occurred, i.e. for error messages showPosition: /* @__PURE__ */ __name(function() { var pre = this.pastInput(); var c3 = new Array(pre.length + 1).join("-"); return pre + this.upcomingInput() + "\n" + c3 + "^"; }, "showPosition"), // test the lexed token: return FALSE when not a match, otherwise return token test_match: /* @__PURE__ */ __name(function(match2, indexed_rule) { var token2, lines, backup; if (this.options.backtrack_lexer) { backup = { 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 }; if (this.options.ranges) { backup.yylloc.range = this.yylloc.range.slice(0); } } lines = match2[0].match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno += lines.length; } this.yylloc = { first_line: this.yylloc.last_line, last_line: this.yylineno + 1, first_column: this.yylloc.last_column, last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; this.yyleng = this.yytext.length; if (this.options.ranges) { this.yylloc.range = [this.offset, this.offset += this.yyleng]; } this._more = false; this._backtrack = false; this._input = this._input.slice(match2[0].length); this.matched += match2[0]; token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); if (this.done && this._input) { this.done = false; } if (token2) { return token2; } else if (this._backtrack) { for (var k2 in backup) { this[k2] = backup[k2]; } return false; } return false; }, "test_match"), // return next match in input next: /* @__PURE__ */ __name(function() { if (this.done) { return this.EOF; } if (!this._input) { this.done = true; } var token2, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[index]); if (token2 !== false) { return token2; } return false; } if (this._input === "") { return this.EOF; } else { return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { text: "", token: null, line: this.yylineno }); } }, "next"), // return next match that has a token lex: /* @__PURE__ */ __name(function lex() { var r2 = this.next(); if (r2) { return r2; } else { return this.lex(); } }, "lex"), // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) begin: /* @__PURE__ */ __name(function begin(condition) { this.conditionStack.push(condition); }, "begin"), // pop the previously active lexer condition state off the condition stack popState: /* @__PURE__ */ __name(function popState() { var n2 = this.conditionStack.length - 1; if (n2 > 0) { return this.conditionStack.pop(); } else { return this.conditionStack[0]; } }, "popState"), // produce the lexer rule set which is active for the currently active lexer condition state _currentRules: /* @__PURE__ */ __name(function _currentRules() { if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; } else { return this.conditions["INITIAL"].rules; } }, "_currentRules"), // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available topState: /* @__PURE__ */ __name(function topState(n2) { n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0); if (n2 >= 0) { return this.conditionStack[n2]; } else { return "INITIAL"; } }, "topState"), // alias for begin(condition) pushState: /* @__PURE__ */ __name(function pushState(condition) { this.begin(condition); }, "pushState"), // return the number of states currently on the stack stateStackSize: /* @__PURE__ */ __name(function stateStackSize() { return this.conditionStack.length; }, "stateStackSize"), options: {}, performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { var YYSTATE = YY_START; switch ($avoiding_name_collisions) { case 0: this.begin("acc_title"); return 34; break; case 1: this.popState(); return "acc_title_value"; break; case 2: this.begin("acc_descr"); return 36; break; case 3: this.popState(); return "acc_descr_value"; break; case 4: this.begin("acc_descr_multiline"); break; case 5: this.popState(); break; case 6: return "acc_descr_multiline_value"; break; case 7: this.pushState("shapeData"); yy_.yytext = ""; return 40; break; case 8: this.pushState("shapeDataStr"); return 40; break; case 9: this.popState(); return 40; break; case 10: const re3 = /\n\s*/g; yy_.yytext = yy_.yytext.replace(re3, "
"); return 40; break; case 11: return 40; break; case 12: this.popState(); break; case 13: this.begin("callbackname"); break; case 14: this.popState(); break; case 15: this.popState(); this.begin("callbackargs"); break; case 16: return 95; break; case 17: this.popState(); break; case 18: return 96; break; case 19: return "MD_STR"; break; case 20: this.popState(); break; case 21: this.begin("md_string"); break; case 22: return "STR"; break; case 23: this.popState(); break; case 24: this.pushState("string"); break; case 25: return 84; break; case 26: return 102; break; case 27: return 85; break; case 28: return 104; break; case 29: return 86; break; case 30: return 87; break; case 31: return 97; break; case 32: this.begin("click"); break; case 33: this.popState(); break; case 34: return 88; break; case 35: if (yy.lex.firstGraph()) { this.begin("dir"); } return 12; break; case 36: if (yy.lex.firstGraph()) { this.begin("dir"); } return 12; break; case 37: if (yy.lex.firstGraph()) { this.begin("dir"); } return 12; break; case 38: return 27; break; case 39: return 32; break; case 40: return 98; break; case 41: return 98; break; case 42: return 98; break; case 43: return 98; break; case 44: this.popState(); return 13; break; case 45: this.popState(); return 14; break; case 46: this.popState(); return 14; break; case 47: this.popState(); return 14; break; case 48: this.popState(); return 14; break; case 49: this.popState(); return 14; break; case 50: this.popState(); return 14; break; case 51: this.popState(); return 14; break; case 52: this.popState(); return 14; break; case 53: this.popState(); return 14; break; case 54: this.popState(); return 14; break; case 55: return 121; break; case 56: return 122; break; case 57: return 123; break; case 58: return 124; break; case 59: return 78; break; case 60: return 105; break; case 61: return 111; break; case 62: return 46; break; case 63: return 60; break; case 64: return 44; break; case 65: return 8; break; case 66: return 106; break; case 67: return 115; break; case 68: this.popState(); return 77; break; case 69: this.pushState("edgeText"); return 75; break; case 70: return 119; break; case 71: this.popState(); return 77; break; case 72: this.pushState("thickEdgeText"); return 75; break; case 73: return 119; break; case 74: this.popState(); return 77; break; case 75: this.pushState("dottedEdgeText"); return 75; break; case 76: return 119; break; case 77: return 77; break; case 78: this.popState(); return 53; break; case 79: return "TEXT"; break; case 80: this.pushState("ellipseText"); return 52; break; case 81: this.popState(); return 55; break; case 82: this.pushState("text"); return 54; break; case 83: this.popState(); return 57; break; case 84: this.pushState("text"); return 56; break; case 85: return 58; break; case 86: this.pushState("text"); return 67; break; case 87: this.popState(); return 64; break; case 88: this.pushState("text"); return 63; break; case 89: this.popState(); return 49; break; case 90: this.pushState("text"); return 48; break; case 91: this.popState(); return 69; break; case 92: this.popState(); return 71; break; case 93: return 117; break; case 94: this.pushState("trapText"); return 68; break; case 95: this.pushState("trapText"); return 70; break; case 96: return 118; break; case 97: return 67; break; case 98: return 90; break; case 99: return "SEP"; break; case 100: return 89; break; case 101: return 115; break; case 102: return 111; break; case 103: return 44; break; case 104: return 109; break; case 105: return 114; break; case 106: return 116; break; case 107: this.popState(); return 62; break; case 108: this.pushState("text"); return 62; break; case 109: this.popState(); return 51; break; case 110: this.pushState("text"); return 50; break; case 111: this.popState(); return 31; break; case 112: this.pushState("text"); return 29; break; case 113: this.popState(); return 66; break; case 114: this.pushState("text"); return 65; break; case 115: return "TEXT"; break; case 116: return "QUOTE"; break; case 117: return 9; break; case 118: return 10; break; case 119: return 11; break; } }, "anonymous"), rules: [/^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:@\{)/, /^(?:["])/, /^(?:["])/, /^(?:[^\"]+)/, /^(?:[^}^"]+)/, /^(?:\})/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["][`])/, /^(?:[^"]+)/, /^(?:["])/, /^(?:["])/, /^(?:style\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\b)/, /^(?:class\b)/, /^(?:href[\s])/, /^(?:click[\s]+)/, /^(?:[\s\n])/, /^(?:[^\s\n]*)/, /^(?:flowchart-elk\b)/, /^(?:graph\b)/, /^(?:flowchart\b)/, /^(?:subgraph\b)/, /^(?:end\b\s*)/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:(\r?\n)*\s*\n)/, /^(?:\s*LR\b)/, /^(?:\s*RL\b)/, /^(?:\s*TB\b)/, /^(?:\s*BT\b)/, /^(?:\s*TD\b)/, /^(?:\s*BR\b)/, /^(?:\s*<)/, /^(?:\s*>)/, /^(?:\s*\^)/, /^(?:\s*v\b)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:[^\s\"]+@(?=[^\{\"]))/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::::)/, /^(?::)/, /^(?:&)/, /^(?:;)/, /^(?:,)/, /^(?:\*)/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?--\s*)/, /^(?:[^-]|-(?!-)+)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?==\s*)/, /^(?:[^=]|=(?!))/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?:\s*[xo<]?-\.\s*)/, /^(?:[^\.]|\.(?!))/, /^(?:\s*~~[\~]+\s*)/, /^(?:[-/\)][\)])/, /^(?:[^\(\)\[\]\{\}]|!\)+)/, /^(?:\(-)/, /^(?:\]\))/, /^(?:\(\[)/, /^(?:\]\])/, /^(?:\[\[)/, /^(?:\[\|)/, /^(?:>)/, /^(?:\)\])/, /^(?:\[\()/, /^(?:\)\)\))/, /^(?:\(\(\()/, /^(?:[\\(?=\])][\]])/, /^(?:\/(?=\])\])/, /^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/, /^(?:\[\/)/, /^(?:\[\\)/, /^(?:<)/, /^(?:>)/, /^(?:\^)/, /^(?:\\\|)/, /^(?:v\b)/, /^(?:\*)/, /^(?:#)/, /^(?:&)/, /^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/, /^(?:-)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\|)/, /^(?:\|)/, /^(?:\))/, /^(?:\()/, /^(?:\])/, /^(?:\[)/, /^(?:(\}))/, /^(?:\{)/, /^(?:[^\[\]\(\)\{\}\|\"]+)/, /^(?:")/, /^(?:(\r?\n)+)/, /^(?:\s)/, /^(?:$)/], conditions: { "shapeDataEndBracket": { "rules": [21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], "inclusive": false }, "shapeDataStr": { "rules": [9, 10, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], "inclusive": false }, "shapeData": { "rules": [8, 11, 12, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], "inclusive": false }, "callbackargs": { "rules": [17, 18, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], "inclusive": false }, "callbackname": { "rules": [14, 15, 16, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], "inclusive": false }, "href": { "rules": [21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], "inclusive": false }, "click": { "rules": [21, 24, 33, 34, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], "inclusive": false }, "dottedEdgeText": { "rules": [21, 24, 74, 76, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], "inclusive": false }, "thickEdgeText": { "rules": [21, 24, 71, 73, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], "inclusive": false }, "edgeText": { "rules": [21, 24, 68, 70, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], "inclusive": false }, "trapText": { "rules": [21, 24, 77, 80, 82, 84, 88, 90, 91, 92, 93, 94, 95, 108, 110, 112, 114], "inclusive": false }, "ellipseText": { "rules": [21, 24, 77, 78, 79, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], "inclusive": false }, "text": { "rules": [21, 24, 77, 80, 81, 82, 83, 84, 87, 88, 89, 90, 94, 95, 107, 108, 109, 110, 111, 112, 113, 114, 115], "inclusive": false }, "vertex": { "rules": [21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], "inclusive": false }, "dir": { "rules": [21, 24, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], "inclusive": false }, "acc_descr_multiline": { "rules": [5, 6, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], "inclusive": false }, "acc_descr": { "rules": [3, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], "inclusive": false }, "acc_title": { "rules": [1, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], "inclusive": false }, "md_string": { "rules": [19, 20, 21, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], "inclusive": false }, "string": { "rules": [21, 22, 23, 24, 77, 80, 82, 84, 88, 90, 94, 95, 108, 110, 112, 114], "inclusive": false }, "INITIAL": { "rules": [0, 2, 4, 7, 13, 21, 24, 25, 26, 27, 28, 29, 30, 31, 32, 35, 36, 37, 38, 39, 40, 41, 42, 43, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 71, 72, 74, 75, 77, 80, 82, 84, 85, 86, 88, 90, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 110, 112, 114, 116, 117, 118, 119], "inclusive": true } } }; return lexer2; })(); parser24.lexer = lexer; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser24; parser24.Parser = Parser3; return new Parser3(); })(); parser2.parser = parser2; flow_default = parser2; } }); // src/diagrams/flowchart/parser/flowParser.ts var newParser, flowParser_default; var init_flowParser = __esm({ "src/diagrams/flowchart/parser/flowParser.ts"() { "use strict"; init_flow(); newParser = Object.assign({}, flow_default); newParser.parse = (src) => { const newSrc = src.replace(/}\s*\n/g, "}\n"); return flow_default.parse(newSrc); }; flowParser_default = newParser; } }); // src/diagrams/globalStyles.ts var getIconStyles; var init_globalStyles = __esm({ "src/diagrams/globalStyles.ts"() { "use strict"; getIconStyles = /* @__PURE__ */ __name(() => ` /* Font Awesome icon styling - consolidated */ .label-icon { display: inline-block; height: 1em; overflow: visible; vertical-align: -0.125em; } .node .label-icon path { fill: currentColor; stroke: revert; stroke-width: revert; } `, "getIconStyles"); } }); // src/diagrams/flowchart/styles.ts var fade, getStyles3, styles_default3; var init_styles3 = __esm({ "src/diagrams/flowchart/styles.ts"() { "use strict"; init_dist(); init_globalStyles(); fade = /* @__PURE__ */ __name((color2, opacity) => { const channel2 = channel_default2; const r2 = channel2(color2, "r"); const g2 = channel2(color2, "g"); const b3 = channel2(color2, "b"); return rgba_default(r2, g2, b3, opacity); }, "fade"); getStyles3 = /* @__PURE__ */ __name((options2) => `.label { font-family: ${options2.fontFamily}; color: ${options2.nodeTextColor || options2.textColor}; } .cluster-label text { fill: ${options2.titleColor}; } .cluster-label span { color: ${options2.titleColor}; } .cluster-label span p { background-color: transparent; } .label text,span { fill: ${options2.nodeTextColor || options2.textColor}; color: ${options2.nodeTextColor || options2.textColor}; } .node rect, .node circle, .node ellipse, .node polygon, .node path { fill: ${options2.mainBkg}; stroke: ${options2.nodeBorder}; stroke-width: 1px; } .rough-node .label text , .node .label text, .image-shape .label, .icon-shape .label { text-anchor: middle; } // .flowchart-label .text-outer-tspan { // text-anchor: middle; // } // .flowchart-label .text-inner-tspan { // text-anchor: start; // } .node .katex path { fill: #000; stroke: #000; stroke-width: 1px; } .rough-node .label,.node .label, .image-shape .label, .icon-shape .label { text-align: center; } .node.clickable { cursor: pointer; } .root .anchor path { fill: ${options2.lineColor} !important; stroke-width: 0; stroke: ${options2.lineColor}; } .arrowheadPath { fill: ${options2.arrowheadColor}; } .edgePath .path { stroke: ${options2.lineColor}; stroke-width: 2.0px; } .flowchart-link { stroke: ${options2.lineColor}; fill: none; } .edgeLabel { background-color: ${options2.edgeLabelBackground}; p { background-color: ${options2.edgeLabelBackground}; } rect { opacity: 0.5; background-color: ${options2.edgeLabelBackground}; fill: ${options2.edgeLabelBackground}; } text-align: center; } /* For html labels only */ .labelBkg { background-color: ${fade(options2.edgeLabelBackground, 0.5)}; // background-color: } .cluster rect { fill: ${options2.clusterBkg}; stroke: ${options2.clusterBorder}; stroke-width: 1px; } .cluster text { fill: ${options2.titleColor}; } .cluster span { color: ${options2.titleColor}; } /* .cluster div { color: ${options2.titleColor}; } */ div.mermaidTooltip { position: absolute; text-align: center; max-width: 200px; padding: 2px; font-family: ${options2.fontFamily}; font-size: 12px; background: ${options2.tertiaryColor}; border: 1px solid ${options2.border2}; border-radius: 2px; pointer-events: none; z-index: 100; } .flowchartTitleText { text-anchor: middle; font-size: 18px; fill: ${options2.textColor}; } rect.text { fill: none; stroke-width: 0; } .icon-shape, .image-shape { background-color: ${options2.edgeLabelBackground}; p { background-color: ${options2.edgeLabelBackground}; padding: 2px; } rect { opacity: 0.5; background-color: ${options2.edgeLabelBackground}; fill: ${options2.edgeLabelBackground}; } text-align: center; } ${getIconStyles()} `, "getStyles"); styles_default3 = getStyles3; } }); // src/diagrams/flowchart/flowDiagram.ts var flowDiagram_exports = {}; __export(flowDiagram_exports, { diagram: () => diagram2 }); var diagram2; var init_flowDiagram = __esm({ "src/diagrams/flowchart/flowDiagram.ts"() { "use strict"; init_diagramAPI(); init_flowDb(); init_flowRenderer_v3_unified(); init_flowParser(); init_styles3(); diagram2 = { parser: flowParser_default, get db() { return new FlowDB(); }, renderer: flowRenderer_v3_unified_default, styles: styles_default3, init: /* @__PURE__ */ __name((cnf) => { if (!cnf.flowchart) { cnf.flowchart = {}; } if (cnf.layout) { setConfig2({ layout: cnf.layout }); } cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; setConfig2({ flowchart: { arrowMarkerAbsolute: cnf.arrowMarkerAbsolute } }); }, "init") }; } }); // src/diagrams/er/parser/erDiagram.jison var parser3, erDiagram_default; var init_erDiagram = __esm({ "src/diagrams/er/parser/erDiagram.jison"() { "use strict"; parser3 = (function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) { for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ; return o3; }, "o"), $V0 = [6, 8, 10, 22, 24, 26, 28, 33, 34, 35, 36, 37, 40, 43, 44, 50], $V1 = [1, 10], $V2 = [1, 11], $V3 = [1, 12], $V4 = [1, 13], $V5 = [1, 20], $V6 = [1, 21], $V7 = [1, 22], $V8 = [1, 23], $V9 = [1, 24], $Va = [1, 19], $Vb = [1, 25], $Vc = [1, 26], $Vd = [1, 18], $Ve = [1, 33], $Vf = [1, 34], $Vg = [1, 35], $Vh = [1, 36], $Vi = [1, 37], $Vj = [6, 8, 10, 13, 15, 17, 20, 21, 22, 24, 26, 28, 33, 34, 35, 36, 37, 40, 43, 44, 50, 63, 64, 65, 66, 67], $Vk = [1, 42], $Vl = [1, 43], $Vm = [1, 52], $Vn = [40, 50, 68, 69], $Vo = [1, 63], $Vp = [1, 61], $Vq = [1, 58], $Vr = [1, 62], $Vs = [1, 64], $Vt = [6, 8, 10, 13, 17, 22, 24, 26, 28, 33, 34, 35, 36, 37, 40, 41, 42, 43, 44, 48, 49, 50, 63, 64, 65, 66, 67], $Vu = [63, 64, 65, 66, 67], $Vv = [1, 81], $Vw = [1, 80], $Vx = [1, 78], $Vy = [1, 79], $Vz = [6, 10, 42, 47], $VA = [6, 10, 13, 41, 42, 47, 48, 49], $VB = [1, 89], $VC = [1, 88], $VD = [1, 87], $VE = [19, 56], $VF = [1, 98], $VG = [1, 97], $VH = [19, 56, 58, 60]; var parser24 = { trace: /* @__PURE__ */ __name(function trace() { }, "trace"), yy: {}, symbols_: { "error": 2, "start": 3, "ER_DIAGRAM": 4, "document": 5, "EOF": 6, "line": 7, "SPACE": 8, "statement": 9, "NEWLINE": 10, "entityName": 11, "relSpec": 12, "COLON": 13, "role": 14, "STYLE_SEPARATOR": 15, "idList": 16, "BLOCK_START": 17, "attributes": 18, "BLOCK_STOP": 19, "SQS": 20, "SQE": 21, "title": 22, "title_value": 23, "acc_title": 24, "acc_title_value": 25, "acc_descr": 26, "acc_descr_value": 27, "acc_descr_multiline_value": 28, "direction": 29, "classDefStatement": 30, "classStatement": 31, "styleStatement": 32, "direction_tb": 33, "direction_bt": 34, "direction_rl": 35, "direction_lr": 36, "CLASSDEF": 37, "stylesOpt": 38, "separator": 39, "UNICODE_TEXT": 40, "STYLE_TEXT": 41, "COMMA": 42, "CLASS": 43, "STYLE": 44, "style": 45, "styleComponent": 46, "SEMI": 47, "NUM": 48, "BRKT": 49, "ENTITY_NAME": 50, "attribute": 51, "attributeType": 52, "attributeName": 53, "attributeKeyTypeList": 54, "attributeComment": 55, "ATTRIBUTE_WORD": 56, "attributeKeyType": 57, ",": 58, "ATTRIBUTE_KEY": 59, "COMMENT": 60, "cardinality": 61, "relType": 62, "ZERO_OR_ONE": 63, "ZERO_OR_MORE": 64, "ONE_OR_MORE": 65, "ONLY_ONE": 66, "MD_PARENT": 67, "NON_IDENTIFYING": 68, "IDENTIFYING": 69, "WORD": 70, "$accept": 0, "$end": 1 }, terminals_: { 2: "error", 4: "ER_DIAGRAM", 6: "EOF", 8: "SPACE", 10: "NEWLINE", 13: "COLON", 15: "STYLE_SEPARATOR", 17: "BLOCK_START", 19: "BLOCK_STOP", 20: "SQS", 21: "SQE", 22: "title", 23: "title_value", 24: "acc_title", 25: "acc_title_value", 26: "acc_descr", 27: "acc_descr_value", 28: "acc_descr_multiline_value", 33: "direction_tb", 34: "direction_bt", 35: "direction_rl", 36: "direction_lr", 37: "CLASSDEF", 40: "UNICODE_TEXT", 41: "STYLE_TEXT", 42: "COMMA", 43: "CLASS", 44: "STYLE", 47: "SEMI", 48: "NUM", 49: "BRKT", 50: "ENTITY_NAME", 56: "ATTRIBUTE_WORD", 58: ",", 59: "ATTRIBUTE_KEY", 60: "COMMENT", 63: "ZERO_OR_ONE", 64: "ZERO_OR_MORE", 65: "ONE_OR_MORE", 66: "ONLY_ONE", 67: "MD_PARENT", 68: "NON_IDENTIFYING", 69: "IDENTIFYING", 70: "WORD" }, productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [9, 5], [9, 9], [9, 7], [9, 7], [9, 4], [9, 6], [9, 3], [9, 5], [9, 1], [9, 3], [9, 7], [9, 9], [9, 6], [9, 8], [9, 4], [9, 6], [9, 2], [9, 2], [9, 2], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [29, 1], [29, 1], [29, 1], [29, 1], [30, 4], [16, 1], [16, 1], [16, 3], [16, 3], [31, 3], [32, 4], [38, 1], [38, 3], [45, 1], [45, 2], [39, 1], [39, 1], [39, 1], [46, 1], [46, 1], [46, 1], [46, 1], [11, 1], [11, 1], [18, 1], [18, 2], [51, 2], [51, 3], [51, 3], [51, 4], [52, 1], [53, 1], [54, 1], [54, 3], [57, 1], [55, 1], [12, 3], [61, 1], [61, 1], [61, 1], [61, 1], [61, 1], [62, 1], [62, 1], [14, 1], [14, 1], [14, 1]], performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { var $0 = $$.length - 1; switch (yystate) { case 1: break; case 2: this.$ = []; break; case 3: $$[$0 - 1].push($$[$0]); this.$ = $$[$0 - 1]; break; case 4: case 5: this.$ = $$[$0]; break; case 6: case 7: this.$ = []; break; case 8: yy.addEntity($$[$0 - 4]); yy.addEntity($$[$0 - 2]); yy.addRelationship($$[$0 - 4], $$[$0], $$[$0 - 2], $$[$0 - 3]); break; case 9: yy.addEntity($$[$0 - 8]); yy.addEntity($$[$0 - 4]); yy.addRelationship($$[$0 - 8], $$[$0], $$[$0 - 4], $$[$0 - 5]); yy.setClass([$$[$0 - 8]], $$[$0 - 6]); yy.setClass([$$[$0 - 4]], $$[$0 - 2]); break; case 10: yy.addEntity($$[$0 - 6]); yy.addEntity($$[$0 - 2]); yy.addRelationship($$[$0 - 6], $$[$0], $$[$0 - 2], $$[$0 - 3]); yy.setClass([$$[$0 - 6]], $$[$0 - 4]); break; case 11: yy.addEntity($$[$0 - 6]); yy.addEntity($$[$0 - 4]); yy.addRelationship($$[$0 - 6], $$[$0], $$[$0 - 4], $$[$0 - 5]); yy.setClass([$$[$0 - 4]], $$[$0 - 2]); break; case 12: yy.addEntity($$[$0 - 3]); yy.addAttributes($$[$0 - 3], $$[$0 - 1]); break; case 13: yy.addEntity($$[$0 - 5]); yy.addAttributes($$[$0 - 5], $$[$0 - 1]); yy.setClass([$$[$0 - 5]], $$[$0 - 3]); break; case 14: yy.addEntity($$[$0 - 2]); break; case 15: yy.addEntity($$[$0 - 4]); yy.setClass([$$[$0 - 4]], $$[$0 - 2]); break; case 16: yy.addEntity($$[$0]); break; case 17: yy.addEntity($$[$0 - 2]); yy.setClass([$$[$0 - 2]], $$[$0]); break; case 18: yy.addEntity($$[$0 - 6], $$[$0 - 4]); yy.addAttributes($$[$0 - 6], $$[$0 - 1]); break; case 19: yy.addEntity($$[$0 - 8], $$[$0 - 6]); yy.addAttributes($$[$0 - 8], $$[$0 - 1]); yy.setClass([$$[$0 - 8]], $$[$0 - 3]); break; case 20: yy.addEntity($$[$0 - 5], $$[$0 - 3]); break; case 21: yy.addEntity($$[$0 - 7], $$[$0 - 5]); yy.setClass([$$[$0 - 7]], $$[$0 - 2]); break; case 22: yy.addEntity($$[$0 - 3], $$[$0 - 1]); break; case 23: yy.addEntity($$[$0 - 5], $$[$0 - 3]); yy.setClass([$$[$0 - 5]], $$[$0]); break; case 24: case 25: this.$ = $$[$0].trim(); yy.setAccTitle(this.$); break; case 26: case 27: this.$ = $$[$0].trim(); yy.setAccDescription(this.$); break; case 32: yy.setDirection("TB"); break; case 33: yy.setDirection("BT"); break; case 34: yy.setDirection("RL"); break; case 35: yy.setDirection("LR"); break; case 36: this.$ = $$[$0 - 3]; yy.addClass($$[$0 - 2], $$[$0 - 1]); break; case 37: case 38: case 56: case 64: this.$ = [$$[$0]]; break; case 39: case 40: this.$ = $$[$0 - 2].concat([$$[$0]]); break; case 41: this.$ = $$[$0 - 2]; yy.setClass($$[$0 - 1], $$[$0]); break; case 42: ; this.$ = $$[$0 - 3]; yy.addCssStyles($$[$0 - 2], $$[$0 - 1]); break; case 43: this.$ = [$$[$0]]; break; case 44: $$[$0 - 2].push($$[$0]); this.$ = $$[$0 - 2]; break; case 46: this.$ = $$[$0 - 1] + $$[$0]; break; case 54: case 76: case 77: this.$ = $$[$0].replace(/"/g, ""); break; case 55: case 78: this.$ = $$[$0]; break; case 57: $$[$0].push($$[$0 - 1]); this.$ = $$[$0]; break; case 58: this.$ = { type: $$[$0 - 1], name: $$[$0] }; break; case 59: this.$ = { type: $$[$0 - 2], name: $$[$0 - 1], keys: $$[$0] }; break; case 60: this.$ = { type: $$[$0 - 2], name: $$[$0 - 1], comment: $$[$0] }; break; case 61: this.$ = { type: $$[$0 - 3], name: $$[$0 - 2], keys: $$[$0 - 1], comment: $$[$0] }; break; case 62: case 63: case 66: this.$ = $$[$0]; break; case 65: $$[$0 - 2].push($$[$0]); this.$ = $$[$0 - 2]; break; case 67: this.$ = $$[$0].replace(/"/g, ""); break; case 68: this.$ = { cardA: $$[$0], relType: $$[$0 - 1], cardB: $$[$0 - 2] }; break; case 69: this.$ = yy.Cardinality.ZERO_OR_ONE; break; case 70: this.$ = yy.Cardinality.ZERO_OR_MORE; break; case 71: this.$ = yy.Cardinality.ONE_OR_MORE; break; case 72: this.$ = yy.Cardinality.ONLY_ONE; break; case 73: this.$ = yy.Cardinality.MD_PARENT; break; case 74: this.$ = yy.Identification.NON_IDENTIFYING; break; case 75: this.$ = yy.Identification.IDENTIFYING; break; } }, "anonymous"), table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o2($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: 9, 22: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 14, 30: 15, 31: 16, 32: 17, 33: $V5, 34: $V6, 35: $V7, 36: $V8, 37: $V9, 40: $Va, 43: $Vb, 44: $Vc, 50: $Vd }, o2($V0, [2, 7], { 1: [2, 1] }), o2($V0, [2, 3]), { 9: 27, 11: 9, 22: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 14, 30: 15, 31: 16, 32: 17, 33: $V5, 34: $V6, 35: $V7, 36: $V8, 37: $V9, 40: $Va, 43: $Vb, 44: $Vc, 50: $Vd }, o2($V0, [2, 5]), o2($V0, [2, 6]), o2($V0, [2, 16], { 12: 28, 61: 32, 15: [1, 29], 17: [1, 30], 20: [1, 31], 63: $Ve, 64: $Vf, 65: $Vg, 66: $Vh, 67: $Vi }), { 23: [1, 38] }, { 25: [1, 39] }, { 27: [1, 40] }, o2($V0, [2, 27]), o2($V0, [2, 28]), o2($V0, [2, 29]), o2($V0, [2, 30]), o2($V0, [2, 31]), o2($Vj, [2, 54]), o2($Vj, [2, 55]), o2($V0, [2, 32]), o2($V0, [2, 33]), o2($V0, [2, 34]), o2($V0, [2, 35]), { 16: 41, 40: $Vk, 41: $Vl }, { 16: 44, 40: $Vk, 41: $Vl }, { 16: 45, 40: $Vk, 41: $Vl }, o2($V0, [2, 4]), { 11: 46, 40: $Va, 50: $Vd }, { 16: 47, 40: $Vk, 41: $Vl }, { 18: 48, 19: [1, 49], 51: 50, 52: 51, 56: $Vm }, { 11: 53, 40: $Va, 50: $Vd }, { 62: 54, 68: [1, 55], 69: [1, 56] }, o2($Vn, [2, 69]), o2($Vn, [2, 70]), o2($Vn, [2, 71]), o2($Vn, [2, 72]), o2($Vn, [2, 73]), o2($V0, [2, 24]), o2($V0, [2, 25]), o2($V0, [2, 26]), { 13: $Vo, 38: 57, 41: $Vp, 42: $Vq, 45: 59, 46: 60, 48: $Vr, 49: $Vs }, o2($Vt, [2, 37]), o2($Vt, [2, 38]), { 16: 65, 40: $Vk, 41: $Vl, 42: $Vq }, { 13: $Vo, 38: 66, 41: $Vp, 42: $Vq, 45: 59, 46: 60, 48: $Vr, 49: $Vs }, { 13: [1, 67], 15: [1, 68] }, o2($V0, [2, 17], { 61: 32, 12: 69, 17: [1, 70], 42: $Vq, 63: $Ve, 64: $Vf, 65: $Vg, 66: $Vh, 67: $Vi }), { 19: [1, 71] }, o2($V0, [2, 14]), { 18: 72, 19: [2, 56], 51: 50, 52: 51, 56: $Vm }, { 53: 73, 56: [1, 74] }, { 56: [2, 62] }, { 21: [1, 75] }, { 61: 76, 63: $Ve, 64: $Vf, 65: $Vg, 66: $Vh, 67: $Vi }, o2($Vu, [2, 74]), o2($Vu, [2, 75]), { 6: $Vv, 10: $Vw, 39: 77, 42: $Vx, 47: $Vy }, { 40: [1, 82], 41: [1, 83] }, o2($Vz, [2, 43], { 46: 84, 13: $Vo, 41: $Vp, 48: $Vr, 49: $Vs }), o2($VA, [2, 45]), o2($VA, [2, 50]), o2($VA, [2, 51]), o2($VA, [2, 52]), o2($VA, [2, 53]), o2($V0, [2, 41], { 42: $Vq }), { 6: $Vv, 10: $Vw, 39: 85, 42: $Vx, 47: $Vy }, { 14: 86, 40: $VB, 50: $VC, 70: $VD }, { 16: 90, 40: $Vk, 41: $Vl }, { 11: 91, 40: $Va, 50: $Vd }, { 18: 92, 19: [1, 93], 51: 50, 52: 51, 56: $Vm }, o2($V0, [2, 12]), { 19: [2, 57] }, o2($VE, [2, 58], { 54: 94, 55: 95, 57: 96, 59: $VF, 60: $VG }), o2([19, 56, 59, 60], [2, 63]), o2($V0, [2, 22], { 15: [1, 100], 17: [1, 99] }), o2([40, 50], [2, 68]), o2($V0, [2, 36]), { 13: $Vo, 41: $Vp, 45: 101, 46: 60, 48: $Vr, 49: $Vs }, o2($V0, [2, 47]), o2($V0, [2, 48]), o2($V0, [2, 49]), o2($Vt, [2, 39]), o2($Vt, [2, 40]), o2($VA, [2, 46]), o2($V0, [2, 42]), o2($V0, [2, 8]), o2($V0, [2, 76]), o2($V0, [2, 77]), o2($V0, [2, 78]), { 13: [1, 102], 42: $Vq }, { 13: [1, 104], 15: [1, 103] }, { 19: [1, 105] }, o2($V0, [2, 15]), o2($VE, [2, 59], { 55: 106, 58: [1, 107], 60: $VG }), o2($VE, [2, 60]), o2($VH, [2, 64]), o2($VE, [2, 67]), o2($VH, [2, 66]), { 18: 108, 19: [1, 109], 51: 50, 52: 51, 56: $Vm }, { 16: 110, 40: $Vk, 41: $Vl }, o2($Vz, [2, 44], { 46: 84, 13: $Vo, 41: $Vp, 48: $Vr, 49: $Vs }), { 14: 111, 40: $VB, 50: $VC, 70: $VD }, { 16: 112, 40: $Vk, 41: $Vl }, { 14: 113, 40: $VB, 50: $VC, 70: $VD }, o2($V0, [2, 13]), o2($VE, [2, 61]), { 57: 114, 59: $VF }, { 19: [1, 115] }, o2($V0, [2, 20]), o2($V0, [2, 23], { 17: [1, 116], 42: $Vq }), o2($V0, [2, 11]), { 13: [1, 117], 42: $Vq }, o2($V0, [2, 10]), o2($VH, [2, 65]), o2($V0, [2, 18]), { 18: 118, 19: [1, 119], 51: 50, 52: 51, 56: $Vm }, { 14: 120, 40: $VB, 50: $VC, 70: $VD }, { 19: [1, 121] }, o2($V0, [2, 21]), o2($V0, [2, 9]), o2($V0, [2, 19])], defaultActions: { 52: [2, 62], 72: [2, 57] }, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (hash.recoverable) { this.trace(str2); } else { var error3 = new Error(str2); error3.hash = hash; throw error3; } }, "parseError"), parse: /* @__PURE__ */ __name(function parse7(input) { var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1; var args = lstack.slice.call(arguments, 1); var lexer2 = Object.create(this.lexer); var sharedState = { yy: {} }; for (var k2 in this.yy) { if (Object.prototype.hasOwnProperty.call(this.yy, k2)) { sharedState.yy[k2] = this.yy[k2]; } } lexer2.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer2; sharedState.yy.parser = this; if (typeof lexer2.yylloc == "undefined") { lexer2.yylloc = {}; } var yyloc = lexer2.yylloc; lstack.push(yyloc); var ranges = lexer2.options && lexer2.options.ranges; if (typeof sharedState.yy.parseError === "function") { this.parseError = sharedState.yy.parseError; } else { this.parseError = Object.getPrototypeOf(this).parseError; } function popStack(n2) { stack.length = stack.length - 2 * n2; vstack.length = vstack.length - n2; lstack.length = lstack.length - n2; } __name(popStack, "popStack"); function lex() { var token2; token2 = tstack.pop() || lexer2.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex, "lex"); var symbol, preErrorSymbol, state3, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state3 = stack[stack.length - 1]; if (this.defaultActions[state3]) { action = this.defaultActions[state3]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex(); } action = table[state3] && table[state3][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state3]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer2.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; } else { errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); } this.parseError(errStr, { text: lexer2.match, token: this.terminals_[symbol] || symbol, line: lexer2.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state3 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer2.yytext); lstack.push(lexer2.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer2.yyleng; yytext = lexer2.yytext; yylineno = lexer2.yylineno; yyloc = lexer2.yylloc; if (recovering > 0) { recovering--; } } else { symbol = preErrorSymbol; preErrorSymbol = null; } break; case 2: len = this.productions_[action[1]][1]; yyval.$ = vstack[vstack.length - len]; yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; if (ranges) { yyval._$.range = [ lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1] ]; } r2 = this.performAction.apply(yyval, [ yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack ].concat(args)); if (typeof r2 !== "undefined") { return r2; } if (len) { stack = stack.slice(0, -1 * len * 2); vstack = vstack.slice(0, -1 * len); lstack = lstack.slice(0, -1 * len); } stack.push(this.productions_[action[1]][0]); vstack.push(yyval.$); lstack.push(yyval._$); newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]]; stack.push(newState2); break; case 3: return true; } } return true; }, "parse") }; var lexer = /* @__PURE__ */ (function() { var lexer2 = { EOF: 1, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (this.yy.parser) { this.yy.parser.parseError(str2, hash); } else { throw new Error(str2); } }, "parseError"), // resets the lexer, sets new input setInput: /* @__PURE__ */ __name(function(input, yy) { this.yy = yy || this.yy || {}; this._input = input; this._more = this._backtrack = this.done = false; 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 }; if (this.options.ranges) { this.yylloc.range = [0, 0]; } this.offset = 0; return this; }, "setInput"), // consumes and returns one char from the input input: /* @__PURE__ */ __name(function() { var ch = this._input[0]; this.yytext += ch; this.yyleng++; this.offset++; this.match += ch; this.matched += ch; var lines = ch.match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno++; this.yylloc.last_line++; } else { this.yylloc.last_column++; } if (this.options.ranges) { this.yylloc.range[1]++; } this._input = this._input.slice(1); return ch; }, "input"), // unshifts one char (or a string) into the input unput: /* @__PURE__ */ __name(function(ch) { var len = ch.length; var lines = ch.split(/(?:\r\n?|\n)/g); this._input = ch + this._input; this.yytext = this.yytext.substr(0, this.yytext.length - len); this.offset -= len; var oldLines = 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); if (lines.length - 1) { this.yylineno -= lines.length - 1; } var r2 = this.yylloc.range; this.yylloc = { first_line: this.yylloc.first_line, last_line: this.yylineno + 1, first_column: this.yylloc.first_column, last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len }; if (this.options.ranges) { this.yylloc.range = [r2[0], r2[0] + this.yyleng - len]; } this.yyleng = this.yytext.length; return this; }, "unput"), // When called from action, caches matched text and appends it on next action more: /* @__PURE__ */ __name(function() { this._more = true; return this; }, "more"), // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. reject: /* @__PURE__ */ __name(function() { if (this.options.backtrack_lexer) { this._backtrack = true; } 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"), // retain first n characters of the match less: /* @__PURE__ */ __name(function(n2) { this.unput(this.match.slice(n2)); }, "less"), // displays already matched input, i.e. for error messages pastInput: /* @__PURE__ */ __name(function() { var past = this.matched.substr(0, this.matched.length - this.match.length); return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); }, "pastInput"), // displays upcoming input, i.e. for error messages upcomingInput: /* @__PURE__ */ __name(function() { var next3 = this.match; if (next3.length < 20) { next3 += this._input.substr(0, 20 - next3.length); } return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, ""); }, "upcomingInput"), // displays the character position where the lexing error occurred, i.e. for error messages showPosition: /* @__PURE__ */ __name(function() { var pre = this.pastInput(); var c3 = new Array(pre.length + 1).join("-"); return pre + this.upcomingInput() + "\n" + c3 + "^"; }, "showPosition"), // test the lexed token: return FALSE when not a match, otherwise return token test_match: /* @__PURE__ */ __name(function(match2, indexed_rule) { var token2, lines, backup; if (this.options.backtrack_lexer) { backup = { 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 }; if (this.options.ranges) { backup.yylloc.range = this.yylloc.range.slice(0); } } lines = match2[0].match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno += lines.length; } this.yylloc = { first_line: this.yylloc.last_line, last_line: this.yylineno + 1, first_column: this.yylloc.last_column, last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; this.yyleng = this.yytext.length; if (this.options.ranges) { this.yylloc.range = [this.offset, this.offset += this.yyleng]; } this._more = false; this._backtrack = false; this._input = this._input.slice(match2[0].length); this.matched += match2[0]; token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); if (this.done && this._input) { this.done = false; } if (token2) { return token2; } else if (this._backtrack) { for (var k2 in backup) { this[k2] = backup[k2]; } return false; } return false; }, "test_match"), // return next match in input next: /* @__PURE__ */ __name(function() { if (this.done) { return this.EOF; } if (!this._input) { this.done = true; } var token2, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[index]); if (token2 !== false) { return token2; } return false; } if (this._input === "") { return this.EOF; } else { return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { text: "", token: null, line: this.yylineno }); } }, "next"), // return next match that has a token lex: /* @__PURE__ */ __name(function lex() { var r2 = this.next(); if (r2) { return r2; } else { return this.lex(); } }, "lex"), // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) begin: /* @__PURE__ */ __name(function begin(condition) { this.conditionStack.push(condition); }, "begin"), // pop the previously active lexer condition state off the condition stack popState: /* @__PURE__ */ __name(function popState() { var n2 = this.conditionStack.length - 1; if (n2 > 0) { return this.conditionStack.pop(); } else { return this.conditionStack[0]; } }, "popState"), // produce the lexer rule set which is active for the currently active lexer condition state _currentRules: /* @__PURE__ */ __name(function _currentRules() { if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; } else { return this.conditions["INITIAL"].rules; } }, "_currentRules"), // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available topState: /* @__PURE__ */ __name(function topState(n2) { n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0); if (n2 >= 0) { return this.conditionStack[n2]; } else { return "INITIAL"; } }, "topState"), // alias for begin(condition) pushState: /* @__PURE__ */ __name(function pushState(condition) { this.begin(condition); }, "pushState"), // return the number of states currently on the stack stateStackSize: /* @__PURE__ */ __name(function stateStackSize() { return this.conditionStack.length; }, "stateStackSize"), options: { "case-insensitive": true }, performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { var YYSTATE = YY_START; switch ($avoiding_name_collisions) { case 0: this.begin("acc_title"); return 24; break; case 1: this.popState(); return "acc_title_value"; break; case 2: this.begin("acc_descr"); return 26; break; case 3: this.popState(); return "acc_descr_value"; break; case 4: this.begin("acc_descr_multiline"); break; case 5: this.popState(); break; case 6: return "acc_descr_multiline_value"; break; case 7: return 33; break; case 8: return 34; break; case 9: return 35; break; case 10: return 36; break; case 11: return 10; break; case 12: break; case 13: return 8; break; case 14: return 50; break; case 15: return 70; break; case 16: return 4; break; case 17: this.begin("block"); return 17; break; case 18: return 49; break; case 19: return 49; break; case 20: return 42; break; case 21: return 15; break; case 22: return 13; break; case 23: break; case 24: return 59; break; case 25: return 56; break; case 26: return 56; break; case 27: return 60; break; case 28: break; case 29: this.popState(); return 19; break; case 30: return yy_.yytext[0]; break; case 31: return 20; break; case 32: return 21; break; case 33: this.begin("style"); return 44; break; case 34: this.popState(); return 10; break; case 35: break; case 36: return 13; break; case 37: return 42; break; case 38: return 49; break; case 39: this.begin("style"); return 37; break; case 40: return 43; break; case 41: return 63; break; case 42: return 65; break; case 43: return 65; break; case 44: return 65; break; case 45: return 63; break; case 46: return 63; break; case 47: return 64; break; case 48: return 64; break; case 49: return 64; break; case 50: return 64; break; case 51: return 64; break; case 52: return 65; break; case 53: return 64; break; case 54: return 65; break; case 55: return 66; break; case 56: return 66; break; case 57: return 66; break; case 58: return 66; break; case 59: return 63; break; case 60: return 64; break; case 61: return 65; break; case 62: return 67; break; case 63: return 68; break; case 64: return 69; break; case 65: return 69; break; case 66: return 68; break; case 67: return 68; break; case 68: return 68; break; case 69: return 41; break; case 70: return 47; break; case 71: return 40; break; case 72: return 48; break; case 73: return yy_.yytext[0]; break; case 74: return 6; break; } }, "anonymous"), rules: [/^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:[\s]+)/i, /^(?:"[^"%\r\n\v\b\\]+")/i, /^(?:"[^"]*")/i, /^(?:erDiagram\b)/i, /^(?:\{)/i, /^(?:#)/i, /^(?:#)/i, /^(?:,)/i, /^(?::::)/i, /^(?::)/i, /^(?:\s+)/i, /^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i, /^(?:([^\s]*)[~].*[~]([^\s]*))/i, /^(?:([\*A-Za-z_\u00C0-\uFFFF][A-Za-z0-9\-\_\[\]\(\)\u00C0-\uFFFF\*]*))/i, /^(?:"[^"]*")/i, /^(?:[\n]+)/i, /^(?:\})/i, /^(?:.)/i, /^(?:\[)/i, /^(?:\])/i, /^(?:style\b)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?::)/i, /^(?:,)/i, /^(?:#)/i, /^(?:classDef\b)/i, /^(?:class\b)/i, /^(?:one or zero\b)/i, /^(?:one or more\b)/i, /^(?:one or many\b)/i, /^(?:1\+)/i, /^(?:\|o\b)/i, /^(?:zero or one\b)/i, /^(?:zero or more\b)/i, /^(?:zero or many\b)/i, /^(?:0\+)/i, /^(?:\}o\b)/i, /^(?:many\(0\))/i, /^(?:many\(1\))/i, /^(?:many\b)/i, /^(?:\}\|)/i, /^(?:one\b)/i, /^(?:only one\b)/i, /^(?:1\b)/i, /^(?:\|\|)/i, /^(?:o\|)/i, /^(?:o\{)/i, /^(?:\|\{)/i, /^(?:\s*u\b)/i, /^(?:\.\.)/i, /^(?:--)/i, /^(?:to\b)/i, /^(?:optionally to\b)/i, /^(?:\.-)/i, /^(?:-\.)/i, /^(?:([^\x00-\x7F]|\w|-|\*)+)/i, /^(?:;)/i, /^(?:([^\x00-\x7F]|\w|-|\*)+)/i, /^(?:[0-9])/i, /^(?:.)/i, /^(?:$)/i], conditions: { "style": { "rules": [34, 35, 36, 37, 38, 69, 70], "inclusive": false }, "acc_descr_multiline": { "rules": [5, 6], "inclusive": false }, "acc_descr": { "rules": [3], "inclusive": false }, "acc_title": { "rules": [1], "inclusive": false }, "block": { "rules": [23, 24, 25, 26, 27, 28, 29, 30], "inclusive": false }, "INITIAL": { "rules": [0, 2, 4, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 31, 32, 33, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 71, 72, 73, 74], "inclusive": true } } }; return lexer2; })(); parser24.lexer = lexer; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser24; parser24.Parser = Parser3; return new Parser3(); })(); parser3.parser = parser3; erDiagram_default = parser3; } }); // src/diagrams/er/erDb.ts var ErDB; var init_erDb = __esm({ "src/diagrams/er/erDb.ts"() { "use strict"; init_logger(); init_diagramAPI(); init_commonDb(); init_utils2(); ErDB = class { constructor() { this.entities = /* @__PURE__ */ new Map(); this.relationships = []; this.classes = /* @__PURE__ */ new Map(); this.direction = "TB"; this.Cardinality = { ZERO_OR_ONE: "ZERO_OR_ONE", ZERO_OR_MORE: "ZERO_OR_MORE", ONE_OR_MORE: "ONE_OR_MORE", ONLY_ONE: "ONLY_ONE", MD_PARENT: "MD_PARENT" }; this.Identification = { NON_IDENTIFYING: "NON_IDENTIFYING", IDENTIFYING: "IDENTIFYING" }; this.setAccTitle = setAccTitle; this.getAccTitle = getAccTitle; this.setAccDescription = setAccDescription; this.getAccDescription = getAccDescription; this.setDiagramTitle = setDiagramTitle; this.getDiagramTitle = getDiagramTitle; this.getConfig = /* @__PURE__ */ __name(() => getConfig2().er, "getConfig"); this.clear(); this.addEntity = this.addEntity.bind(this); this.addAttributes = this.addAttributes.bind(this); this.addRelationship = this.addRelationship.bind(this); this.setDirection = this.setDirection.bind(this); this.addCssStyles = this.addCssStyles.bind(this); this.addClass = this.addClass.bind(this); this.setClass = this.setClass.bind(this); this.setAccTitle = this.setAccTitle.bind(this); this.setAccDescription = this.setAccDescription.bind(this); } static { __name(this, "ErDB"); } /** * Add entity * @param name - The name of the entity * @param alias - The alias of the entity */ addEntity(name, alias = "") { if (!this.entities.has(name)) { this.entities.set(name, { id: `entity-${name}-${this.entities.size}`, label: name, attributes: [], alias, shape: "erBox", look: getConfig2().look ?? "default", cssClasses: "default", cssStyles: [] }); log.info("Added new entity :", name); } else if (!this.entities.get(name)?.alias && alias) { this.entities.get(name).alias = alias; log.info(`Add alias '${alias}' to entity '${name}'`); } return this.entities.get(name); } getEntity(name) { return this.entities.get(name); } getEntities() { return this.entities; } getClasses() { return this.classes; } addAttributes(entityName, attribs) { const entity = this.addEntity(entityName); let i2; for (i2 = attribs.length - 1; i2 >= 0; i2--) { if (!attribs[i2].keys) { attribs[i2].keys = []; } if (!attribs[i2].comment) { attribs[i2].comment = ""; } entity.attributes.push(attribs[i2]); log.debug("Added attribute ", attribs[i2].name); } } /** * Add a relationship * * @param entA - The first entity in the relationship * @param rolA - The role played by the first entity in relation to the second * @param entB - The second entity in the relationship * @param rSpec - The details of the relationship between the two entities */ addRelationship(entA, rolA, entB, rSpec) { const entityA = this.entities.get(entA); const entityB = this.entities.get(entB); if (!entityA || !entityB) { return; } const rel2 = { entityA: entityA.id, roleA: rolA, entityB: entityB.id, relSpec: rSpec }; this.relationships.push(rel2); log.debug("Added new relationship :", rel2); } getRelationships() { return this.relationships; } getDirection() { return this.direction; } setDirection(dir2) { this.direction = dir2; } getCompiledStyles(classDefs) { let compiledStyles = []; for (const customClass of classDefs) { const cssClass = this.classes.get(customClass); if (cssClass?.styles) { compiledStyles = [...compiledStyles, ...cssClass.styles ?? []].map((s2) => s2.trim()); } if (cssClass?.textStyles) { compiledStyles = [...compiledStyles, ...cssClass.textStyles ?? []].map((s2) => s2.trim()); } } return compiledStyles; } addCssStyles(ids, styles4) { for (const id30 of ids) { const entity = this.entities.get(id30); if (!styles4 || !entity) { return; } for (const style3 of styles4) { entity.cssStyles.push(style3); } } } addClass(ids, style3) { ids.forEach((id30) => { let classNode = this.classes.get(id30); if (classNode === void 0) { classNode = { id: id30, styles: [], textStyles: [] }; this.classes.set(id30, classNode); } if (style3) { style3.forEach(function(s2) { if (/color/.exec(s2)) { const newStyle = s2.replace("fill", "bgFill"); classNode.textStyles.push(newStyle); } classNode.styles.push(s2); }); } }); } setClass(ids, classNames) { for (const id30 of ids) { const entity = this.entities.get(id30); if (entity) { for (const className of classNames) { entity.cssClasses += " " + className; } } } } clear() { this.entities = /* @__PURE__ */ new Map(); this.classes = /* @__PURE__ */ new Map(); this.relationships = []; clear(); } getData() { const nodes5 = []; const edges3 = []; const config5 = getConfig2(); for (const entityKey of this.entities.keys()) { const entityNode = this.entities.get(entityKey); if (entityNode) { entityNode.cssCompiledStyles = this.getCompiledStyles(entityNode.cssClasses.split(" ")); nodes5.push(entityNode); } } let count2 = 0; for (const relationship of this.relationships) { const edge = { id: getEdgeId(relationship.entityA, relationship.entityB, { prefix: "id", counter: count2++ }), type: "normal", curve: "basis", start: relationship.entityA, end: relationship.entityB, label: relationship.roleA, labelpos: "c", thickness: "normal", classes: "relationshipLine", arrowTypeStart: relationship.relSpec.cardB.toLowerCase(), arrowTypeEnd: relationship.relSpec.cardA.toLowerCase(), pattern: relationship.relSpec.relType == "IDENTIFYING" ? "solid" : "dashed", look: config5.look }; edges3.push(edge); } return { nodes: nodes5, edges: edges3, other: {}, config: config5, direction: "TB" }; } }; } }); // src/diagrams/er/erRenderer-unified.ts var erRenderer_unified_exports = {}; __export(erRenderer_unified_exports, { draw: () => draw3 }); var draw3; var init_erRenderer_unified = __esm({ "src/diagrams/er/erRenderer-unified.ts"() { "use strict"; init_diagramAPI(); init_logger(); init_insertElementsForSize(); init_render2(); init_setupViewPortForSVG(); init_utils2(); init_src32(); draw3 = /* @__PURE__ */ __name(async function(text4, id30, _version, diag) { log.info("REF0:"); log.info("Drawing er diagram (unified)", id30); const { securityLevel, er: conf5, layout: layout6 } = getConfig2(); const data4Layout = diag.db.getData(); const svg2 = getDiagramElement(id30, securityLevel); data4Layout.type = diag.type; data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout6); data4Layout.config.flowchart.nodeSpacing = conf5?.nodeSpacing || 140; data4Layout.config.flowchart.rankSpacing = conf5?.rankSpacing || 80; data4Layout.direction = diag.db.getDirection(); data4Layout.markers = ["only_one", "zero_or_one", "one_or_more", "zero_or_more"]; data4Layout.diagramId = id30; await render6(data4Layout, svg2); if (data4Layout.layoutAlgorithm === "elk") { svg2.select(".edges").lower(); } const backgroundNodes = svg2.selectAll('[id*="-background"]'); if (Array.from(backgroundNodes).length > 0) { backgroundNodes.each(function() { const backgroundNode = select_default2(this); const backgroundId = backgroundNode.attr("id"); const nonBackgroundId = backgroundId.replace("-background", ""); const nonBackgroundNode = svg2.select(`#${CSS.escape(nonBackgroundId)}`); if (!nonBackgroundNode.empty()) { const transform8 = nonBackgroundNode.attr("transform"); backgroundNode.attr("transform", transform8); } }); } const padding2 = 8; utils_default2.insertTitle( svg2, "erDiagramTitleText", conf5?.titleTopMargin ?? 25, diag.db.getDiagramTitle() ); setupViewPortForSVG(svg2, padding2, "erDiagram", conf5?.useMaxWidth ?? true); }, "draw"); } }); // src/diagrams/er/styles.ts var fade2, getStyles4, styles_default4; var init_styles4 = __esm({ "src/diagrams/er/styles.ts"() { "use strict"; init_dist(); fade2 = /* @__PURE__ */ __name((color2, opacity) => { const channel2 = channel_default2; const r2 = channel2(color2, "r"); const g2 = channel2(color2, "g"); const b3 = channel2(color2, "b"); return rgba_default(r2, g2, b3, opacity); }, "fade"); getStyles4 = /* @__PURE__ */ __name((options2) => ` .entityBox { fill: ${options2.mainBkg}; stroke: ${options2.nodeBorder}; } .relationshipLabelBox { fill: ${options2.tertiaryColor}; opacity: 0.7; background-color: ${options2.tertiaryColor}; rect { opacity: 0.5; } } .labelBkg { background-color: ${fade2(options2.tertiaryColor, 0.5)}; } .edgeLabel .label { fill: ${options2.nodeBorder}; font-size: 14px; } .label { font-family: ${options2.fontFamily}; color: ${options2.nodeTextColor || options2.textColor}; } .edge-pattern-dashed { stroke-dasharray: 8,8; } .node rect, .node circle, .node ellipse, .node polygon { fill: ${options2.mainBkg}; stroke: ${options2.nodeBorder}; stroke-width: 1px; } .relationshipLine { stroke: ${options2.lineColor}; stroke-width: 1; fill: none; } .marker { fill: none !important; stroke: ${options2.lineColor} !important; stroke-width: 1; } `, "getStyles"); styles_default4 = getStyles4; } }); // src/diagrams/er/erDiagram.ts var erDiagram_exports = {}; __export(erDiagram_exports, { diagram: () => diagram3 }); var diagram3; var init_erDiagram2 = __esm({ "src/diagrams/er/erDiagram.ts"() { "use strict"; init_erDiagram(); init_erDb(); init_erRenderer_unified(); init_styles4(); diagram3 = { parser: erDiagram_default, get db() { return new ErDB(); }, renderer: erRenderer_unified_exports, styles: styles_default4 }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/syntax-tree.js function isAstNode(obj) { return typeof obj === "object" && obj !== null && typeof obj.$type === "string"; } function isReference(obj) { return typeof obj === "object" && obj !== null && typeof obj.$refText === "string"; } function isAstNodeDescription(obj) { return typeof obj === "object" && obj !== null && typeof obj.name === "string" && typeof obj.type === "string" && typeof obj.path === "string"; } function isLinkingError(obj) { return typeof obj === "object" && obj !== null && isAstNode(obj.container) && isReference(obj.reference) && typeof obj.message === "string"; } function isCompositeCstNode(node2) { return typeof node2 === "object" && node2 !== null && Array.isArray(node2.content); } function isLeafCstNode(node2) { return typeof node2 === "object" && node2 !== null && typeof node2.tokenType === "object"; } function isRootCstNode(node2) { return isCompositeCstNode(node2) && typeof node2.fullText === "string"; } var AbstractAstReflection; var init_syntax_tree = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/syntax-tree.js"() { "use strict"; __name(isAstNode, "isAstNode"); __name(isReference, "isReference"); __name(isAstNodeDescription, "isAstNodeDescription"); __name(isLinkingError, "isLinkingError"); AbstractAstReflection = class { static { __name(this, "AbstractAstReflection"); } constructor() { this.subtypes = {}; this.allSubtypes = {}; } isInstance(node2, type3) { return isAstNode(node2) && this.isSubtype(node2.$type, type3); } isSubtype(subtype, supertype) { if (subtype === supertype) { return true; } let nested = this.subtypes[subtype]; if (!nested) { nested = this.subtypes[subtype] = {}; } const existing = nested[supertype]; if (existing !== void 0) { return existing; } else { const result = this.computeIsSubtype(subtype, supertype); nested[supertype] = result; return result; } } getAllSubTypes(type3) { const existing = this.allSubtypes[type3]; if (existing) { return existing; } else { const allTypes = this.getAllTypes(); const types = []; for (const possibleSubType of allTypes) { if (this.isSubtype(possibleSubType, type3)) { types.push(possibleSubType); } } this.allSubtypes[type3] = types; return types; } } }; __name(isCompositeCstNode, "isCompositeCstNode"); __name(isLeafCstNode, "isLeafCstNode"); __name(isRootCstNode, "isRootCstNode"); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/stream.js function toString5(item) { if (typeof item === "string") { return item; } if (typeof item === "undefined") { return "undefined"; } if (typeof item.toString === "function") { return item.toString(); } return Object.prototype.toString.call(item); } function isIterable(obj) { return !!obj && typeof obj[Symbol.iterator] === "function"; } function stream(...collections) { if (collections.length === 1) { const collection4 = collections[0]; if (collection4 instanceof StreamImpl) { return collection4; } if (isIterable(collection4)) { return new StreamImpl(() => collection4[Symbol.iterator](), (iterator) => iterator.next()); } if (typeof collection4.length === "number") { return new StreamImpl(() => ({ index: 0 }), (state3) => { if (state3.index < collection4.length) { return { done: false, value: collection4[state3.index++] }; } else { return DONE_RESULT; } }); } } if (collections.length > 1) { return new StreamImpl(() => ({ collIndex: 0, arrIndex: 0 }), (state3) => { do { if (state3.iterator) { const next3 = state3.iterator.next(); if (!next3.done) { return next3; } state3.iterator = void 0; } if (state3.array) { if (state3.arrIndex < state3.array.length) { return { done: false, value: state3.array[state3.arrIndex++] }; } state3.array = void 0; state3.arrIndex = 0; } if (state3.collIndex < collections.length) { const collection4 = collections[state3.collIndex++]; if (isIterable(collection4)) { state3.iterator = collection4[Symbol.iterator](); } else if (collection4 && typeof collection4.length === "number") { state3.array = collection4; } } } while (state3.iterator || state3.array || state3.collIndex < collections.length); return DONE_RESULT; }); } return EMPTY_STREAM; } var StreamImpl, EMPTY_STREAM, DONE_RESULT, TreeStreamImpl, Reduction; var init_stream = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/stream.js"() { "use strict"; StreamImpl = class _StreamImpl { static { __name(this, "StreamImpl"); } constructor(startFn, nextFn) { this.startFn = startFn; this.nextFn = nextFn; } iterator() { const iterator = { state: this.startFn(), next: /* @__PURE__ */ __name(() => this.nextFn(iterator.state), "next"), [Symbol.iterator]: () => iterator }; return iterator; } [Symbol.iterator]() { return this.iterator(); } isEmpty() { const iterator = this.iterator(); return Boolean(iterator.next().done); } count() { const iterator = this.iterator(); let count2 = 0; let next3 = iterator.next(); while (!next3.done) { count2++; next3 = iterator.next(); } return count2; } toArray() { const result = []; const iterator = this.iterator(); let next3; do { next3 = iterator.next(); if (next3.value !== void 0) { result.push(next3.value); } } while (!next3.done); return result; } toSet() { return new Set(this); } toMap(keyFn, valueFn) { const entryStream = this.map((element3) => [ keyFn ? keyFn(element3) : element3, valueFn ? valueFn(element3) : element3 ]); return new Map(entryStream); } toString() { return this.join(); } concat(other) { return new _StreamImpl(() => ({ first: this.startFn(), firstDone: false, iterator: other[Symbol.iterator]() }), (state3) => { let result; if (!state3.firstDone) { do { result = this.nextFn(state3.first); if (!result.done) { return result; } } while (!result.done); state3.firstDone = true; } do { result = state3.iterator.next(); if (!result.done) { return result; } } while (!result.done); return DONE_RESULT; }); } join(separator = ",") { const iterator = this.iterator(); let value2 = ""; let result; let addSeparator = false; do { result = iterator.next(); if (!result.done) { if (addSeparator) { value2 += separator; } value2 += toString5(result.value); } addSeparator = true; } while (!result.done); return value2; } indexOf(searchElement, fromIndex = 0) { const iterator = this.iterator(); let index = 0; let next3 = iterator.next(); while (!next3.done) { if (index >= fromIndex && next3.value === searchElement) { return index; } next3 = iterator.next(); index++; } return -1; } every(predicate) { const iterator = this.iterator(); let next3 = iterator.next(); while (!next3.done) { if (!predicate(next3.value)) { return false; } next3 = iterator.next(); } return true; } some(predicate) { const iterator = this.iterator(); let next3 = iterator.next(); while (!next3.done) { if (predicate(next3.value)) { return true; } next3 = iterator.next(); } return false; } forEach(callbackfn) { const iterator = this.iterator(); let index = 0; let next3 = iterator.next(); while (!next3.done) { callbackfn(next3.value, index); next3 = iterator.next(); index++; } } map(callbackfn) { return new _StreamImpl(this.startFn, (state3) => { const { done, value: value2 } = this.nextFn(state3); if (done) { return DONE_RESULT; } else { return { done: false, value: callbackfn(value2) }; } }); } filter(predicate) { return new _StreamImpl(this.startFn, (state3) => { let result; do { result = this.nextFn(state3); if (!result.done && predicate(result.value)) { return result; } } while (!result.done); return DONE_RESULT; }); } nonNullable() { return this.filter((e3) => e3 !== void 0 && e3 !== null); } reduce(callbackfn, initialValue) { const iterator = this.iterator(); let previousValue = initialValue; let next3 = iterator.next(); while (!next3.done) { if (previousValue === void 0) { previousValue = next3.value; } else { previousValue = callbackfn(previousValue, next3.value); } next3 = iterator.next(); } return previousValue; } reduceRight(callbackfn, initialValue) { return this.recursiveReduce(this.iterator(), callbackfn, initialValue); } recursiveReduce(iterator, callbackfn, initialValue) { const next3 = iterator.next(); if (next3.done) { return initialValue; } const previousValue = this.recursiveReduce(iterator, callbackfn, initialValue); if (previousValue === void 0) { return next3.value; } return callbackfn(previousValue, next3.value); } find(predicate) { const iterator = this.iterator(); let next3 = iterator.next(); while (!next3.done) { if (predicate(next3.value)) { return next3.value; } next3 = iterator.next(); } return void 0; } findIndex(predicate) { const iterator = this.iterator(); let index = 0; let next3 = iterator.next(); while (!next3.done) { if (predicate(next3.value)) { return index; } next3 = iterator.next(); index++; } return -1; } includes(searchElement) { const iterator = this.iterator(); let next3 = iterator.next(); while (!next3.done) { if (next3.value === searchElement) { return true; } next3 = iterator.next(); } return false; } flatMap(callbackfn) { return new _StreamImpl(() => ({ this: this.startFn() }), (state3) => { do { if (state3.iterator) { const next3 = state3.iterator.next(); if (next3.done) { state3.iterator = void 0; } else { return next3; } } const { done, value: value2 } = this.nextFn(state3.this); if (!done) { const mapped = callbackfn(value2); if (isIterable(mapped)) { state3.iterator = mapped[Symbol.iterator](); } else { return { done: false, value: mapped }; } } } while (state3.iterator); return DONE_RESULT; }); } flat(depth) { if (depth === void 0) { depth = 1; } if (depth <= 0) { return this; } const stream2 = depth > 1 ? this.flat(depth - 1) : this; return new _StreamImpl(() => ({ this: stream2.startFn() }), (state3) => { do { if (state3.iterator) { const next3 = state3.iterator.next(); if (next3.done) { state3.iterator = void 0; } else { return next3; } } const { done, value: value2 } = stream2.nextFn(state3.this); if (!done) { if (isIterable(value2)) { state3.iterator = value2[Symbol.iterator](); } else { return { done: false, value: value2 }; } } } while (state3.iterator); return DONE_RESULT; }); } head() { const iterator = this.iterator(); const result = iterator.next(); if (result.done) { return void 0; } return result.value; } tail(skipCount = 1) { return new _StreamImpl(() => { const state3 = this.startFn(); for (let i2 = 0; i2 < skipCount; i2++) { const next3 = this.nextFn(state3); if (next3.done) { return state3; } } return state3; }, this.nextFn); } limit(maxSize) { return new _StreamImpl(() => ({ size: 0, state: this.startFn() }), (state3) => { state3.size++; if (state3.size > maxSize) { return DONE_RESULT; } return this.nextFn(state3.state); }); } distinct(by) { return new _StreamImpl(() => ({ set: /* @__PURE__ */ new Set(), internalState: this.startFn() }), (state3) => { let result; do { result = this.nextFn(state3.internalState); if (!result.done) { const value2 = by ? by(result.value) : result.value; if (!state3.set.has(value2)) { state3.set.add(value2); return result; } } } while (!result.done); return DONE_RESULT; }); } exclude(other, key) { const otherKeySet = /* @__PURE__ */ new Set(); for (const item of other) { const value2 = key ? key(item) : item; otherKeySet.add(value2); } return this.filter((e3) => { const ownKey = key ? key(e3) : e3; return !otherKeySet.has(ownKey); }); } }; __name(toString5, "toString"); __name(isIterable, "isIterable"); EMPTY_STREAM = new StreamImpl(() => void 0, () => DONE_RESULT); DONE_RESULT = Object.freeze({ done: true, value: void 0 }); __name(stream, "stream"); TreeStreamImpl = class extends StreamImpl { static { __name(this, "TreeStreamImpl"); } constructor(root3, children2, options2) { super(() => ({ iterators: (options2 === null || options2 === void 0 ? void 0 : options2.includeRoot) ? [[root3][Symbol.iterator]()] : [children2(root3)[Symbol.iterator]()], pruned: false }), (state3) => { if (state3.pruned) { state3.iterators.pop(); state3.pruned = false; } while (state3.iterators.length > 0) { const iterator = state3.iterators[state3.iterators.length - 1]; const next3 = iterator.next(); if (next3.done) { state3.iterators.pop(); } else { state3.iterators.push(children2(next3.value)[Symbol.iterator]()); return next3; } } return DONE_RESULT; }); } iterator() { const iterator = { state: this.startFn(), next: /* @__PURE__ */ __name(() => this.nextFn(iterator.state), "next"), prune: /* @__PURE__ */ __name(() => { iterator.state.pruned = true; }, "prune"), [Symbol.iterator]: () => iterator }; return iterator; } }; (function(Reduction2) { function sum2(stream2) { return stream2.reduce((a2, b3) => a2 + b3, 0); } __name(sum2, "sum"); Reduction2.sum = sum2; function product(stream2) { return stream2.reduce((a2, b3) => a2 * b3, 0); } __name(product, "product"); Reduction2.product = product; function min9(stream2) { return stream2.reduce((a2, b3) => Math.min(a2, b3)); } __name(min9, "min"); Reduction2.min = min9; function max10(stream2) { return stream2.reduce((a2, b3) => Math.max(a2, b3)); } __name(max10, "max"); Reduction2.max = max10; })(Reduction || (Reduction = {})); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/cst-utils.js var cst_utils_exports = {}; __export(cst_utils_exports, { DefaultNameRegexp: () => DefaultNameRegexp, RangeComparison: () => RangeComparison, compareRange: () => compareRange, findCommentNode: () => findCommentNode, findDeclarationNodeAtOffset: () => findDeclarationNodeAtOffset, findLeafNodeAtOffset: () => findLeafNodeAtOffset, findLeafNodeBeforeOffset: () => findLeafNodeBeforeOffset, flattenCst: () => flattenCst, getInteriorNodes: () => getInteriorNodes, getNextNode: () => getNextNode, getPreviousNode: () => getPreviousNode, getStartlineNode: () => getStartlineNode, inRange: () => inRange, isChildNode: () => isChildNode, isCommentNode: () => isCommentNode, streamCst: () => streamCst, toDocumentSegment: () => toDocumentSegment, tokenToRange: () => tokenToRange }); function streamCst(node2) { return new TreeStreamImpl(node2, (element3) => { if (isCompositeCstNode(element3)) { return element3.content; } else { return []; } }, { includeRoot: true }); } function flattenCst(node2) { return streamCst(node2).filter(isLeafCstNode); } function isChildNode(child, parent4) { while (child.container) { child = child.container; if (child === parent4) { return true; } } return false; } function tokenToRange(token2) { return { start: { character: token2.startColumn - 1, line: token2.startLine - 1 }, end: { character: token2.endColumn, // endColumn uses the correct index line: token2.endLine - 1 } }; } function toDocumentSegment(node2) { if (!node2) { return void 0; } const { offset, end: end2, range: range3 } = node2; return { range: range3, offset, end: end2, length: end2 - offset }; } function compareRange(range3, to) { if (range3.end.line < to.start.line || range3.end.line === to.start.line && range3.end.character <= to.start.character) { return RangeComparison.Before; } else if (range3.start.line > to.end.line || range3.start.line === to.end.line && range3.start.character >= to.end.character) { return RangeComparison.After; } const startInside = range3.start.line > to.start.line || range3.start.line === to.start.line && range3.start.character >= to.start.character; const endInside = range3.end.line < to.end.line || range3.end.line === to.end.line && range3.end.character <= to.end.character; if (startInside && endInside) { return RangeComparison.Inside; } else if (startInside) { return RangeComparison.OverlapBack; } else if (endInside) { return RangeComparison.OverlapFront; } else { return RangeComparison.Outside; } } function inRange(range3, to) { const comparison = compareRange(range3, to); return comparison > RangeComparison.After; } function findDeclarationNodeAtOffset(cstNode, offset, nameRegexp = DefaultNameRegexp) { if (cstNode) { if (offset > 0) { const localOffset = offset - cstNode.offset; const textAtOffset = cstNode.text.charAt(localOffset); if (!nameRegexp.test(textAtOffset)) { offset--; } } return findLeafNodeAtOffset(cstNode, offset); } return void 0; } function findCommentNode(cstNode, commentNames) { if (cstNode) { const previous = getPreviousNode(cstNode, true); if (previous && isCommentNode(previous, commentNames)) { return previous; } if (isRootCstNode(cstNode)) { const endIndex = cstNode.content.findIndex((e3) => !e3.hidden); for (let i2 = endIndex - 1; i2 >= 0; i2--) { const child = cstNode.content[i2]; if (isCommentNode(child, commentNames)) { return child; } } } } return void 0; } function isCommentNode(cstNode, commentNames) { return isLeafCstNode(cstNode) && commentNames.includes(cstNode.tokenType.name); } function findLeafNodeAtOffset(node2, offset) { if (isLeafCstNode(node2)) { return node2; } else if (isCompositeCstNode(node2)) { const searchResult = binarySearch(node2, offset, false); if (searchResult) { return findLeafNodeAtOffset(searchResult, offset); } } return void 0; } function findLeafNodeBeforeOffset(node2, offset) { if (isLeafCstNode(node2)) { return node2; } else if (isCompositeCstNode(node2)) { const searchResult = binarySearch(node2, offset, true); if (searchResult) { return findLeafNodeBeforeOffset(searchResult, offset); } } return void 0; } function binarySearch(node2, offset, closest) { let left3 = 0; let right3 = node2.content.length - 1; let closestNode = void 0; while (left3 <= right3) { const middle = Math.floor((left3 + right3) / 2); const middleNode = node2.content[middle]; if (middleNode.offset <= offset && middleNode.end > offset) { return middleNode; } if (middleNode.end <= offset) { closestNode = closest ? middleNode : void 0; left3 = middle + 1; } else { right3 = middle - 1; } } return closestNode; } function getPreviousNode(node2, hidden = true) { while (node2.container) { const parent4 = node2.container; let index = parent4.content.indexOf(node2); while (index > 0) { index--; const previous = parent4.content[index]; if (hidden || !previous.hidden) { return previous; } } node2 = parent4; } return void 0; } function getNextNode(node2, hidden = true) { while (node2.container) { const parent4 = node2.container; let index = parent4.content.indexOf(node2); const last3 = parent4.content.length - 1; while (index < last3) { index++; const next3 = parent4.content[index]; if (hidden || !next3.hidden) { return next3; } } node2 = parent4; } return void 0; } function getStartlineNode(node2) { if (node2.range.start.character === 0) { return node2; } const line2 = node2.range.start.line; let last3 = node2; let index; while (node2.container) { const parent4 = node2.container; const selfIndex = index !== null && index !== void 0 ? index : parent4.content.indexOf(node2); if (selfIndex === 0) { node2 = parent4; index = void 0; } else { index = selfIndex - 1; node2 = parent4.content[index]; } if (node2.range.start.line !== line2) { break; } last3 = node2; } return last3; } function getInteriorNodes(start3, end2) { const commonParent = getCommonParent(start3, end2); if (!commonParent) { return []; } return commonParent.parent.content.slice(commonParent.a + 1, commonParent.b); } function getCommonParent(a2, b3) { const aParents = getParentChain(a2); const bParents = getParentChain(b3); let current; for (let i2 = 0; i2 < aParents.length && i2 < bParents.length; i2++) { const aParent = aParents[i2]; const bParent = bParents[i2]; if (aParent.parent === bParent.parent) { current = { parent: aParent.parent, a: aParent.index, b: bParent.index }; } else { break; } } return current; } function getParentChain(node2) { const chain = []; while (node2.container) { const parent4 = node2.container; const index = parent4.content.indexOf(node2); chain.push({ parent: parent4, index }); node2 = parent4; } return chain.reverse(); } var RangeComparison, DefaultNameRegexp; var init_cst_utils = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/cst-utils.js"() { "use strict"; init_syntax_tree(); init_stream(); __name(streamCst, "streamCst"); __name(flattenCst, "flattenCst"); __name(isChildNode, "isChildNode"); __name(tokenToRange, "tokenToRange"); __name(toDocumentSegment, "toDocumentSegment"); (function(RangeComparison2) { RangeComparison2[RangeComparison2["Before"] = 0] = "Before"; RangeComparison2[RangeComparison2["After"] = 1] = "After"; RangeComparison2[RangeComparison2["OverlapFront"] = 2] = "OverlapFront"; RangeComparison2[RangeComparison2["OverlapBack"] = 3] = "OverlapBack"; RangeComparison2[RangeComparison2["Inside"] = 4] = "Inside"; RangeComparison2[RangeComparison2["Outside"] = 5] = "Outside"; })(RangeComparison || (RangeComparison = {})); __name(compareRange, "compareRange"); __name(inRange, "inRange"); DefaultNameRegexp = /^[\w\p{L}]$/u; __name(findDeclarationNodeAtOffset, "findDeclarationNodeAtOffset"); __name(findCommentNode, "findCommentNode"); __name(isCommentNode, "isCommentNode"); __name(findLeafNodeAtOffset, "findLeafNodeAtOffset"); __name(findLeafNodeBeforeOffset, "findLeafNodeBeforeOffset"); __name(binarySearch, "binarySearch"); __name(getPreviousNode, "getPreviousNode"); __name(getNextNode, "getNextNode"); __name(getStartlineNode, "getStartlineNode"); __name(getInteriorNodes, "getInteriorNodes"); __name(getCommonParent, "getCommonParent"); __name(getParentChain, "getParentChain"); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/errors.js function assertUnreachable(_3) { throw new Error("Error! The input value was not handled."); } var ErrorWithLocation; var init_errors2 = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/errors.js"() { "use strict"; ErrorWithLocation = class extends Error { static { __name(this, "ErrorWithLocation"); } constructor(node2, message) { super(node2 ? `${message} at ${node2.range.start.line}:${node2.range.start.character}` : message); } }; __name(assertUnreachable, "assertUnreachable"); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/languages/generated/ast.js var ast_exports = {}; __export(ast_exports, { AbstractElement: () => AbstractElement, AbstractRule: () => AbstractRule, AbstractType: () => AbstractType, Action: () => Action, Alternatives: () => Alternatives, ArrayLiteral: () => ArrayLiteral, ArrayType: () => ArrayType, Assignment: () => Assignment, BooleanLiteral: () => BooleanLiteral, CharacterRange: () => CharacterRange, Condition: () => Condition, Conjunction: () => Conjunction, CrossReference: () => CrossReference, Disjunction: () => Disjunction, EndOfFile: () => EndOfFile, Grammar: () => Grammar, GrammarImport: () => GrammarImport, Group: () => Group, InferredType: () => InferredType, Interface: () => Interface, Keyword: () => Keyword2, LangiumGrammarAstReflection: () => LangiumGrammarAstReflection, LangiumGrammarTerminals: () => LangiumGrammarTerminals, NamedArgument: () => NamedArgument, NegatedToken: () => NegatedToken, Negation: () => Negation, NumberLiteral: () => NumberLiteral, Parameter: () => Parameter, ParameterReference: () => ParameterReference, ParserRule: () => ParserRule, ReferenceType: () => ReferenceType, RegexToken: () => RegexToken, ReturnType: () => ReturnType, RuleCall: () => RuleCall, SimpleType: () => SimpleType, StringLiteral: () => StringLiteral, TerminalAlternatives: () => TerminalAlternatives, TerminalGroup: () => TerminalGroup, TerminalRule: () => TerminalRule, TerminalRuleCall: () => TerminalRuleCall, Type: () => Type3, TypeAttribute: () => TypeAttribute, TypeDefinition: () => TypeDefinition, UnionType: () => UnionType, UnorderedGroup: () => UnorderedGroup, UntilToken: () => UntilToken, ValueLiteral: () => ValueLiteral, Wildcard: () => Wildcard, isAbstractElement: () => isAbstractElement, isAbstractRule: () => isAbstractRule, isAbstractType: () => isAbstractType, isAction: () => isAction, isAlternatives: () => isAlternatives, isArrayLiteral: () => isArrayLiteral, isArrayType: () => isArrayType, isAssignment: () => isAssignment, isBooleanLiteral: () => isBooleanLiteral, isCharacterRange: () => isCharacterRange, isCondition: () => isCondition, isConjunction: () => isConjunction, isCrossReference: () => isCrossReference, isDisjunction: () => isDisjunction, isEndOfFile: () => isEndOfFile, isFeatureName: () => isFeatureName, isGrammar: () => isGrammar, isGrammarImport: () => isGrammarImport, isGroup: () => isGroup, isInferredType: () => isInferredType, isInterface: () => isInterface, isKeyword: () => isKeyword, isNamedArgument: () => isNamedArgument, isNegatedToken: () => isNegatedToken, isNegation: () => isNegation, isNumberLiteral: () => isNumberLiteral, isParameter: () => isParameter, isParameterReference: () => isParameterReference, isParserRule: () => isParserRule, isPrimitiveType: () => isPrimitiveType, isReferenceType: () => isReferenceType, isRegexToken: () => isRegexToken, isReturnType: () => isReturnType, isRuleCall: () => isRuleCall, isSimpleType: () => isSimpleType, isStringLiteral: () => isStringLiteral, isTerminalAlternatives: () => isTerminalAlternatives, isTerminalGroup: () => isTerminalGroup, isTerminalRule: () => isTerminalRule, isTerminalRuleCall: () => isTerminalRuleCall, isType: () => isType, isTypeAttribute: () => isTypeAttribute, isTypeDefinition: () => isTypeDefinition, isUnionType: () => isUnionType, isUnorderedGroup: () => isUnorderedGroup, isUntilToken: () => isUntilToken, isValueLiteral: () => isValueLiteral, isWildcard: () => isWildcard, reflection: () => reflection }); function isAbstractRule(item) { return reflection.isInstance(item, AbstractRule); } function isAbstractType(item) { return reflection.isInstance(item, AbstractType); } function isCondition(item) { return reflection.isInstance(item, Condition); } function isFeatureName(item) { return isPrimitiveType(item) || item === "current" || item === "entry" || item === "extends" || item === "false" || item === "fragment" || item === "grammar" || item === "hidden" || item === "import" || item === "interface" || item === "returns" || item === "terminal" || item === "true" || item === "type" || item === "infer" || item === "infers" || item === "with" || typeof item === "string" && /\^?[_a-zA-Z][\w_]*/.test(item); } function isPrimitiveType(item) { return item === "string" || item === "number" || item === "boolean" || item === "Date" || item === "bigint"; } function isTypeDefinition(item) { return reflection.isInstance(item, TypeDefinition); } function isValueLiteral(item) { return reflection.isInstance(item, ValueLiteral); } function isAbstractElement(item) { return reflection.isInstance(item, AbstractElement); } function isArrayLiteral(item) { return reflection.isInstance(item, ArrayLiteral); } function isArrayType(item) { return reflection.isInstance(item, ArrayType); } function isBooleanLiteral(item) { return reflection.isInstance(item, BooleanLiteral); } function isConjunction(item) { return reflection.isInstance(item, Conjunction); } function isDisjunction(item) { return reflection.isInstance(item, Disjunction); } function isGrammar(item) { return reflection.isInstance(item, Grammar); } function isGrammarImport(item) { return reflection.isInstance(item, GrammarImport); } function isInferredType(item) { return reflection.isInstance(item, InferredType); } function isInterface(item) { return reflection.isInstance(item, Interface); } function isNamedArgument(item) { return reflection.isInstance(item, NamedArgument); } function isNegation(item) { return reflection.isInstance(item, Negation); } function isNumberLiteral(item) { return reflection.isInstance(item, NumberLiteral); } function isParameter(item) { return reflection.isInstance(item, Parameter); } function isParameterReference(item) { return reflection.isInstance(item, ParameterReference); } function isParserRule(item) { return reflection.isInstance(item, ParserRule); } function isReferenceType(item) { return reflection.isInstance(item, ReferenceType); } function isReturnType(item) { return reflection.isInstance(item, ReturnType); } function isSimpleType(item) { return reflection.isInstance(item, SimpleType); } function isStringLiteral(item) { return reflection.isInstance(item, StringLiteral); } function isTerminalRule(item) { return reflection.isInstance(item, TerminalRule); } function isType(item) { return reflection.isInstance(item, Type3); } function isTypeAttribute(item) { return reflection.isInstance(item, TypeAttribute); } function isUnionType(item) { return reflection.isInstance(item, UnionType); } function isAction(item) { return reflection.isInstance(item, Action); } function isAlternatives(item) { return reflection.isInstance(item, Alternatives); } function isAssignment(item) { return reflection.isInstance(item, Assignment); } function isCharacterRange(item) { return reflection.isInstance(item, CharacterRange); } function isCrossReference(item) { return reflection.isInstance(item, CrossReference); } function isEndOfFile(item) { return reflection.isInstance(item, EndOfFile); } function isGroup(item) { return reflection.isInstance(item, Group); } function isKeyword(item) { return reflection.isInstance(item, Keyword2); } function isNegatedToken(item) { return reflection.isInstance(item, NegatedToken); } function isRegexToken(item) { return reflection.isInstance(item, RegexToken); } function isRuleCall(item) { return reflection.isInstance(item, RuleCall); } function isTerminalAlternatives(item) { return reflection.isInstance(item, TerminalAlternatives); } function isTerminalGroup(item) { return reflection.isInstance(item, TerminalGroup); } function isTerminalRuleCall(item) { return reflection.isInstance(item, TerminalRuleCall); } function isUnorderedGroup(item) { return reflection.isInstance(item, UnorderedGroup); } function isUntilToken(item) { return reflection.isInstance(item, UntilToken); } function isWildcard(item) { return reflection.isInstance(item, Wildcard); } var LangiumGrammarTerminals, AbstractRule, AbstractType, Condition, TypeDefinition, ValueLiteral, AbstractElement, ArrayLiteral, ArrayType, BooleanLiteral, Conjunction, Disjunction, Grammar, GrammarImport, InferredType, Interface, NamedArgument, Negation, NumberLiteral, Parameter, ParameterReference, ParserRule, ReferenceType, ReturnType, SimpleType, StringLiteral, TerminalRule, Type3, TypeAttribute, UnionType, Action, Alternatives, Assignment, CharacterRange, CrossReference, EndOfFile, Group, Keyword2, NegatedToken, RegexToken, RuleCall, TerminalAlternatives, TerminalGroup, TerminalRuleCall, UnorderedGroup, UntilToken, Wildcard, LangiumGrammarAstReflection, reflection; var init_ast = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/languages/generated/ast.js"() { "use strict"; init_syntax_tree(); LangiumGrammarTerminals = { ID: /\^?[_a-zA-Z][\w_]*/, STRING: /"(\\.|[^"\\])*"|'(\\.|[^'\\])*'/, NUMBER: /NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity)/, RegexLiteral: /\/(?![*+?])(?:[^\r\n\[/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*\])+\/[a-z]*/, WS: /\s+/, ML_COMMENT: /\/\*[\s\S]*?\*\//, SL_COMMENT: /\/\/[^\n\r]*/ }; AbstractRule = "AbstractRule"; __name(isAbstractRule, "isAbstractRule"); AbstractType = "AbstractType"; __name(isAbstractType, "isAbstractType"); Condition = "Condition"; __name(isCondition, "isCondition"); __name(isFeatureName, "isFeatureName"); __name(isPrimitiveType, "isPrimitiveType"); TypeDefinition = "TypeDefinition"; __name(isTypeDefinition, "isTypeDefinition"); ValueLiteral = "ValueLiteral"; __name(isValueLiteral, "isValueLiteral"); AbstractElement = "AbstractElement"; __name(isAbstractElement, "isAbstractElement"); ArrayLiteral = "ArrayLiteral"; __name(isArrayLiteral, "isArrayLiteral"); ArrayType = "ArrayType"; __name(isArrayType, "isArrayType"); BooleanLiteral = "BooleanLiteral"; __name(isBooleanLiteral, "isBooleanLiteral"); Conjunction = "Conjunction"; __name(isConjunction, "isConjunction"); Disjunction = "Disjunction"; __name(isDisjunction, "isDisjunction"); Grammar = "Grammar"; __name(isGrammar, "isGrammar"); GrammarImport = "GrammarImport"; __name(isGrammarImport, "isGrammarImport"); InferredType = "InferredType"; __name(isInferredType, "isInferredType"); Interface = "Interface"; __name(isInterface, "isInterface"); NamedArgument = "NamedArgument"; __name(isNamedArgument, "isNamedArgument"); Negation = "Negation"; __name(isNegation, "isNegation"); NumberLiteral = "NumberLiteral"; __name(isNumberLiteral, "isNumberLiteral"); Parameter = "Parameter"; __name(isParameter, "isParameter"); ParameterReference = "ParameterReference"; __name(isParameterReference, "isParameterReference"); ParserRule = "ParserRule"; __name(isParserRule, "isParserRule"); ReferenceType = "ReferenceType"; __name(isReferenceType, "isReferenceType"); ReturnType = "ReturnType"; __name(isReturnType, "isReturnType"); SimpleType = "SimpleType"; __name(isSimpleType, "isSimpleType"); StringLiteral = "StringLiteral"; __name(isStringLiteral, "isStringLiteral"); TerminalRule = "TerminalRule"; __name(isTerminalRule, "isTerminalRule"); Type3 = "Type"; __name(isType, "isType"); TypeAttribute = "TypeAttribute"; __name(isTypeAttribute, "isTypeAttribute"); UnionType = "UnionType"; __name(isUnionType, "isUnionType"); Action = "Action"; __name(isAction, "isAction"); Alternatives = "Alternatives"; __name(isAlternatives, "isAlternatives"); Assignment = "Assignment"; __name(isAssignment, "isAssignment"); CharacterRange = "CharacterRange"; __name(isCharacterRange, "isCharacterRange"); CrossReference = "CrossReference"; __name(isCrossReference, "isCrossReference"); EndOfFile = "EndOfFile"; __name(isEndOfFile, "isEndOfFile"); Group = "Group"; __name(isGroup, "isGroup"); Keyword2 = "Keyword"; __name(isKeyword, "isKeyword"); NegatedToken = "NegatedToken"; __name(isNegatedToken, "isNegatedToken"); RegexToken = "RegexToken"; __name(isRegexToken, "isRegexToken"); RuleCall = "RuleCall"; __name(isRuleCall, "isRuleCall"); TerminalAlternatives = "TerminalAlternatives"; __name(isTerminalAlternatives, "isTerminalAlternatives"); TerminalGroup = "TerminalGroup"; __name(isTerminalGroup, "isTerminalGroup"); TerminalRuleCall = "TerminalRuleCall"; __name(isTerminalRuleCall, "isTerminalRuleCall"); UnorderedGroup = "UnorderedGroup"; __name(isUnorderedGroup, "isUnorderedGroup"); UntilToken = "UntilToken"; __name(isUntilToken, "isUntilToken"); Wildcard = "Wildcard"; __name(isWildcard, "isWildcard"); LangiumGrammarAstReflection = class extends AbstractAstReflection { static { __name(this, "LangiumGrammarAstReflection"); } getAllTypes() { return [AbstractElement, AbstractRule, AbstractType, Action, Alternatives, ArrayLiteral, ArrayType, Assignment, BooleanLiteral, CharacterRange, Condition, Conjunction, CrossReference, Disjunction, EndOfFile, Grammar, GrammarImport, Group, InferredType, Interface, Keyword2, NamedArgument, NegatedToken, Negation, NumberLiteral, Parameter, ParameterReference, ParserRule, ReferenceType, RegexToken, ReturnType, RuleCall, SimpleType, StringLiteral, TerminalAlternatives, TerminalGroup, TerminalRule, TerminalRuleCall, Type3, TypeAttribute, TypeDefinition, UnionType, UnorderedGroup, UntilToken, ValueLiteral, Wildcard]; } computeIsSubtype(subtype, supertype) { switch (subtype) { case Action: case Alternatives: case Assignment: case CharacterRange: case CrossReference: case EndOfFile: case Group: case Keyword2: case NegatedToken: case RegexToken: case RuleCall: case TerminalAlternatives: case TerminalGroup: case TerminalRuleCall: case UnorderedGroup: case UntilToken: case Wildcard: { return this.isSubtype(AbstractElement, supertype); } case ArrayLiteral: case NumberLiteral: case StringLiteral: { return this.isSubtype(ValueLiteral, supertype); } case ArrayType: case ReferenceType: case SimpleType: case UnionType: { return this.isSubtype(TypeDefinition, supertype); } case BooleanLiteral: { return this.isSubtype(Condition, supertype) || this.isSubtype(ValueLiteral, supertype); } case Conjunction: case Disjunction: case Negation: case ParameterReference: { return this.isSubtype(Condition, supertype); } case InferredType: case Interface: case Type3: { return this.isSubtype(AbstractType, supertype); } case ParserRule: { return this.isSubtype(AbstractRule, supertype) || this.isSubtype(AbstractType, supertype); } case TerminalRule: { return this.isSubtype(AbstractRule, supertype); } default: { return false; } } } getReferenceType(refInfo) { const referenceId = `${refInfo.container.$type}:${refInfo.property}`; switch (referenceId) { case "Action:type": case "CrossReference:type": case "Interface:superTypes": case "ParserRule:returnType": case "SimpleType:typeRef": { return AbstractType; } case "Grammar:hiddenTokens": case "ParserRule:hiddenTokens": case "RuleCall:rule": { return AbstractRule; } case "Grammar:usedGrammars": { return Grammar; } case "NamedArgument:parameter": case "ParameterReference:parameter": { return Parameter; } case "TerminalRuleCall:rule": { return TerminalRule; } default: { throw new Error(`${referenceId} is not a valid reference id.`); } } } getTypeMetaData(type3) { switch (type3) { case AbstractElement: { return { name: AbstractElement, properties: [ { name: "cardinality" }, { name: "lookahead" } ] }; } case ArrayLiteral: { return { name: ArrayLiteral, properties: [ { name: "elements", defaultValue: [] } ] }; } case ArrayType: { return { name: ArrayType, properties: [ { name: "elementType" } ] }; } case BooleanLiteral: { return { name: BooleanLiteral, properties: [ { name: "true", defaultValue: false } ] }; } case Conjunction: { return { name: Conjunction, properties: [ { name: "left" }, { name: "right" } ] }; } case Disjunction: { return { name: Disjunction, properties: [ { name: "left" }, { name: "right" } ] }; } case Grammar: { return { name: Grammar, properties: [ { name: "definesHiddenTokens", defaultValue: false }, { name: "hiddenTokens", defaultValue: [] }, { name: "imports", defaultValue: [] }, { name: "interfaces", defaultValue: [] }, { name: "isDeclared", defaultValue: false }, { name: "name" }, { name: "rules", defaultValue: [] }, { name: "types", defaultValue: [] }, { name: "usedGrammars", defaultValue: [] } ] }; } case GrammarImport: { return { name: GrammarImport, properties: [ { name: "path" } ] }; } case InferredType: { return { name: InferredType, properties: [ { name: "name" } ] }; } case Interface: { return { name: Interface, properties: [ { name: "attributes", defaultValue: [] }, { name: "name" }, { name: "superTypes", defaultValue: [] } ] }; } case NamedArgument: { return { name: NamedArgument, properties: [ { name: "calledByName", defaultValue: false }, { name: "parameter" }, { name: "value" } ] }; } case Negation: { return { name: Negation, properties: [ { name: "value" } ] }; } case NumberLiteral: { return { name: NumberLiteral, properties: [ { name: "value" } ] }; } case Parameter: { return { name: Parameter, properties: [ { name: "name" } ] }; } case ParameterReference: { return { name: ParameterReference, properties: [ { name: "parameter" } ] }; } case ParserRule: { return { name: ParserRule, properties: [ { name: "dataType" }, { name: "definesHiddenTokens", defaultValue: false }, { name: "definition" }, { name: "entry", defaultValue: false }, { name: "fragment", defaultValue: false }, { name: "hiddenTokens", defaultValue: [] }, { name: "inferredType" }, { name: "name" }, { name: "parameters", defaultValue: [] }, { name: "returnType" }, { name: "wildcard", defaultValue: false } ] }; } case ReferenceType: { return { name: ReferenceType, properties: [ { name: "referenceType" } ] }; } case ReturnType: { return { name: ReturnType, properties: [ { name: "name" } ] }; } case SimpleType: { return { name: SimpleType, properties: [ { name: "primitiveType" }, { name: "stringType" }, { name: "typeRef" } ] }; } case StringLiteral: { return { name: StringLiteral, properties: [ { name: "value" } ] }; } case TerminalRule: { return { name: TerminalRule, properties: [ { name: "definition" }, { name: "fragment", defaultValue: false }, { name: "hidden", defaultValue: false }, { name: "name" }, { name: "type" } ] }; } case Type3: { return { name: Type3, properties: [ { name: "name" }, { name: "type" } ] }; } case TypeAttribute: { return { name: TypeAttribute, properties: [ { name: "defaultValue" }, { name: "isOptional", defaultValue: false }, { name: "name" }, { name: "type" } ] }; } case UnionType: { return { name: UnionType, properties: [ { name: "types", defaultValue: [] } ] }; } case Action: { return { name: Action, properties: [ { name: "cardinality" }, { name: "feature" }, { name: "inferredType" }, { name: "lookahead" }, { name: "operator" }, { name: "type" } ] }; } case Alternatives: { return { name: Alternatives, properties: [ { name: "cardinality" }, { name: "elements", defaultValue: [] }, { name: "lookahead" } ] }; } case Assignment: { return { name: Assignment, properties: [ { name: "cardinality" }, { name: "feature" }, { name: "lookahead" }, { name: "operator" }, { name: "terminal" } ] }; } case CharacterRange: { return { name: CharacterRange, properties: [ { name: "cardinality" }, { name: "left" }, { name: "lookahead" }, { name: "right" } ] }; } case CrossReference: { return { name: CrossReference, properties: [ { name: "cardinality" }, { name: "deprecatedSyntax", defaultValue: false }, { name: "lookahead" }, { name: "terminal" }, { name: "type" } ] }; } case EndOfFile: { return { name: EndOfFile, properties: [ { name: "cardinality" }, { name: "lookahead" } ] }; } case Group: { return { name: Group, properties: [ { name: "cardinality" }, { name: "elements", defaultValue: [] }, { name: "guardCondition" }, { name: "lookahead" } ] }; } case Keyword2: { return { name: Keyword2, properties: [ { name: "cardinality" }, { name: "lookahead" }, { name: "value" } ] }; } case NegatedToken: { return { name: NegatedToken, properties: [ { name: "cardinality" }, { name: "lookahead" }, { name: "terminal" } ] }; } case RegexToken: { return { name: RegexToken, properties: [ { name: "cardinality" }, { name: "lookahead" }, { name: "regex" } ] }; } case RuleCall: { return { name: RuleCall, properties: [ { name: "arguments", defaultValue: [] }, { name: "cardinality" }, { name: "lookahead" }, { name: "rule" } ] }; } case TerminalAlternatives: { return { name: TerminalAlternatives, properties: [ { name: "cardinality" }, { name: "elements", defaultValue: [] }, { name: "lookahead" } ] }; } case TerminalGroup: { return { name: TerminalGroup, properties: [ { name: "cardinality" }, { name: "elements", defaultValue: [] }, { name: "lookahead" } ] }; } case TerminalRuleCall: { return { name: TerminalRuleCall, properties: [ { name: "cardinality" }, { name: "lookahead" }, { name: "rule" } ] }; } case UnorderedGroup: { return { name: UnorderedGroup, properties: [ { name: "cardinality" }, { name: "elements", defaultValue: [] }, { name: "lookahead" } ] }; } case UntilToken: { return { name: UntilToken, properties: [ { name: "cardinality" }, { name: "lookahead" }, { name: "terminal" } ] }; } case Wildcard: { return { name: Wildcard, properties: [ { name: "cardinality" }, { name: "lookahead" } ] }; } default: { return { name: type3, properties: [] }; } } } }; reflection = new LangiumGrammarAstReflection(); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/ast-utils.js var ast_utils_exports = {}; __export(ast_utils_exports, { assignMandatoryProperties: () => assignMandatoryProperties, copyAstNode: () => copyAstNode, findLocalReferences: () => findLocalReferences, findRootNode: () => findRootNode, getContainerOfType: () => getContainerOfType, getDocument: () => getDocument, hasContainerOfType: () => hasContainerOfType, linkContentToContainer: () => linkContentToContainer, streamAllContents: () => streamAllContents, streamAst: () => streamAst, streamContents: () => streamContents, streamReferences: () => streamReferences }); function linkContentToContainer(node2) { for (const [name, value2] of Object.entries(node2)) { if (!name.startsWith("$")) { if (Array.isArray(value2)) { value2.forEach((item, index) => { if (isAstNode(item)) { item.$container = node2; item.$containerProperty = name; item.$containerIndex = index; } }); } else if (isAstNode(value2)) { value2.$container = node2; value2.$containerProperty = name; } } } } function getContainerOfType(node2, typePredicate) { let item = node2; while (item) { if (typePredicate(item)) { return item; } item = item.$container; } return void 0; } function hasContainerOfType(node2, predicate) { let item = node2; while (item) { if (predicate(item)) { return true; } item = item.$container; } return false; } function getDocument(node2) { const rootNode = findRootNode(node2); const result = rootNode.$document; if (!result) { throw new Error("AST node has no document."); } return result; } function findRootNode(node2) { while (node2.$container) { node2 = node2.$container; } return node2; } function streamContents(node2, options2) { if (!node2) { throw new Error("Node must be an AstNode."); } const range3 = options2 === null || options2 === void 0 ? void 0 : options2.range; return new StreamImpl(() => ({ keys: Object.keys(node2), keyIndex: 0, arrayIndex: 0 }), (state3) => { while (state3.keyIndex < state3.keys.length) { const property2 = state3.keys[state3.keyIndex]; if (!property2.startsWith("$")) { const value2 = node2[property2]; if (isAstNode(value2)) { state3.keyIndex++; if (isAstNodeInRange(value2, range3)) { return { done: false, value: value2 }; } } else if (Array.isArray(value2)) { while (state3.arrayIndex < value2.length) { const index = state3.arrayIndex++; const element3 = value2[index]; if (isAstNode(element3) && isAstNodeInRange(element3, range3)) { return { done: false, value: element3 }; } } state3.arrayIndex = 0; } } state3.keyIndex++; } return DONE_RESULT; }); } function streamAllContents(root3, options2) { if (!root3) { throw new Error("Root node must be an AstNode."); } return new TreeStreamImpl(root3, (node2) => streamContents(node2, options2)); } function streamAst(root3, options2) { if (!root3) { throw new Error("Root node must be an AstNode."); } else if ((options2 === null || options2 === void 0 ? void 0 : options2.range) && !isAstNodeInRange(root3, options2.range)) { return new TreeStreamImpl(root3, () => []); } return new TreeStreamImpl(root3, (node2) => streamContents(node2, options2), { includeRoot: true }); } function isAstNodeInRange(astNode, range3) { var _a; if (!range3) { return true; } const nodeRange = (_a = astNode.$cstNode) === null || _a === void 0 ? void 0 : _a.range; if (!nodeRange) { return false; } return inRange(nodeRange, range3); } function streamReferences(node2) { return new StreamImpl(() => ({ keys: Object.keys(node2), keyIndex: 0, arrayIndex: 0 }), (state3) => { while (state3.keyIndex < state3.keys.length) { const property2 = state3.keys[state3.keyIndex]; if (!property2.startsWith("$")) { const value2 = node2[property2]; if (isReference(value2)) { state3.keyIndex++; return { done: false, value: { reference: value2, container: node2, property: property2 } }; } else if (Array.isArray(value2)) { while (state3.arrayIndex < value2.length) { const index = state3.arrayIndex++; const element3 = value2[index]; if (isReference(element3)) { return { done: false, value: { reference: element3, container: node2, property: property2, index } }; } } state3.arrayIndex = 0; } } state3.keyIndex++; } return DONE_RESULT; }); } function findLocalReferences(targetNode, lookup2 = getDocument(targetNode).parseResult.value) { const refs = []; streamAst(lookup2).forEach((node2) => { streamReferences(node2).forEach((refInfo) => { if (refInfo.reference.ref === targetNode) { refs.push(refInfo.reference); } }); }); return stream(refs); } function assignMandatoryProperties(reflection3, node2) { const typeMetaData = reflection3.getTypeMetaData(node2.$type); const genericNode = node2; for (const property2 of typeMetaData.properties) { if (property2.defaultValue !== void 0 && genericNode[property2.name] === void 0) { genericNode[property2.name] = copyDefaultValue(property2.defaultValue); } } } function copyDefaultValue(propertyType) { if (Array.isArray(propertyType)) { return [...propertyType.map(copyDefaultValue)]; } else { return propertyType; } } function copyAstNode(node2, buildReference) { const copy5 = { $type: node2.$type }; for (const [name, value2] of Object.entries(node2)) { if (!name.startsWith("$")) { if (isAstNode(value2)) { copy5[name] = copyAstNode(value2, buildReference); } else if (isReference(value2)) { copy5[name] = buildReference(copy5, name, value2.$refNode, value2.$refText); } else if (Array.isArray(value2)) { const copiedArray = []; for (const element3 of value2) { if (isAstNode(element3)) { copiedArray.push(copyAstNode(element3, buildReference)); } else if (isReference(element3)) { copiedArray.push(buildReference(copy5, name, element3.$refNode, element3.$refText)); } else { copiedArray.push(element3); } } copy5[name] = copiedArray; } else { copy5[name] = value2; } } } linkContentToContainer(copy5); return copy5; } var init_ast_utils = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/ast-utils.js"() { "use strict"; init_syntax_tree(); init_stream(); init_cst_utils(); __name(linkContentToContainer, "linkContentToContainer"); __name(getContainerOfType, "getContainerOfType"); __name(hasContainerOfType, "hasContainerOfType"); __name(getDocument, "getDocument"); __name(findRootNode, "findRootNode"); __name(streamContents, "streamContents"); __name(streamAllContents, "streamAllContents"); __name(streamAst, "streamAst"); __name(isAstNodeInRange, "isAstNodeInRange"); __name(streamReferences, "streamReferences"); __name(findLocalReferences, "findLocalReferences"); __name(assignMandatoryProperties, "assignMandatoryProperties"); __name(copyDefaultValue, "copyDefaultValue"); __name(copyAstNode, "copyAstNode"); } }); // ../../node_modules/.pnpm/@chevrotain+regexp-to-ast@11.0.3/node_modules/@chevrotain/regexp-to-ast/lib/src/utils.js function cc(char2) { return char2.charCodeAt(0); } function insertToSet(item, set5) { if (Array.isArray(item)) { item.forEach(function(subItem) { set5.push(subItem); }); } else { set5.push(item); } } function addFlag(flagObj, flagKey) { if (flagObj[flagKey] === true) { throw "duplicate flag " + flagKey; } const x5 = flagObj[flagKey]; flagObj[flagKey] = true; } function ASSERT_EXISTS(obj) { if (obj === void 0) { throw Error("Internal Error - Should never get here!"); } return true; } function ASSERT_NEVER_REACH_HERE() { throw Error("Internal Error - Should never get here!"); } function isCharacter(obj) { return obj["type"] === "Character"; } var init_utils3 = __esm({ "../../node_modules/.pnpm/@chevrotain+regexp-to-ast@11.0.3/node_modules/@chevrotain/regexp-to-ast/lib/src/utils.js"() { "use strict"; __name(cc, "cc"); __name(insertToSet, "insertToSet"); __name(addFlag, "addFlag"); __name(ASSERT_EXISTS, "ASSERT_EXISTS"); __name(ASSERT_NEVER_REACH_HERE, "ASSERT_NEVER_REACH_HERE"); __name(isCharacter, "isCharacter"); } }); // ../../node_modules/.pnpm/@chevrotain+regexp-to-ast@11.0.3/node_modules/@chevrotain/regexp-to-ast/lib/src/character-classes.js var digitsCharCodes, wordCharCodes, whitespaceCodes; var init_character_classes = __esm({ "../../node_modules/.pnpm/@chevrotain+regexp-to-ast@11.0.3/node_modules/@chevrotain/regexp-to-ast/lib/src/character-classes.js"() { "use strict"; init_utils3(); digitsCharCodes = []; for (let i2 = cc("0"); i2 <= cc("9"); i2++) { digitsCharCodes.push(i2); } wordCharCodes = [cc("_")].concat(digitsCharCodes); for (let i2 = cc("a"); i2 <= cc("z"); i2++) { wordCharCodes.push(i2); } for (let i2 = cc("A"); i2 <= cc("Z"); i2++) { wordCharCodes.push(i2); } whitespaceCodes = [ cc(" "), cc("\f"), cc("\n"), cc("\r"), cc(" "), cc("\v"), cc(" "), cc("\xA0"), cc("\u1680"), cc("\u2000"), cc("\u2001"), cc("\u2002"), cc("\u2003"), cc("\u2004"), cc("\u2005"), cc("\u2006"), cc("\u2007"), cc("\u2008"), cc("\u2009"), cc("\u200A"), cc("\u2028"), cc("\u2029"), cc("\u202F"), cc("\u205F"), cc("\u3000"), cc("\uFEFF") ]; } }); // ../../node_modules/.pnpm/@chevrotain+regexp-to-ast@11.0.3/node_modules/@chevrotain/regexp-to-ast/lib/src/regexp-parser.js var hexDigitPattern, decimalPattern, decimalPatternNoZero, RegExpParser; var init_regexp_parser = __esm({ "../../node_modules/.pnpm/@chevrotain+regexp-to-ast@11.0.3/node_modules/@chevrotain/regexp-to-ast/lib/src/regexp-parser.js"() { "use strict"; init_utils3(); init_character_classes(); hexDigitPattern = /[0-9a-fA-F]/; decimalPattern = /[0-9]/; decimalPatternNoZero = /[1-9]/; RegExpParser = class { static { __name(this, "RegExpParser"); } constructor() { this.idx = 0; this.input = ""; this.groupIdx = 0; } saveState() { return { idx: this.idx, input: this.input, groupIdx: this.groupIdx }; } restoreState(newState2) { this.idx = newState2.idx; this.input = newState2.input; this.groupIdx = newState2.groupIdx; } pattern(input) { this.idx = 0; this.input = input; this.groupIdx = 0; this.consumeChar("/"); const value2 = this.disjunction(); this.consumeChar("/"); const flags = { type: "Flags", loc: { begin: this.idx, end: input.length }, global: false, ignoreCase: false, multiLine: false, unicode: false, sticky: false }; while (this.isRegExpFlag()) { switch (this.popChar()) { case "g": addFlag(flags, "global"); break; case "i": addFlag(flags, "ignoreCase"); break; case "m": addFlag(flags, "multiLine"); break; case "u": addFlag(flags, "unicode"); break; case "y": addFlag(flags, "sticky"); break; } } if (this.idx !== this.input.length) { throw Error("Redundant input: " + this.input.substring(this.idx)); } return { type: "Pattern", flags, value: value2, loc: this.loc(0) }; } disjunction() { const alts = []; const begin = this.idx; alts.push(this.alternative()); while (this.peekChar() === "|") { this.consumeChar("|"); alts.push(this.alternative()); } return { type: "Disjunction", value: alts, loc: this.loc(begin) }; } alternative() { const terms = []; const begin = this.idx; while (this.isTerm()) { terms.push(this.term()); } return { type: "Alternative", value: terms, loc: this.loc(begin) }; } term() { if (this.isAssertion()) { return this.assertion(); } else { return this.atom(); } } assertion() { const begin = this.idx; switch (this.popChar()) { case "^": return { type: "StartAnchor", loc: this.loc(begin) }; case "$": return { type: "EndAnchor", loc: this.loc(begin) }; // '\b' or '\B' case "\\": switch (this.popChar()) { case "b": return { type: "WordBoundary", loc: this.loc(begin) }; case "B": return { type: "NonWordBoundary", loc: this.loc(begin) }; } throw Error("Invalid Assertion Escape"); // '(?=' or '(?!' case "(": this.consumeChar("?"); let type3; switch (this.popChar()) { case "=": type3 = "Lookahead"; break; case "!": type3 = "NegativeLookahead"; break; } ASSERT_EXISTS(type3); const disjunction = this.disjunction(); this.consumeChar(")"); return { type: type3, value: disjunction, loc: this.loc(begin) }; } return ASSERT_NEVER_REACH_HERE(); } quantifier(isBacktracking = false) { let range3 = void 0; const begin = this.idx; switch (this.popChar()) { case "*": range3 = { atLeast: 0, atMost: Infinity }; break; case "+": range3 = { atLeast: 1, atMost: Infinity }; break; case "?": range3 = { atLeast: 0, atMost: 1 }; break; case "{": const atLeast = this.integerIncludingZero(); switch (this.popChar()) { case "}": range3 = { atLeast, atMost: atLeast }; break; case ",": let atMost; if (this.isDigit()) { atMost = this.integerIncludingZero(); range3 = { atLeast, atMost }; } else { range3 = { atLeast, atMost: Infinity }; } this.consumeChar("}"); break; } if (isBacktracking === true && range3 === void 0) { return void 0; } ASSERT_EXISTS(range3); break; } if (isBacktracking === true && range3 === void 0) { return void 0; } if (ASSERT_EXISTS(range3)) { if (this.peekChar(0) === "?") { this.consumeChar("?"); range3.greedy = false; } else { range3.greedy = true; } range3.type = "Quantifier"; range3.loc = this.loc(begin); return range3; } } atom() { let atom2; const begin = this.idx; switch (this.peekChar()) { case ".": atom2 = this.dotAll(); break; case "\\": atom2 = this.atomEscape(); break; case "[": atom2 = this.characterClass(); break; case "(": atom2 = this.group(); break; } if (atom2 === void 0 && this.isPatternCharacter()) { atom2 = this.patternCharacter(); } if (ASSERT_EXISTS(atom2)) { atom2.loc = this.loc(begin); if (this.isQuantifier()) { atom2.quantifier = this.quantifier(); } return atom2; } return ASSERT_NEVER_REACH_HERE(); } dotAll() { this.consumeChar("."); return { type: "Set", complement: true, value: [cc("\n"), cc("\r"), cc("\u2028"), cc("\u2029")] }; } atomEscape() { this.consumeChar("\\"); switch (this.peekChar()) { case "1": case "2": case "3": case "4": case "5": case "6": case "7": case "8": case "9": return this.decimalEscapeAtom(); case "d": case "D": case "s": case "S": case "w": case "W": return this.characterClassEscape(); case "f": case "n": case "r": case "t": case "v": return this.controlEscapeAtom(); case "c": return this.controlLetterEscapeAtom(); case "0": return this.nulCharacterAtom(); case "x": return this.hexEscapeSequenceAtom(); case "u": return this.regExpUnicodeEscapeSequenceAtom(); default: return this.identityEscapeAtom(); } } decimalEscapeAtom() { const value2 = this.positiveInteger(); return { type: "GroupBackReference", value: value2 }; } characterClassEscape() { let set5; let complement = false; switch (this.popChar()) { case "d": set5 = digitsCharCodes; break; case "D": set5 = digitsCharCodes; complement = true; break; case "s": set5 = whitespaceCodes; break; case "S": set5 = whitespaceCodes; complement = true; break; case "w": set5 = wordCharCodes; break; case "W": set5 = wordCharCodes; complement = true; break; } if (ASSERT_EXISTS(set5)) { return { type: "Set", value: set5, complement }; } return ASSERT_NEVER_REACH_HERE(); } controlEscapeAtom() { let escapeCode; switch (this.popChar()) { case "f": escapeCode = cc("\f"); break; case "n": escapeCode = cc("\n"); break; case "r": escapeCode = cc("\r"); break; case "t": escapeCode = cc(" "); break; case "v": escapeCode = cc("\v"); break; } if (ASSERT_EXISTS(escapeCode)) { return { type: "Character", value: escapeCode }; } return ASSERT_NEVER_REACH_HERE(); } controlLetterEscapeAtom() { this.consumeChar("c"); const letter = this.popChar(); if (/[a-zA-Z]/.test(letter) === false) { throw Error("Invalid "); } const letterCode = letter.toUpperCase().charCodeAt(0) - 64; return { type: "Character", value: letterCode }; } nulCharacterAtom() { this.consumeChar("0"); return { type: "Character", value: cc("\0") }; } hexEscapeSequenceAtom() { this.consumeChar("x"); return this.parseHexDigits(2); } regExpUnicodeEscapeSequenceAtom() { this.consumeChar("u"); return this.parseHexDigits(4); } identityEscapeAtom() { const escapedChar = this.popChar(); return { type: "Character", value: cc(escapedChar) }; } classPatternCharacterAtom() { switch (this.peekChar()) { // istanbul ignore next case "\n": // istanbul ignore next case "\r": // istanbul ignore next case "\u2028": // istanbul ignore next case "\u2029": // istanbul ignore next case "\\": // istanbul ignore next case "]": throw Error("TBD"); default: const nextChar = this.popChar(); return { type: "Character", value: cc(nextChar) }; } } characterClass() { const set5 = []; let complement = false; this.consumeChar("["); if (this.peekChar(0) === "^") { this.consumeChar("^"); complement = true; } while (this.isClassAtom()) { const from2 = this.classAtom(); const isFromSingleChar = from2.type === "Character"; if (isCharacter(from2) && this.isRangeDash()) { this.consumeChar("-"); const to = this.classAtom(); const isToSingleChar = to.type === "Character"; if (isCharacter(to)) { if (to.value < from2.value) { throw Error("Range out of order in character class"); } set5.push({ from: from2.value, to: to.value }); } else { insertToSet(from2.value, set5); set5.push(cc("-")); insertToSet(to.value, set5); } } else { insertToSet(from2.value, set5); } } this.consumeChar("]"); return { type: "Set", complement, value: set5 }; } classAtom() { switch (this.peekChar()) { // istanbul ignore next case "]": // istanbul ignore next case "\n": // istanbul ignore next case "\r": // istanbul ignore next case "\u2028": // istanbul ignore next case "\u2029": throw Error("TBD"); case "\\": return this.classEscape(); default: return this.classPatternCharacterAtom(); } } classEscape() { this.consumeChar("\\"); switch (this.peekChar()) { // Matches a backspace. // (Not to be confused with \b word boundary outside characterClass) case "b": this.consumeChar("b"); return { type: "Character", value: cc("\b") }; case "d": case "D": case "s": case "S": case "w": case "W": return this.characterClassEscape(); case "f": case "n": case "r": case "t": case "v": return this.controlEscapeAtom(); case "c": return this.controlLetterEscapeAtom(); case "0": return this.nulCharacterAtom(); case "x": return this.hexEscapeSequenceAtom(); case "u": return this.regExpUnicodeEscapeSequenceAtom(); default: return this.identityEscapeAtom(); } } group() { let capturing = true; this.consumeChar("("); switch (this.peekChar(0)) { case "?": this.consumeChar("?"); this.consumeChar(":"); capturing = false; break; default: this.groupIdx++; break; } const value2 = this.disjunction(); this.consumeChar(")"); const groupAst = { type: "Group", capturing, value: value2 }; if (capturing) { groupAst["idx"] = this.groupIdx; } return groupAst; } positiveInteger() { let number7 = this.popChar(); if (decimalPatternNoZero.test(number7) === false) { throw Error("Expecting a positive integer"); } while (decimalPattern.test(this.peekChar(0))) { number7 += this.popChar(); } return parseInt(number7, 10); } integerIncludingZero() { let number7 = this.popChar(); if (decimalPattern.test(number7) === false) { throw Error("Expecting an integer"); } while (decimalPattern.test(this.peekChar(0))) { number7 += this.popChar(); } return parseInt(number7, 10); } patternCharacter() { const nextChar = this.popChar(); switch (nextChar) { // istanbul ignore next case "\n": // istanbul ignore next case "\r": // istanbul ignore next case "\u2028": // istanbul ignore next case "\u2029": // istanbul ignore next case "^": // istanbul ignore next case "$": // istanbul ignore next case "\\": // istanbul ignore next case ".": // istanbul ignore next case "*": // istanbul ignore next case "+": // istanbul ignore next case "?": // istanbul ignore next case "(": // istanbul ignore next case ")": // istanbul ignore next case "[": // istanbul ignore next case "|": throw Error("TBD"); default: return { type: "Character", value: cc(nextChar) }; } } isRegExpFlag() { switch (this.peekChar(0)) { case "g": case "i": case "m": case "u": case "y": return true; default: return false; } } isRangeDash() { return this.peekChar() === "-" && this.isClassAtom(1); } isDigit() { return decimalPattern.test(this.peekChar(0)); } isClassAtom(howMuch = 0) { switch (this.peekChar(howMuch)) { case "]": case "\n": case "\r": case "\u2028": case "\u2029": return false; default: return true; } } isTerm() { return this.isAtom() || this.isAssertion(); } isAtom() { if (this.isPatternCharacter()) { return true; } switch (this.peekChar(0)) { case ".": case "\\": // atomEscape case "[": // characterClass // TODO: isAtom must be called before isAssertion - disambiguate case "(": return true; default: return false; } } isAssertion() { switch (this.peekChar(0)) { case "^": case "$": return true; // '\b' or '\B' case "\\": switch (this.peekChar(1)) { case "b": case "B": return true; default: return false; } // '(?=' or '(?!' case "(": return this.peekChar(1) === "?" && (this.peekChar(2) === "=" || this.peekChar(2) === "!"); default: return false; } } isQuantifier() { const prevState = this.saveState(); try { return this.quantifier(true) !== void 0; } catch (e3) { return false; } finally { this.restoreState(prevState); } } isPatternCharacter() { switch (this.peekChar()) { case "^": case "$": case "\\": case ".": case "*": case "+": case "?": case "(": case ")": case "[": case "|": case "/": case "\n": case "\r": case "\u2028": case "\u2029": return false; default: return true; } } parseHexDigits(howMany) { let hexString = ""; for (let i2 = 0; i2 < howMany; i2++) { const hexChar = this.popChar(); if (hexDigitPattern.test(hexChar) === false) { throw Error("Expecting a HexDecimal digits"); } hexString += hexChar; } const charCode = parseInt(hexString, 16); return { type: "Character", value: charCode }; } peekChar(howMuch = 0) { return this.input[this.idx + howMuch]; } popChar() { const nextChar = this.peekChar(0); this.consumeChar(void 0); return nextChar; } consumeChar(char2) { if (char2 !== void 0 && this.input[this.idx] !== char2) { throw Error("Expected: '" + char2 + "' but found: '" + this.input[this.idx] + "' at offset: " + this.idx); } if (this.idx >= this.input.length) { throw Error("Unexpected end of input"); } this.idx++; } loc(begin) { return { begin, end: this.idx }; } }; } }); // ../../node_modules/.pnpm/@chevrotain+regexp-to-ast@11.0.3/node_modules/@chevrotain/regexp-to-ast/lib/src/base-regexp-visitor.js var BaseRegExpVisitor; var init_base_regexp_visitor = __esm({ "../../node_modules/.pnpm/@chevrotain+regexp-to-ast@11.0.3/node_modules/@chevrotain/regexp-to-ast/lib/src/base-regexp-visitor.js"() { "use strict"; BaseRegExpVisitor = class { static { __name(this, "BaseRegExpVisitor"); } visitChildren(node2) { for (const key in node2) { const child = node2[key]; if (node2.hasOwnProperty(key)) { if (child.type !== void 0) { this.visit(child); } else if (Array.isArray(child)) { child.forEach((subChild) => { this.visit(subChild); }, this); } } } } visit(node2) { switch (node2.type) { case "Pattern": this.visitPattern(node2); break; case "Flags": this.visitFlags(node2); break; case "Disjunction": this.visitDisjunction(node2); break; case "Alternative": this.visitAlternative(node2); break; case "StartAnchor": this.visitStartAnchor(node2); break; case "EndAnchor": this.visitEndAnchor(node2); break; case "WordBoundary": this.visitWordBoundary(node2); break; case "NonWordBoundary": this.visitNonWordBoundary(node2); break; case "Lookahead": this.visitLookahead(node2); break; case "NegativeLookahead": this.visitNegativeLookahead(node2); break; case "Character": this.visitCharacter(node2); break; case "Set": this.visitSet(node2); break; case "Group": this.visitGroup(node2); break; case "GroupBackReference": this.visitGroupBackReference(node2); break; case "Quantifier": this.visitQuantifier(node2); break; } this.visitChildren(node2); } visitPattern(node2) { } visitFlags(node2) { } visitDisjunction(node2) { } visitAlternative(node2) { } // Assertion visitStartAnchor(node2) { } visitEndAnchor(node2) { } visitWordBoundary(node2) { } visitNonWordBoundary(node2) { } visitLookahead(node2) { } visitNegativeLookahead(node2) { } // atoms visitCharacter(node2) { } visitSet(node2) { } visitGroup(node2) { } visitGroupBackReference(node2) { } visitQuantifier(node2) { } }; } }); // ../../node_modules/.pnpm/@chevrotain+regexp-to-ast@11.0.3/node_modules/@chevrotain/regexp-to-ast/lib/src/api.js var init_api = __esm({ "../../node_modules/.pnpm/@chevrotain+regexp-to-ast@11.0.3/node_modules/@chevrotain/regexp-to-ast/lib/src/api.js"() { "use strict"; init_regexp_parser(); init_base_regexp_visitor(); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/regexp-utils.js var regexp_utils_exports = {}; __export(regexp_utils_exports, { NEWLINE_REGEXP: () => NEWLINE_REGEXP, escapeRegExp: () => escapeRegExp, getCaseInsensitivePattern: () => getCaseInsensitivePattern, getTerminalParts: () => getTerminalParts, isMultilineComment: () => isMultilineComment, isWhitespace: () => isWhitespace2, partialMatches: () => partialMatches, partialRegExp: () => partialRegExp, whitespaceCharacters: () => whitespaceCharacters }); function getTerminalParts(regexp) { try { if (typeof regexp !== "string") { regexp = regexp.source; } regexp = `/${regexp}/`; const pattern = regexpParser.pattern(regexp); const parts = []; for (const alternative of pattern.value.value) { visitor.reset(regexp); visitor.visit(alternative); parts.push({ start: visitor.startRegexp, end: visitor.endRegex }); } return parts; } catch (_a) { return []; } } function isMultilineComment(regexp) { try { if (typeof regexp === "string") { regexp = new RegExp(regexp); } regexp = regexp.toString(); visitor.reset(regexp); visitor.visit(regexpParser.pattern(regexp)); return visitor.multiline; } catch (_a) { return false; } } function isWhitespace2(value2) { const regexp = typeof value2 === "string" ? new RegExp(value2) : value2; return whitespaceCharacters.some((ws) => regexp.test(ws)); } function escapeRegExp(value2) { return value2.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); } function getCaseInsensitivePattern(keyword) { return Array.prototype.map.call(keyword, (letter) => /\w/.test(letter) ? `[${letter.toLowerCase()}${letter.toUpperCase()}]` : escapeRegExp(letter)).join(""); } function partialMatches(regex2, input) { const partial = partialRegExp(regex2); const match2 = input.match(partial); return !!match2 && match2[0].length > 0; } function partialRegExp(regex2) { if (typeof regex2 === "string") { regex2 = new RegExp(regex2); } const re3 = regex2, source = regex2.source; let i2 = 0; function process2() { let result = "", tmp; function appendRaw(nbChars) { result += source.substr(i2, nbChars); i2 += nbChars; } __name(appendRaw, "appendRaw"); function appendOptional(nbChars) { result += "(?:" + source.substr(i2, nbChars) + "|$)"; i2 += nbChars; } __name(appendOptional, "appendOptional"); while (i2 < source.length) { switch (source[i2]) { case "\\": switch (source[i2 + 1]) { case "c": appendOptional(3); break; case "x": appendOptional(4); break; case "u": if (re3.unicode) { if (source[i2 + 2] === "{") { appendOptional(source.indexOf("}", i2) - i2 + 1); } else { appendOptional(6); } } else { appendOptional(2); } break; case "p": case "P": if (re3.unicode) { appendOptional(source.indexOf("}", i2) - i2 + 1); } else { appendOptional(2); } break; case "k": appendOptional(source.indexOf(">", i2) - i2 + 1); break; default: appendOptional(2); break; } break; case "[": tmp = /\[(?:\\.|.)*?\]/g; tmp.lastIndex = i2; tmp = tmp.exec(source) || []; appendOptional(tmp[0].length); break; case "|": case "^": case "$": case "*": case "+": case "?": appendRaw(1); break; case "{": tmp = /\{\d+,?\d*\}/g; tmp.lastIndex = i2; tmp = tmp.exec(source); if (tmp) { appendRaw(tmp[0].length); } else { appendOptional(1); } break; case "(": if (source[i2 + 1] === "?") { switch (source[i2 + 2]) { case ":": result += "(?:"; i2 += 3; result += process2() + "|$)"; break; case "=": result += "(?="; i2 += 3; result += process2() + ")"; break; case "!": tmp = i2; i2 += 3; process2(); result += source.substr(tmp, i2 - tmp); break; case "<": switch (source[i2 + 3]) { case "=": case "!": tmp = i2; i2 += 4; process2(); result += source.substr(tmp, i2 - tmp); break; default: appendRaw(source.indexOf(">", i2) - i2 + 1); result += process2() + "|$)"; break; } break; } } else { appendRaw(1); result += process2() + "|$)"; } break; case ")": ++i2; return result; default: appendOptional(1); break; } } return result; } __name(process2, "process"); return new RegExp(process2(), regex2.flags); } var NEWLINE_REGEXP, regexpParser, TerminalRegExpVisitor, visitor, whitespaceCharacters; var init_regexp_utils = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/regexp-utils.js"() { "use strict"; init_api(); NEWLINE_REGEXP = /\r?\n/gm; regexpParser = new RegExpParser(); TerminalRegExpVisitor = class extends BaseRegExpVisitor { static { __name(this, "TerminalRegExpVisitor"); } constructor() { super(...arguments); this.isStarting = true; this.endRegexpStack = []; this.multiline = false; } get endRegex() { return this.endRegexpStack.join(""); } reset(regex2) { this.multiline = false; this.regex = regex2; this.startRegexp = ""; this.isStarting = true; this.endRegexpStack = []; } visitGroup(node2) { if (node2.quantifier) { this.isStarting = false; this.endRegexpStack = []; } } visitCharacter(node2) { const char2 = String.fromCharCode(node2.value); if (!this.multiline && char2 === "\n") { this.multiline = true; } if (node2.quantifier) { this.isStarting = false; this.endRegexpStack = []; } else { const escapedChar = escapeRegExp(char2); this.endRegexpStack.push(escapedChar); if (this.isStarting) { this.startRegexp += escapedChar; } } } visitSet(node2) { if (!this.multiline) { const set5 = this.regex.substring(node2.loc.begin, node2.loc.end); const regex2 = new RegExp(set5); this.multiline = Boolean("\n".match(regex2)); } if (node2.quantifier) { this.isStarting = false; this.endRegexpStack = []; } else { const set5 = this.regex.substring(node2.loc.begin, node2.loc.end); this.endRegexpStack.push(set5); if (this.isStarting) { this.startRegexp += set5; } } } visitChildren(node2) { if (node2.type === "Group") { const group2 = node2; if (group2.quantifier) { return; } } super.visitChildren(node2); } }; visitor = new TerminalRegExpVisitor(); __name(getTerminalParts, "getTerminalParts"); __name(isMultilineComment, "isMultilineComment"); whitespaceCharacters = "\f\n\r \v \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF".split(""); __name(isWhitespace2, "isWhitespace"); __name(escapeRegExp, "escapeRegExp"); __name(getCaseInsensitivePattern, "getCaseInsensitivePattern"); __name(partialMatches, "partialMatches"); __name(partialRegExp, "partialRegExp"); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/grammar-utils.js var grammar_utils_exports = {}; __export(grammar_utils_exports, { findAssignment: () => findAssignment, findNameAssignment: () => findNameAssignment, findNodeForKeyword: () => findNodeForKeyword, findNodeForProperty: () => findNodeForProperty, findNodesForKeyword: () => findNodesForKeyword, findNodesForKeywordInternal: () => findNodesForKeywordInternal, findNodesForProperty: () => findNodesForProperty, getActionAtElement: () => getActionAtElement, getActionType: () => getActionType, getAllReachableRules: () => getAllReachableRules, getCrossReferenceTerminal: () => getCrossReferenceTerminal, getEntryRule: () => getEntryRule, getExplicitRuleType: () => getExplicitRuleType, getHiddenRules: () => getHiddenRules, getRuleType: () => getRuleType, getRuleTypeName: () => getRuleTypeName, getTypeName: () => getTypeName, isArrayCardinality: () => isArrayCardinality, isArrayOperator: () => isArrayOperator, isCommentTerminal: () => isCommentTerminal, isDataType: () => isDataType, isDataTypeRule: () => isDataTypeRule, isOptionalCardinality: () => isOptionalCardinality, terminalRegex: () => terminalRegex }); function getEntryRule(grammar) { return grammar.rules.find((e3) => isParserRule(e3) && e3.entry); } function getHiddenRules(grammar) { return grammar.rules.filter((e3) => isTerminalRule(e3) && e3.hidden); } function getAllReachableRules(grammar, allTerminals) { const ruleNames = /* @__PURE__ */ new Set(); const entryRule = getEntryRule(grammar); if (!entryRule) { return new Set(grammar.rules); } const topMostRules = [entryRule].concat(getHiddenRules(grammar)); for (const rule of topMostRules) { ruleDfs(rule, ruleNames, allTerminals); } const rules = /* @__PURE__ */ new Set(); for (const rule of grammar.rules) { if (ruleNames.has(rule.name) || isTerminalRule(rule) && rule.hidden) { rules.add(rule); } } return rules; } function ruleDfs(rule, visitedSet, allTerminals) { visitedSet.add(rule.name); streamAllContents(rule).forEach((node2) => { if (isRuleCall(node2) || allTerminals && isTerminalRuleCall(node2)) { const refRule = node2.rule.ref; if (refRule && !visitedSet.has(refRule.name)) { ruleDfs(refRule, visitedSet, allTerminals); } } }); } function getCrossReferenceTerminal(crossRef) { if (crossRef.terminal) { return crossRef.terminal; } else if (crossRef.type.ref) { const nameAssigment = findNameAssignment(crossRef.type.ref); return nameAssigment === null || nameAssigment === void 0 ? void 0 : nameAssigment.terminal; } return void 0; } function isCommentTerminal(terminalRule) { return terminalRule.hidden && !isWhitespace2(terminalRegex(terminalRule)); } function findNodesForProperty(node2, property2) { if (!node2 || !property2) { return []; } return findNodesForPropertyInternal(node2, property2, node2.astNode, true); } function findNodeForProperty(node2, property2, index) { if (!node2 || !property2) { return void 0; } const nodes5 = findNodesForPropertyInternal(node2, property2, node2.astNode, true); if (nodes5.length === 0) { return void 0; } if (index !== void 0) { index = Math.max(0, Math.min(index, nodes5.length - 1)); } else { index = 0; } return nodes5[index]; } function findNodesForPropertyInternal(node2, property2, element3, first3) { if (!first3) { const nodeFeature = getContainerOfType(node2.grammarSource, isAssignment); if (nodeFeature && nodeFeature.feature === property2) { return [node2]; } } if (isCompositeCstNode(node2) && node2.astNode === element3) { return node2.content.flatMap((e3) => findNodesForPropertyInternal(e3, property2, element3, false)); } return []; } function findNodesForKeyword(node2, keyword) { if (!node2) { return []; } return findNodesForKeywordInternal(node2, keyword, node2 === null || node2 === void 0 ? void 0 : node2.astNode); } function findNodeForKeyword(node2, keyword, index) { if (!node2) { return void 0; } const nodes5 = findNodesForKeywordInternal(node2, keyword, node2 === null || node2 === void 0 ? void 0 : node2.astNode); if (nodes5.length === 0) { return void 0; } if (index !== void 0) { index = Math.max(0, Math.min(index, nodes5.length - 1)); } else { index = 0; } return nodes5[index]; } function findNodesForKeywordInternal(node2, keyword, element3) { if (node2.astNode !== element3) { return []; } if (isKeyword(node2.grammarSource) && node2.grammarSource.value === keyword) { return [node2]; } const treeIterator = streamCst(node2).iterator(); let result; const keywordNodes = []; do { result = treeIterator.next(); if (!result.done) { const childNode = result.value; if (childNode.astNode === element3) { if (isKeyword(childNode.grammarSource) && childNode.grammarSource.value === keyword) { keywordNodes.push(childNode); } } else { treeIterator.prune(); } } } while (!result.done); return keywordNodes; } function findAssignment(cstNode) { var _a; const astNode = cstNode.astNode; while (astNode === ((_a = cstNode.container) === null || _a === void 0 ? void 0 : _a.astNode)) { const assignment = getContainerOfType(cstNode.grammarSource, isAssignment); if (assignment) { return assignment; } cstNode = cstNode.container; } return void 0; } function findNameAssignment(type3) { let startNode = type3; if (isInferredType(startNode)) { if (isAction(startNode.$container)) { startNode = startNode.$container.$container; } else if (isParserRule(startNode.$container)) { startNode = startNode.$container; } else { assertUnreachable(startNode.$container); } } return findNameAssignmentInternal(type3, startNode, /* @__PURE__ */ new Map()); } function findNameAssignmentInternal(type3, startNode, cache3) { var _a; function go(node2, refType) { let childAssignment = void 0; const parentAssignment = getContainerOfType(node2, isAssignment); if (!parentAssignment) { childAssignment = findNameAssignmentInternal(refType, refType, cache3); } cache3.set(type3, childAssignment); return childAssignment; } __name(go, "go"); if (cache3.has(type3)) { return cache3.get(type3); } cache3.set(type3, void 0); for (const node2 of streamAllContents(startNode)) { if (isAssignment(node2) && node2.feature.toLowerCase() === "name") { cache3.set(type3, node2); return node2; } else if (isRuleCall(node2) && isParserRule(node2.rule.ref)) { return go(node2, node2.rule.ref); } else if (isSimpleType(node2) && ((_a = node2.typeRef) === null || _a === void 0 ? void 0 : _a.ref)) { return go(node2, node2.typeRef.ref); } } return void 0; } function getActionAtElement(element3) { const parent4 = element3.$container; if (isGroup(parent4)) { const elements2 = parent4.elements; const index = elements2.indexOf(element3); for (let i2 = index - 1; i2 >= 0; i2--) { const item = elements2[i2]; if (isAction(item)) { return item; } else { const action = streamAllContents(elements2[i2]).find(isAction); if (action) { return action; } } } } if (isAbstractElement(parent4)) { return getActionAtElement(parent4); } else { return void 0; } } function isOptionalCardinality(cardinality, element3) { return cardinality === "?" || cardinality === "*" || isGroup(element3) && Boolean(element3.guardCondition); } function isArrayCardinality(cardinality) { return cardinality === "*" || cardinality === "+"; } function isArrayOperator(operator) { return operator === "+="; } function isDataTypeRule(rule) { return isDataTypeRuleInternal(rule, /* @__PURE__ */ new Set()); } function isDataTypeRuleInternal(rule, visited) { if (visited.has(rule)) { return true; } else { visited.add(rule); } for (const node2 of streamAllContents(rule)) { if (isRuleCall(node2)) { if (!node2.rule.ref) { return false; } if (isParserRule(node2.rule.ref) && !isDataTypeRuleInternal(node2.rule.ref, visited)) { return false; } } else if (isAssignment(node2)) { return false; } else if (isAction(node2)) { return false; } } return Boolean(rule.definition); } function isDataType(type3) { return isDataTypeInternal(type3.type, /* @__PURE__ */ new Set()); } function isDataTypeInternal(type3, visited) { if (visited.has(type3)) { return true; } else { visited.add(type3); } if (isArrayType(type3)) { return false; } else if (isReferenceType(type3)) { return false; } else if (isUnionType(type3)) { return type3.types.every((e3) => isDataTypeInternal(e3, visited)); } else if (isSimpleType(type3)) { if (type3.primitiveType !== void 0) { return true; } else if (type3.stringType !== void 0) { return true; } else if (type3.typeRef !== void 0) { const ref = type3.typeRef.ref; if (isType(ref)) { return isDataTypeInternal(ref.type, visited); } else { return false; } } else { return false; } } else { return false; } } function getExplicitRuleType(rule) { if (rule.inferredType) { return rule.inferredType.name; } else if (rule.dataType) { return rule.dataType; } else if (rule.returnType) { const refType = rule.returnType.ref; if (refType) { if (isParserRule(refType)) { return refType.name; } else if (isInterface(refType) || isType(refType)) { return refType.name; } } } return void 0; } function getTypeName(type3) { var _a; if (isParserRule(type3)) { return isDataTypeRule(type3) ? type3.name : (_a = getExplicitRuleType(type3)) !== null && _a !== void 0 ? _a : type3.name; } else if (isInterface(type3) || isType(type3) || isReturnType(type3)) { return type3.name; } else if (isAction(type3)) { const actionType = getActionType(type3); if (actionType) { return actionType; } } else if (isInferredType(type3)) { return type3.name; } throw new Error("Cannot get name of Unknown Type"); } function getActionType(action) { var _a; if (action.inferredType) { return action.inferredType.name; } else if ((_a = action.type) === null || _a === void 0 ? void 0 : _a.ref) { return getTypeName(action.type.ref); } return void 0; } function getRuleTypeName(rule) { var _a, _b, _c; if (isTerminalRule(rule)) { return (_b = (_a = rule.type) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : "string"; } else { return isDataTypeRule(rule) ? rule.name : (_c = getExplicitRuleType(rule)) !== null && _c !== void 0 ? _c : rule.name; } } function getRuleType(rule) { var _a, _b, _c; if (isTerminalRule(rule)) { return (_b = (_a = rule.type) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : "string"; } else { return (_c = getExplicitRuleType(rule)) !== null && _c !== void 0 ? _c : rule.name; } } function terminalRegex(terminalRule) { const flags = { s: false, i: false, u: false }; const source = abstractElementToRegex(terminalRule.definition, flags); const flagText = Object.entries(flags).filter(([, value2]) => value2).map(([name]) => name).join(""); return new RegExp(source, flagText); } function abstractElementToRegex(element3, flags) { if (isTerminalAlternatives(element3)) { return terminalAlternativesToRegex(element3); } else if (isTerminalGroup(element3)) { return terminalGroupToRegex(element3); } else if (isCharacterRange(element3)) { return characterRangeToRegex(element3); } else if (isTerminalRuleCall(element3)) { const rule = element3.rule.ref; if (!rule) { throw new Error("Missing rule reference."); } return withCardinality(abstractElementToRegex(rule.definition), { cardinality: element3.cardinality, lookahead: element3.lookahead }); } else if (isNegatedToken(element3)) { return negateTokenToRegex(element3); } else if (isUntilToken(element3)) { return untilTokenToRegex(element3); } else if (isRegexToken(element3)) { const lastSlash = element3.regex.lastIndexOf("/"); const source = element3.regex.substring(1, lastSlash); const regexFlags = element3.regex.substring(lastSlash + 1); if (flags) { flags.i = regexFlags.includes("i"); flags.s = regexFlags.includes("s"); flags.u = regexFlags.includes("u"); } return withCardinality(source, { cardinality: element3.cardinality, lookahead: element3.lookahead, wrap: false }); } else if (isWildcard(element3)) { return withCardinality(WILDCARD, { cardinality: element3.cardinality, lookahead: element3.lookahead }); } else { throw new Error(`Invalid terminal element: ${element3 === null || element3 === void 0 ? void 0 : element3.$type}`); } } function terminalAlternativesToRegex(alternatives) { return withCardinality(alternatives.elements.map((e3) => abstractElementToRegex(e3)).join("|"), { cardinality: alternatives.cardinality, lookahead: alternatives.lookahead }); } function terminalGroupToRegex(group2) { return withCardinality(group2.elements.map((e3) => abstractElementToRegex(e3)).join(""), { cardinality: group2.cardinality, lookahead: group2.lookahead }); } function untilTokenToRegex(until) { return withCardinality(`${WILDCARD}*?${abstractElementToRegex(until.terminal)}`, { cardinality: until.cardinality, lookahead: until.lookahead }); } function negateTokenToRegex(negate2) { return withCardinality(`(?!${abstractElementToRegex(negate2.terminal)})${WILDCARD}*?`, { cardinality: negate2.cardinality, lookahead: negate2.lookahead }); } function characterRangeToRegex(range3) { if (range3.right) { return withCardinality(`[${keywordToRegex(range3.left)}-${keywordToRegex(range3.right)}]`, { cardinality: range3.cardinality, lookahead: range3.lookahead, wrap: false }); } return withCardinality(keywordToRegex(range3.left), { cardinality: range3.cardinality, lookahead: range3.lookahead, wrap: false }); } function keywordToRegex(keyword) { return escapeRegExp(keyword.value); } function withCardinality(regex2, options2) { var _a; if (options2.wrap !== false || options2.lookahead) { regex2 = `(${(_a = options2.lookahead) !== null && _a !== void 0 ? _a : ""}${regex2})`; } if (options2.cardinality) { return `${regex2}${options2.cardinality}`; } return regex2; } var WILDCARD; var init_grammar_utils = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/grammar-utils.js"() { "use strict"; init_errors2(); init_ast(); init_syntax_tree(); init_ast_utils(); init_cst_utils(); init_regexp_utils(); __name(getEntryRule, "getEntryRule"); __name(getHiddenRules, "getHiddenRules"); __name(getAllReachableRules, "getAllReachableRules"); __name(ruleDfs, "ruleDfs"); __name(getCrossReferenceTerminal, "getCrossReferenceTerminal"); __name(isCommentTerminal, "isCommentTerminal"); __name(findNodesForProperty, "findNodesForProperty"); __name(findNodeForProperty, "findNodeForProperty"); __name(findNodesForPropertyInternal, "findNodesForPropertyInternal"); __name(findNodesForKeyword, "findNodesForKeyword"); __name(findNodeForKeyword, "findNodeForKeyword"); __name(findNodesForKeywordInternal, "findNodesForKeywordInternal"); __name(findAssignment, "findAssignment"); __name(findNameAssignment, "findNameAssignment"); __name(findNameAssignmentInternal, "findNameAssignmentInternal"); __name(getActionAtElement, "getActionAtElement"); __name(isOptionalCardinality, "isOptionalCardinality"); __name(isArrayCardinality, "isArrayCardinality"); __name(isArrayOperator, "isArrayOperator"); __name(isDataTypeRule, "isDataTypeRule"); __name(isDataTypeRuleInternal, "isDataTypeRuleInternal"); __name(isDataType, "isDataType"); __name(isDataTypeInternal, "isDataTypeInternal"); __name(getExplicitRuleType, "getExplicitRuleType"); __name(getTypeName, "getTypeName"); __name(getActionType, "getActionType"); __name(getRuleTypeName, "getRuleTypeName"); __name(getRuleType, "getRuleType"); __name(terminalRegex, "terminalRegex"); WILDCARD = /[\s\S]/.source; __name(abstractElementToRegex, "abstractElementToRegex"); __name(terminalAlternativesToRegex, "terminalAlternativesToRegex"); __name(terminalGroupToRegex, "terminalGroupToRegex"); __name(untilTokenToRegex, "untilTokenToRegex"); __name(negateTokenToRegex, "negateTokenToRegex"); __name(characterRangeToRegex, "characterRangeToRegex"); __name(keywordToRegex, "keywordToRegex"); __name(withCardinality, "withCardinality"); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/languages/grammar-config.js function createGrammarConfig(services) { const rules = []; const grammar = services.Grammar; for (const rule of grammar.rules) { if (isTerminalRule(rule) && isCommentTerminal(rule) && isMultilineComment(terminalRegex(rule))) { rules.push(rule.name); } } return { multilineCommentRules: rules, nameRegexp: DefaultNameRegexp }; } var init_grammar_config = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/languages/grammar-config.js"() { "use strict"; init_cst_utils(); init_grammar_utils(); init_regexp_utils(); init_ast(); __name(createGrammarConfig, "createGrammarConfig"); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/version.js var init_version = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/version.js"() { "use strict"; } }); // ../../node_modules/.pnpm/@chevrotain+utils@11.0.3/node_modules/@chevrotain/utils/lib/src/print.js function PRINT_ERROR(msg) { if (console && console.error) { console.error(`Error: ${msg}`); } } function PRINT_WARNING(msg) { if (console && console.warn) { console.warn(`Warning: ${msg}`); } } var init_print = __esm({ "../../node_modules/.pnpm/@chevrotain+utils@11.0.3/node_modules/@chevrotain/utils/lib/src/print.js"() { "use strict"; __name(PRINT_ERROR, "PRINT_ERROR"); __name(PRINT_WARNING, "PRINT_WARNING"); } }); // ../../node_modules/.pnpm/@chevrotain+utils@11.0.3/node_modules/@chevrotain/utils/lib/src/timer.js function timer2(func) { const start3 = (/* @__PURE__ */ new Date()).getTime(); const val = func(); const end2 = (/* @__PURE__ */ new Date()).getTime(); const total = end2 - start3; return { time: total, value: val }; } var init_timer2 = __esm({ "../../node_modules/.pnpm/@chevrotain+utils@11.0.3/node_modules/@chevrotain/utils/lib/src/timer.js"() { "use strict"; __name(timer2, "timer"); } }); // ../../node_modules/.pnpm/@chevrotain+utils@11.0.3/node_modules/@chevrotain/utils/lib/src/to-fast-properties.js function toFastProperties(toBecomeFast) { function FakeConstructor() { } __name(FakeConstructor, "FakeConstructor"); FakeConstructor.prototype = toBecomeFast; const fakeInstance = new FakeConstructor(); function fakeAccess() { return typeof fakeInstance.bar; } __name(fakeAccess, "fakeAccess"); fakeAccess(); fakeAccess(); if (1) return toBecomeFast; (0, eval)(toBecomeFast); } var init_to_fast_properties = __esm({ "../../node_modules/.pnpm/@chevrotain+utils@11.0.3/node_modules/@chevrotain/utils/lib/src/to-fast-properties.js"() { "use strict"; __name(toFastProperties, "toFastProperties"); } }); // ../../node_modules/.pnpm/@chevrotain+utils@11.0.3/node_modules/@chevrotain/utils/lib/src/api.js var init_api2 = __esm({ "../../node_modules/.pnpm/@chevrotain+utils@11.0.3/node_modules/@chevrotain/utils/lib/src/api.js"() { "use strict"; init_print(); init_timer2(); init_to_fast_properties(); } }); // ../../node_modules/.pnpm/@chevrotain+gast@11.0.3/node_modules/@chevrotain/gast/lib/src/model.js function tokenLabel(tokType) { if (hasTokenLabel(tokType)) { return tokType.LABEL; } else { return tokType.name; } } function hasTokenLabel(obj) { return isString_default(obj.LABEL) && obj.LABEL !== ""; } function serializeGrammar(topRules) { return map_default(topRules, serializeProduction); } function serializeProduction(node2) { function convertDefinition(definition) { return map_default(definition, serializeProduction); } __name(convertDefinition, "convertDefinition"); if (node2 instanceof NonTerminal) { const serializedNonTerminal = { type: "NonTerminal", name: node2.nonTerminalName, idx: node2.idx }; if (isString_default(node2.label)) { serializedNonTerminal.label = node2.label; } return serializedNonTerminal; } else if (node2 instanceof Alternative) { return { type: "Alternative", definition: convertDefinition(node2.definition) }; } else if (node2 instanceof Option2) { return { type: "Option", idx: node2.idx, definition: convertDefinition(node2.definition) }; } else if (node2 instanceof RepetitionMandatory) { return { type: "RepetitionMandatory", idx: node2.idx, definition: convertDefinition(node2.definition) }; } else if (node2 instanceof RepetitionMandatoryWithSeparator) { return { type: "RepetitionMandatoryWithSeparator", idx: node2.idx, separator: serializeProduction(new Terminal({ terminalType: node2.separator })), definition: convertDefinition(node2.definition) }; } else if (node2 instanceof RepetitionWithSeparator) { return { type: "RepetitionWithSeparator", idx: node2.idx, separator: serializeProduction(new Terminal({ terminalType: node2.separator })), definition: convertDefinition(node2.definition) }; } else if (node2 instanceof Repetition) { return { type: "Repetition", idx: node2.idx, definition: convertDefinition(node2.definition) }; } else if (node2 instanceof Alternation) { return { type: "Alternation", idx: node2.idx, definition: convertDefinition(node2.definition) }; } else if (node2 instanceof Terminal) { const serializedTerminal = { type: "Terminal", name: node2.terminalType.name, label: tokenLabel(node2.terminalType), idx: node2.idx }; if (isString_default(node2.label)) { serializedTerminal.terminalLabel = node2.label; } const pattern = node2.terminalType.PATTERN; if (node2.terminalType.PATTERN) { serializedTerminal.pattern = isRegExp_default(pattern) ? pattern.source : pattern; } return serializedTerminal; } else if (node2 instanceof Rule) { return { type: "Rule", name: node2.name, orgText: node2.orgText, definition: convertDefinition(node2.definition) }; } else { throw Error("non exhaustive match"); } } var AbstractProduction, NonTerminal, Rule, Alternative, Option2, RepetitionMandatory, RepetitionMandatoryWithSeparator, Repetition, RepetitionWithSeparator, Alternation, Terminal; var init_model = __esm({ "../../node_modules/.pnpm/@chevrotain+gast@11.0.3/node_modules/@chevrotain/gast/lib/src/model.js"() { "use strict"; init_lodash(); __name(tokenLabel, "tokenLabel"); __name(hasTokenLabel, "hasTokenLabel"); AbstractProduction = class { static { __name(this, "AbstractProduction"); } get definition() { return this._definition; } set definition(value2) { this._definition = value2; } constructor(_definition) { this._definition = _definition; } accept(visitor2) { visitor2.visit(this); forEach_default(this.definition, (prod) => { prod.accept(visitor2); }); } }; NonTerminal = class extends AbstractProduction { static { __name(this, "NonTerminal"); } constructor(options2) { super([]); this.idx = 1; assign_default(this, pickBy_default(options2, (v3) => v3 !== void 0)); } set definition(definition) { } get definition() { if (this.referencedRule !== void 0) { return this.referencedRule.definition; } return []; } accept(visitor2) { visitor2.visit(this); } }; Rule = class extends AbstractProduction { static { __name(this, "Rule"); } constructor(options2) { super(options2.definition); this.orgText = ""; assign_default(this, pickBy_default(options2, (v3) => v3 !== void 0)); } }; Alternative = class extends AbstractProduction { static { __name(this, "Alternative"); } constructor(options2) { super(options2.definition); this.ignoreAmbiguities = false; assign_default(this, pickBy_default(options2, (v3) => v3 !== void 0)); } }; Option2 = class extends AbstractProduction { static { __name(this, "Option"); } constructor(options2) { super(options2.definition); this.idx = 1; assign_default(this, pickBy_default(options2, (v3) => v3 !== void 0)); } }; RepetitionMandatory = class extends AbstractProduction { static { __name(this, "RepetitionMandatory"); } constructor(options2) { super(options2.definition); this.idx = 1; assign_default(this, pickBy_default(options2, (v3) => v3 !== void 0)); } }; RepetitionMandatoryWithSeparator = class extends AbstractProduction { static { __name(this, "RepetitionMandatoryWithSeparator"); } constructor(options2) { super(options2.definition); this.idx = 1; assign_default(this, pickBy_default(options2, (v3) => v3 !== void 0)); } }; Repetition = class extends AbstractProduction { static { __name(this, "Repetition"); } constructor(options2) { super(options2.definition); this.idx = 1; assign_default(this, pickBy_default(options2, (v3) => v3 !== void 0)); } }; RepetitionWithSeparator = class extends AbstractProduction { static { __name(this, "RepetitionWithSeparator"); } constructor(options2) { super(options2.definition); this.idx = 1; assign_default(this, pickBy_default(options2, (v3) => v3 !== void 0)); } }; Alternation = class extends AbstractProduction { static { __name(this, "Alternation"); } get definition() { return this._definition; } set definition(value2) { this._definition = value2; } constructor(options2) { super(options2.definition); this.idx = 1; this.ignoreAmbiguities = false; this.hasPredicates = false; assign_default(this, pickBy_default(options2, (v3) => v3 !== void 0)); } }; Terminal = class { static { __name(this, "Terminal"); } constructor(options2) { this.idx = 1; assign_default(this, pickBy_default(options2, (v3) => v3 !== void 0)); } accept(visitor2) { visitor2.visit(this); } }; __name(serializeGrammar, "serializeGrammar"); __name(serializeProduction, "serializeProduction"); } }); // ../../node_modules/.pnpm/@chevrotain+gast@11.0.3/node_modules/@chevrotain/gast/lib/src/visitor.js var GAstVisitor; var init_visitor = __esm({ "../../node_modules/.pnpm/@chevrotain+gast@11.0.3/node_modules/@chevrotain/gast/lib/src/visitor.js"() { "use strict"; init_model(); GAstVisitor = class { static { __name(this, "GAstVisitor"); } visit(node2) { const nodeAny = node2; switch (nodeAny.constructor) { case NonTerminal: return this.visitNonTerminal(nodeAny); case Alternative: return this.visitAlternative(nodeAny); case Option2: return this.visitOption(nodeAny); case RepetitionMandatory: return this.visitRepetitionMandatory(nodeAny); case RepetitionMandatoryWithSeparator: return this.visitRepetitionMandatoryWithSeparator(nodeAny); case RepetitionWithSeparator: return this.visitRepetitionWithSeparator(nodeAny); case Repetition: return this.visitRepetition(nodeAny); case Alternation: return this.visitAlternation(nodeAny); case Terminal: return this.visitTerminal(nodeAny); case Rule: return this.visitRule(nodeAny); /* c8 ignore next 2 */ default: throw Error("non exhaustive match"); } } /* c8 ignore next */ visitNonTerminal(node2) { } /* c8 ignore next */ visitAlternative(node2) { } /* c8 ignore next */ visitOption(node2) { } /* c8 ignore next */ visitRepetition(node2) { } /* c8 ignore next */ visitRepetitionMandatory(node2) { } /* c8 ignore next 3 */ visitRepetitionMandatoryWithSeparator(node2) { } /* c8 ignore next */ visitRepetitionWithSeparator(node2) { } /* c8 ignore next */ visitAlternation(node2) { } /* c8 ignore next */ visitTerminal(node2) { } /* c8 ignore next */ visitRule(node2) { } }; } }); // ../../node_modules/.pnpm/@chevrotain+gast@11.0.3/node_modules/@chevrotain/gast/lib/src/helpers.js function isSequenceProd(prod) { return prod instanceof Alternative || prod instanceof Option2 || prod instanceof Repetition || prod instanceof RepetitionMandatory || prod instanceof RepetitionMandatoryWithSeparator || prod instanceof RepetitionWithSeparator || prod instanceof Terminal || prod instanceof Rule; } function isOptionalProd(prod, alreadyVisited = []) { const isDirectlyOptional = prod instanceof Option2 || prod instanceof Repetition || prod instanceof RepetitionWithSeparator; if (isDirectlyOptional) { return true; } if (prod instanceof Alternation) { return some_default(prod.definition, (subProd) => { return isOptionalProd(subProd, alreadyVisited); }); } else if (prod instanceof NonTerminal && includes_default(alreadyVisited, prod)) { return false; } else if (prod instanceof AbstractProduction) { if (prod instanceof NonTerminal) { alreadyVisited.push(prod); } return every_default(prod.definition, (subProd) => { return isOptionalProd(subProd, alreadyVisited); }); } else { return false; } } function isBranchingProd(prod) { return prod instanceof Alternation; } function getProductionDslName(prod) { if (prod instanceof NonTerminal) { return "SUBRULE"; } else if (prod instanceof Option2) { return "OPTION"; } else if (prod instanceof Alternation) { return "OR"; } else if (prod instanceof RepetitionMandatory) { return "AT_LEAST_ONE"; } else if (prod instanceof RepetitionMandatoryWithSeparator) { return "AT_LEAST_ONE_SEP"; } else if (prod instanceof RepetitionWithSeparator) { return "MANY_SEP"; } else if (prod instanceof Repetition) { return "MANY"; } else if (prod instanceof Terminal) { return "CONSUME"; } else { throw Error("non exhaustive match"); } } var init_helpers = __esm({ "../../node_modules/.pnpm/@chevrotain+gast@11.0.3/node_modules/@chevrotain/gast/lib/src/helpers.js"() { "use strict"; init_lodash(); init_model(); __name(isSequenceProd, "isSequenceProd"); __name(isOptionalProd, "isOptionalProd"); __name(isBranchingProd, "isBranchingProd"); __name(getProductionDslName, "getProductionDslName"); } }); // ../../node_modules/.pnpm/@chevrotain+gast@11.0.3/node_modules/@chevrotain/gast/lib/src/api.js var init_api3 = __esm({ "../../node_modules/.pnpm/@chevrotain+gast@11.0.3/node_modules/@chevrotain/gast/lib/src/api.js"() { "use strict"; init_model(); init_visitor(); init_helpers(); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/grammar/rest.js function restForRepetitionWithSeparator(repSepProd, currRest, prevRest) { const repSepRest = [ new Option2({ definition: [ new Terminal({ terminalType: repSepProd.separator }) ].concat(repSepProd.definition) }) ]; const fullRepSepRest = repSepRest.concat(currRest, prevRest); return fullRepSepRest; } var RestWalker; var init_rest = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/grammar/rest.js"() { "use strict"; init_lodash(); init_api3(); RestWalker = class { static { __name(this, "RestWalker"); } walk(prod, prevRest = []) { forEach_default(prod.definition, (subProd, index) => { const currRest = drop_default(prod.definition, index + 1); if (subProd instanceof NonTerminal) { this.walkProdRef(subProd, currRest, prevRest); } else if (subProd instanceof Terminal) { this.walkTerminal(subProd, currRest, prevRest); } else if (subProd instanceof Alternative) { this.walkFlat(subProd, currRest, prevRest); } else if (subProd instanceof Option2) { this.walkOption(subProd, currRest, prevRest); } else if (subProd instanceof RepetitionMandatory) { this.walkAtLeastOne(subProd, currRest, prevRest); } else if (subProd instanceof RepetitionMandatoryWithSeparator) { this.walkAtLeastOneSep(subProd, currRest, prevRest); } else if (subProd instanceof RepetitionWithSeparator) { this.walkManySep(subProd, currRest, prevRest); } else if (subProd instanceof Repetition) { this.walkMany(subProd, currRest, prevRest); } else if (subProd instanceof Alternation) { this.walkOr(subProd, currRest, prevRest); } else { throw Error("non exhaustive match"); } }); } walkTerminal(terminal, currRest, prevRest) { } walkProdRef(refProd, currRest, prevRest) { } walkFlat(flatProd, currRest, prevRest) { const fullOrRest = currRest.concat(prevRest); this.walk(flatProd, fullOrRest); } walkOption(optionProd, currRest, prevRest) { const fullOrRest = currRest.concat(prevRest); this.walk(optionProd, fullOrRest); } walkAtLeastOne(atLeastOneProd, currRest, prevRest) { const fullAtLeastOneRest = [ new Option2({ definition: atLeastOneProd.definition }) ].concat(currRest, prevRest); this.walk(atLeastOneProd, fullAtLeastOneRest); } walkAtLeastOneSep(atLeastOneSepProd, currRest, prevRest) { const fullAtLeastOneSepRest = restForRepetitionWithSeparator(atLeastOneSepProd, currRest, prevRest); this.walk(atLeastOneSepProd, fullAtLeastOneSepRest); } walkMany(manyProd, currRest, prevRest) { const fullManyRest = [ new Option2({ definition: manyProd.definition }) ].concat(currRest, prevRest); this.walk(manyProd, fullManyRest); } walkManySep(manySepProd, currRest, prevRest) { const fullManySepRest = restForRepetitionWithSeparator(manySepProd, currRest, prevRest); this.walk(manySepProd, fullManySepRest); } walkOr(orProd, currRest, prevRest) { const fullOrRest = currRest.concat(prevRest); forEach_default(orProd.definition, (alt) => { const prodWrapper = new Alternative({ definition: [alt] }); this.walk(prodWrapper, fullOrRest); }); } }; __name(restForRepetitionWithSeparator, "restForRepetitionWithSeparator"); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/grammar/first.js function first2(prod) { if (prod instanceof NonTerminal) { return first2(prod.referencedRule); } else if (prod instanceof Terminal) { return firstForTerminal(prod); } else if (isSequenceProd(prod)) { return firstForSequence(prod); } else if (isBranchingProd(prod)) { return firstForBranching(prod); } else { throw Error("non exhaustive match"); } } function firstForSequence(prod) { let firstSet = []; const seq2 = prod.definition; let nextSubProdIdx = 0; let hasInnerProdsRemaining = seq2.length > nextSubProdIdx; let currSubProd; let isLastInnerProdOptional = true; while (hasInnerProdsRemaining && isLastInnerProdOptional) { currSubProd = seq2[nextSubProdIdx]; isLastInnerProdOptional = isOptionalProd(currSubProd); firstSet = firstSet.concat(first2(currSubProd)); nextSubProdIdx = nextSubProdIdx + 1; hasInnerProdsRemaining = seq2.length > nextSubProdIdx; } return uniq_default(firstSet); } function firstForBranching(prod) { const allAlternativesFirsts = map_default(prod.definition, (innerProd) => { return first2(innerProd); }); return uniq_default(flatten_default(allAlternativesFirsts)); } function firstForTerminal(terminal) { return [terminal.terminalType]; } var init_first2 = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/grammar/first.js"() { "use strict"; init_lodash(); init_api3(); __name(first2, "first"); __name(firstForSequence, "firstForSequence"); __name(firstForBranching, "firstForBranching"); __name(firstForTerminal, "firstForTerminal"); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/constants.js var IN; var init_constants2 = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/constants.js"() { "use strict"; IN = "_~IN~_"; } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/grammar/follow.js function computeAllProdsFollows(topProductions) { const reSyncFollows = {}; forEach_default(topProductions, (topProd) => { const currRefsFollow = new ResyncFollowsWalker(topProd).startWalking(); assign_default(reSyncFollows, currRefsFollow); }); return reSyncFollows; } function buildBetweenProdsFollowPrefix(inner2, occurenceInParent) { return inner2.name + occurenceInParent + IN; } var ResyncFollowsWalker; var init_follow = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/grammar/follow.js"() { "use strict"; init_rest(); init_first2(); init_lodash(); init_constants2(); init_api3(); ResyncFollowsWalker = class extends RestWalker { static { __name(this, "ResyncFollowsWalker"); } constructor(topProd) { super(); this.topProd = topProd; this.follows = {}; } startWalking() { this.walk(this.topProd); return this.follows; } walkTerminal(terminal, currRest, prevRest) { } walkProdRef(refProd, currRest, prevRest) { const followName = buildBetweenProdsFollowPrefix(refProd.referencedRule, refProd.idx) + this.topProd.name; const fullRest = currRest.concat(prevRest); const restProd = new Alternative({ definition: fullRest }); const t_in_topProd_follows = first2(restProd); this.follows[followName] = t_in_topProd_follows; } }; __name(computeAllProdsFollows, "computeAllProdsFollows"); __name(buildBetweenProdsFollowPrefix, "buildBetweenProdsFollowPrefix"); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/scan/reg_exp_parser.js function getRegExpAst(regExp) { const regExpStr = regExp.toString(); if (regExpAstCache.hasOwnProperty(regExpStr)) { return regExpAstCache[regExpStr]; } else { const regExpAst = regExpParser.pattern(regExpStr); regExpAstCache[regExpStr] = regExpAst; return regExpAst; } } function clearRegExpParserCache() { regExpAstCache = {}; } var regExpAstCache, regExpParser; var init_reg_exp_parser = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/scan/reg_exp_parser.js"() { "use strict"; init_api(); regExpAstCache = {}; regExpParser = new RegExpParser(); __name(getRegExpAst, "getRegExpAst"); __name(clearRegExpParserCache, "clearRegExpParserCache"); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/scan/reg_exp.js function getOptimizedStartCodesIndices(regExp, ensureOptimizations = false) { try { const ast = getRegExpAst(regExp); const firstChars = firstCharOptimizedIndices(ast.value, {}, ast.flags.ignoreCase); return firstChars; } catch (e3) { if (e3.message === complementErrorMessage) { if (ensureOptimizations) { PRINT_WARNING(`${failedOptimizationPrefixMsg} Unable to optimize: < ${regExp.toString()} > Complement Sets cannot be automatically optimized. This will disable the lexer's first char optimizations. See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`); } } else { let msgSuffix = ""; if (ensureOptimizations) { msgSuffix = "\n This will disable the lexer's first char optimizations.\n See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details."; } PRINT_ERROR(`${failedOptimizationPrefixMsg} Failed parsing: < ${regExp.toString()} > Using the @chevrotain/regexp-to-ast library Please open an issue at: https://github.com/chevrotain/chevrotain/issues` + msgSuffix); } } return []; } function firstCharOptimizedIndices(ast, result, ignoreCase) { switch (ast.type) { case "Disjunction": for (let i2 = 0; i2 < ast.value.length; i2++) { firstCharOptimizedIndices(ast.value[i2], result, ignoreCase); } break; case "Alternative": const terms = ast.value; for (let i2 = 0; i2 < terms.length; i2++) { const term = terms[i2]; switch (term.type) { case "EndAnchor": // A group back reference cannot affect potential starting char. // because if a back reference is the first production than automatically // the group being referenced has had to come BEFORE so its codes have already been added case "GroupBackReference": // assertions do not affect potential starting codes case "Lookahead": case "NegativeLookahead": case "StartAnchor": case "WordBoundary": case "NonWordBoundary": continue; } const atom2 = term; switch (atom2.type) { case "Character": addOptimizedIdxToResult(atom2.value, result, ignoreCase); break; case "Set": if (atom2.complement === true) { throw Error(complementErrorMessage); } forEach_default(atom2.value, (code) => { if (typeof code === "number") { addOptimizedIdxToResult(code, result, ignoreCase); } else { const range3 = code; if (ignoreCase === true) { for (let rangeCode = range3.from; rangeCode <= range3.to; rangeCode++) { addOptimizedIdxToResult(rangeCode, result, ignoreCase); } } else { for (let rangeCode = range3.from; rangeCode <= range3.to && rangeCode < minOptimizationVal; rangeCode++) { addOptimizedIdxToResult(rangeCode, result, ignoreCase); } if (range3.to >= minOptimizationVal) { const minUnOptVal = range3.from >= minOptimizationVal ? range3.from : minOptimizationVal; const maxUnOptVal = range3.to; const minOptIdx = charCodeToOptimizedIndex(minUnOptVal); const maxOptIdx = charCodeToOptimizedIndex(maxUnOptVal); for (let currOptIdx = minOptIdx; currOptIdx <= maxOptIdx; currOptIdx++) { result[currOptIdx] = currOptIdx; } } } } }); break; case "Group": firstCharOptimizedIndices(atom2.value, result, ignoreCase); break; /* istanbul ignore next */ default: throw Error("Non Exhaustive Match"); } const isOptionalQuantifier = atom2.quantifier !== void 0 && atom2.quantifier.atLeast === 0; if ( // A group may be optional due to empty contents /(?:)/ // or if everything inside it is optional /((a)?)/ atom2.type === "Group" && isWholeOptional(atom2) === false || // If this term is not a group it may only be optional if it has an optional quantifier atom2.type !== "Group" && isOptionalQuantifier === false ) { break; } } break; /* istanbul ignore next */ default: throw Error("non exhaustive match!"); } return values_default(result); } function addOptimizedIdxToResult(code, result, ignoreCase) { const optimizedCharIdx = charCodeToOptimizedIndex(code); result[optimizedCharIdx] = optimizedCharIdx; if (ignoreCase === true) { handleIgnoreCase(code, result); } } function handleIgnoreCase(code, result) { const char2 = String.fromCharCode(code); const upperChar = char2.toUpperCase(); if (upperChar !== char2) { const optimizedCharIdx = charCodeToOptimizedIndex(upperChar.charCodeAt(0)); result[optimizedCharIdx] = optimizedCharIdx; } else { const lowerChar = char2.toLowerCase(); if (lowerChar !== char2) { const optimizedCharIdx = charCodeToOptimizedIndex(lowerChar.charCodeAt(0)); result[optimizedCharIdx] = optimizedCharIdx; } } } function findCode(setNode, targetCharCodes) { return find_default2(setNode.value, (codeOrRange) => { if (typeof codeOrRange === "number") { return includes_default(targetCharCodes, codeOrRange); } else { const range3 = codeOrRange; return find_default2(targetCharCodes, (targetCode) => range3.from <= targetCode && targetCode <= range3.to) !== void 0; } }); } function isWholeOptional(ast) { const quantifier = ast.quantifier; if (quantifier && quantifier.atLeast === 0) { return true; } if (!ast.value) { return false; } return isArray_default(ast.value) ? every_default(ast.value, isWholeOptional) : isWholeOptional(ast.value); } function canMatchCharCode(charCodes, pattern) { if (pattern instanceof RegExp) { const ast = getRegExpAst(pattern); const charCodeFinder = new CharCodeFinder(charCodes); charCodeFinder.visit(ast); return charCodeFinder.found; } else { return find_default2(pattern, (char2) => { return includes_default(charCodes, char2.charCodeAt(0)); }) !== void 0; } } var complementErrorMessage, failedOptimizationPrefixMsg, CharCodeFinder; var init_reg_exp = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/scan/reg_exp.js"() { "use strict"; init_api(); init_lodash(); init_api2(); init_reg_exp_parser(); init_lexer(); complementErrorMessage = "Complement Sets are not supported for first char optimization"; failedOptimizationPrefixMsg = 'Unable to use "first char" lexer optimizations:\n'; __name(getOptimizedStartCodesIndices, "getOptimizedStartCodesIndices"); __name(firstCharOptimizedIndices, "firstCharOptimizedIndices"); __name(addOptimizedIdxToResult, "addOptimizedIdxToResult"); __name(handleIgnoreCase, "handleIgnoreCase"); __name(findCode, "findCode"); __name(isWholeOptional, "isWholeOptional"); CharCodeFinder = class extends BaseRegExpVisitor { static { __name(this, "CharCodeFinder"); } constructor(targetCharCodes) { super(); this.targetCharCodes = targetCharCodes; this.found = false; } visitChildren(node2) { if (this.found === true) { return; } switch (node2.type) { case "Lookahead": this.visitLookahead(node2); return; case "NegativeLookahead": this.visitNegativeLookahead(node2); return; } super.visitChildren(node2); } visitCharacter(node2) { if (includes_default(this.targetCharCodes, node2.value)) { this.found = true; } } visitSet(node2) { if (node2.complement) { if (findCode(node2, this.targetCharCodes) === void 0) { this.found = true; } } else { if (findCode(node2, this.targetCharCodes) !== void 0) { this.found = true; } } } }; __name(canMatchCharCode, "canMatchCharCode"); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/scan/lexer.js function analyzeTokenTypes(tokenTypes, options2) { options2 = defaults_default(options2, { useSticky: SUPPORT_STICKY, debug: false, safeMode: false, positionTracking: "full", lineTerminatorCharacters: ["\r", "\n"], tracer: /* @__PURE__ */ __name((msg, action) => action(), "tracer") }); const tracer = options2.tracer; tracer("initCharCodeToOptimizedIndexMap", () => { initCharCodeToOptimizedIndexMap(); }); let onlyRelevantTypes; tracer("Reject Lexer.NA", () => { onlyRelevantTypes = reject_default(tokenTypes, (currType) => { return currType[PATTERN] === Lexer2.NA; }); }); let hasCustom = false; let allTransformedPatterns; tracer("Transform Patterns", () => { hasCustom = false; allTransformedPatterns = map_default(onlyRelevantTypes, (currType) => { const currPattern = currType[PATTERN]; if (isRegExp_default(currPattern)) { const regExpSource = currPattern.source; if (regExpSource.length === 1 && // only these regExp meta characters which can appear in a length one regExp regExpSource !== "^" && regExpSource !== "$" && regExpSource !== "." && !currPattern.ignoreCase) { return regExpSource; } else if (regExpSource.length === 2 && regExpSource[0] === "\\" && // not a meta character !includes_default([ "d", "D", "s", "S", "t", "r", "n", "t", "0", "c", "b", "B", "f", "v", "w", "W" ], regExpSource[1])) { return regExpSource[1]; } else { return options2.useSticky ? addStickyFlag(currPattern) : addStartOfInput(currPattern); } } else if (isFunction_default(currPattern)) { hasCustom = true; return { exec: currPattern }; } else if (typeof currPattern === "object") { hasCustom = true; return currPattern; } else if (typeof currPattern === "string") { if (currPattern.length === 1) { return currPattern; } else { const escapedRegExpString = currPattern.replace(/[\\^$.*+?()[\]{}|]/g, "\\$&"); const wrappedRegExp = new RegExp(escapedRegExpString); return options2.useSticky ? addStickyFlag(wrappedRegExp) : addStartOfInput(wrappedRegExp); } } else { throw Error("non exhaustive match"); } }); }); let patternIdxToType; let patternIdxToGroup; let patternIdxToLongerAltIdxArr; let patternIdxToPushMode; let patternIdxToPopMode; tracer("misc mapping", () => { patternIdxToType = map_default(onlyRelevantTypes, (currType) => currType.tokenTypeIdx); patternIdxToGroup = map_default(onlyRelevantTypes, (clazz) => { const groupName = clazz.GROUP; if (groupName === Lexer2.SKIPPED) { return void 0; } else if (isString_default(groupName)) { return groupName; } else if (isUndefined_default(groupName)) { return false; } else { throw Error("non exhaustive match"); } }); patternIdxToLongerAltIdxArr = map_default(onlyRelevantTypes, (clazz) => { const longerAltType = clazz.LONGER_ALT; if (longerAltType) { const longerAltIdxArr = isArray_default(longerAltType) ? map_default(longerAltType, (type3) => indexOf_default(onlyRelevantTypes, type3)) : [indexOf_default(onlyRelevantTypes, longerAltType)]; return longerAltIdxArr; } }); patternIdxToPushMode = map_default(onlyRelevantTypes, (clazz) => clazz.PUSH_MODE); patternIdxToPopMode = map_default(onlyRelevantTypes, (clazz) => has_default(clazz, "POP_MODE")); }); let patternIdxToCanLineTerminator; tracer("Line Terminator Handling", () => { const lineTerminatorCharCodes = getCharCodes(options2.lineTerminatorCharacters); patternIdxToCanLineTerminator = map_default(onlyRelevantTypes, (tokType) => false); if (options2.positionTracking !== "onlyOffset") { patternIdxToCanLineTerminator = map_default(onlyRelevantTypes, (tokType) => { if (has_default(tokType, "LINE_BREAKS")) { return !!tokType.LINE_BREAKS; } else { return checkLineBreaksIssues(tokType, lineTerminatorCharCodes) === false && canMatchCharCode(lineTerminatorCharCodes, tokType.PATTERN); } }); } }); let patternIdxToIsCustom; let patternIdxToShort; let emptyGroups; let patternIdxToConfig; tracer("Misc Mapping #2", () => { patternIdxToIsCustom = map_default(onlyRelevantTypes, isCustomPattern); patternIdxToShort = map_default(allTransformedPatterns, isShortPattern); emptyGroups = reduce_default(onlyRelevantTypes, (acc, clazz) => { const groupName = clazz.GROUP; if (isString_default(groupName) && !(groupName === Lexer2.SKIPPED)) { acc[groupName] = []; } return acc; }, {}); patternIdxToConfig = map_default(allTransformedPatterns, (x5, idx) => { return { pattern: allTransformedPatterns[idx], longerAlt: patternIdxToLongerAltIdxArr[idx], canLineTerminator: patternIdxToCanLineTerminator[idx], isCustom: patternIdxToIsCustom[idx], short: patternIdxToShort[idx], group: patternIdxToGroup[idx], push: patternIdxToPushMode[idx], pop: patternIdxToPopMode[idx], tokenTypeIdx: patternIdxToType[idx], tokenType: onlyRelevantTypes[idx] }; }); }); let canBeOptimized = true; let charCodeToPatternIdxToConfig = []; if (!options2.safeMode) { tracer("First Char Optimization", () => { charCodeToPatternIdxToConfig = reduce_default(onlyRelevantTypes, (result, currTokType, idx) => { if (typeof currTokType.PATTERN === "string") { const charCode = currTokType.PATTERN.charCodeAt(0); const optimizedIdx = charCodeToOptimizedIndex(charCode); addToMapOfArrays(result, optimizedIdx, patternIdxToConfig[idx]); } else if (isArray_default(currTokType.START_CHARS_HINT)) { let lastOptimizedIdx; forEach_default(currTokType.START_CHARS_HINT, (charOrInt) => { const charCode = typeof charOrInt === "string" ? charOrInt.charCodeAt(0) : charOrInt; const currOptimizedIdx = charCodeToOptimizedIndex(charCode); if (lastOptimizedIdx !== currOptimizedIdx) { lastOptimizedIdx = currOptimizedIdx; addToMapOfArrays(result, currOptimizedIdx, patternIdxToConfig[idx]); } }); } else if (isRegExp_default(currTokType.PATTERN)) { if (currTokType.PATTERN.unicode) { canBeOptimized = false; if (options2.ensureOptimizations) { PRINT_ERROR(`${failedOptimizationPrefixMsg} Unable to analyze < ${currTokType.PATTERN.toString()} > pattern. The regexp unicode flag is not currently supported by the regexp-to-ast library. This will disable the lexer's first char optimizations. For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`); } } else { const optimizedCodes = getOptimizedStartCodesIndices(currTokType.PATTERN, options2.ensureOptimizations); if (isEmpty_default(optimizedCodes)) { canBeOptimized = false; } forEach_default(optimizedCodes, (code) => { addToMapOfArrays(result, code, patternIdxToConfig[idx]); }); } } else { if (options2.ensureOptimizations) { PRINT_ERROR(`${failedOptimizationPrefixMsg} TokenType: <${currTokType.name}> is using a custom token pattern without providing parameter. This will disable the lexer's first char optimizations. For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`); } canBeOptimized = false; } return result; }, []); }); } return { emptyGroups, patternIdxToConfig, charCodeToPatternIdxToConfig, hasCustom, canBeOptimized }; } function validatePatterns(tokenTypes, validModesNames) { let errors = []; const missingResult = findMissingPatterns(tokenTypes); errors = errors.concat(missingResult.errors); const invalidResult = findInvalidPatterns(missingResult.valid); const validTokenTypes = invalidResult.valid; errors = errors.concat(invalidResult.errors); errors = errors.concat(validateRegExpPattern(validTokenTypes)); errors = errors.concat(findInvalidGroupType(validTokenTypes)); errors = errors.concat(findModesThatDoNotExist(validTokenTypes, validModesNames)); errors = errors.concat(findUnreachablePatterns(validTokenTypes)); return errors; } function validateRegExpPattern(tokenTypes) { let errors = []; const withRegExpPatterns = filter_default3(tokenTypes, (currTokType) => isRegExp_default(currTokType[PATTERN])); errors = errors.concat(findEndOfInputAnchor(withRegExpPatterns)); errors = errors.concat(findStartOfInputAnchor(withRegExpPatterns)); errors = errors.concat(findUnsupportedFlags(withRegExpPatterns)); errors = errors.concat(findDuplicatePatterns(withRegExpPatterns)); errors = errors.concat(findEmptyMatchRegExps(withRegExpPatterns)); return errors; } function findMissingPatterns(tokenTypes) { const tokenTypesWithMissingPattern = filter_default3(tokenTypes, (currType) => { return !has_default(currType, PATTERN); }); const errors = map_default(tokenTypesWithMissingPattern, (currType) => { return { message: "Token Type: ->" + currType.name + "<- missing static 'PATTERN' property", type: LexerDefinitionErrorType.MISSING_PATTERN, tokenTypes: [currType] }; }); const valid2 = difference_default(tokenTypes, tokenTypesWithMissingPattern); return { errors, valid: valid2 }; } function findInvalidPatterns(tokenTypes) { const tokenTypesWithInvalidPattern = filter_default3(tokenTypes, (currType) => { const pattern = currType[PATTERN]; return !isRegExp_default(pattern) && !isFunction_default(pattern) && !has_default(pattern, "exec") && !isString_default(pattern); }); const errors = map_default(tokenTypesWithInvalidPattern, (currType) => { return { message: "Token Type: ->" + currType.name + "<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.", type: LexerDefinitionErrorType.INVALID_PATTERN, tokenTypes: [currType] }; }); const valid2 = difference_default(tokenTypes, tokenTypesWithInvalidPattern); return { errors, valid: valid2 }; } function findEndOfInputAnchor(tokenTypes) { class EndAnchorFinder extends BaseRegExpVisitor { static { __name(this, "EndAnchorFinder"); } constructor() { super(...arguments); this.found = false; } visitEndAnchor(node2) { this.found = true; } } const invalidRegex = filter_default3(tokenTypes, (currType) => { const pattern = currType.PATTERN; try { const regexpAst = getRegExpAst(pattern); const endAnchorVisitor = new EndAnchorFinder(); endAnchorVisitor.visit(regexpAst); return endAnchorVisitor.found; } catch (e3) { return end_of_input.test(pattern.source); } }); const errors = map_default(invalidRegex, (currType) => { return { message: "Unexpected RegExp Anchor Error:\n Token Type: ->" + currType.name + "<- static 'PATTERN' cannot contain end of input anchor '$'\n See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.", type: LexerDefinitionErrorType.EOI_ANCHOR_FOUND, tokenTypes: [currType] }; }); return errors; } function findEmptyMatchRegExps(tokenTypes) { const matchesEmptyString = filter_default3(tokenTypes, (currType) => { const pattern = currType.PATTERN; return pattern.test(""); }); const errors = map_default(matchesEmptyString, (currType) => { return { message: "Token Type: ->" + currType.name + "<- static 'PATTERN' must not match an empty string", type: LexerDefinitionErrorType.EMPTY_MATCH_PATTERN, tokenTypes: [currType] }; }); return errors; } function findStartOfInputAnchor(tokenTypes) { class StartAnchorFinder extends BaseRegExpVisitor { static { __name(this, "StartAnchorFinder"); } constructor() { super(...arguments); this.found = false; } visitStartAnchor(node2) { this.found = true; } } const invalidRegex = filter_default3(tokenTypes, (currType) => { const pattern = currType.PATTERN; try { const regexpAst = getRegExpAst(pattern); const startAnchorVisitor = new StartAnchorFinder(); startAnchorVisitor.visit(regexpAst); return startAnchorVisitor.found; } catch (e3) { return start_of_input.test(pattern.source); } }); const errors = map_default(invalidRegex, (currType) => { return { message: "Unexpected RegExp Anchor Error:\n Token Type: ->" + currType.name + "<- static 'PATTERN' cannot contain start of input anchor '^'\n See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.", type: LexerDefinitionErrorType.SOI_ANCHOR_FOUND, tokenTypes: [currType] }; }); return errors; } function findUnsupportedFlags(tokenTypes) { const invalidFlags = filter_default3(tokenTypes, (currType) => { const pattern = currType[PATTERN]; return pattern instanceof RegExp && (pattern.multiline || pattern.global); }); const errors = map_default(invalidFlags, (currType) => { return { message: "Token Type: ->" + currType.name + "<- static 'PATTERN' may NOT contain global('g') or multiline('m')", type: LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND, tokenTypes: [currType] }; }); return errors; } function findDuplicatePatterns(tokenTypes) { const found = []; let identicalPatterns = map_default(tokenTypes, (outerType) => { return reduce_default(tokenTypes, (result, innerType) => { if (outerType.PATTERN.source === innerType.PATTERN.source && !includes_default(found, innerType) && innerType.PATTERN !== Lexer2.NA) { found.push(innerType); result.push(innerType); return result; } return result; }, []); }); identicalPatterns = compact_default(identicalPatterns); const duplicatePatterns = filter_default3(identicalPatterns, (currIdenticalSet) => { return currIdenticalSet.length > 1; }); const errors = map_default(duplicatePatterns, (setOfIdentical) => { const tokenTypeNames = map_default(setOfIdentical, (currType) => { return currType.name; }); const dupPatternSrc = head_default(setOfIdentical).PATTERN; return { message: `The same RegExp pattern ->${dupPatternSrc}<-has been used in all of the following Token Types: ${tokenTypeNames.join(", ")} <-`, type: LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND, tokenTypes: setOfIdentical }; }); return errors; } function findInvalidGroupType(tokenTypes) { const invalidTypes = filter_default3(tokenTypes, (clazz) => { if (!has_default(clazz, "GROUP")) { return false; } const group2 = clazz.GROUP; return group2 !== Lexer2.SKIPPED && group2 !== Lexer2.NA && !isString_default(group2); }); const errors = map_default(invalidTypes, (currType) => { return { message: "Token Type: ->" + currType.name + "<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String", type: LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND, tokenTypes: [currType] }; }); return errors; } function findModesThatDoNotExist(tokenTypes, validModes) { const invalidModes = filter_default3(tokenTypes, (clazz) => { return clazz.PUSH_MODE !== void 0 && !includes_default(validModes, clazz.PUSH_MODE); }); const errors = map_default(invalidModes, (tokType) => { const msg = `Token Type: ->${tokType.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${tokType.PUSH_MODE}<-which does not exist`; return { message: msg, type: LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST, tokenTypes: [tokType] }; }); return errors; } function findUnreachablePatterns(tokenTypes) { const errors = []; const canBeTested = reduce_default(tokenTypes, (result, tokType, idx) => { const pattern = tokType.PATTERN; if (pattern === Lexer2.NA) { return result; } if (isString_default(pattern)) { result.push({ str: pattern, idx, tokenType: tokType }); } else if (isRegExp_default(pattern) && noMetaChar(pattern)) { result.push({ str: pattern.source, idx, tokenType: tokType }); } return result; }, []); forEach_default(tokenTypes, (tokType, testIdx) => { forEach_default(canBeTested, ({ str: str2, idx, tokenType }) => { if (testIdx < idx && testTokenType(str2, tokType.PATTERN)) { const msg = `Token: ->${tokenType.name}<- can never be matched. Because it appears AFTER the Token Type ->${tokType.name}<-in the lexer's definition. See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`; errors.push({ message: msg, type: LexerDefinitionErrorType.UNREACHABLE_PATTERN, tokenTypes: [tokType, tokenType] }); } }); }); return errors; } function testTokenType(str2, pattern) { if (isRegExp_default(pattern)) { const regExpArray = pattern.exec(str2); return regExpArray !== null && regExpArray.index === 0; } else if (isFunction_default(pattern)) { return pattern(str2, 0, [], {}); } else if (has_default(pattern, "exec")) { return pattern.exec(str2, 0, [], {}); } else if (typeof pattern === "string") { return pattern === str2; } else { throw Error("non exhaustive match"); } } function noMetaChar(regExp) { const metaChars = [ ".", "\\", "[", "]", "|", "^", "$", "(", ")", "?", "*", "+", "{" ]; return find_default2(metaChars, (char2) => regExp.source.indexOf(char2) !== -1) === void 0; } function addStartOfInput(pattern) { const flags = pattern.ignoreCase ? "i" : ""; return new RegExp(`^(?:${pattern.source})`, flags); } function addStickyFlag(pattern) { const flags = pattern.ignoreCase ? "iy" : "y"; return new RegExp(`${pattern.source}`, flags); } function performRuntimeChecks(lexerDefinition, trackLines, lineTerminatorCharacters) { const errors = []; if (!has_default(lexerDefinition, DEFAULT_MODE)) { errors.push({ message: "A MultiMode Lexer cannot be initialized without a <" + DEFAULT_MODE + "> property in its definition\n", type: LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE }); } if (!has_default(lexerDefinition, MODES)) { errors.push({ message: "A MultiMode Lexer cannot be initialized without a <" + MODES + "> property in its definition\n", type: LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY }); } if (has_default(lexerDefinition, MODES) && has_default(lexerDefinition, DEFAULT_MODE) && !has_default(lexerDefinition.modes, lexerDefinition.defaultMode)) { errors.push({ message: `A MultiMode Lexer cannot be initialized with a ${DEFAULT_MODE}: <${lexerDefinition.defaultMode}>which does not exist `, type: LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST }); } if (has_default(lexerDefinition, MODES)) { forEach_default(lexerDefinition.modes, (currModeValue, currModeName) => { forEach_default(currModeValue, (currTokType, currIdx) => { if (isUndefined_default(currTokType)) { errors.push({ message: `A Lexer cannot be initialized using an undefined Token Type. Mode:<${currModeName}> at index: <${currIdx}> `, type: LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED }); } else if (has_default(currTokType, "LONGER_ALT")) { const longerAlt = isArray_default(currTokType.LONGER_ALT) ? currTokType.LONGER_ALT : [currTokType.LONGER_ALT]; forEach_default(longerAlt, (currLongerAlt) => { if (!isUndefined_default(currLongerAlt) && !includes_default(currModeValue, currLongerAlt)) { errors.push({ message: `A MultiMode Lexer cannot be initialized with a longer_alt <${currLongerAlt.name}> on token <${currTokType.name}> outside of mode <${currModeName}> `, type: LexerDefinitionErrorType.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE }); } }); } }); }); } return errors; } function performWarningRuntimeChecks(lexerDefinition, trackLines, lineTerminatorCharacters) { const warnings3 = []; let hasAnyLineBreak = false; const allTokenTypes = compact_default(flatten_default(values_default(lexerDefinition.modes))); const concreteTokenTypes = reject_default(allTokenTypes, (currType) => currType[PATTERN] === Lexer2.NA); const terminatorCharCodes = getCharCodes(lineTerminatorCharacters); if (trackLines) { forEach_default(concreteTokenTypes, (tokType) => { const currIssue = checkLineBreaksIssues(tokType, terminatorCharCodes); if (currIssue !== false) { const message = buildLineBreakIssueMessage(tokType, currIssue); const warningDescriptor = { message, type: currIssue.issue, tokenType: tokType }; warnings3.push(warningDescriptor); } else { if (has_default(tokType, "LINE_BREAKS")) { if (tokType.LINE_BREAKS === true) { hasAnyLineBreak = true; } } else { if (canMatchCharCode(terminatorCharCodes, tokType.PATTERN)) { hasAnyLineBreak = true; } } } }); } if (trackLines && !hasAnyLineBreak) { warnings3.push({ message: "Warning: No LINE_BREAKS Found.\n This Lexer has been defined to track line and column information,\n But none of the Token Types can be identified as matching a line terminator.\n See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS \n for details.", type: LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS }); } return warnings3; } function cloneEmptyGroups(emptyGroups) { const clonedResult = {}; const groupKeys = keys_default(emptyGroups); forEach_default(groupKeys, (currKey) => { const currGroupValue = emptyGroups[currKey]; if (isArray_default(currGroupValue)) { clonedResult[currKey] = []; } else { throw Error("non exhaustive match"); } }); return clonedResult; } function isCustomPattern(tokenType) { const pattern = tokenType.PATTERN; if (isRegExp_default(pattern)) { return false; } else if (isFunction_default(pattern)) { return true; } else if (has_default(pattern, "exec")) { return true; } else if (isString_default(pattern)) { return false; } else { throw Error("non exhaustive match"); } } function isShortPattern(pattern) { if (isString_default(pattern) && pattern.length === 1) { return pattern.charCodeAt(0); } else { return false; } } function checkLineBreaksIssues(tokType, lineTerminatorCharCodes) { if (has_default(tokType, "LINE_BREAKS")) { return false; } else { if (isRegExp_default(tokType.PATTERN)) { try { canMatchCharCode(lineTerminatorCharCodes, tokType.PATTERN); } catch (e3) { return { issue: LexerDefinitionErrorType.IDENTIFY_TERMINATOR, errMsg: e3.message }; } return false; } else if (isString_default(tokType.PATTERN)) { return false; } else if (isCustomPattern(tokType)) { return { issue: LexerDefinitionErrorType.CUSTOM_LINE_BREAK }; } else { throw Error("non exhaustive match"); } } } function buildLineBreakIssueMessage(tokType, details) { if (details.issue === LexerDefinitionErrorType.IDENTIFY_TERMINATOR) { return `Warning: unable to identify line terminator usage in pattern. The problem is in the <${tokType.name}> Token Type Root cause: ${details.errMsg}. For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR`; } else if (details.issue === LexerDefinitionErrorType.CUSTOM_LINE_BREAK) { return `Warning: A Custom Token Pattern should specify the option. The problem is in the <${tokType.name}> Token Type For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK`; } else { throw Error("non exhaustive match"); } } function getCharCodes(charsOrCodes) { const charCodes = map_default(charsOrCodes, (numOrString) => { if (isString_default(numOrString)) { return numOrString.charCodeAt(0); } else { return numOrString; } }); return charCodes; } function addToMapOfArrays(map5, key, value2) { if (map5[key] === void 0) { map5[key] = [value2]; } else { map5[key].push(value2); } } function charCodeToOptimizedIndex(charCode) { return charCode < minOptimizationVal ? charCode : charCodeToOptimizedIdxMap[charCode]; } function initCharCodeToOptimizedIndexMap() { if (isEmpty_default(charCodeToOptimizedIdxMap)) { charCodeToOptimizedIdxMap = new Array(65536); for (let i2 = 0; i2 < 65536; i2++) { charCodeToOptimizedIdxMap[i2] = i2 > 255 ? 255 + ~~(i2 / 255) : i2; } } } var PATTERN, DEFAULT_MODE, MODES, SUPPORT_STICKY, end_of_input, start_of_input, LineTerminatorOptimizedTester, minOptimizationVal, charCodeToOptimizedIdxMap; var init_lexer = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/scan/lexer.js"() { "use strict"; init_api(); init_lexer_public(); init_lodash(); init_api2(); init_reg_exp(); init_reg_exp_parser(); PATTERN = "PATTERN"; DEFAULT_MODE = "defaultMode"; MODES = "modes"; SUPPORT_STICKY = typeof new RegExp("(?:)").sticky === "boolean"; __name(analyzeTokenTypes, "analyzeTokenTypes"); __name(validatePatterns, "validatePatterns"); __name(validateRegExpPattern, "validateRegExpPattern"); __name(findMissingPatterns, "findMissingPatterns"); __name(findInvalidPatterns, "findInvalidPatterns"); end_of_input = /[^\\][$]/; __name(findEndOfInputAnchor, "findEndOfInputAnchor"); __name(findEmptyMatchRegExps, "findEmptyMatchRegExps"); start_of_input = /[^\\[][\^]|^\^/; __name(findStartOfInputAnchor, "findStartOfInputAnchor"); __name(findUnsupportedFlags, "findUnsupportedFlags"); __name(findDuplicatePatterns, "findDuplicatePatterns"); __name(findInvalidGroupType, "findInvalidGroupType"); __name(findModesThatDoNotExist, "findModesThatDoNotExist"); __name(findUnreachablePatterns, "findUnreachablePatterns"); __name(testTokenType, "testTokenType"); __name(noMetaChar, "noMetaChar"); __name(addStartOfInput, "addStartOfInput"); __name(addStickyFlag, "addStickyFlag"); __name(performRuntimeChecks, "performRuntimeChecks"); __name(performWarningRuntimeChecks, "performWarningRuntimeChecks"); __name(cloneEmptyGroups, "cloneEmptyGroups"); __name(isCustomPattern, "isCustomPattern"); __name(isShortPattern, "isShortPattern"); LineTerminatorOptimizedTester = { // implements /\n|\r\n?/g.test test: /* @__PURE__ */ __name(function(text4) { const len = text4.length; for (let i2 = this.lastIndex; i2 < len; i2++) { const c3 = text4.charCodeAt(i2); if (c3 === 10) { this.lastIndex = i2 + 1; return true; } else if (c3 === 13) { if (text4.charCodeAt(i2 + 1) === 10) { this.lastIndex = i2 + 2; } else { this.lastIndex = i2 + 1; } return true; } } return false; }, "test"), lastIndex: 0 }; __name(checkLineBreaksIssues, "checkLineBreaksIssues"); __name(buildLineBreakIssueMessage, "buildLineBreakIssueMessage"); __name(getCharCodes, "getCharCodes"); __name(addToMapOfArrays, "addToMapOfArrays"); minOptimizationVal = 256; charCodeToOptimizedIdxMap = []; __name(charCodeToOptimizedIndex, "charCodeToOptimizedIndex"); __name(initCharCodeToOptimizedIndexMap, "initCharCodeToOptimizedIndexMap"); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/scan/tokens.js function tokenStructuredMatcher(tokInstance, tokConstructor) { const instanceType = tokInstance.tokenTypeIdx; if (instanceType === tokConstructor.tokenTypeIdx) { return true; } else { return tokConstructor.isParent === true && tokConstructor.categoryMatchesMap[instanceType] === true; } } function tokenStructuredMatcherNoCategories(token2, tokType) { return token2.tokenTypeIdx === tokType.tokenTypeIdx; } function augmentTokenTypes(tokenTypes) { const tokenTypesAndParents = expandCategories(tokenTypes); assignTokenDefaultProps(tokenTypesAndParents); assignCategoriesMapProp(tokenTypesAndParents); assignCategoriesTokensProp(tokenTypesAndParents); forEach_default(tokenTypesAndParents, (tokType) => { tokType.isParent = tokType.categoryMatches.length > 0; }); } function expandCategories(tokenTypes) { let result = clone_default2(tokenTypes); let categories = tokenTypes; let searching = true; while (searching) { categories = compact_default(flatten_default(map_default(categories, (currTokType) => currTokType.CATEGORIES))); const newCategories = difference_default(categories, result); result = result.concat(newCategories); if (isEmpty_default(newCategories)) { searching = false; } else { categories = newCategories; } } return result; } function assignTokenDefaultProps(tokenTypes) { forEach_default(tokenTypes, (currTokType) => { if (!hasShortKeyProperty(currTokType)) { tokenIdxToClass[tokenShortNameIdx] = currTokType; currTokType.tokenTypeIdx = tokenShortNameIdx++; } if (hasCategoriesProperty(currTokType) && !isArray_default(currTokType.CATEGORIES)) { currTokType.CATEGORIES = [currTokType.CATEGORIES]; } if (!hasCategoriesProperty(currTokType)) { currTokType.CATEGORIES = []; } if (!hasExtendingTokensTypesProperty(currTokType)) { currTokType.categoryMatches = []; } if (!hasExtendingTokensTypesMapProperty(currTokType)) { currTokType.categoryMatchesMap = {}; } }); } function assignCategoriesTokensProp(tokenTypes) { forEach_default(tokenTypes, (currTokType) => { currTokType.categoryMatches = []; forEach_default(currTokType.categoryMatchesMap, (val, key) => { currTokType.categoryMatches.push(tokenIdxToClass[key].tokenTypeIdx); }); }); } function assignCategoriesMapProp(tokenTypes) { forEach_default(tokenTypes, (currTokType) => { singleAssignCategoriesToksMap([], currTokType); }); } function singleAssignCategoriesToksMap(path4, nextNode) { forEach_default(path4, (pathNode) => { nextNode.categoryMatchesMap[pathNode.tokenTypeIdx] = true; }); forEach_default(nextNode.CATEGORIES, (nextCategory) => { const newPath = path4.concat(nextNode); if (!includes_default(newPath, nextCategory)) { singleAssignCategoriesToksMap(newPath, nextCategory); } }); } function hasShortKeyProperty(tokType) { return has_default(tokType, "tokenTypeIdx"); } function hasCategoriesProperty(tokType) { return has_default(tokType, "CATEGORIES"); } function hasExtendingTokensTypesProperty(tokType) { return has_default(tokType, "categoryMatches"); } function hasExtendingTokensTypesMapProperty(tokType) { return has_default(tokType, "categoryMatchesMap"); } function isTokenType(tokType) { return has_default(tokType, "tokenTypeIdx"); } var tokenShortNameIdx, tokenIdxToClass; var init_tokens = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/scan/tokens.js"() { "use strict"; init_lodash(); __name(tokenStructuredMatcher, "tokenStructuredMatcher"); __name(tokenStructuredMatcherNoCategories, "tokenStructuredMatcherNoCategories"); tokenShortNameIdx = 1; tokenIdxToClass = {}; __name(augmentTokenTypes, "augmentTokenTypes"); __name(expandCategories, "expandCategories"); __name(assignTokenDefaultProps, "assignTokenDefaultProps"); __name(assignCategoriesTokensProp, "assignCategoriesTokensProp"); __name(assignCategoriesMapProp, "assignCategoriesMapProp"); __name(singleAssignCategoriesToksMap, "singleAssignCategoriesToksMap"); __name(hasShortKeyProperty, "hasShortKeyProperty"); __name(hasCategoriesProperty, "hasCategoriesProperty"); __name(hasExtendingTokensTypesProperty, "hasExtendingTokensTypesProperty"); __name(hasExtendingTokensTypesMapProperty, "hasExtendingTokensTypesMapProperty"); __name(isTokenType, "isTokenType"); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/scan/lexer_errors_public.js var defaultLexerErrorProvider; var init_lexer_errors_public = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/scan/lexer_errors_public.js"() { "use strict"; defaultLexerErrorProvider = { buildUnableToPopLexerModeMessage(token2) { return `Unable to pop Lexer Mode after encountering Token ->${token2.image}<- The Mode Stack is empty`; }, buildUnexpectedCharactersMessage(fullText, startOffset, length2, line2, column2) { return `unexpected character: ->${fullText.charAt(startOffset)}<- at offset: ${startOffset}, skipped ${length2} characters.`; } }; } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/scan/lexer_public.js var LexerDefinitionErrorType, DEFAULT_LEXER_CONFIG, Lexer2; var init_lexer_public = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/scan/lexer_public.js"() { "use strict"; init_lexer(); init_lodash(); init_api2(); init_tokens(); init_lexer_errors_public(); init_reg_exp_parser(); (function(LexerDefinitionErrorType2) { LexerDefinitionErrorType2[LexerDefinitionErrorType2["MISSING_PATTERN"] = 0] = "MISSING_PATTERN"; LexerDefinitionErrorType2[LexerDefinitionErrorType2["INVALID_PATTERN"] = 1] = "INVALID_PATTERN"; LexerDefinitionErrorType2[LexerDefinitionErrorType2["EOI_ANCHOR_FOUND"] = 2] = "EOI_ANCHOR_FOUND"; LexerDefinitionErrorType2[LexerDefinitionErrorType2["UNSUPPORTED_FLAGS_FOUND"] = 3] = "UNSUPPORTED_FLAGS_FOUND"; LexerDefinitionErrorType2[LexerDefinitionErrorType2["DUPLICATE_PATTERNS_FOUND"] = 4] = "DUPLICATE_PATTERNS_FOUND"; LexerDefinitionErrorType2[LexerDefinitionErrorType2["INVALID_GROUP_TYPE_FOUND"] = 5] = "INVALID_GROUP_TYPE_FOUND"; LexerDefinitionErrorType2[LexerDefinitionErrorType2["PUSH_MODE_DOES_NOT_EXIST"] = 6] = "PUSH_MODE_DOES_NOT_EXIST"; LexerDefinitionErrorType2[LexerDefinitionErrorType2["MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE"] = 7] = "MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE"; LexerDefinitionErrorType2[LexerDefinitionErrorType2["MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY"] = 8] = "MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY"; LexerDefinitionErrorType2[LexerDefinitionErrorType2["MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST"] = 9] = "MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST"; LexerDefinitionErrorType2[LexerDefinitionErrorType2["LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED"] = 10] = "LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED"; LexerDefinitionErrorType2[LexerDefinitionErrorType2["SOI_ANCHOR_FOUND"] = 11] = "SOI_ANCHOR_FOUND"; LexerDefinitionErrorType2[LexerDefinitionErrorType2["EMPTY_MATCH_PATTERN"] = 12] = "EMPTY_MATCH_PATTERN"; LexerDefinitionErrorType2[LexerDefinitionErrorType2["NO_LINE_BREAKS_FLAGS"] = 13] = "NO_LINE_BREAKS_FLAGS"; LexerDefinitionErrorType2[LexerDefinitionErrorType2["UNREACHABLE_PATTERN"] = 14] = "UNREACHABLE_PATTERN"; LexerDefinitionErrorType2[LexerDefinitionErrorType2["IDENTIFY_TERMINATOR"] = 15] = "IDENTIFY_TERMINATOR"; LexerDefinitionErrorType2[LexerDefinitionErrorType2["CUSTOM_LINE_BREAK"] = 16] = "CUSTOM_LINE_BREAK"; LexerDefinitionErrorType2[LexerDefinitionErrorType2["MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE"] = 17] = "MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE"; })(LexerDefinitionErrorType || (LexerDefinitionErrorType = {})); DEFAULT_LEXER_CONFIG = { deferDefinitionErrorsHandling: false, positionTracking: "full", lineTerminatorsPattern: /\n|\r\n?/g, lineTerminatorCharacters: ["\n", "\r"], ensureOptimizations: false, safeMode: false, errorMessageProvider: defaultLexerErrorProvider, traceInitPerf: false, skipValidations: false, recoveryEnabled: true }; Object.freeze(DEFAULT_LEXER_CONFIG); Lexer2 = class { static { __name(this, "Lexer"); } constructor(lexerDefinition, config5 = DEFAULT_LEXER_CONFIG) { this.lexerDefinition = lexerDefinition; this.lexerDefinitionErrors = []; this.lexerDefinitionWarning = []; this.patternIdxToConfig = {}; this.charCodeToPatternIdxToConfig = {}; this.modes = []; this.emptyGroups = {}; this.trackStartLines = true; this.trackEndLines = true; this.hasCustom = false; this.canModeBeOptimized = {}; this.TRACE_INIT = (phaseDesc, phaseImpl) => { if (this.traceInitPerf === true) { this.traceInitIndent++; const indent = new Array(this.traceInitIndent + 1).join(" "); if (this.traceInitIndent < this.traceInitMaxIdent) { console.log(`${indent}--> <${phaseDesc}>`); } const { time: time4, value: value2 } = timer2(phaseImpl); const traceMethod = time4 > 10 ? console.warn : console.log; if (this.traceInitIndent < this.traceInitMaxIdent) { traceMethod(`${indent}<-- <${phaseDesc}> time: ${time4}ms`); } this.traceInitIndent--; return value2; } else { return phaseImpl(); } }; if (typeof config5 === "boolean") { throw Error("The second argument to the Lexer constructor is now an ILexerConfig Object.\na boolean 2nd argument is no longer supported"); } this.config = assign_default({}, DEFAULT_LEXER_CONFIG, config5); const traceInitVal = this.config.traceInitPerf; if (traceInitVal === true) { this.traceInitMaxIdent = Infinity; this.traceInitPerf = true; } else if (typeof traceInitVal === "number") { this.traceInitMaxIdent = traceInitVal; this.traceInitPerf = true; } this.traceInitIndent = -1; this.TRACE_INIT("Lexer Constructor", () => { let actualDefinition; let hasOnlySingleMode = true; this.TRACE_INIT("Lexer Config handling", () => { if (this.config.lineTerminatorsPattern === DEFAULT_LEXER_CONFIG.lineTerminatorsPattern) { this.config.lineTerminatorsPattern = LineTerminatorOptimizedTester; } else { if (this.config.lineTerminatorCharacters === DEFAULT_LEXER_CONFIG.lineTerminatorCharacters) { throw Error("Error: Missing property on the Lexer config.\n For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS"); } } if (config5.safeMode && config5.ensureOptimizations) { throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.'); } this.trackStartLines = /full|onlyStart/i.test(this.config.positionTracking); this.trackEndLines = /full/i.test(this.config.positionTracking); if (isArray_default(lexerDefinition)) { actualDefinition = { modes: { defaultMode: clone_default2(lexerDefinition) }, defaultMode: DEFAULT_MODE }; } else { hasOnlySingleMode = false; actualDefinition = clone_default2(lexerDefinition); } }); if (this.config.skipValidations === false) { this.TRACE_INIT("performRuntimeChecks", () => { this.lexerDefinitionErrors = this.lexerDefinitionErrors.concat(performRuntimeChecks(actualDefinition, this.trackStartLines, this.config.lineTerminatorCharacters)); }); this.TRACE_INIT("performWarningRuntimeChecks", () => { this.lexerDefinitionWarning = this.lexerDefinitionWarning.concat(performWarningRuntimeChecks(actualDefinition, this.trackStartLines, this.config.lineTerminatorCharacters)); }); } actualDefinition.modes = actualDefinition.modes ? actualDefinition.modes : {}; forEach_default(actualDefinition.modes, (currModeValue, currModeName) => { actualDefinition.modes[currModeName] = reject_default(currModeValue, (currTokType) => isUndefined_default(currTokType)); }); const allModeNames = keys_default(actualDefinition.modes); forEach_default(actualDefinition.modes, (currModDef, currModName) => { this.TRACE_INIT(`Mode: <${currModName}> processing`, () => { this.modes.push(currModName); if (this.config.skipValidations === false) { this.TRACE_INIT(`validatePatterns`, () => { this.lexerDefinitionErrors = this.lexerDefinitionErrors.concat(validatePatterns(currModDef, allModeNames)); }); } if (isEmpty_default(this.lexerDefinitionErrors)) { augmentTokenTypes(currModDef); let currAnalyzeResult; this.TRACE_INIT(`analyzeTokenTypes`, () => { currAnalyzeResult = analyzeTokenTypes(currModDef, { lineTerminatorCharacters: this.config.lineTerminatorCharacters, positionTracking: config5.positionTracking, ensureOptimizations: config5.ensureOptimizations, safeMode: config5.safeMode, tracer: this.TRACE_INIT }); }); this.patternIdxToConfig[currModName] = currAnalyzeResult.patternIdxToConfig; this.charCodeToPatternIdxToConfig[currModName] = currAnalyzeResult.charCodeToPatternIdxToConfig; this.emptyGroups = assign_default({}, this.emptyGroups, currAnalyzeResult.emptyGroups); this.hasCustom = currAnalyzeResult.hasCustom || this.hasCustom; this.canModeBeOptimized[currModName] = currAnalyzeResult.canBeOptimized; } }); }); this.defaultMode = actualDefinition.defaultMode; if (!isEmpty_default(this.lexerDefinitionErrors) && !this.config.deferDefinitionErrorsHandling) { const allErrMessages = map_default(this.lexerDefinitionErrors, (error3) => { return error3.message; }); const allErrMessagesString = allErrMessages.join("-----------------------\n"); throw new Error("Errors detected in definition of Lexer:\n" + allErrMessagesString); } forEach_default(this.lexerDefinitionWarning, (warningDescriptor) => { PRINT_WARNING(warningDescriptor.message); }); this.TRACE_INIT("Choosing sub-methods implementations", () => { if (SUPPORT_STICKY) { this.chopInput = identity_default4; this.match = this.matchWithTest; } else { this.updateLastIndex = noop_default2; this.match = this.matchWithExec; } if (hasOnlySingleMode) { this.handleModes = noop_default2; } if (this.trackStartLines === false) { this.computeNewColumn = identity_default4; } if (this.trackEndLines === false) { this.updateTokenEndLineColumnLocation = noop_default2; } if (/full/i.test(this.config.positionTracking)) { this.createTokenInstance = this.createFullToken; } else if (/onlyStart/i.test(this.config.positionTracking)) { this.createTokenInstance = this.createStartOnlyToken; } else if (/onlyOffset/i.test(this.config.positionTracking)) { this.createTokenInstance = this.createOffsetOnlyToken; } else { throw Error(`Invalid config option: "${this.config.positionTracking}"`); } if (this.hasCustom) { this.addToken = this.addTokenUsingPush; this.handlePayload = this.handlePayloadWithCustom; } else { this.addToken = this.addTokenUsingMemberAccess; this.handlePayload = this.handlePayloadNoCustom; } }); this.TRACE_INIT("Failed Optimization Warnings", () => { const unOptimizedModes = reduce_default(this.canModeBeOptimized, (cannotBeOptimized, canBeOptimized, modeName) => { if (canBeOptimized === false) { cannotBeOptimized.push(modeName); } return cannotBeOptimized; }, []); if (config5.ensureOptimizations && !isEmpty_default(unOptimizedModes)) { throw Error(`Lexer Modes: < ${unOptimizedModes.join(", ")} > cannot be optimized. Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. Or inspect the console log for details on how to resolve these issues.`); } }); this.TRACE_INIT("clearRegExpParserCache", () => { clearRegExpParserCache(); }); this.TRACE_INIT("toFastProperties", () => { toFastProperties(this); }); }); } tokenize(text4, initialMode = this.defaultMode) { if (!isEmpty_default(this.lexerDefinitionErrors)) { const allErrMessages = map_default(this.lexerDefinitionErrors, (error3) => { return error3.message; }); const allErrMessagesString = allErrMessages.join("-----------------------\n"); throw new Error("Unable to Tokenize because Errors detected in definition of Lexer:\n" + allErrMessagesString); } return this.tokenizeInternal(text4, initialMode); } // There is quite a bit of duplication between this and "tokenizeInternalLazy" // This is intentional due to performance considerations. // this method also used quite a bit of `!` none null assertions because it is too optimized // for `tsc` to always understand it is "safe" tokenizeInternal(text4, initialMode) { let i2, j3, k2, matchAltImage, longerAlt, matchedImage, payload, altPayload, imageLength, group2, tokType, newToken, errLength, droppedChar, msg, match2; const orgText = text4; const orgLength = orgText.length; let offset = 0; let matchedTokensIndex = 0; const guessedNumberOfTokens = this.hasCustom ? 0 : Math.floor(text4.length / 10); const matchedTokens = new Array(guessedNumberOfTokens); const errors = []; let line2 = this.trackStartLines ? 1 : void 0; let column2 = this.trackStartLines ? 1 : void 0; const groups = cloneEmptyGroups(this.emptyGroups); const trackLines = this.trackStartLines; const lineTerminatorPattern = this.config.lineTerminatorsPattern; let currModePatternsLength = 0; let patternIdxToConfig = []; let currCharCodeToPatternIdxToConfig = []; const modeStack = []; const emptyArray = []; Object.freeze(emptyArray); let getPossiblePatterns; function getPossiblePatternsSlow() { return patternIdxToConfig; } __name(getPossiblePatternsSlow, "getPossiblePatternsSlow"); function getPossiblePatternsOptimized(charCode) { const optimizedCharIdx = charCodeToOptimizedIndex(charCode); const possiblePatterns = currCharCodeToPatternIdxToConfig[optimizedCharIdx]; if (possiblePatterns === void 0) { return emptyArray; } else { return possiblePatterns; } } __name(getPossiblePatternsOptimized, "getPossiblePatternsOptimized"); const pop_mode = /* @__PURE__ */ __name((popToken) => { if (modeStack.length === 1 && // if we have both a POP_MODE and a PUSH_MODE this is in-fact a "transition" // So no error should occur. popToken.tokenType.PUSH_MODE === void 0) { const msg2 = this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(popToken); errors.push({ offset: popToken.startOffset, line: popToken.startLine, column: popToken.startColumn, length: popToken.image.length, message: msg2 }); } else { modeStack.pop(); const newMode = last_default(modeStack); patternIdxToConfig = this.patternIdxToConfig[newMode]; currCharCodeToPatternIdxToConfig = this.charCodeToPatternIdxToConfig[newMode]; currModePatternsLength = patternIdxToConfig.length; const modeCanBeOptimized = this.canModeBeOptimized[newMode] && this.config.safeMode === false; if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) { getPossiblePatterns = getPossiblePatternsOptimized; } else { getPossiblePatterns = getPossiblePatternsSlow; } } }, "pop_mode"); function push_mode(newMode) { modeStack.push(newMode); currCharCodeToPatternIdxToConfig = this.charCodeToPatternIdxToConfig[newMode]; patternIdxToConfig = this.patternIdxToConfig[newMode]; currModePatternsLength = patternIdxToConfig.length; currModePatternsLength = patternIdxToConfig.length; const modeCanBeOptimized = this.canModeBeOptimized[newMode] && this.config.safeMode === false; if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) { getPossiblePatterns = getPossiblePatternsOptimized; } else { getPossiblePatterns = getPossiblePatternsSlow; } } __name(push_mode, "push_mode"); push_mode.call(this, initialMode); let currConfig; const recoveryEnabled = this.config.recoveryEnabled; while (offset < orgLength) { matchedImage = null; const nextCharCode = orgText.charCodeAt(offset); const chosenPatternIdxToConfig = getPossiblePatterns(nextCharCode); const chosenPatternsLength = chosenPatternIdxToConfig.length; for (i2 = 0; i2 < chosenPatternsLength; i2++) { currConfig = chosenPatternIdxToConfig[i2]; const currPattern = currConfig.pattern; payload = null; const singleCharCode = currConfig.short; if (singleCharCode !== false) { if (nextCharCode === singleCharCode) { matchedImage = currPattern; } } else if (currConfig.isCustom === true) { match2 = currPattern.exec(orgText, offset, matchedTokens, groups); if (match2 !== null) { matchedImage = match2[0]; if (match2.payload !== void 0) { payload = match2.payload; } } else { matchedImage = null; } } else { this.updateLastIndex(currPattern, offset); matchedImage = this.match(currPattern, text4, offset); } if (matchedImage !== null) { longerAlt = currConfig.longerAlt; if (longerAlt !== void 0) { const longerAltLength = longerAlt.length; for (k2 = 0; k2 < longerAltLength; k2++) { const longerAltConfig = patternIdxToConfig[longerAlt[k2]]; const longerAltPattern = longerAltConfig.pattern; altPayload = null; if (longerAltConfig.isCustom === true) { match2 = longerAltPattern.exec(orgText, offset, matchedTokens, groups); if (match2 !== null) { matchAltImage = match2[0]; if (match2.payload !== void 0) { altPayload = match2.payload; } } else { matchAltImage = null; } } else { this.updateLastIndex(longerAltPattern, offset); matchAltImage = this.match(longerAltPattern, text4, offset); } if (matchAltImage && matchAltImage.length > matchedImage.length) { matchedImage = matchAltImage; payload = altPayload; currConfig = longerAltConfig; break; } } } break; } } if (matchedImage !== null) { imageLength = matchedImage.length; group2 = currConfig.group; if (group2 !== void 0) { tokType = currConfig.tokenTypeIdx; newToken = this.createTokenInstance(matchedImage, offset, tokType, currConfig.tokenType, line2, column2, imageLength); this.handlePayload(newToken, payload); if (group2 === false) { matchedTokensIndex = this.addToken(matchedTokens, matchedTokensIndex, newToken); } else { groups[group2].push(newToken); } } text4 = this.chopInput(text4, imageLength); offset = offset + imageLength; column2 = this.computeNewColumn(column2, imageLength); if (trackLines === true && currConfig.canLineTerminator === true) { let numOfLTsInMatch = 0; let foundTerminator; let lastLTEndOffset; lineTerminatorPattern.lastIndex = 0; do { foundTerminator = lineTerminatorPattern.test(matchedImage); if (foundTerminator === true) { lastLTEndOffset = lineTerminatorPattern.lastIndex - 1; numOfLTsInMatch++; } } while (foundTerminator === true); if (numOfLTsInMatch !== 0) { line2 = line2 + numOfLTsInMatch; column2 = imageLength - lastLTEndOffset; this.updateTokenEndLineColumnLocation(newToken, group2, lastLTEndOffset, numOfLTsInMatch, line2, column2, imageLength); } } this.handleModes(currConfig, pop_mode, push_mode, newToken); } else { const errorStartOffset = offset; const errorLine = line2; const errorColumn = column2; let foundResyncPoint = recoveryEnabled === false; while (foundResyncPoint === false && offset < orgLength) { text4 = this.chopInput(text4, 1); offset++; for (j3 = 0; j3 < currModePatternsLength; j3++) { const currConfig2 = patternIdxToConfig[j3]; const currPattern = currConfig2.pattern; const singleCharCode = currConfig2.short; if (singleCharCode !== false) { if (orgText.charCodeAt(offset) === singleCharCode) { foundResyncPoint = true; } } else if (currConfig2.isCustom === true) { foundResyncPoint = currPattern.exec(orgText, offset, matchedTokens, groups) !== null; } else { this.updateLastIndex(currPattern, offset); foundResyncPoint = currPattern.exec(text4) !== null; } if (foundResyncPoint === true) { break; } } } errLength = offset - errorStartOffset; column2 = this.computeNewColumn(column2, errLength); msg = this.config.errorMessageProvider.buildUnexpectedCharactersMessage(orgText, errorStartOffset, errLength, errorLine, errorColumn); errors.push({ offset: errorStartOffset, line: errorLine, column: errorColumn, length: errLength, message: msg }); if (recoveryEnabled === false) { break; } } } if (!this.hasCustom) { matchedTokens.length = matchedTokensIndex; } return { tokens: matchedTokens, groups, errors }; } handleModes(config5, pop_mode, push_mode, newToken) { if (config5.pop === true) { const pushMode = config5.push; pop_mode(newToken); if (pushMode !== void 0) { push_mode.call(this, pushMode); } } else if (config5.push !== void 0) { push_mode.call(this, config5.push); } } chopInput(text4, length2) { return text4.substring(length2); } updateLastIndex(regExp, newLastIndex) { regExp.lastIndex = newLastIndex; } // TODO: decrease this under 600 characters? inspect stripping comments option in TSC compiler updateTokenEndLineColumnLocation(newToken, group2, lastLTIdx, numOfLTsInMatch, line2, column2, imageLength) { let lastCharIsLT, fixForEndingInLT; if (group2 !== void 0) { lastCharIsLT = lastLTIdx === imageLength - 1; fixForEndingInLT = lastCharIsLT ? -1 : 0; if (!(numOfLTsInMatch === 1 && lastCharIsLT === true)) { newToken.endLine = line2 + fixForEndingInLT; newToken.endColumn = column2 - 1 + -fixForEndingInLT; } } } computeNewColumn(oldColumn, imageLength) { return oldColumn + imageLength; } createOffsetOnlyToken(image, startOffset, tokenTypeIdx, tokenType) { return { image, startOffset, tokenTypeIdx, tokenType }; } createStartOnlyToken(image, startOffset, tokenTypeIdx, tokenType, startLine, startColumn) { return { image, startOffset, startLine, startColumn, tokenTypeIdx, tokenType }; } createFullToken(image, startOffset, tokenTypeIdx, tokenType, startLine, startColumn, imageLength) { return { image, startOffset, endOffset: startOffset + imageLength - 1, startLine, endLine: startLine, startColumn, endColumn: startColumn + imageLength - 1, tokenTypeIdx, tokenType }; } addTokenUsingPush(tokenVector, index, tokenToAdd) { tokenVector.push(tokenToAdd); return index; } addTokenUsingMemberAccess(tokenVector, index, tokenToAdd) { tokenVector[index] = tokenToAdd; index++; return index; } handlePayloadNoCustom(token2, payload) { } handlePayloadWithCustom(token2, payload) { if (payload !== null) { token2.payload = payload; } } matchWithTest(pattern, text4, offset) { const found = pattern.test(text4); if (found === true) { return text4.substring(offset, pattern.lastIndex); } return null; } matchWithExec(pattern, text4) { const regExpArray = pattern.exec(text4); return regExpArray !== null ? regExpArray[0] : null; } }; Lexer2.SKIPPED = "This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace."; Lexer2.NA = /NOT_APPLICABLE/; } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/scan/tokens_public.js function tokenLabel2(tokType) { if (hasTokenLabel2(tokType)) { return tokType.LABEL; } else { return tokType.name; } } function hasTokenLabel2(obj) { return isString_default(obj.LABEL) && obj.LABEL !== ""; } function createToken(config5) { return createTokenInternal(config5); } function createTokenInternal(config5) { const pattern = config5.pattern; const tokenType = {}; tokenType.name = config5.name; if (!isUndefined_default(pattern)) { tokenType.PATTERN = pattern; } if (has_default(config5, PARENT)) { throw "The parent property is no longer supported.\nSee: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details."; } if (has_default(config5, CATEGORIES)) { tokenType.CATEGORIES = config5[CATEGORIES]; } augmentTokenTypes([tokenType]); if (has_default(config5, LABEL)) { tokenType.LABEL = config5[LABEL]; } if (has_default(config5, GROUP)) { tokenType.GROUP = config5[GROUP]; } if (has_default(config5, POP_MODE)) { tokenType.POP_MODE = config5[POP_MODE]; } if (has_default(config5, PUSH_MODE)) { tokenType.PUSH_MODE = config5[PUSH_MODE]; } if (has_default(config5, LONGER_ALT)) { tokenType.LONGER_ALT = config5[LONGER_ALT]; } if (has_default(config5, LINE_BREAKS)) { tokenType.LINE_BREAKS = config5[LINE_BREAKS]; } if (has_default(config5, START_CHARS_HINT)) { tokenType.START_CHARS_HINT = config5[START_CHARS_HINT]; } return tokenType; } function createTokenInstance(tokType, image, startOffset, endOffset, startLine, endLine, startColumn, endColumn) { return { image, startOffset, endOffset, startLine, endLine, startColumn, endColumn, tokenTypeIdx: tokType.tokenTypeIdx, tokenType: tokType }; } function tokenMatcher(token2, tokType) { return tokenStructuredMatcher(token2, tokType); } var PARENT, CATEGORIES, LABEL, GROUP, PUSH_MODE, POP_MODE, LONGER_ALT, LINE_BREAKS, START_CHARS_HINT, EOF; var init_tokens_public = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/scan/tokens_public.js"() { "use strict"; init_lodash(); init_lexer_public(); init_tokens(); __name(tokenLabel2, "tokenLabel"); __name(hasTokenLabel2, "hasTokenLabel"); PARENT = "parent"; CATEGORIES = "categories"; LABEL = "label"; GROUP = "group"; PUSH_MODE = "push_mode"; POP_MODE = "pop_mode"; LONGER_ALT = "longer_alt"; LINE_BREAKS = "line_breaks"; START_CHARS_HINT = "start_chars_hint"; __name(createToken, "createToken"); __name(createTokenInternal, "createTokenInternal"); EOF = createToken({ name: "EOF", pattern: Lexer2.NA }); augmentTokenTypes([EOF]); __name(createTokenInstance, "createTokenInstance"); __name(tokenMatcher, "tokenMatcher"); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/errors_public.js var defaultParserErrorProvider, defaultGrammarResolverErrorProvider, defaultGrammarValidatorErrorProvider; var init_errors_public = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/errors_public.js"() { "use strict"; init_tokens_public(); init_lodash(); init_api3(); defaultParserErrorProvider = { buildMismatchTokenMessage({ expected, actual, previous, ruleName }) { const hasLabel = hasTokenLabel2(expected); const expectedMsg = hasLabel ? `--> ${tokenLabel2(expected)} <--` : `token of type --> ${expected.name} <--`; const msg = `Expecting ${expectedMsg} but found --> '${actual.image}' <--`; return msg; }, buildNotAllInputParsedMessage({ firstRedundant, ruleName }) { return "Redundant input, expecting EOF but found: " + firstRedundant.image; }, buildNoViableAltMessage({ expectedPathsPerAlt, actual, previous, customUserDescription, ruleName }) { const errPrefix = "Expecting: "; const actualText = head_default(actual).image; const errSuffix = "\nbut found: '" + actualText + "'"; if (customUserDescription) { return errPrefix + customUserDescription + errSuffix; } else { const allLookAheadPaths = reduce_default(expectedPathsPerAlt, (result, currAltPaths) => result.concat(currAltPaths), []); const nextValidTokenSequences = map_default(allLookAheadPaths, (currPath) => `[${map_default(currPath, (currTokenType) => tokenLabel2(currTokenType)).join(", ")}]`); const nextValidSequenceItems = map_default(nextValidTokenSequences, (itemMsg, idx) => ` ${idx + 1}. ${itemMsg}`); const calculatedDescription = `one of these possible Token sequences: ${nextValidSequenceItems.join("\n")}`; return errPrefix + calculatedDescription + errSuffix; } }, buildEarlyExitMessage({ expectedIterationPaths, actual, customUserDescription, ruleName }) { const errPrefix = "Expecting: "; const actualText = head_default(actual).image; const errSuffix = "\nbut found: '" + actualText + "'"; if (customUserDescription) { return errPrefix + customUserDescription + errSuffix; } else { const nextValidTokenSequences = map_default(expectedIterationPaths, (currPath) => `[${map_default(currPath, (currTokenType) => tokenLabel2(currTokenType)).join(",")}]`); const calculatedDescription = `expecting at least one iteration which starts with one of these possible Token sequences:: <${nextValidTokenSequences.join(" ,")}>`; return errPrefix + calculatedDescription + errSuffix; } } }; Object.freeze(defaultParserErrorProvider); defaultGrammarResolverErrorProvider = { buildRuleNotFoundError(topLevelRule, undefinedRule) { const msg = "Invalid grammar, reference to a rule which is not defined: ->" + undefinedRule.nonTerminalName + "<-\ninside top level rule: ->" + topLevelRule.name + "<-"; return msg; } }; defaultGrammarValidatorErrorProvider = { buildDuplicateFoundError(topLevelRule, duplicateProds) { function getExtraProductionArgument2(prod) { if (prod instanceof Terminal) { return prod.terminalType.name; } else if (prod instanceof NonTerminal) { return prod.nonTerminalName; } else { return ""; } } __name(getExtraProductionArgument2, "getExtraProductionArgument"); const topLevelName = topLevelRule.name; const duplicateProd = head_default(duplicateProds); const index = duplicateProd.idx; const dslName = getProductionDslName(duplicateProd); const extraArgument = getExtraProductionArgument2(duplicateProd); const hasExplicitIndex = index > 0; let msg = `->${dslName}${hasExplicitIndex ? index : ""}<- ${extraArgument ? `with argument: ->${extraArgument}<-` : ""} appears more than once (${duplicateProds.length} times) in the top level rule: ->${topLevelName}<-. For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES `; msg = msg.replace(/[ \t]+/g, " "); msg = msg.replace(/\s\s+/g, "\n"); return msg; }, buildNamespaceConflictError(rule) { const errMsg = `Namespace conflict found in grammar. The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${rule.name}>. To resolve this make sure each Terminal and Non-Terminal names are unique This is easy to accomplish by using the convention that Terminal names start with an uppercase letter and Non-Terminal names start with a lower case letter.`; return errMsg; }, buildAlternationPrefixAmbiguityError(options2) { const pathMsg = map_default(options2.prefixPath, (currTok) => tokenLabel2(currTok)).join(", "); const occurrence = options2.alternation.idx === 0 ? "" : options2.alternation.idx; const errMsg = `Ambiguous alternatives: <${options2.ambiguityIndices.join(" ,")}> due to common lookahead prefix in inside <${options2.topLevelRule.name}> Rule, <${pathMsg}> may appears as a prefix path in all these alternatives. See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX For Further details.`; return errMsg; }, buildAlternationAmbiguityError(options2) { const pathMsg = map_default(options2.prefixPath, (currtok) => tokenLabel2(currtok)).join(", "); const occurrence = options2.alternation.idx === 0 ? "" : options2.alternation.idx; let currMessage = `Ambiguous Alternatives Detected: <${options2.ambiguityIndices.join(" ,")}> in inside <${options2.topLevelRule.name}> Rule, <${pathMsg}> may appears as a prefix path in all these alternatives. `; currMessage = currMessage + `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES For Further details.`; return currMessage; }, buildEmptyRepetitionError(options2) { let dslName = getProductionDslName(options2.repetition); if (options2.repetition.idx !== 0) { dslName += options2.repetition.idx; } const errMsg = `The repetition <${dslName}> within Rule <${options2.topLevelRule.name}> can never consume any tokens. This could lead to an infinite loop.`; return errMsg; }, // TODO: remove - `errors_public` from nyc.config.js exclude // once this method is fully removed from this file buildTokenNameError(options2) { return "deprecated"; }, buildEmptyAlternationError(options2) { const errMsg = `Ambiguous empty alternative: <${options2.emptyChoiceIdx + 1}> in inside <${options2.topLevelRule.name}> Rule. Only the last alternative may be an empty alternative.`; return errMsg; }, buildTooManyAlternativesError(options2) { const errMsg = `An Alternation cannot have more than 256 alternatives: inside <${options2.topLevelRule.name}> Rule. has ${options2.alternation.definition.length + 1} alternatives.`; return errMsg; }, buildLeftRecursionError(options2) { const ruleName = options2.topLevelRule.name; const pathNames = map_default(options2.leftRecursionPath, (currRule) => currRule.name); const leftRecursivePath = `${ruleName} --> ${pathNames.concat([ruleName]).join(" --> ")}`; const errMsg = `Left Recursion found in grammar. rule: <${ruleName}> can be invoked from itself (directly or indirectly) without consuming any Tokens. The grammar path that causes this is: ${leftRecursivePath} To fix this refactor your grammar to remove the left recursion. see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`; return errMsg; }, // TODO: remove - `errors_public` from nyc.config.js exclude // once this method is fully removed from this file buildInvalidRuleNameError(options2) { return "deprecated"; }, buildDuplicateRuleNameError(options2) { let ruleName; if (options2.topLevelRule instanceof Rule) { ruleName = options2.topLevelRule.name; } else { ruleName = options2.topLevelRule; } const errMsg = `Duplicate definition, rule: ->${ruleName}<- is already defined in the grammar: ->${options2.grammarName}<-`; return errMsg; } }; } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/grammar/resolver.js function resolveGrammar(topLevels, errMsgProvider) { const refResolver = new GastRefResolverVisitor(topLevels, errMsgProvider); refResolver.resolveRefs(); return refResolver.errors; } var GastRefResolverVisitor; var init_resolver = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/grammar/resolver.js"() { "use strict"; init_parser(); init_lodash(); init_api3(); __name(resolveGrammar, "resolveGrammar"); GastRefResolverVisitor = class extends GAstVisitor { static { __name(this, "GastRefResolverVisitor"); } constructor(nameToTopRule, errMsgProvider) { super(); this.nameToTopRule = nameToTopRule; this.errMsgProvider = errMsgProvider; this.errors = []; } resolveRefs() { forEach_default(values_default(this.nameToTopRule), (prod) => { this.currTopLevel = prod; prod.accept(this); }); } visitNonTerminal(node2) { const ref = this.nameToTopRule[node2.nonTerminalName]; if (!ref) { const msg = this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel, node2); this.errors.push({ message: msg, type: ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF, ruleName: this.currTopLevel.name, unresolvedRefName: node2.nonTerminalName }); } else { node2.referencedRule = ref; } } }; } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/grammar/interpreter.js function possiblePathsFrom(targetDef, maxLength, currPath = []) { currPath = clone_default2(currPath); let result = []; let i2 = 0; function remainingPathWith(nextDef) { return nextDef.concat(drop_default(targetDef, i2 + 1)); } __name(remainingPathWith, "remainingPathWith"); function getAlternativesForProd(definition) { const alternatives = possiblePathsFrom(remainingPathWith(definition), maxLength, currPath); return result.concat(alternatives); } __name(getAlternativesForProd, "getAlternativesForProd"); while (currPath.length < maxLength && i2 < targetDef.length) { const prod = targetDef[i2]; if (prod instanceof Alternative) { return getAlternativesForProd(prod.definition); } else if (prod instanceof NonTerminal) { return getAlternativesForProd(prod.definition); } else if (prod instanceof Option2) { result = getAlternativesForProd(prod.definition); } else if (prod instanceof RepetitionMandatory) { const newDef = prod.definition.concat([ new Repetition({ definition: prod.definition }) ]); return getAlternativesForProd(newDef); } else if (prod instanceof RepetitionMandatoryWithSeparator) { const newDef = [ new Alternative({ definition: prod.definition }), new Repetition({ definition: [new Terminal({ terminalType: prod.separator })].concat(prod.definition) }) ]; return getAlternativesForProd(newDef); } else if (prod instanceof RepetitionWithSeparator) { const newDef = prod.definition.concat([ new Repetition({ definition: [new Terminal({ terminalType: prod.separator })].concat(prod.definition) }) ]); result = getAlternativesForProd(newDef); } else if (prod instanceof Repetition) { const newDef = prod.definition.concat([ new Repetition({ definition: prod.definition }) ]); result = getAlternativesForProd(newDef); } else if (prod instanceof Alternation) { forEach_default(prod.definition, (currAlt) => { if (isEmpty_default(currAlt.definition) === false) { result = getAlternativesForProd(currAlt.definition); } }); return result; } else if (prod instanceof Terminal) { currPath.push(prod.terminalType); } else { throw Error("non exhaustive match"); } i2++; } result.push({ partialPath: currPath, suffixDef: drop_default(targetDef, i2) }); return result; } function nextPossibleTokensAfter(initialDef, tokenVector, tokMatcher, maxLookAhead) { const EXIT_NON_TERMINAL = "EXIT_NONE_TERMINAL"; const EXIT_NON_TERMINAL_ARR = [EXIT_NON_TERMINAL]; const EXIT_ALTERNATIVE = "EXIT_ALTERNATIVE"; let foundCompletePath = false; const tokenVectorLength = tokenVector.length; const minimalAlternativesIndex = tokenVectorLength - maxLookAhead - 1; const result = []; const possiblePaths = []; possiblePaths.push({ idx: -1, def: initialDef, ruleStack: [], occurrenceStack: [] }); while (!isEmpty_default(possiblePaths)) { const currPath = possiblePaths.pop(); if (currPath === EXIT_ALTERNATIVE) { if (foundCompletePath && last_default(possiblePaths).idx <= minimalAlternativesIndex) { possiblePaths.pop(); } continue; } const currDef = currPath.def; const currIdx = currPath.idx; const currRuleStack = currPath.ruleStack; const currOccurrenceStack = currPath.occurrenceStack; if (isEmpty_default(currDef)) { continue; } const prod = currDef[0]; if (prod === EXIT_NON_TERMINAL) { const nextPath = { idx: currIdx, def: drop_default(currDef), ruleStack: dropRight_default(currRuleStack), occurrenceStack: dropRight_default(currOccurrenceStack) }; possiblePaths.push(nextPath); } else if (prod instanceof Terminal) { if (currIdx < tokenVectorLength - 1) { const nextIdx = currIdx + 1; const actualToken = tokenVector[nextIdx]; if (tokMatcher(actualToken, prod.terminalType)) { const nextPath = { idx: nextIdx, def: drop_default(currDef), ruleStack: currRuleStack, occurrenceStack: currOccurrenceStack }; possiblePaths.push(nextPath); } } else if (currIdx === tokenVectorLength - 1) { result.push({ nextTokenType: prod.terminalType, nextTokenOccurrence: prod.idx, ruleStack: currRuleStack, occurrenceStack: currOccurrenceStack }); foundCompletePath = true; } else { throw Error("non exhaustive match"); } } else if (prod instanceof NonTerminal) { const newRuleStack = clone_default2(currRuleStack); newRuleStack.push(prod.nonTerminalName); const newOccurrenceStack = clone_default2(currOccurrenceStack); newOccurrenceStack.push(prod.idx); const nextPath = { idx: currIdx, def: prod.definition.concat(EXIT_NON_TERMINAL_ARR, drop_default(currDef)), ruleStack: newRuleStack, occurrenceStack: newOccurrenceStack }; possiblePaths.push(nextPath); } else if (prod instanceof Option2) { const nextPathWithout = { idx: currIdx, def: drop_default(currDef), ruleStack: currRuleStack, occurrenceStack: currOccurrenceStack }; possiblePaths.push(nextPathWithout); possiblePaths.push(EXIT_ALTERNATIVE); const nextPathWith = { idx: currIdx, def: prod.definition.concat(drop_default(currDef)), ruleStack: currRuleStack, occurrenceStack: currOccurrenceStack }; possiblePaths.push(nextPathWith); } else if (prod instanceof RepetitionMandatory) { const secondIteration = new Repetition({ definition: prod.definition, idx: prod.idx }); const nextDef = prod.definition.concat([secondIteration], drop_default(currDef)); const nextPath = { idx: currIdx, def: nextDef, ruleStack: currRuleStack, occurrenceStack: currOccurrenceStack }; possiblePaths.push(nextPath); } else if (prod instanceof RepetitionMandatoryWithSeparator) { const separatorGast = new Terminal({ terminalType: prod.separator }); const secondIteration = new Repetition({ definition: [separatorGast].concat(prod.definition), idx: prod.idx }); const nextDef = prod.definition.concat([secondIteration], drop_default(currDef)); const nextPath = { idx: currIdx, def: nextDef, ruleStack: currRuleStack, occurrenceStack: currOccurrenceStack }; possiblePaths.push(nextPath); } else if (prod instanceof RepetitionWithSeparator) { const nextPathWithout = { idx: currIdx, def: drop_default(currDef), ruleStack: currRuleStack, occurrenceStack: currOccurrenceStack }; possiblePaths.push(nextPathWithout); possiblePaths.push(EXIT_ALTERNATIVE); const separatorGast = new Terminal({ terminalType: prod.separator }); const nthRepetition = new Repetition({ definition: [separatorGast].concat(prod.definition), idx: prod.idx }); const nextDef = prod.definition.concat([nthRepetition], drop_default(currDef)); const nextPathWith = { idx: currIdx, def: nextDef, ruleStack: currRuleStack, occurrenceStack: currOccurrenceStack }; possiblePaths.push(nextPathWith); } else if (prod instanceof Repetition) { const nextPathWithout = { idx: currIdx, def: drop_default(currDef), ruleStack: currRuleStack, occurrenceStack: currOccurrenceStack }; possiblePaths.push(nextPathWithout); possiblePaths.push(EXIT_ALTERNATIVE); const nthRepetition = new Repetition({ definition: prod.definition, idx: prod.idx }); const nextDef = prod.definition.concat([nthRepetition], drop_default(currDef)); const nextPathWith = { idx: currIdx, def: nextDef, ruleStack: currRuleStack, occurrenceStack: currOccurrenceStack }; possiblePaths.push(nextPathWith); } else if (prod instanceof Alternation) { for (let i2 = prod.definition.length - 1; i2 >= 0; i2--) { const currAlt = prod.definition[i2]; const currAltPath = { idx: currIdx, def: currAlt.definition.concat(drop_default(currDef)), ruleStack: currRuleStack, occurrenceStack: currOccurrenceStack }; possiblePaths.push(currAltPath); possiblePaths.push(EXIT_ALTERNATIVE); } } else if (prod instanceof Alternative) { possiblePaths.push({ idx: currIdx, def: prod.definition.concat(drop_default(currDef)), ruleStack: currRuleStack, occurrenceStack: currOccurrenceStack }); } else if (prod instanceof Rule) { possiblePaths.push(expandTopLevelRule(prod, currIdx, currRuleStack, currOccurrenceStack)); } else { throw Error("non exhaustive match"); } } return result; } function expandTopLevelRule(topRule, currIdx, currRuleStack, currOccurrenceStack) { const newRuleStack = clone_default2(currRuleStack); newRuleStack.push(topRule.name); const newCurrOccurrenceStack = clone_default2(currOccurrenceStack); newCurrOccurrenceStack.push(1); return { idx: currIdx, def: topRule.definition, ruleStack: newRuleStack, occurrenceStack: newCurrOccurrenceStack }; } var AbstractNextPossibleTokensWalker, NextAfterTokenWalker, AbstractNextTerminalAfterProductionWalker, NextTerminalAfterManyWalker, NextTerminalAfterManySepWalker, NextTerminalAfterAtLeastOneWalker, NextTerminalAfterAtLeastOneSepWalker; var init_interpreter = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/grammar/interpreter.js"() { "use strict"; init_lodash(); init_first2(); init_rest(); init_api3(); AbstractNextPossibleTokensWalker = class extends RestWalker { static { __name(this, "AbstractNextPossibleTokensWalker"); } constructor(topProd, path4) { super(); this.topProd = topProd; this.path = path4; this.possibleTokTypes = []; this.nextProductionName = ""; this.nextProductionOccurrence = 0; this.found = false; this.isAtEndOfPath = false; } startWalking() { this.found = false; if (this.path.ruleStack[0] !== this.topProd.name) { throw Error("The path does not start with the walker's top Rule!"); } this.ruleStack = clone_default2(this.path.ruleStack).reverse(); this.occurrenceStack = clone_default2(this.path.occurrenceStack).reverse(); this.ruleStack.pop(); this.occurrenceStack.pop(); this.updateExpectedNext(); this.walk(this.topProd); return this.possibleTokTypes; } walk(prod, prevRest = []) { if (!this.found) { super.walk(prod, prevRest); } } walkProdRef(refProd, currRest, prevRest) { if (refProd.referencedRule.name === this.nextProductionName && refProd.idx === this.nextProductionOccurrence) { const fullRest = currRest.concat(prevRest); this.updateExpectedNext(); this.walk(refProd.referencedRule, fullRest); } } updateExpectedNext() { if (isEmpty_default(this.ruleStack)) { this.nextProductionName = ""; this.nextProductionOccurrence = 0; this.isAtEndOfPath = true; } else { this.nextProductionName = this.ruleStack.pop(); this.nextProductionOccurrence = this.occurrenceStack.pop(); } } }; NextAfterTokenWalker = class extends AbstractNextPossibleTokensWalker { static { __name(this, "NextAfterTokenWalker"); } constructor(topProd, path4) { super(topProd, path4); this.path = path4; this.nextTerminalName = ""; this.nextTerminalOccurrence = 0; this.nextTerminalName = this.path.lastTok.name; this.nextTerminalOccurrence = this.path.lastTokOccurrence; } walkTerminal(terminal, currRest, prevRest) { if (this.isAtEndOfPath && terminal.terminalType.name === this.nextTerminalName && terminal.idx === this.nextTerminalOccurrence && !this.found) { const fullRest = currRest.concat(prevRest); const restProd = new Alternative({ definition: fullRest }); this.possibleTokTypes = first2(restProd); this.found = true; } } }; AbstractNextTerminalAfterProductionWalker = class extends RestWalker { static { __name(this, "AbstractNextTerminalAfterProductionWalker"); } constructor(topRule, occurrence) { super(); this.topRule = topRule; this.occurrence = occurrence; this.result = { token: void 0, occurrence: void 0, isEndOfRule: void 0 }; } startWalking() { this.walk(this.topRule); return this.result; } }; NextTerminalAfterManyWalker = class extends AbstractNextTerminalAfterProductionWalker { static { __name(this, "NextTerminalAfterManyWalker"); } walkMany(manyProd, currRest, prevRest) { if (manyProd.idx === this.occurrence) { const firstAfterMany = head_default(currRest.concat(prevRest)); this.result.isEndOfRule = firstAfterMany === void 0; if (firstAfterMany instanceof Terminal) { this.result.token = firstAfterMany.terminalType; this.result.occurrence = firstAfterMany.idx; } } else { super.walkMany(manyProd, currRest, prevRest); } } }; NextTerminalAfterManySepWalker = class extends AbstractNextTerminalAfterProductionWalker { static { __name(this, "NextTerminalAfterManySepWalker"); } walkManySep(manySepProd, currRest, prevRest) { if (manySepProd.idx === this.occurrence) { const firstAfterManySep = head_default(currRest.concat(prevRest)); this.result.isEndOfRule = firstAfterManySep === void 0; if (firstAfterManySep instanceof Terminal) { this.result.token = firstAfterManySep.terminalType; this.result.occurrence = firstAfterManySep.idx; } } else { super.walkManySep(manySepProd, currRest, prevRest); } } }; NextTerminalAfterAtLeastOneWalker = class extends AbstractNextTerminalAfterProductionWalker { static { __name(this, "NextTerminalAfterAtLeastOneWalker"); } walkAtLeastOne(atLeastOneProd, currRest, prevRest) { if (atLeastOneProd.idx === this.occurrence) { const firstAfterAtLeastOne = head_default(currRest.concat(prevRest)); this.result.isEndOfRule = firstAfterAtLeastOne === void 0; if (firstAfterAtLeastOne instanceof Terminal) { this.result.token = firstAfterAtLeastOne.terminalType; this.result.occurrence = firstAfterAtLeastOne.idx; } } else { super.walkAtLeastOne(atLeastOneProd, currRest, prevRest); } } }; NextTerminalAfterAtLeastOneSepWalker = class extends AbstractNextTerminalAfterProductionWalker { static { __name(this, "NextTerminalAfterAtLeastOneSepWalker"); } walkAtLeastOneSep(atleastOneSepProd, currRest, prevRest) { if (atleastOneSepProd.idx === this.occurrence) { const firstAfterfirstAfterAtLeastOneSep = head_default(currRest.concat(prevRest)); this.result.isEndOfRule = firstAfterfirstAfterAtLeastOneSep === void 0; if (firstAfterfirstAfterAtLeastOneSep instanceof Terminal) { this.result.token = firstAfterfirstAfterAtLeastOneSep.terminalType; this.result.occurrence = firstAfterfirstAfterAtLeastOneSep.idx; } } else { super.walkAtLeastOneSep(atleastOneSepProd, currRest, prevRest); } } }; __name(possiblePathsFrom, "possiblePathsFrom"); __name(nextPossibleTokensAfter, "nextPossibleTokensAfter"); __name(expandTopLevelRule, "expandTopLevelRule"); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/grammar/lookahead.js function getProdType(prod) { if (prod instanceof Option2 || prod === "Option") { return PROD_TYPE.OPTION; } else if (prod instanceof Repetition || prod === "Repetition") { return PROD_TYPE.REPETITION; } else if (prod instanceof RepetitionMandatory || prod === "RepetitionMandatory") { return PROD_TYPE.REPETITION_MANDATORY; } else if (prod instanceof RepetitionMandatoryWithSeparator || prod === "RepetitionMandatoryWithSeparator") { return PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR; } else if (prod instanceof RepetitionWithSeparator || prod === "RepetitionWithSeparator") { return PROD_TYPE.REPETITION_WITH_SEPARATOR; } else if (prod instanceof Alternation || prod === "Alternation") { return PROD_TYPE.ALTERNATION; } else { throw Error("non exhaustive match"); } } function getLookaheadPaths(options2) { const { occurrence, rule, prodType, maxLookahead } = options2; const type3 = getProdType(prodType); if (type3 === PROD_TYPE.ALTERNATION) { return getLookaheadPathsForOr(occurrence, rule, maxLookahead); } else { return getLookaheadPathsForOptionalProd(occurrence, rule, type3, maxLookahead); } } function buildLookaheadFuncForOr(occurrence, ruleGrammar, maxLookahead, hasPredicates, dynamicTokensEnabled, laFuncBuilder) { const lookAheadPaths = getLookaheadPathsForOr(occurrence, ruleGrammar, maxLookahead); const tokenMatcher2 = areTokenCategoriesNotUsed(lookAheadPaths) ? tokenStructuredMatcherNoCategories : tokenStructuredMatcher; return laFuncBuilder(lookAheadPaths, hasPredicates, tokenMatcher2, dynamicTokensEnabled); } function buildLookaheadFuncForOptionalProd(occurrence, ruleGrammar, k2, dynamicTokensEnabled, prodType, lookaheadBuilder) { const lookAheadPaths = getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, k2); const tokenMatcher2 = areTokenCategoriesNotUsed(lookAheadPaths) ? tokenStructuredMatcherNoCategories : tokenStructuredMatcher; return lookaheadBuilder(lookAheadPaths[0], tokenMatcher2, dynamicTokensEnabled); } function buildAlternativesLookAheadFunc(alts, hasPredicates, tokenMatcher2, dynamicTokensEnabled) { const numOfAlts = alts.length; const areAllOneTokenLookahead = every_default(alts, (currAlt) => { return every_default(currAlt, (currPath) => { return currPath.length === 1; }); }); if (hasPredicates) { return function(orAlts) { const predicates = map_default(orAlts, (currAlt) => currAlt.GATE); for (let t4 = 0; t4 < numOfAlts; t4++) { const currAlt = alts[t4]; const currNumOfPaths = currAlt.length; const currPredicate = predicates[t4]; if (currPredicate !== void 0 && currPredicate.call(this) === false) { continue; } nextPath: for (let j3 = 0; j3 < currNumOfPaths; j3++) { const currPath = currAlt[j3]; const currPathLength = currPath.length; for (let i2 = 0; i2 < currPathLength; i2++) { const nextToken = this.LA(i2 + 1); if (tokenMatcher2(nextToken, currPath[i2]) === false) { continue nextPath; } } return t4; } } return void 0; }; } else if (areAllOneTokenLookahead && !dynamicTokensEnabled) { const singleTokenAlts = map_default(alts, (currAlt) => { return flatten_default(currAlt); }); const choiceToAlt = reduce_default(singleTokenAlts, (result, currAlt, idx) => { forEach_default(currAlt, (currTokType) => { if (!has_default(result, currTokType.tokenTypeIdx)) { result[currTokType.tokenTypeIdx] = idx; } forEach_default(currTokType.categoryMatches, (currExtendingType) => { if (!has_default(result, currExtendingType)) { result[currExtendingType] = idx; } }); }); return result; }, {}); return function() { const nextToken = this.LA(1); return choiceToAlt[nextToken.tokenTypeIdx]; }; } else { return function() { for (let t4 = 0; t4 < numOfAlts; t4++) { const currAlt = alts[t4]; const currNumOfPaths = currAlt.length; nextPath: for (let j3 = 0; j3 < currNumOfPaths; j3++) { const currPath = currAlt[j3]; const currPathLength = currPath.length; for (let i2 = 0; i2 < currPathLength; i2++) { const nextToken = this.LA(i2 + 1); if (tokenMatcher2(nextToken, currPath[i2]) === false) { continue nextPath; } } return t4; } } return void 0; }; } } function buildSingleAlternativeLookaheadFunction(alt, tokenMatcher2, dynamicTokensEnabled) { const areAllOneTokenLookahead = every_default(alt, (currPath) => { return currPath.length === 1; }); const numOfPaths = alt.length; if (areAllOneTokenLookahead && !dynamicTokensEnabled) { const singleTokensTypes = flatten_default(alt); if (singleTokensTypes.length === 1 && isEmpty_default(singleTokensTypes[0].categoryMatches)) { const expectedTokenType = singleTokensTypes[0]; const expectedTokenUniqueKey = expectedTokenType.tokenTypeIdx; return function() { return this.LA(1).tokenTypeIdx === expectedTokenUniqueKey; }; } else { const choiceToAlt = reduce_default(singleTokensTypes, (result, currTokType, idx) => { result[currTokType.tokenTypeIdx] = true; forEach_default(currTokType.categoryMatches, (currExtendingType) => { result[currExtendingType] = true; }); return result; }, []); return function() { const nextToken = this.LA(1); return choiceToAlt[nextToken.tokenTypeIdx] === true; }; } } else { return function() { nextPath: for (let j3 = 0; j3 < numOfPaths; j3++) { const currPath = alt[j3]; const currPathLength = currPath.length; for (let i2 = 0; i2 < currPathLength; i2++) { const nextToken = this.LA(i2 + 1); if (tokenMatcher2(nextToken, currPath[i2]) === false) { continue nextPath; } } return true; } return false; }; } } function initializeArrayOfArrays(size4) { const result = new Array(size4); for (let i2 = 0; i2 < size4; i2++) { result[i2] = []; } return result; } function pathToHashKeys(path4) { let keys2 = [""]; for (let i2 = 0; i2 < path4.length; i2++) { const tokType = path4[i2]; const longerKeys = []; for (let j3 = 0; j3 < keys2.length; j3++) { const currShorterKey = keys2[j3]; longerKeys.push(currShorterKey + "_" + tokType.tokenTypeIdx); for (let t4 = 0; t4 < tokType.categoryMatches.length; t4++) { const categoriesKeySuffix = "_" + tokType.categoryMatches[t4]; longerKeys.push(currShorterKey + categoriesKeySuffix); } } keys2 = longerKeys; } return keys2; } function isUniquePrefixHash(altKnownPathsKeys, searchPathKeys, idx) { for (let currAltIdx = 0; currAltIdx < altKnownPathsKeys.length; currAltIdx++) { if (currAltIdx === idx) { continue; } const otherAltKnownPathsKeys = altKnownPathsKeys[currAltIdx]; for (let searchIdx = 0; searchIdx < searchPathKeys.length; searchIdx++) { const searchKey = searchPathKeys[searchIdx]; if (otherAltKnownPathsKeys[searchKey] === true) { return false; } } } return true; } function lookAheadSequenceFromAlternatives(altsDefs, k2) { const partialAlts = map_default(altsDefs, (currAlt) => possiblePathsFrom([currAlt], 1)); const finalResult = initializeArrayOfArrays(partialAlts.length); const altsHashes = map_default(partialAlts, (currAltPaths) => { const dict = {}; forEach_default(currAltPaths, (item) => { const keys2 = pathToHashKeys(item.partialPath); forEach_default(keys2, (currKey) => { dict[currKey] = true; }); }); return dict; }); let newData = partialAlts; for (let pathLength = 1; pathLength <= k2; pathLength++) { const currDataset = newData; newData = initializeArrayOfArrays(currDataset.length); for (let altIdx = 0; altIdx < currDataset.length; altIdx++) { const currAltPathsAndSuffixes = currDataset[altIdx]; for (let currPathIdx = 0; currPathIdx < currAltPathsAndSuffixes.length; currPathIdx++) { const currPathPrefix = currAltPathsAndSuffixes[currPathIdx].partialPath; const suffixDef = currAltPathsAndSuffixes[currPathIdx].suffixDef; const prefixKeys = pathToHashKeys(currPathPrefix); const isUnique = isUniquePrefixHash(altsHashes, prefixKeys, altIdx); if (isUnique || isEmpty_default(suffixDef) || currPathPrefix.length === k2) { const currAltResult = finalResult[altIdx]; if (containsPath(currAltResult, currPathPrefix) === false) { currAltResult.push(currPathPrefix); for (let j3 = 0; j3 < prefixKeys.length; j3++) { const currKey = prefixKeys[j3]; altsHashes[altIdx][currKey] = true; } } } else { const newPartialPathsAndSuffixes = possiblePathsFrom(suffixDef, pathLength + 1, currPathPrefix); newData[altIdx] = newData[altIdx].concat(newPartialPathsAndSuffixes); forEach_default(newPartialPathsAndSuffixes, (item) => { const prefixKeys2 = pathToHashKeys(item.partialPath); forEach_default(prefixKeys2, (key) => { altsHashes[altIdx][key] = true; }); }); } } } } return finalResult; } function getLookaheadPathsForOr(occurrence, ruleGrammar, k2, orProd) { const visitor2 = new InsideDefinitionFinderVisitor(occurrence, PROD_TYPE.ALTERNATION, orProd); ruleGrammar.accept(visitor2); return lookAheadSequenceFromAlternatives(visitor2.result, k2); } function getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, k2) { const insideDefVisitor = new InsideDefinitionFinderVisitor(occurrence, prodType); ruleGrammar.accept(insideDefVisitor); const insideDef = insideDefVisitor.result; const afterDefWalker = new RestDefinitionFinderWalker(ruleGrammar, occurrence, prodType); const afterDef = afterDefWalker.startWalking(); const insideFlat = new Alternative({ definition: insideDef }); const afterFlat = new Alternative({ definition: afterDef }); return lookAheadSequenceFromAlternatives([insideFlat, afterFlat], k2); } function containsPath(alternative, searchPath) { compareOtherPath: for (let i2 = 0; i2 < alternative.length; i2++) { const otherPath = alternative[i2]; if (otherPath.length !== searchPath.length) { continue; } for (let j3 = 0; j3 < otherPath.length; j3++) { const searchTok = searchPath[j3]; const otherTok = otherPath[j3]; const matchingTokens = searchTok === otherTok || otherTok.categoryMatchesMap[searchTok.tokenTypeIdx] !== void 0; if (matchingTokens === false) { continue compareOtherPath; } } return true; } return false; } function isStrictPrefixOfPath(prefix, other) { return prefix.length < other.length && every_default(prefix, (tokType, idx) => { const otherTokType = other[idx]; return tokType === otherTokType || otherTokType.categoryMatchesMap[tokType.tokenTypeIdx]; }); } function areTokenCategoriesNotUsed(lookAheadPaths) { return every_default(lookAheadPaths, (singleAltPaths) => every_default(singleAltPaths, (singlePath) => every_default(singlePath, (token2) => isEmpty_default(token2.categoryMatches)))); } var PROD_TYPE, RestDefinitionFinderWalker, InsideDefinitionFinderVisitor; var init_lookahead = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/grammar/lookahead.js"() { "use strict"; init_lodash(); init_interpreter(); init_rest(); init_tokens(); init_api3(); (function(PROD_TYPE2) { PROD_TYPE2[PROD_TYPE2["OPTION"] = 0] = "OPTION"; PROD_TYPE2[PROD_TYPE2["REPETITION"] = 1] = "REPETITION"; PROD_TYPE2[PROD_TYPE2["REPETITION_MANDATORY"] = 2] = "REPETITION_MANDATORY"; PROD_TYPE2[PROD_TYPE2["REPETITION_MANDATORY_WITH_SEPARATOR"] = 3] = "REPETITION_MANDATORY_WITH_SEPARATOR"; PROD_TYPE2[PROD_TYPE2["REPETITION_WITH_SEPARATOR"] = 4] = "REPETITION_WITH_SEPARATOR"; PROD_TYPE2[PROD_TYPE2["ALTERNATION"] = 5] = "ALTERNATION"; })(PROD_TYPE || (PROD_TYPE = {})); __name(getProdType, "getProdType"); __name(getLookaheadPaths, "getLookaheadPaths"); __name(buildLookaheadFuncForOr, "buildLookaheadFuncForOr"); __name(buildLookaheadFuncForOptionalProd, "buildLookaheadFuncForOptionalProd"); __name(buildAlternativesLookAheadFunc, "buildAlternativesLookAheadFunc"); __name(buildSingleAlternativeLookaheadFunction, "buildSingleAlternativeLookaheadFunction"); RestDefinitionFinderWalker = class extends RestWalker { static { __name(this, "RestDefinitionFinderWalker"); } constructor(topProd, targetOccurrence, targetProdType) { super(); this.topProd = topProd; this.targetOccurrence = targetOccurrence; this.targetProdType = targetProdType; } startWalking() { this.walk(this.topProd); return this.restDef; } checkIsTarget(node2, expectedProdType, currRest, prevRest) { if (node2.idx === this.targetOccurrence && this.targetProdType === expectedProdType) { this.restDef = currRest.concat(prevRest); return true; } return false; } walkOption(optionProd, currRest, prevRest) { if (!this.checkIsTarget(optionProd, PROD_TYPE.OPTION, currRest, prevRest)) { super.walkOption(optionProd, currRest, prevRest); } } walkAtLeastOne(atLeastOneProd, currRest, prevRest) { if (!this.checkIsTarget(atLeastOneProd, PROD_TYPE.REPETITION_MANDATORY, currRest, prevRest)) { super.walkOption(atLeastOneProd, currRest, prevRest); } } walkAtLeastOneSep(atLeastOneSepProd, currRest, prevRest) { if (!this.checkIsTarget(atLeastOneSepProd, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, currRest, prevRest)) { super.walkOption(atLeastOneSepProd, currRest, prevRest); } } walkMany(manyProd, currRest, prevRest) { if (!this.checkIsTarget(manyProd, PROD_TYPE.REPETITION, currRest, prevRest)) { super.walkOption(manyProd, currRest, prevRest); } } walkManySep(manySepProd, currRest, prevRest) { if (!this.checkIsTarget(manySepProd, PROD_TYPE.REPETITION_WITH_SEPARATOR, currRest, prevRest)) { super.walkOption(manySepProd, currRest, prevRest); } } }; InsideDefinitionFinderVisitor = class extends GAstVisitor { static { __name(this, "InsideDefinitionFinderVisitor"); } constructor(targetOccurrence, targetProdType, targetRef) { super(); this.targetOccurrence = targetOccurrence; this.targetProdType = targetProdType; this.targetRef = targetRef; this.result = []; } checkIsTarget(node2, expectedProdName) { if (node2.idx === this.targetOccurrence && this.targetProdType === expectedProdName && (this.targetRef === void 0 || node2 === this.targetRef)) { this.result = node2.definition; } } visitOption(node2) { this.checkIsTarget(node2, PROD_TYPE.OPTION); } visitRepetition(node2) { this.checkIsTarget(node2, PROD_TYPE.REPETITION); } visitRepetitionMandatory(node2) { this.checkIsTarget(node2, PROD_TYPE.REPETITION_MANDATORY); } visitRepetitionMandatoryWithSeparator(node2) { this.checkIsTarget(node2, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR); } visitRepetitionWithSeparator(node2) { this.checkIsTarget(node2, PROD_TYPE.REPETITION_WITH_SEPARATOR); } visitAlternation(node2) { this.checkIsTarget(node2, PROD_TYPE.ALTERNATION); } }; __name(initializeArrayOfArrays, "initializeArrayOfArrays"); __name(pathToHashKeys, "pathToHashKeys"); __name(isUniquePrefixHash, "isUniquePrefixHash"); __name(lookAheadSequenceFromAlternatives, "lookAheadSequenceFromAlternatives"); __name(getLookaheadPathsForOr, "getLookaheadPathsForOr"); __name(getLookaheadPathsForOptionalProd, "getLookaheadPathsForOptionalProd"); __name(containsPath, "containsPath"); __name(isStrictPrefixOfPath, "isStrictPrefixOfPath"); __name(areTokenCategoriesNotUsed, "areTokenCategoriesNotUsed"); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/grammar/checks.js function validateLookahead(options2) { const lookaheadValidationErrorMessages = options2.lookaheadStrategy.validate({ rules: options2.rules, tokenTypes: options2.tokenTypes, grammarName: options2.grammarName }); return map_default(lookaheadValidationErrorMessages, (errorMessage) => Object.assign({ type: ParserDefinitionErrorType.CUSTOM_LOOKAHEAD_VALIDATION }, errorMessage)); } function validateGrammar(topLevels, tokenTypes, errMsgProvider, grammarName) { const duplicateErrors = flatMap_default(topLevels, (currTopLevel) => validateDuplicateProductions(currTopLevel, errMsgProvider)); const termsNamespaceConflictErrors = checkTerminalAndNoneTerminalsNameSpace(topLevels, tokenTypes, errMsgProvider); const tooManyAltsErrors = flatMap_default(topLevels, (curRule) => validateTooManyAlts(curRule, errMsgProvider)); const duplicateRulesError = flatMap_default(topLevels, (curRule) => validateRuleDoesNotAlreadyExist(curRule, topLevels, grammarName, errMsgProvider)); return duplicateErrors.concat(termsNamespaceConflictErrors, tooManyAltsErrors, duplicateRulesError); } function validateDuplicateProductions(topLevelRule, errMsgProvider) { const collectorVisitor2 = new OccurrenceValidationCollector(); topLevelRule.accept(collectorVisitor2); const allRuleProductions = collectorVisitor2.allProductions; const productionGroups = groupBy_default(allRuleProductions, identifyProductionForDuplicates); const duplicates = pickBy_default(productionGroups, (currGroup) => { return currGroup.length > 1; }); const errors = map_default(values_default(duplicates), (currDuplicates) => { const firstProd = head_default(currDuplicates); const msg = errMsgProvider.buildDuplicateFoundError(topLevelRule, currDuplicates); const dslName = getProductionDslName(firstProd); const defError = { message: msg, type: ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS, ruleName: topLevelRule.name, dslName, occurrence: firstProd.idx }; const param = getExtraProductionArgument(firstProd); if (param) { defError.parameter = param; } return defError; }); return errors; } function identifyProductionForDuplicates(prod) { return `${getProductionDslName(prod)}_#_${prod.idx}_#_${getExtraProductionArgument(prod)}`; } function getExtraProductionArgument(prod) { if (prod instanceof Terminal) { return prod.terminalType.name; } else if (prod instanceof NonTerminal) { return prod.nonTerminalName; } else { return ""; } } function validateRuleDoesNotAlreadyExist(rule, allRules, className, errMsgProvider) { const errors = []; const occurrences = reduce_default(allRules, (result, curRule) => { if (curRule.name === rule.name) { return result + 1; } return result; }, 0); if (occurrences > 1) { const errMsg = errMsgProvider.buildDuplicateRuleNameError({ topLevelRule: rule, grammarName: className }); errors.push({ message: errMsg, type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME, ruleName: rule.name }); } return errors; } function validateRuleIsOverridden(ruleName, definedRulesNames, className) { const errors = []; let errMsg; if (!includes_default(definedRulesNames, ruleName)) { errMsg = `Invalid rule override, rule: ->${ruleName}<- cannot be overridden in the grammar: ->${className}<-as it is not defined in any of the super grammars `; errors.push({ message: errMsg, type: ParserDefinitionErrorType.INVALID_RULE_OVERRIDE, ruleName }); } return errors; } function validateNoLeftRecursion(topRule, currRule, errMsgProvider, path4 = []) { const errors = []; const nextNonTerminals = getFirstNoneTerminal(currRule.definition); if (isEmpty_default(nextNonTerminals)) { return []; } else { const ruleName = topRule.name; const foundLeftRecursion = includes_default(nextNonTerminals, topRule); if (foundLeftRecursion) { errors.push({ message: errMsgProvider.buildLeftRecursionError({ topLevelRule: topRule, leftRecursionPath: path4 }), type: ParserDefinitionErrorType.LEFT_RECURSION, ruleName }); } const validNextSteps = difference_default(nextNonTerminals, path4.concat([topRule])); const errorsFromNextSteps = flatMap_default(validNextSteps, (currRefRule) => { const newPath = clone_default2(path4); newPath.push(currRefRule); return validateNoLeftRecursion(topRule, currRefRule, errMsgProvider, newPath); }); return errors.concat(errorsFromNextSteps); } } function getFirstNoneTerminal(definition) { let result = []; if (isEmpty_default(definition)) { return result; } const firstProd = head_default(definition); if (firstProd instanceof NonTerminal) { result.push(firstProd.referencedRule); } else if (firstProd instanceof Alternative || firstProd instanceof Option2 || firstProd instanceof RepetitionMandatory || firstProd instanceof RepetitionMandatoryWithSeparator || firstProd instanceof RepetitionWithSeparator || firstProd instanceof Repetition) { result = result.concat(getFirstNoneTerminal(firstProd.definition)); } else if (firstProd instanceof Alternation) { result = flatten_default(map_default(firstProd.definition, (currSubDef) => getFirstNoneTerminal(currSubDef.definition))); } else if (firstProd instanceof Terminal) { } else { throw Error("non exhaustive match"); } const isFirstOptional = isOptionalProd(firstProd); const hasMore = definition.length > 1; if (isFirstOptional && hasMore) { const rest = drop_default(definition); return result.concat(getFirstNoneTerminal(rest)); } else { return result; } } function validateEmptyOrAlternative(topLevelRule, errMsgProvider) { const orCollector = new OrCollector(); topLevelRule.accept(orCollector); const ors = orCollector.alternations; const errors = flatMap_default(ors, (currOr) => { const exceptLast = dropRight_default(currOr.definition); return flatMap_default(exceptLast, (currAlternative, currAltIdx) => { const possibleFirstInAlt = nextPossibleTokensAfter([currAlternative], [], tokenStructuredMatcher, 1); if (isEmpty_default(possibleFirstInAlt)) { return [ { message: errMsgProvider.buildEmptyAlternationError({ topLevelRule, alternation: currOr, emptyChoiceIdx: currAltIdx }), type: ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT, ruleName: topLevelRule.name, occurrence: currOr.idx, alternative: currAltIdx + 1 } ]; } else { return []; } }); }); return errors; } function validateAmbiguousAlternationAlternatives(topLevelRule, globalMaxLookahead, errMsgProvider) { const orCollector = new OrCollector(); topLevelRule.accept(orCollector); let ors = orCollector.alternations; ors = reject_default(ors, (currOr) => currOr.ignoreAmbiguities === true); const errors = flatMap_default(ors, (currOr) => { const currOccurrence = currOr.idx; const actualMaxLookahead = currOr.maxLookahead || globalMaxLookahead; const alternatives = getLookaheadPathsForOr(currOccurrence, topLevelRule, actualMaxLookahead, currOr); const altsAmbiguityErrors = checkAlternativesAmbiguities(alternatives, currOr, topLevelRule, errMsgProvider); const altsPrefixAmbiguityErrors = checkPrefixAlternativesAmbiguities(alternatives, currOr, topLevelRule, errMsgProvider); return altsAmbiguityErrors.concat(altsPrefixAmbiguityErrors); }); return errors; } function validateTooManyAlts(topLevelRule, errMsgProvider) { const orCollector = new OrCollector(); topLevelRule.accept(orCollector); const ors = orCollector.alternations; const errors = flatMap_default(ors, (currOr) => { if (currOr.definition.length > 255) { return [ { message: errMsgProvider.buildTooManyAlternativesError({ topLevelRule, alternation: currOr }), type: ParserDefinitionErrorType.TOO_MANY_ALTS, ruleName: topLevelRule.name, occurrence: currOr.idx } ]; } else { return []; } }); return errors; } function validateSomeNonEmptyLookaheadPath(topLevelRules, maxLookahead, errMsgProvider) { const errors = []; forEach_default(topLevelRules, (currTopRule) => { const collectorVisitor2 = new RepetitionCollector(); currTopRule.accept(collectorVisitor2); const allRuleProductions = collectorVisitor2.allProductions; forEach_default(allRuleProductions, (currProd) => { const prodType = getProdType(currProd); const actualMaxLookahead = currProd.maxLookahead || maxLookahead; const currOccurrence = currProd.idx; const paths = getLookaheadPathsForOptionalProd(currOccurrence, currTopRule, prodType, actualMaxLookahead); const pathsInsideProduction = paths[0]; if (isEmpty_default(flatten_default(pathsInsideProduction))) { const errMsg = errMsgProvider.buildEmptyRepetitionError({ topLevelRule: currTopRule, repetition: currProd }); errors.push({ message: errMsg, type: ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD, ruleName: currTopRule.name }); } }); }); return errors; } function checkAlternativesAmbiguities(alternatives, alternation2, rule, errMsgProvider) { const foundAmbiguousPaths = []; const identicalAmbiguities = reduce_default(alternatives, (result, currAlt, currAltIdx) => { if (alternation2.definition[currAltIdx].ignoreAmbiguities === true) { return result; } forEach_default(currAlt, (currPath) => { const altsCurrPathAppearsIn = [currAltIdx]; forEach_default(alternatives, (currOtherAlt, currOtherAltIdx) => { if (currAltIdx !== currOtherAltIdx && containsPath(currOtherAlt, currPath) && // ignore (skip) ambiguities with this "other" alternative alternation2.definition[currOtherAltIdx].ignoreAmbiguities !== true) { altsCurrPathAppearsIn.push(currOtherAltIdx); } }); if (altsCurrPathAppearsIn.length > 1 && !containsPath(foundAmbiguousPaths, currPath)) { foundAmbiguousPaths.push(currPath); result.push({ alts: altsCurrPathAppearsIn, path: currPath }); } }); return result; }, []); const currErrors = map_default(identicalAmbiguities, (currAmbDescriptor) => { const ambgIndices = map_default(currAmbDescriptor.alts, (currAltIdx) => currAltIdx + 1); const currMessage = errMsgProvider.buildAlternationAmbiguityError({ topLevelRule: rule, alternation: alternation2, ambiguityIndices: ambgIndices, prefixPath: currAmbDescriptor.path }); return { message: currMessage, type: ParserDefinitionErrorType.AMBIGUOUS_ALTS, ruleName: rule.name, occurrence: alternation2.idx, alternatives: currAmbDescriptor.alts }; }); return currErrors; } function checkPrefixAlternativesAmbiguities(alternatives, alternation2, rule, errMsgProvider) { const pathsAndIndices = reduce_default(alternatives, (result, currAlt, idx) => { const currPathsAndIdx = map_default(currAlt, (currPath) => { return { idx, path: currPath }; }); return result.concat(currPathsAndIdx); }, []); const errors = compact_default(flatMap_default(pathsAndIndices, (currPathAndIdx) => { const alternativeGast = alternation2.definition[currPathAndIdx.idx]; if (alternativeGast.ignoreAmbiguities === true) { return []; } const targetIdx = currPathAndIdx.idx; const targetPath = currPathAndIdx.path; const prefixAmbiguitiesPathsAndIndices = filter_default3(pathsAndIndices, (searchPathAndIdx) => { return ( // ignore (skip) ambiguities with this "other" alternative alternation2.definition[searchPathAndIdx.idx].ignoreAmbiguities !== true && searchPathAndIdx.idx < targetIdx && // checking for strict prefix because identical lookaheads // will be be detected using a different validation. isStrictPrefixOfPath(searchPathAndIdx.path, targetPath) ); }); const currPathPrefixErrors = map_default(prefixAmbiguitiesPathsAndIndices, (currAmbPathAndIdx) => { const ambgIndices = [currAmbPathAndIdx.idx + 1, targetIdx + 1]; const occurrence = alternation2.idx === 0 ? "" : alternation2.idx; const message = errMsgProvider.buildAlternationPrefixAmbiguityError({ topLevelRule: rule, alternation: alternation2, ambiguityIndices: ambgIndices, prefixPath: currAmbPathAndIdx.path }); return { message, type: ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS, ruleName: rule.name, occurrence, alternatives: ambgIndices }; }); return currPathPrefixErrors; })); return errors; } function checkTerminalAndNoneTerminalsNameSpace(topLevels, tokenTypes, errMsgProvider) { const errors = []; const tokenNames = map_default(tokenTypes, (currToken) => currToken.name); forEach_default(topLevels, (currRule) => { const currRuleName = currRule.name; if (includes_default(tokenNames, currRuleName)) { const errMsg = errMsgProvider.buildNamespaceConflictError(currRule); errors.push({ message: errMsg, type: ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE, ruleName: currRuleName }); } }); return errors; } var OccurrenceValidationCollector, OrCollector, RepetitionCollector; var init_checks = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/grammar/checks.js"() { "use strict"; init_lodash(); init_parser(); init_api3(); init_lookahead(); init_interpreter(); init_tokens(); __name(validateLookahead, "validateLookahead"); __name(validateGrammar, "validateGrammar"); __name(validateDuplicateProductions, "validateDuplicateProductions"); __name(identifyProductionForDuplicates, "identifyProductionForDuplicates"); __name(getExtraProductionArgument, "getExtraProductionArgument"); OccurrenceValidationCollector = class extends GAstVisitor { static { __name(this, "OccurrenceValidationCollector"); } constructor() { super(...arguments); this.allProductions = []; } visitNonTerminal(subrule) { this.allProductions.push(subrule); } visitOption(option2) { this.allProductions.push(option2); } visitRepetitionWithSeparator(manySep) { this.allProductions.push(manySep); } visitRepetitionMandatory(atLeastOne) { this.allProductions.push(atLeastOne); } visitRepetitionMandatoryWithSeparator(atLeastOneSep) { this.allProductions.push(atLeastOneSep); } visitRepetition(many) { this.allProductions.push(many); } visitAlternation(or) { this.allProductions.push(or); } visitTerminal(terminal) { this.allProductions.push(terminal); } }; __name(validateRuleDoesNotAlreadyExist, "validateRuleDoesNotAlreadyExist"); __name(validateRuleIsOverridden, "validateRuleIsOverridden"); __name(validateNoLeftRecursion, "validateNoLeftRecursion"); __name(getFirstNoneTerminal, "getFirstNoneTerminal"); OrCollector = class extends GAstVisitor { static { __name(this, "OrCollector"); } constructor() { super(...arguments); this.alternations = []; } visitAlternation(node2) { this.alternations.push(node2); } }; __name(validateEmptyOrAlternative, "validateEmptyOrAlternative"); __name(validateAmbiguousAlternationAlternatives, "validateAmbiguousAlternationAlternatives"); RepetitionCollector = class extends GAstVisitor { static { __name(this, "RepetitionCollector"); } constructor() { super(...arguments); this.allProductions = []; } visitRepetitionWithSeparator(manySep) { this.allProductions.push(manySep); } visitRepetitionMandatory(atLeastOne) { this.allProductions.push(atLeastOne); } visitRepetitionMandatoryWithSeparator(atLeastOneSep) { this.allProductions.push(atLeastOneSep); } visitRepetition(many) { this.allProductions.push(many); } }; __name(validateTooManyAlts, "validateTooManyAlts"); __name(validateSomeNonEmptyLookaheadPath, "validateSomeNonEmptyLookaheadPath"); __name(checkAlternativesAmbiguities, "checkAlternativesAmbiguities"); __name(checkPrefixAlternativesAmbiguities, "checkPrefixAlternativesAmbiguities"); __name(checkTerminalAndNoneTerminalsNameSpace, "checkTerminalAndNoneTerminalsNameSpace"); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/grammar/gast/gast_resolver_public.js function resolveGrammar2(options2) { const actualOptions = defaults_default(options2, { errMsgProvider: defaultGrammarResolverErrorProvider }); const topRulesTable = {}; forEach_default(options2.rules, (rule) => { topRulesTable[rule.name] = rule; }); return resolveGrammar(topRulesTable, actualOptions.errMsgProvider); } function validateGrammar2(options2) { options2 = defaults_default(options2, { errMsgProvider: defaultGrammarValidatorErrorProvider }); return validateGrammar(options2.rules, options2.tokenTypes, options2.errMsgProvider, options2.grammarName); } var init_gast_resolver_public = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/grammar/gast/gast_resolver_public.js"() { "use strict"; init_lodash(); init_resolver(); init_checks(); init_errors_public(); __name(resolveGrammar2, "resolveGrammar"); __name(validateGrammar2, "validateGrammar"); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/exceptions_public.js function isRecognitionException(error3) { return includes_default(RECOGNITION_EXCEPTION_NAMES, error3.name); } var MISMATCHED_TOKEN_EXCEPTION, NO_VIABLE_ALT_EXCEPTION, EARLY_EXIT_EXCEPTION, NOT_ALL_INPUT_PARSED_EXCEPTION, RECOGNITION_EXCEPTION_NAMES, RecognitionException, MismatchedTokenException, NoViableAltException, NotAllInputParsedException, EarlyExitException; var init_exceptions_public = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/exceptions_public.js"() { "use strict"; init_lodash(); MISMATCHED_TOKEN_EXCEPTION = "MismatchedTokenException"; NO_VIABLE_ALT_EXCEPTION = "NoViableAltException"; EARLY_EXIT_EXCEPTION = "EarlyExitException"; NOT_ALL_INPUT_PARSED_EXCEPTION = "NotAllInputParsedException"; RECOGNITION_EXCEPTION_NAMES = [ MISMATCHED_TOKEN_EXCEPTION, NO_VIABLE_ALT_EXCEPTION, EARLY_EXIT_EXCEPTION, NOT_ALL_INPUT_PARSED_EXCEPTION ]; Object.freeze(RECOGNITION_EXCEPTION_NAMES); __name(isRecognitionException, "isRecognitionException"); RecognitionException = class extends Error { static { __name(this, "RecognitionException"); } constructor(message, token2) { super(message); this.token = token2; this.resyncedTokens = []; Object.setPrototypeOf(this, new.target.prototype); if (Error.captureStackTrace) { Error.captureStackTrace(this, this.constructor); } } }; MismatchedTokenException = class extends RecognitionException { static { __name(this, "MismatchedTokenException"); } constructor(message, token2, previousToken) { super(message, token2); this.previousToken = previousToken; this.name = MISMATCHED_TOKEN_EXCEPTION; } }; NoViableAltException = class extends RecognitionException { static { __name(this, "NoViableAltException"); } constructor(message, token2, previousToken) { super(message, token2); this.previousToken = previousToken; this.name = NO_VIABLE_ALT_EXCEPTION; } }; NotAllInputParsedException = class extends RecognitionException { static { __name(this, "NotAllInputParsedException"); } constructor(message, token2) { super(message, token2); this.name = NOT_ALL_INPUT_PARSED_EXCEPTION; } }; EarlyExitException = class extends RecognitionException { static { __name(this, "EarlyExitException"); } constructor(message, token2, previousToken) { super(message, token2); this.previousToken = previousToken; this.name = EARLY_EXIT_EXCEPTION; } }; } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/traits/recoverable.js function attemptInRepetitionRecovery(prodFunc, args, lookaheadFunc, dslMethodIdx, prodOccurrence, nextToksWalker, notStuck) { const key = this.getKeyForAutomaticLookahead(dslMethodIdx, prodOccurrence); let firstAfterRepInfo = this.firstAfterRepMap[key]; if (firstAfterRepInfo === void 0) { const currRuleName = this.getCurrRuleFullName(); const ruleGrammar = this.getGAstProductions()[currRuleName]; const walker = new nextToksWalker(ruleGrammar, prodOccurrence); firstAfterRepInfo = walker.startWalking(); this.firstAfterRepMap[key] = firstAfterRepInfo; } let expectTokAfterLastMatch = firstAfterRepInfo.token; let nextTokIdx = firstAfterRepInfo.occurrence; const isEndOfRule = firstAfterRepInfo.isEndOfRule; if (this.RULE_STACK.length === 1 && isEndOfRule && expectTokAfterLastMatch === void 0) { expectTokAfterLastMatch = EOF; nextTokIdx = 1; } if (expectTokAfterLastMatch === void 0 || nextTokIdx === void 0) { return; } if (this.shouldInRepetitionRecoveryBeTried(expectTokAfterLastMatch, nextTokIdx, notStuck)) { this.tryInRepetitionRecovery(prodFunc, args, lookaheadFunc, expectTokAfterLastMatch); } } var EOF_FOLLOW_KEY, IN_RULE_RECOVERY_EXCEPTION, InRuleRecoveryException, Recoverable; var init_recoverable = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/traits/recoverable.js"() { "use strict"; init_tokens_public(); init_lodash(); init_exceptions_public(); init_constants2(); init_parser(); EOF_FOLLOW_KEY = {}; IN_RULE_RECOVERY_EXCEPTION = "InRuleRecoveryException"; InRuleRecoveryException = class extends Error { static { __name(this, "InRuleRecoveryException"); } constructor(message) { super(message); this.name = IN_RULE_RECOVERY_EXCEPTION; } }; Recoverable = class { static { __name(this, "Recoverable"); } initRecoverable(config5) { this.firstAfterRepMap = {}; this.resyncFollows = {}; this.recoveryEnabled = has_default(config5, "recoveryEnabled") ? config5.recoveryEnabled : DEFAULT_PARSER_CONFIG.recoveryEnabled; if (this.recoveryEnabled) { this.attemptInRepetitionRecovery = attemptInRepetitionRecovery; } } getTokenToInsert(tokType) { const tokToInsert = createTokenInstance(tokType, "", NaN, NaN, NaN, NaN, NaN, NaN); tokToInsert.isInsertedInRecovery = true; return tokToInsert; } canTokenTypeBeInsertedInRecovery(tokType) { return true; } canTokenTypeBeDeletedInRecovery(tokType) { return true; } tryInRepetitionRecovery(grammarRule, grammarRuleArgs, lookAheadFunc, expectedTokType) { const reSyncTokType = this.findReSyncTokenType(); const savedLexerState = this.exportLexerState(); const resyncedTokens = []; let passedResyncPoint = false; const nextTokenWithoutResync = this.LA(1); let currToken = this.LA(1); const generateErrorMessage = /* @__PURE__ */ __name(() => { const previousToken = this.LA(0); const msg = this.errorMessageProvider.buildMismatchTokenMessage({ expected: expectedTokType, actual: nextTokenWithoutResync, previous: previousToken, ruleName: this.getCurrRuleFullName() }); const error3 = new MismatchedTokenException(msg, nextTokenWithoutResync, this.LA(0)); error3.resyncedTokens = dropRight_default(resyncedTokens); this.SAVE_ERROR(error3); }, "generateErrorMessage"); while (!passedResyncPoint) { if (this.tokenMatcher(currToken, expectedTokType)) { generateErrorMessage(); return; } else if (lookAheadFunc.call(this)) { generateErrorMessage(); grammarRule.apply(this, grammarRuleArgs); return; } else if (this.tokenMatcher(currToken, reSyncTokType)) { passedResyncPoint = true; } else { currToken = this.SKIP_TOKEN(); this.addToResyncTokens(currToken, resyncedTokens); } } this.importLexerState(savedLexerState); } shouldInRepetitionRecoveryBeTried(expectTokAfterLastMatch, nextTokIdx, notStuck) { if (notStuck === false) { return false; } if (this.tokenMatcher(this.LA(1), expectTokAfterLastMatch)) { return false; } if (this.isBackTracking()) { return false; } if (this.canPerformInRuleRecovery(expectTokAfterLastMatch, this.getFollowsForInRuleRecovery(expectTokAfterLastMatch, nextTokIdx))) { return false; } return true; } // Error Recovery functionality getFollowsForInRuleRecovery(tokType, tokIdxInRule) { const grammarPath = this.getCurrentGrammarPath(tokType, tokIdxInRule); const follows = this.getNextPossibleTokenTypes(grammarPath); return follows; } tryInRuleRecovery(expectedTokType, follows) { if (this.canRecoverWithSingleTokenInsertion(expectedTokType, follows)) { const tokToInsert = this.getTokenToInsert(expectedTokType); return tokToInsert; } if (this.canRecoverWithSingleTokenDeletion(expectedTokType)) { const nextTok = this.SKIP_TOKEN(); this.consumeToken(); return nextTok; } throw new InRuleRecoveryException("sad sad panda"); } canPerformInRuleRecovery(expectedToken, follows) { return this.canRecoverWithSingleTokenInsertion(expectedToken, follows) || this.canRecoverWithSingleTokenDeletion(expectedToken); } canRecoverWithSingleTokenInsertion(expectedTokType, follows) { if (!this.canTokenTypeBeInsertedInRecovery(expectedTokType)) { return false; } if (isEmpty_default(follows)) { return false; } const mismatchedTok = this.LA(1); const isMisMatchedTokInFollows = find_default2(follows, (possibleFollowsTokType) => { return this.tokenMatcher(mismatchedTok, possibleFollowsTokType); }) !== void 0; return isMisMatchedTokInFollows; } canRecoverWithSingleTokenDeletion(expectedTokType) { if (!this.canTokenTypeBeDeletedInRecovery(expectedTokType)) { return false; } const isNextTokenWhatIsExpected = this.tokenMatcher(this.LA(2), expectedTokType); return isNextTokenWhatIsExpected; } isInCurrentRuleReSyncSet(tokenTypeIdx) { const followKey = this.getCurrFollowKey(); const currentRuleReSyncSet = this.getFollowSetFromFollowKey(followKey); return includes_default(currentRuleReSyncSet, tokenTypeIdx); } findReSyncTokenType() { const allPossibleReSyncTokTypes = this.flattenFollowSet(); let nextToken = this.LA(1); let k2 = 2; while (true) { const foundMatch = find_default2(allPossibleReSyncTokTypes, (resyncTokType) => { const canMatch = tokenMatcher(nextToken, resyncTokType); return canMatch; }); if (foundMatch !== void 0) { return foundMatch; } nextToken = this.LA(k2); k2++; } } getCurrFollowKey() { if (this.RULE_STACK.length === 1) { return EOF_FOLLOW_KEY; } const currRuleShortName = this.getLastExplicitRuleShortName(); const currRuleIdx = this.getLastExplicitRuleOccurrenceIndex(); const prevRuleShortName = this.getPreviousExplicitRuleShortName(); return { ruleName: this.shortRuleNameToFullName(currRuleShortName), idxInCallingRule: currRuleIdx, inRule: this.shortRuleNameToFullName(prevRuleShortName) }; } buildFullFollowKeyStack() { const explicitRuleStack = this.RULE_STACK; const explicitOccurrenceStack = this.RULE_OCCURRENCE_STACK; return map_default(explicitRuleStack, (ruleName, idx) => { if (idx === 0) { return EOF_FOLLOW_KEY; } return { ruleName: this.shortRuleNameToFullName(ruleName), idxInCallingRule: explicitOccurrenceStack[idx], inRule: this.shortRuleNameToFullName(explicitRuleStack[idx - 1]) }; }); } flattenFollowSet() { const followStack = map_default(this.buildFullFollowKeyStack(), (currKey) => { return this.getFollowSetFromFollowKey(currKey); }); return flatten_default(followStack); } getFollowSetFromFollowKey(followKey) { if (followKey === EOF_FOLLOW_KEY) { return [EOF]; } const followName = followKey.ruleName + followKey.idxInCallingRule + IN + followKey.inRule; return this.resyncFollows[followName]; } // It does not make any sense to include a virtual EOF token in the list of resynced tokens // as EOF does not really exist and thus does not contain any useful information (line/column numbers) addToResyncTokens(token2, resyncTokens) { if (!this.tokenMatcher(token2, EOF)) { resyncTokens.push(token2); } return resyncTokens; } reSyncTo(tokType) { const resyncedTokens = []; let nextTok = this.LA(1); while (this.tokenMatcher(nextTok, tokType) === false) { nextTok = this.SKIP_TOKEN(); this.addToResyncTokens(nextTok, resyncedTokens); } return dropRight_default(resyncedTokens); } attemptInRepetitionRecovery(prodFunc, args, lookaheadFunc, dslMethodIdx, prodOccurrence, nextToksWalker, notStuck) { } getCurrentGrammarPath(tokType, tokIdxInRule) { const pathRuleStack = this.getHumanReadableRuleStack(); const pathOccurrenceStack = clone_default2(this.RULE_OCCURRENCE_STACK); const grammarPath = { ruleStack: pathRuleStack, occurrenceStack: pathOccurrenceStack, lastTok: tokType, lastTokOccurrence: tokIdxInRule }; return grammarPath; } getHumanReadableRuleStack() { return map_default(this.RULE_STACK, (currShortName) => this.shortRuleNameToFullName(currShortName)); } }; __name(attemptInRepetitionRecovery, "attemptInRepetitionRecovery"); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/grammar/keys.js function getKeyForAutomaticLookahead(ruleIdx, dslMethodIdx, occurrence) { return occurrence | dslMethodIdx | ruleIdx; } var BITS_FOR_METHOD_TYPE, BITS_FOR_OCCURRENCE_IDX, BITS_FOR_ALT_IDX, OR_IDX, OPTION_IDX, MANY_IDX, AT_LEAST_ONE_IDX, MANY_SEP_IDX, AT_LEAST_ONE_SEP_IDX, BITS_START_FOR_ALT_IDX; var init_keys2 = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/grammar/keys.js"() { "use strict"; BITS_FOR_METHOD_TYPE = 4; BITS_FOR_OCCURRENCE_IDX = 8; BITS_FOR_ALT_IDX = 8; OR_IDX = 1 << BITS_FOR_OCCURRENCE_IDX; OPTION_IDX = 2 << BITS_FOR_OCCURRENCE_IDX; MANY_IDX = 3 << BITS_FOR_OCCURRENCE_IDX; AT_LEAST_ONE_IDX = 4 << BITS_FOR_OCCURRENCE_IDX; MANY_SEP_IDX = 5 << BITS_FOR_OCCURRENCE_IDX; AT_LEAST_ONE_SEP_IDX = 6 << BITS_FOR_OCCURRENCE_IDX; __name(getKeyForAutomaticLookahead, "getKeyForAutomaticLookahead"); BITS_START_FOR_ALT_IDX = 32 - BITS_FOR_ALT_IDX; } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/grammar/llk_lookahead.js var LLkLookaheadStrategy; var init_llk_lookahead = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/grammar/llk_lookahead.js"() { "use strict"; init_lodash(); init_errors_public(); init_parser(); init_checks(); init_lookahead(); LLkLookaheadStrategy = class { static { __name(this, "LLkLookaheadStrategy"); } constructor(options2) { var _a; this.maxLookahead = (_a = options2 === null || options2 === void 0 ? void 0 : options2.maxLookahead) !== null && _a !== void 0 ? _a : DEFAULT_PARSER_CONFIG.maxLookahead; } validate(options2) { const leftRecursionErrors = this.validateNoLeftRecursion(options2.rules); if (isEmpty_default(leftRecursionErrors)) { const emptyAltErrors = this.validateEmptyOrAlternatives(options2.rules); const ambiguousAltsErrors = this.validateAmbiguousAlternationAlternatives(options2.rules, this.maxLookahead); const emptyRepetitionErrors = this.validateSomeNonEmptyLookaheadPath(options2.rules, this.maxLookahead); const allErrors = [ ...leftRecursionErrors, ...emptyAltErrors, ...ambiguousAltsErrors, ...emptyRepetitionErrors ]; return allErrors; } return leftRecursionErrors; } validateNoLeftRecursion(rules) { return flatMap_default(rules, (currTopRule) => validateNoLeftRecursion(currTopRule, currTopRule, defaultGrammarValidatorErrorProvider)); } validateEmptyOrAlternatives(rules) { return flatMap_default(rules, (currTopRule) => validateEmptyOrAlternative(currTopRule, defaultGrammarValidatorErrorProvider)); } validateAmbiguousAlternationAlternatives(rules, maxLookahead) { return flatMap_default(rules, (currTopRule) => validateAmbiguousAlternationAlternatives(currTopRule, maxLookahead, defaultGrammarValidatorErrorProvider)); } validateSomeNonEmptyLookaheadPath(rules, maxLookahead) { return validateSomeNonEmptyLookaheadPath(rules, maxLookahead, defaultGrammarValidatorErrorProvider); } buildLookaheadForAlternation(options2) { return buildLookaheadFuncForOr(options2.prodOccurrence, options2.rule, options2.maxLookahead, options2.hasPredicates, options2.dynamicTokensEnabled, buildAlternativesLookAheadFunc); } buildLookaheadForOptional(options2) { return buildLookaheadFuncForOptionalProd(options2.prodOccurrence, options2.rule, options2.maxLookahead, options2.dynamicTokensEnabled, getProdType(options2.prodType), buildSingleAlternativeLookaheadFunction); } }; } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/traits/looksahead.js function collectMethods(rule) { collectorVisitor.reset(); rule.accept(collectorVisitor); const dslMethods = collectorVisitor.dslMethods; collectorVisitor.reset(); return dslMethods; } var LooksAhead, DslMethodsCollectorVisitor, collectorVisitor; var init_looksahead = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/traits/looksahead.js"() { "use strict"; init_lodash(); init_parser(); init_keys2(); init_api3(); init_llk_lookahead(); LooksAhead = class { static { __name(this, "LooksAhead"); } initLooksAhead(config5) { this.dynamicTokensEnabled = has_default(config5, "dynamicTokensEnabled") ? config5.dynamicTokensEnabled : DEFAULT_PARSER_CONFIG.dynamicTokensEnabled; this.maxLookahead = has_default(config5, "maxLookahead") ? config5.maxLookahead : DEFAULT_PARSER_CONFIG.maxLookahead; this.lookaheadStrategy = has_default(config5, "lookaheadStrategy") ? config5.lookaheadStrategy : new LLkLookaheadStrategy({ maxLookahead: this.maxLookahead }); this.lookAheadFuncsCache = /* @__PURE__ */ new Map(); } preComputeLookaheadFunctions(rules) { forEach_default(rules, (currRule) => { this.TRACE_INIT(`${currRule.name} Rule Lookahead`, () => { const { alternation: alternation2, repetition: repetition2, option: option2, repetitionMandatory: repetitionMandatory2, repetitionMandatoryWithSeparator, repetitionWithSeparator } = collectMethods(currRule); forEach_default(alternation2, (currProd) => { const prodIdx = currProd.idx === 0 ? "" : currProd.idx; this.TRACE_INIT(`${getProductionDslName(currProd)}${prodIdx}`, () => { const laFunc = this.lookaheadStrategy.buildLookaheadForAlternation({ prodOccurrence: currProd.idx, rule: currRule, maxLookahead: currProd.maxLookahead || this.maxLookahead, hasPredicates: currProd.hasPredicates, dynamicTokensEnabled: this.dynamicTokensEnabled }); const key = getKeyForAutomaticLookahead(this.fullRuleNameToShort[currRule.name], OR_IDX, currProd.idx); this.setLaFuncCache(key, laFunc); }); }); forEach_default(repetition2, (currProd) => { this.computeLookaheadFunc(currRule, currProd.idx, MANY_IDX, "Repetition", currProd.maxLookahead, getProductionDslName(currProd)); }); forEach_default(option2, (currProd) => { this.computeLookaheadFunc(currRule, currProd.idx, OPTION_IDX, "Option", currProd.maxLookahead, getProductionDslName(currProd)); }); forEach_default(repetitionMandatory2, (currProd) => { this.computeLookaheadFunc(currRule, currProd.idx, AT_LEAST_ONE_IDX, "RepetitionMandatory", currProd.maxLookahead, getProductionDslName(currProd)); }); forEach_default(repetitionMandatoryWithSeparator, (currProd) => { this.computeLookaheadFunc(currRule, currProd.idx, AT_LEAST_ONE_SEP_IDX, "RepetitionMandatoryWithSeparator", currProd.maxLookahead, getProductionDslName(currProd)); }); forEach_default(repetitionWithSeparator, (currProd) => { this.computeLookaheadFunc(currRule, currProd.idx, MANY_SEP_IDX, "RepetitionWithSeparator", currProd.maxLookahead, getProductionDslName(currProd)); }); }); }); } computeLookaheadFunc(rule, prodOccurrence, prodKey, prodType, prodMaxLookahead, dslMethodName) { this.TRACE_INIT(`${dslMethodName}${prodOccurrence === 0 ? "" : prodOccurrence}`, () => { const laFunc = this.lookaheadStrategy.buildLookaheadForOptional({ prodOccurrence, rule, maxLookahead: prodMaxLookahead || this.maxLookahead, dynamicTokensEnabled: this.dynamicTokensEnabled, prodType }); const key = getKeyForAutomaticLookahead(this.fullRuleNameToShort[rule.name], prodKey, prodOccurrence); this.setLaFuncCache(key, laFunc); }); } // this actually returns a number, but it is always used as a string (object prop key) getKeyForAutomaticLookahead(dslMethodIdx, occurrence) { const currRuleShortName = this.getLastExplicitRuleShortName(); return getKeyForAutomaticLookahead(currRuleShortName, dslMethodIdx, occurrence); } getLaFuncFromCache(key) { return this.lookAheadFuncsCache.get(key); } /* istanbul ignore next */ setLaFuncCache(key, value2) { this.lookAheadFuncsCache.set(key, value2); } }; DslMethodsCollectorVisitor = class extends GAstVisitor { static { __name(this, "DslMethodsCollectorVisitor"); } constructor() { super(...arguments); this.dslMethods = { option: [], alternation: [], repetition: [], repetitionWithSeparator: [], repetitionMandatory: [], repetitionMandatoryWithSeparator: [] }; } reset() { this.dslMethods = { option: [], alternation: [], repetition: [], repetitionWithSeparator: [], repetitionMandatory: [], repetitionMandatoryWithSeparator: [] }; } visitOption(option2) { this.dslMethods.option.push(option2); } visitRepetitionWithSeparator(manySep) { this.dslMethods.repetitionWithSeparator.push(manySep); } visitRepetitionMandatory(atLeastOne) { this.dslMethods.repetitionMandatory.push(atLeastOne); } visitRepetitionMandatoryWithSeparator(atLeastOneSep) { this.dslMethods.repetitionMandatoryWithSeparator.push(atLeastOneSep); } visitRepetition(many) { this.dslMethods.repetition.push(many); } visitAlternation(or) { this.dslMethods.alternation.push(or); } }; collectorVisitor = new DslMethodsCollectorVisitor(); __name(collectMethods, "collectMethods"); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/cst/cst.js function setNodeLocationOnlyOffset(currNodeLocation, newLocationInfo) { if (isNaN(currNodeLocation.startOffset) === true) { currNodeLocation.startOffset = newLocationInfo.startOffset; currNodeLocation.endOffset = newLocationInfo.endOffset; } else if (currNodeLocation.endOffset < newLocationInfo.endOffset === true) { currNodeLocation.endOffset = newLocationInfo.endOffset; } } function setNodeLocationFull(currNodeLocation, newLocationInfo) { if (isNaN(currNodeLocation.startOffset) === true) { currNodeLocation.startOffset = newLocationInfo.startOffset; currNodeLocation.startColumn = newLocationInfo.startColumn; currNodeLocation.startLine = newLocationInfo.startLine; currNodeLocation.endOffset = newLocationInfo.endOffset; currNodeLocation.endColumn = newLocationInfo.endColumn; currNodeLocation.endLine = newLocationInfo.endLine; } else if (currNodeLocation.endOffset < newLocationInfo.endOffset === true) { currNodeLocation.endOffset = newLocationInfo.endOffset; currNodeLocation.endColumn = newLocationInfo.endColumn; currNodeLocation.endLine = newLocationInfo.endLine; } } function addTerminalToCst(node2, token2, tokenTypeName) { if (node2.children[tokenTypeName] === void 0) { node2.children[tokenTypeName] = [token2]; } else { node2.children[tokenTypeName].push(token2); } } function addNoneTerminalToCst(node2, ruleName, ruleResult) { if (node2.children[ruleName] === void 0) { node2.children[ruleName] = [ruleResult]; } else { node2.children[ruleName].push(ruleResult); } } var init_cst = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/cst/cst.js"() { "use strict"; __name(setNodeLocationOnlyOffset, "setNodeLocationOnlyOffset"); __name(setNodeLocationFull, "setNodeLocationFull"); __name(addTerminalToCst, "addTerminalToCst"); __name(addNoneTerminalToCst, "addNoneTerminalToCst"); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/lang/lang_extensions.js function defineNameProp(obj, nameValue) { Object.defineProperty(obj, NAME, { enumerable: false, configurable: true, writable: false, value: nameValue }); } var NAME; var init_lang_extensions = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/lang/lang_extensions.js"() { "use strict"; NAME = "name"; __name(defineNameProp, "defineNameProp"); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/cst/cst_visitor.js function defaultVisit(ctx, param) { const childrenNames = keys_default(ctx); const childrenNamesLength = childrenNames.length; for (let i2 = 0; i2 < childrenNamesLength; i2++) { const currChildName = childrenNames[i2]; const currChildArray = ctx[currChildName]; const currChildArrayLength = currChildArray.length; for (let j3 = 0; j3 < currChildArrayLength; j3++) { const currChild = currChildArray[j3]; if (currChild.tokenTypeIdx === void 0) { this[currChild.name](currChild.children, param); } } } } function createBaseSemanticVisitorConstructor(grammarName, ruleNames) { const derivedConstructor = /* @__PURE__ */ __name(function() { }, "derivedConstructor"); defineNameProp(derivedConstructor, grammarName + "BaseSemantics"); const semanticProto = { visit: /* @__PURE__ */ __name(function(cstNode, param) { if (isArray_default(cstNode)) { cstNode = cstNode[0]; } if (isUndefined_default(cstNode)) { return void 0; } return this[cstNode.name](cstNode.children, param); }, "visit"), validateVisitor: /* @__PURE__ */ __name(function() { const semanticDefinitionErrors = validateVisitor(this, ruleNames); if (!isEmpty_default(semanticDefinitionErrors)) { const errorMessages = map_default(semanticDefinitionErrors, (currDefError) => currDefError.msg); throw Error(`Errors Detected in CST Visitor <${this.constructor.name}>: ${errorMessages.join("\n\n").replace(/\n/g, "\n ")}`); } }, "validateVisitor") }; derivedConstructor.prototype = semanticProto; derivedConstructor.prototype.constructor = derivedConstructor; derivedConstructor._RULE_NAMES = ruleNames; return derivedConstructor; } function createBaseVisitorConstructorWithDefaults(grammarName, ruleNames, baseConstructor) { const derivedConstructor = /* @__PURE__ */ __name(function() { }, "derivedConstructor"); defineNameProp(derivedConstructor, grammarName + "BaseSemanticsWithDefaults"); const withDefaultsProto = Object.create(baseConstructor.prototype); forEach_default(ruleNames, (ruleName) => { withDefaultsProto[ruleName] = defaultVisit; }); derivedConstructor.prototype = withDefaultsProto; derivedConstructor.prototype.constructor = derivedConstructor; return derivedConstructor; } function validateVisitor(visitorInstance, ruleNames) { const missingErrors = validateMissingCstMethods(visitorInstance, ruleNames); return missingErrors; } function validateMissingCstMethods(visitorInstance, ruleNames) { const missingRuleNames = filter_default3(ruleNames, (currRuleName) => { return isFunction_default(visitorInstance[currRuleName]) === false; }); const errors = map_default(missingRuleNames, (currRuleName) => { return { msg: `Missing visitor method: <${currRuleName}> on ${visitorInstance.constructor.name} CST Visitor.`, type: CstVisitorDefinitionError.MISSING_METHOD, methodName: currRuleName }; }); return compact_default(errors); } var CstVisitorDefinitionError; var init_cst_visitor = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/cst/cst_visitor.js"() { "use strict"; init_lodash(); init_lang_extensions(); __name(defaultVisit, "defaultVisit"); __name(createBaseSemanticVisitorConstructor, "createBaseSemanticVisitorConstructor"); __name(createBaseVisitorConstructorWithDefaults, "createBaseVisitorConstructorWithDefaults"); (function(CstVisitorDefinitionError2) { CstVisitorDefinitionError2[CstVisitorDefinitionError2["REDUNDANT_METHOD"] = 0] = "REDUNDANT_METHOD"; CstVisitorDefinitionError2[CstVisitorDefinitionError2["MISSING_METHOD"] = 1] = "MISSING_METHOD"; })(CstVisitorDefinitionError || (CstVisitorDefinitionError = {})); __name(validateVisitor, "validateVisitor"); __name(validateMissingCstMethods, "validateMissingCstMethods"); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/traits/tree_builder.js var TreeBuilder; var init_tree_builder = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/traits/tree_builder.js"() { "use strict"; init_cst(); init_lodash(); init_cst_visitor(); init_parser(); TreeBuilder = class { static { __name(this, "TreeBuilder"); } initTreeBuilder(config5) { this.CST_STACK = []; this.outputCst = config5.outputCst; this.nodeLocationTracking = has_default(config5, "nodeLocationTracking") ? config5.nodeLocationTracking : DEFAULT_PARSER_CONFIG.nodeLocationTracking; if (!this.outputCst) { this.cstInvocationStateUpdate = noop_default2; this.cstFinallyStateUpdate = noop_default2; this.cstPostTerminal = noop_default2; this.cstPostNonTerminal = noop_default2; this.cstPostRule = noop_default2; } else { if (/full/i.test(this.nodeLocationTracking)) { if (this.recoveryEnabled) { this.setNodeLocationFromToken = setNodeLocationFull; this.setNodeLocationFromNode = setNodeLocationFull; this.cstPostRule = noop_default2; this.setInitialNodeLocation = this.setInitialNodeLocationFullRecovery; } else { this.setNodeLocationFromToken = noop_default2; this.setNodeLocationFromNode = noop_default2; this.cstPostRule = this.cstPostRuleFull; this.setInitialNodeLocation = this.setInitialNodeLocationFullRegular; } } else if (/onlyOffset/i.test(this.nodeLocationTracking)) { if (this.recoveryEnabled) { this.setNodeLocationFromToken = setNodeLocationOnlyOffset; this.setNodeLocationFromNode = setNodeLocationOnlyOffset; this.cstPostRule = noop_default2; this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRecovery; } else { this.setNodeLocationFromToken = noop_default2; this.setNodeLocationFromNode = noop_default2; this.cstPostRule = this.cstPostRuleOnlyOffset; this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRegular; } } else if (/none/i.test(this.nodeLocationTracking)) { this.setNodeLocationFromToken = noop_default2; this.setNodeLocationFromNode = noop_default2; this.cstPostRule = noop_default2; this.setInitialNodeLocation = noop_default2; } else { throw Error(`Invalid config option: "${config5.nodeLocationTracking}"`); } } } setInitialNodeLocationOnlyOffsetRecovery(cstNode) { cstNode.location = { startOffset: NaN, endOffset: NaN }; } setInitialNodeLocationOnlyOffsetRegular(cstNode) { cstNode.location = { // without error recovery the starting Location of a new CstNode is guaranteed // To be the next Token's startOffset (for valid inputs). // For invalid inputs there won't be any CSTOutput so this potential // inaccuracy does not matter startOffset: this.LA(1).startOffset, endOffset: NaN }; } setInitialNodeLocationFullRecovery(cstNode) { cstNode.location = { startOffset: NaN, startLine: NaN, startColumn: NaN, endOffset: NaN, endLine: NaN, endColumn: NaN }; } /** * @see setInitialNodeLocationOnlyOffsetRegular for explanation why this work * @param cstNode */ setInitialNodeLocationFullRegular(cstNode) { const nextToken = this.LA(1); cstNode.location = { startOffset: nextToken.startOffset, startLine: nextToken.startLine, startColumn: nextToken.startColumn, endOffset: NaN, endLine: NaN, endColumn: NaN }; } cstInvocationStateUpdate(fullRuleName) { const cstNode = { name: fullRuleName, children: /* @__PURE__ */ Object.create(null) }; this.setInitialNodeLocation(cstNode); this.CST_STACK.push(cstNode); } cstFinallyStateUpdate() { this.CST_STACK.pop(); } cstPostRuleFull(ruleCstNode) { const prevToken = this.LA(0); const loc = ruleCstNode.location; if (loc.startOffset <= prevToken.startOffset === true) { loc.endOffset = prevToken.endOffset; loc.endLine = prevToken.endLine; loc.endColumn = prevToken.endColumn; } else { loc.startOffset = NaN; loc.startLine = NaN; loc.startColumn = NaN; } } cstPostRuleOnlyOffset(ruleCstNode) { const prevToken = this.LA(0); const loc = ruleCstNode.location; if (loc.startOffset <= prevToken.startOffset === true) { loc.endOffset = prevToken.endOffset; } else { loc.startOffset = NaN; } } cstPostTerminal(key, consumedToken) { const rootCst = this.CST_STACK[this.CST_STACK.length - 1]; addTerminalToCst(rootCst, consumedToken, key); this.setNodeLocationFromToken(rootCst.location, consumedToken); } cstPostNonTerminal(ruleCstResult, ruleName) { const preCstNode = this.CST_STACK[this.CST_STACK.length - 1]; addNoneTerminalToCst(preCstNode, ruleName, ruleCstResult); this.setNodeLocationFromNode(preCstNode.location, ruleCstResult.location); } getBaseCstVisitorConstructor() { if (isUndefined_default(this.baseCstVisitorConstructor)) { const newBaseCstVisitorConstructor = createBaseSemanticVisitorConstructor(this.className, keys_default(this.gastProductionsCache)); this.baseCstVisitorConstructor = newBaseCstVisitorConstructor; return newBaseCstVisitorConstructor; } return this.baseCstVisitorConstructor; } getBaseCstVisitorConstructorWithDefaults() { if (isUndefined_default(this.baseCstVisitorWithDefaultsConstructor)) { const newConstructor = createBaseVisitorConstructorWithDefaults(this.className, keys_default(this.gastProductionsCache), this.getBaseCstVisitorConstructor()); this.baseCstVisitorWithDefaultsConstructor = newConstructor; return newConstructor; } return this.baseCstVisitorWithDefaultsConstructor; } getLastExplicitRuleShortName() { const ruleStack = this.RULE_STACK; return ruleStack[ruleStack.length - 1]; } getPreviousExplicitRuleShortName() { const ruleStack = this.RULE_STACK; return ruleStack[ruleStack.length - 2]; } getLastExplicitRuleOccurrenceIndex() { const occurrenceStack = this.RULE_OCCURRENCE_STACK; return occurrenceStack[occurrenceStack.length - 1]; } }; } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/traits/lexer_adapter.js var LexerAdapter; var init_lexer_adapter = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/traits/lexer_adapter.js"() { "use strict"; init_parser(); LexerAdapter = class { static { __name(this, "LexerAdapter"); } initLexerAdapter() { this.tokVector = []; this.tokVectorLength = 0; this.currIdx = -1; } set input(newInput) { if (this.selfAnalysisDone !== true) { throw Error(`Missing invocation at the end of the Parser's constructor.`); } this.reset(); this.tokVector = newInput; this.tokVectorLength = newInput.length; } get input() { return this.tokVector; } // skips a token and returns the next token SKIP_TOKEN() { if (this.currIdx <= this.tokVector.length - 2) { this.consumeToken(); return this.LA(1); } else { return END_OF_FILE; } } // Lexer (accessing Token vector) related methods which can be overridden to implement lazy lexers // or lexers dependent on parser context. LA(howMuch) { const soughtIdx = this.currIdx + howMuch; if (soughtIdx < 0 || this.tokVectorLength <= soughtIdx) { return END_OF_FILE; } else { return this.tokVector[soughtIdx]; } } consumeToken() { this.currIdx++; } exportLexerState() { return this.currIdx; } importLexerState(newState2) { this.currIdx = newState2; } resetLexerState() { this.currIdx = -1; } moveToTerminatedState() { this.currIdx = this.tokVector.length - 1; } getLexerPosition() { return this.exportLexerState(); } }; } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/traits/recognizer_api.js var RecognizerApi; var init_recognizer_api = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/traits/recognizer_api.js"() { "use strict"; init_lodash(); init_exceptions_public(); init_parser(); init_errors_public(); init_checks(); init_api3(); RecognizerApi = class { static { __name(this, "RecognizerApi"); } ACTION(impl2) { return impl2.call(this); } consume(idx, tokType, options2) { return this.consumeInternal(tokType, idx, options2); } subrule(idx, ruleToCall, options2) { return this.subruleInternal(ruleToCall, idx, options2); } option(idx, actionORMethodDef) { return this.optionInternal(actionORMethodDef, idx); } or(idx, altsOrOpts) { return this.orInternal(altsOrOpts, idx); } many(idx, actionORMethodDef) { return this.manyInternal(idx, actionORMethodDef); } atLeastOne(idx, actionORMethodDef) { return this.atLeastOneInternal(idx, actionORMethodDef); } CONSUME(tokType, options2) { return this.consumeInternal(tokType, 0, options2); } CONSUME1(tokType, options2) { return this.consumeInternal(tokType, 1, options2); } CONSUME2(tokType, options2) { return this.consumeInternal(tokType, 2, options2); } CONSUME3(tokType, options2) { return this.consumeInternal(tokType, 3, options2); } CONSUME4(tokType, options2) { return this.consumeInternal(tokType, 4, options2); } CONSUME5(tokType, options2) { return this.consumeInternal(tokType, 5, options2); } CONSUME6(tokType, options2) { return this.consumeInternal(tokType, 6, options2); } CONSUME7(tokType, options2) { return this.consumeInternal(tokType, 7, options2); } CONSUME8(tokType, options2) { return this.consumeInternal(tokType, 8, options2); } CONSUME9(tokType, options2) { return this.consumeInternal(tokType, 9, options2); } SUBRULE(ruleToCall, options2) { return this.subruleInternal(ruleToCall, 0, options2); } SUBRULE1(ruleToCall, options2) { return this.subruleInternal(ruleToCall, 1, options2); } SUBRULE2(ruleToCall, options2) { return this.subruleInternal(ruleToCall, 2, options2); } SUBRULE3(ruleToCall, options2) { return this.subruleInternal(ruleToCall, 3, options2); } SUBRULE4(ruleToCall, options2) { return this.subruleInternal(ruleToCall, 4, options2); } SUBRULE5(ruleToCall, options2) { return this.subruleInternal(ruleToCall, 5, options2); } SUBRULE6(ruleToCall, options2) { return this.subruleInternal(ruleToCall, 6, options2); } SUBRULE7(ruleToCall, options2) { return this.subruleInternal(ruleToCall, 7, options2); } SUBRULE8(ruleToCall, options2) { return this.subruleInternal(ruleToCall, 8, options2); } SUBRULE9(ruleToCall, options2) { return this.subruleInternal(ruleToCall, 9, options2); } OPTION(actionORMethodDef) { return this.optionInternal(actionORMethodDef, 0); } OPTION1(actionORMethodDef) { return this.optionInternal(actionORMethodDef, 1); } OPTION2(actionORMethodDef) { return this.optionInternal(actionORMethodDef, 2); } OPTION3(actionORMethodDef) { return this.optionInternal(actionORMethodDef, 3); } OPTION4(actionORMethodDef) { return this.optionInternal(actionORMethodDef, 4); } OPTION5(actionORMethodDef) { return this.optionInternal(actionORMethodDef, 5); } OPTION6(actionORMethodDef) { return this.optionInternal(actionORMethodDef, 6); } OPTION7(actionORMethodDef) { return this.optionInternal(actionORMethodDef, 7); } OPTION8(actionORMethodDef) { return this.optionInternal(actionORMethodDef, 8); } OPTION9(actionORMethodDef) { return this.optionInternal(actionORMethodDef, 9); } OR(altsOrOpts) { return this.orInternal(altsOrOpts, 0); } OR1(altsOrOpts) { return this.orInternal(altsOrOpts, 1); } OR2(altsOrOpts) { return this.orInternal(altsOrOpts, 2); } OR3(altsOrOpts) { return this.orInternal(altsOrOpts, 3); } OR4(altsOrOpts) { return this.orInternal(altsOrOpts, 4); } OR5(altsOrOpts) { return this.orInternal(altsOrOpts, 5); } OR6(altsOrOpts) { return this.orInternal(altsOrOpts, 6); } OR7(altsOrOpts) { return this.orInternal(altsOrOpts, 7); } OR8(altsOrOpts) { return this.orInternal(altsOrOpts, 8); } OR9(altsOrOpts) { return this.orInternal(altsOrOpts, 9); } MANY(actionORMethodDef) { this.manyInternal(0, actionORMethodDef); } MANY1(actionORMethodDef) { this.manyInternal(1, actionORMethodDef); } MANY2(actionORMethodDef) { this.manyInternal(2, actionORMethodDef); } MANY3(actionORMethodDef) { this.manyInternal(3, actionORMethodDef); } MANY4(actionORMethodDef) { this.manyInternal(4, actionORMethodDef); } MANY5(actionORMethodDef) { this.manyInternal(5, actionORMethodDef); } MANY6(actionORMethodDef) { this.manyInternal(6, actionORMethodDef); } MANY7(actionORMethodDef) { this.manyInternal(7, actionORMethodDef); } MANY8(actionORMethodDef) { this.manyInternal(8, actionORMethodDef); } MANY9(actionORMethodDef) { this.manyInternal(9, actionORMethodDef); } MANY_SEP(options2) { this.manySepFirstInternal(0, options2); } MANY_SEP1(options2) { this.manySepFirstInternal(1, options2); } MANY_SEP2(options2) { this.manySepFirstInternal(2, options2); } MANY_SEP3(options2) { this.manySepFirstInternal(3, options2); } MANY_SEP4(options2) { this.manySepFirstInternal(4, options2); } MANY_SEP5(options2) { this.manySepFirstInternal(5, options2); } MANY_SEP6(options2) { this.manySepFirstInternal(6, options2); } MANY_SEP7(options2) { this.manySepFirstInternal(7, options2); } MANY_SEP8(options2) { this.manySepFirstInternal(8, options2); } MANY_SEP9(options2) { this.manySepFirstInternal(9, options2); } AT_LEAST_ONE(actionORMethodDef) { this.atLeastOneInternal(0, actionORMethodDef); } AT_LEAST_ONE1(actionORMethodDef) { return this.atLeastOneInternal(1, actionORMethodDef); } AT_LEAST_ONE2(actionORMethodDef) { this.atLeastOneInternal(2, actionORMethodDef); } AT_LEAST_ONE3(actionORMethodDef) { this.atLeastOneInternal(3, actionORMethodDef); } AT_LEAST_ONE4(actionORMethodDef) { this.atLeastOneInternal(4, actionORMethodDef); } AT_LEAST_ONE5(actionORMethodDef) { this.atLeastOneInternal(5, actionORMethodDef); } AT_LEAST_ONE6(actionORMethodDef) { this.atLeastOneInternal(6, actionORMethodDef); } AT_LEAST_ONE7(actionORMethodDef) { this.atLeastOneInternal(7, actionORMethodDef); } AT_LEAST_ONE8(actionORMethodDef) { this.atLeastOneInternal(8, actionORMethodDef); } AT_LEAST_ONE9(actionORMethodDef) { this.atLeastOneInternal(9, actionORMethodDef); } AT_LEAST_ONE_SEP(options2) { this.atLeastOneSepFirstInternal(0, options2); } AT_LEAST_ONE_SEP1(options2) { this.atLeastOneSepFirstInternal(1, options2); } AT_LEAST_ONE_SEP2(options2) { this.atLeastOneSepFirstInternal(2, options2); } AT_LEAST_ONE_SEP3(options2) { this.atLeastOneSepFirstInternal(3, options2); } AT_LEAST_ONE_SEP4(options2) { this.atLeastOneSepFirstInternal(4, options2); } AT_LEAST_ONE_SEP5(options2) { this.atLeastOneSepFirstInternal(5, options2); } AT_LEAST_ONE_SEP6(options2) { this.atLeastOneSepFirstInternal(6, options2); } AT_LEAST_ONE_SEP7(options2) { this.atLeastOneSepFirstInternal(7, options2); } AT_LEAST_ONE_SEP8(options2) { this.atLeastOneSepFirstInternal(8, options2); } AT_LEAST_ONE_SEP9(options2) { this.atLeastOneSepFirstInternal(9, options2); } RULE(name, implementation, config5 = DEFAULT_RULE_CONFIG) { if (includes_default(this.definedRulesNames, name)) { const errMsg = defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({ topLevelRule: name, grammarName: this.className }); const error3 = { message: errMsg, type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME, ruleName: name }; this.definitionErrors.push(error3); } this.definedRulesNames.push(name); const ruleImplementation = this.defineRule(name, implementation, config5); this[name] = ruleImplementation; return ruleImplementation; } OVERRIDE_RULE(name, impl2, config5 = DEFAULT_RULE_CONFIG) { const ruleErrors = validateRuleIsOverridden(name, this.definedRulesNames, this.className); this.definitionErrors = this.definitionErrors.concat(ruleErrors); const ruleImplementation = this.defineRule(name, impl2, config5); this[name] = ruleImplementation; return ruleImplementation; } BACKTRACK(grammarRule, args) { return function() { this.isBackTrackingStack.push(1); const orgState = this.saveRecogState(); try { grammarRule.apply(this, args); return true; } catch (e3) { if (isRecognitionException(e3)) { return false; } else { throw e3; } } finally { this.reloadRecogState(orgState); this.isBackTrackingStack.pop(); } }; } // GAST export APIs getGAstProductions() { return this.gastProductionsCache; } getSerializedGastProductions() { return serializeGrammar(values_default(this.gastProductionsCache)); } }; } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/traits/recognizer_engine.js var RecognizerEngine; var init_recognizer_engine = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/traits/recognizer_engine.js"() { "use strict"; init_lodash(); init_keys2(); init_exceptions_public(); init_lookahead(); init_interpreter(); init_parser(); init_recoverable(); init_tokens_public(); init_tokens(); RecognizerEngine = class { static { __name(this, "RecognizerEngine"); } initRecognizerEngine(tokenVocabulary, config5) { this.className = this.constructor.name; this.shortRuleNameToFull = {}; this.fullRuleNameToShort = {}; this.ruleShortNameIdx = 256; this.tokenMatcher = tokenStructuredMatcherNoCategories; this.subruleIdx = 0; this.definedRulesNames = []; this.tokensMap = {}; this.isBackTrackingStack = []; this.RULE_STACK = []; this.RULE_OCCURRENCE_STACK = []; this.gastProductionsCache = {}; if (has_default(config5, "serializedGrammar")) { throw Error("The Parser's configuration can no longer contain a property.\n See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\n For Further details."); } if (isArray_default(tokenVocabulary)) { if (isEmpty_default(tokenVocabulary)) { throw Error("A Token Vocabulary cannot be empty.\n Note that the first argument for the parser constructor\n is no longer a Token vector (since v4.0)."); } if (typeof tokenVocabulary[0].startOffset === "number") { throw Error("The Parser constructor no longer accepts a token vector as the first argument.\n See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0\n For Further details."); } } if (isArray_default(tokenVocabulary)) { this.tokensMap = reduce_default(tokenVocabulary, (acc, tokType) => { acc[tokType.name] = tokType; return acc; }, {}); } else if (has_default(tokenVocabulary, "modes") && every_default(flatten_default(values_default(tokenVocabulary.modes)), isTokenType)) { const allTokenTypes2 = flatten_default(values_default(tokenVocabulary.modes)); const uniqueTokens = uniq_default(allTokenTypes2); this.tokensMap = reduce_default(uniqueTokens, (acc, tokType) => { acc[tokType.name] = tokType; return acc; }, {}); } else if (isObject_default(tokenVocabulary)) { this.tokensMap = clone_default2(tokenVocabulary); } else { throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition"); } this.tokensMap["EOF"] = EOF; const allTokenTypes = has_default(tokenVocabulary, "modes") ? flatten_default(values_default(tokenVocabulary.modes)) : values_default(tokenVocabulary); const noTokenCategoriesUsed = every_default(allTokenTypes, (tokenConstructor) => isEmpty_default(tokenConstructor.categoryMatches)); this.tokenMatcher = noTokenCategoriesUsed ? tokenStructuredMatcherNoCategories : tokenStructuredMatcher; augmentTokenTypes(values_default(this.tokensMap)); } defineRule(ruleName, impl2, config5) { if (this.selfAnalysisDone) { throw Error(`Grammar rule <${ruleName}> may not be defined after the 'performSelfAnalysis' method has been called' Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`); } const resyncEnabled = has_default(config5, "resyncEnabled") ? config5.resyncEnabled : DEFAULT_RULE_CONFIG.resyncEnabled; const recoveryValueFunc = has_default(config5, "recoveryValueFunc") ? config5.recoveryValueFunc : DEFAULT_RULE_CONFIG.recoveryValueFunc; const shortName = this.ruleShortNameIdx << BITS_FOR_METHOD_TYPE + BITS_FOR_OCCURRENCE_IDX; this.ruleShortNameIdx++; this.shortRuleNameToFull[shortName] = ruleName; this.fullRuleNameToShort[ruleName] = shortName; let invokeRuleWithTry; if (this.outputCst === true) { invokeRuleWithTry = /* @__PURE__ */ __name(function invokeRuleWithTry2(...args) { try { this.ruleInvocationStateUpdate(shortName, ruleName, this.subruleIdx); impl2.apply(this, args); const cst = this.CST_STACK[this.CST_STACK.length - 1]; this.cstPostRule(cst); return cst; } catch (e3) { return this.invokeRuleCatch(e3, resyncEnabled, recoveryValueFunc); } finally { this.ruleFinallyStateUpdate(); } }, "invokeRuleWithTry"); } else { invokeRuleWithTry = /* @__PURE__ */ __name(function invokeRuleWithTryCst(...args) { try { this.ruleInvocationStateUpdate(shortName, ruleName, this.subruleIdx); return impl2.apply(this, args); } catch (e3) { return this.invokeRuleCatch(e3, resyncEnabled, recoveryValueFunc); } finally { this.ruleFinallyStateUpdate(); } }, "invokeRuleWithTryCst"); } const wrappedGrammarRule = Object.assign(invokeRuleWithTry, { ruleName, originalGrammarAction: impl2 }); return wrappedGrammarRule; } invokeRuleCatch(e3, resyncEnabledConfig, recoveryValueFunc) { const isFirstInvokedRule = this.RULE_STACK.length === 1; const reSyncEnabled = resyncEnabledConfig && !this.isBackTracking() && this.recoveryEnabled; if (isRecognitionException(e3)) { const recogError = e3; if (reSyncEnabled) { const reSyncTokType = this.findReSyncTokenType(); if (this.isInCurrentRuleReSyncSet(reSyncTokType)) { recogError.resyncedTokens = this.reSyncTo(reSyncTokType); if (this.outputCst) { const partialCstResult = this.CST_STACK[this.CST_STACK.length - 1]; partialCstResult.recoveredNode = true; return partialCstResult; } else { return recoveryValueFunc(e3); } } else { if (this.outputCst) { const partialCstResult = this.CST_STACK[this.CST_STACK.length - 1]; partialCstResult.recoveredNode = true; recogError.partialCstResult = partialCstResult; } throw recogError; } } else if (isFirstInvokedRule) { this.moveToTerminatedState(); return recoveryValueFunc(e3); } else { throw recogError; } } else { throw e3; } } // Implementation of parsing DSL optionInternal(actionORMethodDef, occurrence) { const key = this.getKeyForAutomaticLookahead(OPTION_IDX, occurrence); return this.optionInternalLogic(actionORMethodDef, occurrence, key); } optionInternalLogic(actionORMethodDef, occurrence, key) { let lookAheadFunc = this.getLaFuncFromCache(key); let action; if (typeof actionORMethodDef !== "function") { action = actionORMethodDef.DEF; const predicate = actionORMethodDef.GATE; if (predicate !== void 0) { const orgLookaheadFunction = lookAheadFunc; lookAheadFunc = /* @__PURE__ */ __name(() => { return predicate.call(this) && orgLookaheadFunction.call(this); }, "lookAheadFunc"); } } else { action = actionORMethodDef; } if (lookAheadFunc.call(this) === true) { return action.call(this); } return void 0; } atLeastOneInternal(prodOccurrence, actionORMethodDef) { const laKey = this.getKeyForAutomaticLookahead(AT_LEAST_ONE_IDX, prodOccurrence); return this.atLeastOneInternalLogic(prodOccurrence, actionORMethodDef, laKey); } atLeastOneInternalLogic(prodOccurrence, actionORMethodDef, key) { let lookAheadFunc = this.getLaFuncFromCache(key); let action; if (typeof actionORMethodDef !== "function") { action = actionORMethodDef.DEF; const predicate = actionORMethodDef.GATE; if (predicate !== void 0) { const orgLookaheadFunction = lookAheadFunc; lookAheadFunc = /* @__PURE__ */ __name(() => { return predicate.call(this) && orgLookaheadFunction.call(this); }, "lookAheadFunc"); } } else { action = actionORMethodDef; } if (lookAheadFunc.call(this) === true) { let notStuck = this.doSingleRepetition(action); while (lookAheadFunc.call(this) === true && notStuck === true) { notStuck = this.doSingleRepetition(action); } } else { throw this.raiseEarlyExitException(prodOccurrence, PROD_TYPE.REPETITION_MANDATORY, actionORMethodDef.ERR_MSG); } this.attemptInRepetitionRecovery(this.atLeastOneInternal, [prodOccurrence, actionORMethodDef], lookAheadFunc, AT_LEAST_ONE_IDX, prodOccurrence, NextTerminalAfterAtLeastOneWalker); } atLeastOneSepFirstInternal(prodOccurrence, options2) { const laKey = this.getKeyForAutomaticLookahead(AT_LEAST_ONE_SEP_IDX, prodOccurrence); this.atLeastOneSepFirstInternalLogic(prodOccurrence, options2, laKey); } atLeastOneSepFirstInternalLogic(prodOccurrence, options2, key) { const action = options2.DEF; const separator = options2.SEP; const firstIterationLookaheadFunc = this.getLaFuncFromCache(key); if (firstIterationLookaheadFunc.call(this) === true) { action.call(this); const separatorLookAheadFunc = /* @__PURE__ */ __name(() => { return this.tokenMatcher(this.LA(1), separator); }, "separatorLookAheadFunc"); while (this.tokenMatcher(this.LA(1), separator) === true) { this.CONSUME(separator); action.call(this); } this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [ prodOccurrence, separator, separatorLookAheadFunc, action, NextTerminalAfterAtLeastOneSepWalker ], separatorLookAheadFunc, AT_LEAST_ONE_SEP_IDX, prodOccurrence, NextTerminalAfterAtLeastOneSepWalker); } else { throw this.raiseEarlyExitException(prodOccurrence, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, options2.ERR_MSG); } } manyInternal(prodOccurrence, actionORMethodDef) { const laKey = this.getKeyForAutomaticLookahead(MANY_IDX, prodOccurrence); return this.manyInternalLogic(prodOccurrence, actionORMethodDef, laKey); } manyInternalLogic(prodOccurrence, actionORMethodDef, key) { let lookaheadFunction = this.getLaFuncFromCache(key); let action; if (typeof actionORMethodDef !== "function") { action = actionORMethodDef.DEF; const predicate = actionORMethodDef.GATE; if (predicate !== void 0) { const orgLookaheadFunction = lookaheadFunction; lookaheadFunction = /* @__PURE__ */ __name(() => { return predicate.call(this) && orgLookaheadFunction.call(this); }, "lookaheadFunction"); } } else { action = actionORMethodDef; } let notStuck = true; while (lookaheadFunction.call(this) === true && notStuck === true) { notStuck = this.doSingleRepetition(action); } this.attemptInRepetitionRecovery( this.manyInternal, [prodOccurrence, actionORMethodDef], lookaheadFunction, MANY_IDX, prodOccurrence, NextTerminalAfterManyWalker, // The notStuck parameter is only relevant when "attemptInRepetitionRecovery" // is invoked from manyInternal, in the MANY_SEP case and AT_LEAST_ONE[_SEP] // An infinite loop cannot occur as: // - Either the lookahead is guaranteed to consume something (Single Token Separator) // - AT_LEAST_ONE by definition is guaranteed to consume something (or error out). notStuck ); } manySepFirstInternal(prodOccurrence, options2) { const laKey = this.getKeyForAutomaticLookahead(MANY_SEP_IDX, prodOccurrence); this.manySepFirstInternalLogic(prodOccurrence, options2, laKey); } manySepFirstInternalLogic(prodOccurrence, options2, key) { const action = options2.DEF; const separator = options2.SEP; const firstIterationLaFunc = this.getLaFuncFromCache(key); if (firstIterationLaFunc.call(this) === true) { action.call(this); const separatorLookAheadFunc = /* @__PURE__ */ __name(() => { return this.tokenMatcher(this.LA(1), separator); }, "separatorLookAheadFunc"); while (this.tokenMatcher(this.LA(1), separator) === true) { this.CONSUME(separator); action.call(this); } this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [ prodOccurrence, separator, separatorLookAheadFunc, action, NextTerminalAfterManySepWalker ], separatorLookAheadFunc, MANY_SEP_IDX, prodOccurrence, NextTerminalAfterManySepWalker); } } repetitionSepSecondInternal(prodOccurrence, separator, separatorLookAheadFunc, action, nextTerminalAfterWalker) { while (separatorLookAheadFunc()) { this.CONSUME(separator); action.call(this); } this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [ prodOccurrence, separator, separatorLookAheadFunc, action, nextTerminalAfterWalker ], separatorLookAheadFunc, AT_LEAST_ONE_SEP_IDX, prodOccurrence, nextTerminalAfterWalker); } doSingleRepetition(action) { const beforeIteration = this.getLexerPosition(); action.call(this); const afterIteration = this.getLexerPosition(); return afterIteration > beforeIteration; } orInternal(altsOrOpts, occurrence) { const laKey = this.getKeyForAutomaticLookahead(OR_IDX, occurrence); const alts = isArray_default(altsOrOpts) ? altsOrOpts : altsOrOpts.DEF; const laFunc = this.getLaFuncFromCache(laKey); const altIdxToTake = laFunc.call(this, alts); if (altIdxToTake !== void 0) { const chosenAlternative = alts[altIdxToTake]; return chosenAlternative.ALT.call(this); } this.raiseNoAltException(occurrence, altsOrOpts.ERR_MSG); } ruleFinallyStateUpdate() { this.RULE_STACK.pop(); this.RULE_OCCURRENCE_STACK.pop(); this.cstFinallyStateUpdate(); if (this.RULE_STACK.length === 0 && this.isAtEndOfInput() === false) { const firstRedundantTok = this.LA(1); const errMsg = this.errorMessageProvider.buildNotAllInputParsedMessage({ firstRedundant: firstRedundantTok, ruleName: this.getCurrRuleFullName() }); this.SAVE_ERROR(new NotAllInputParsedException(errMsg, firstRedundantTok)); } } subruleInternal(ruleToCall, idx, options2) { let ruleResult; try { const args = options2 !== void 0 ? options2.ARGS : void 0; this.subruleIdx = idx; ruleResult = ruleToCall.apply(this, args); this.cstPostNonTerminal(ruleResult, options2 !== void 0 && options2.LABEL !== void 0 ? options2.LABEL : ruleToCall.ruleName); return ruleResult; } catch (e3) { throw this.subruleInternalError(e3, options2, ruleToCall.ruleName); } } subruleInternalError(e3, options2, ruleName) { if (isRecognitionException(e3) && e3.partialCstResult !== void 0) { this.cstPostNonTerminal(e3.partialCstResult, options2 !== void 0 && options2.LABEL !== void 0 ? options2.LABEL : ruleName); delete e3.partialCstResult; } throw e3; } consumeInternal(tokType, idx, options2) { let consumedToken; try { const nextToken = this.LA(1); if (this.tokenMatcher(nextToken, tokType) === true) { this.consumeToken(); consumedToken = nextToken; } else { this.consumeInternalError(tokType, nextToken, options2); } } catch (eFromConsumption) { consumedToken = this.consumeInternalRecovery(tokType, idx, eFromConsumption); } this.cstPostTerminal(options2 !== void 0 && options2.LABEL !== void 0 ? options2.LABEL : tokType.name, consumedToken); return consumedToken; } consumeInternalError(tokType, nextToken, options2) { let msg; const previousToken = this.LA(0); if (options2 !== void 0 && options2.ERR_MSG) { msg = options2.ERR_MSG; } else { msg = this.errorMessageProvider.buildMismatchTokenMessage({ expected: tokType, actual: nextToken, previous: previousToken, ruleName: this.getCurrRuleFullName() }); } throw this.SAVE_ERROR(new MismatchedTokenException(msg, nextToken, previousToken)); } consumeInternalRecovery(tokType, idx, eFromConsumption) { if (this.recoveryEnabled && // TODO: more robust checking of the exception type. Perhaps Typescript extending expressions? eFromConsumption.name === "MismatchedTokenException" && !this.isBackTracking()) { const follows = this.getFollowsForInRuleRecovery(tokType, idx); try { return this.tryInRuleRecovery(tokType, follows); } catch (eFromInRuleRecovery) { if (eFromInRuleRecovery.name === IN_RULE_RECOVERY_EXCEPTION) { throw eFromConsumption; } else { throw eFromInRuleRecovery; } } } else { throw eFromConsumption; } } saveRecogState() { const savedErrors = this.errors; const savedRuleStack = clone_default2(this.RULE_STACK); return { errors: savedErrors, lexerState: this.exportLexerState(), RULE_STACK: savedRuleStack, CST_STACK: this.CST_STACK }; } reloadRecogState(newState2) { this.errors = newState2.errors; this.importLexerState(newState2.lexerState); this.RULE_STACK = newState2.RULE_STACK; } ruleInvocationStateUpdate(shortName, fullName, idxInCallingRule) { this.RULE_OCCURRENCE_STACK.push(idxInCallingRule); this.RULE_STACK.push(shortName); this.cstInvocationStateUpdate(fullName); } isBackTracking() { return this.isBackTrackingStack.length !== 0; } getCurrRuleFullName() { const shortName = this.getLastExplicitRuleShortName(); return this.shortRuleNameToFull[shortName]; } shortRuleNameToFullName(shortName) { return this.shortRuleNameToFull[shortName]; } isAtEndOfInput() { return this.tokenMatcher(this.LA(1), EOF); } reset() { this.resetLexerState(); this.subruleIdx = 0; this.isBackTrackingStack = []; this.errors = []; this.RULE_STACK = []; this.CST_STACK = []; this.RULE_OCCURRENCE_STACK = []; } }; } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/traits/error_handler.js var ErrorHandler; var init_error_handler = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/traits/error_handler.js"() { "use strict"; init_exceptions_public(); init_lodash(); init_lookahead(); init_parser(); ErrorHandler = class { static { __name(this, "ErrorHandler"); } initErrorHandler(config5) { this._errors = []; this.errorMessageProvider = has_default(config5, "errorMessageProvider") ? config5.errorMessageProvider : DEFAULT_PARSER_CONFIG.errorMessageProvider; } SAVE_ERROR(error3) { if (isRecognitionException(error3)) { error3.context = { ruleStack: this.getHumanReadableRuleStack(), ruleOccurrenceStack: clone_default2(this.RULE_OCCURRENCE_STACK) }; this._errors.push(error3); return error3; } else { throw Error("Trying to save an Error which is not a RecognitionException"); } } get errors() { return clone_default2(this._errors); } set errors(newErrors) { this._errors = newErrors; } // TODO: consider caching the error message computed information raiseEarlyExitException(occurrence, prodType, userDefinedErrMsg) { const ruleName = this.getCurrRuleFullName(); const ruleGrammar = this.getGAstProductions()[ruleName]; const lookAheadPathsPerAlternative = getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, this.maxLookahead); const insideProdPaths = lookAheadPathsPerAlternative[0]; const actualTokens = []; for (let i2 = 1; i2 <= this.maxLookahead; i2++) { actualTokens.push(this.LA(i2)); } const msg = this.errorMessageProvider.buildEarlyExitMessage({ expectedIterationPaths: insideProdPaths, actual: actualTokens, previous: this.LA(0), customUserDescription: userDefinedErrMsg, ruleName }); throw this.SAVE_ERROR(new EarlyExitException(msg, this.LA(1), this.LA(0))); } // TODO: consider caching the error message computed information raiseNoAltException(occurrence, errMsgTypes) { const ruleName = this.getCurrRuleFullName(); const ruleGrammar = this.getGAstProductions()[ruleName]; const lookAheadPathsPerAlternative = getLookaheadPathsForOr(occurrence, ruleGrammar, this.maxLookahead); const actualTokens = []; for (let i2 = 1; i2 <= this.maxLookahead; i2++) { actualTokens.push(this.LA(i2)); } const previousToken = this.LA(0); const errMsg = this.errorMessageProvider.buildNoViableAltMessage({ expectedPathsPerAlt: lookAheadPathsPerAlternative, actual: actualTokens, previous: previousToken, customUserDescription: errMsgTypes, ruleName: this.getCurrRuleFullName() }); throw this.SAVE_ERROR(new NoViableAltException(errMsg, this.LA(1), previousToken)); } }; } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/traits/context_assist.js var ContentAssist; var init_context_assist = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/traits/context_assist.js"() { "use strict"; init_interpreter(); init_lodash(); ContentAssist = class { static { __name(this, "ContentAssist"); } initContentAssist() { } computeContentAssist(startRuleName, precedingInput) { const startRuleGast = this.gastProductionsCache[startRuleName]; if (isUndefined_default(startRuleGast)) { throw Error(`Rule ->${startRuleName}<- does not exist in this grammar.`); } return nextPossibleTokensAfter([startRuleGast], precedingInput, this.tokenMatcher, this.maxLookahead); } // TODO: should this be a member method or a utility? it does not have any state or usage of 'this'... // TODO: should this be more explicitly part of the public API? getNextPossibleTokenTypes(grammarPath) { const topRuleName = head_default(grammarPath.ruleStack); const gastProductions = this.getGAstProductions(); const topProduction = gastProductions[topRuleName]; const nextPossibleTokenTypes = new NextAfterTokenWalker(topProduction, grammarPath).startWalking(); return nextPossibleTokenTypes; } }; } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/traits/gast_recorder.js function recordProd(prodConstructor, mainProdArg, occurrence, handleSep = false) { assertMethodIdxIsValid(occurrence); const prevProd = last_default(this.recordingProdStack); const grammarAction = isFunction_default(mainProdArg) ? mainProdArg : mainProdArg.DEF; const newProd = new prodConstructor({ definition: [], idx: occurrence }); if (handleSep) { newProd.separator = mainProdArg.SEP; } if (has_default(mainProdArg, "MAX_LOOKAHEAD")) { newProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD; } this.recordingProdStack.push(newProd); grammarAction.call(this); prevProd.definition.push(newProd); this.recordingProdStack.pop(); return RECORDING_NULL_OBJECT; } function recordOrProd(mainProdArg, occurrence) { assertMethodIdxIsValid(occurrence); const prevProd = last_default(this.recordingProdStack); const hasOptions = isArray_default(mainProdArg) === false; const alts = hasOptions === false ? mainProdArg : mainProdArg.DEF; const newOrProd = new Alternation({ definition: [], idx: occurrence, ignoreAmbiguities: hasOptions && mainProdArg.IGNORE_AMBIGUITIES === true }); if (has_default(mainProdArg, "MAX_LOOKAHEAD")) { newOrProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD; } const hasPredicates = some_default(alts, (currAlt) => isFunction_default(currAlt.GATE)); newOrProd.hasPredicates = hasPredicates; prevProd.definition.push(newOrProd); forEach_default(alts, (currAlt) => { const currAltFlat = new Alternative({ definition: [] }); newOrProd.definition.push(currAltFlat); if (has_default(currAlt, "IGNORE_AMBIGUITIES")) { currAltFlat.ignoreAmbiguities = currAlt.IGNORE_AMBIGUITIES; } else if (has_default(currAlt, "GATE")) { currAltFlat.ignoreAmbiguities = true; } this.recordingProdStack.push(currAltFlat); currAlt.ALT.call(this); this.recordingProdStack.pop(); }); return RECORDING_NULL_OBJECT; } function getIdxSuffix(idx) { return idx === 0 ? "" : `${idx}`; } function assertMethodIdxIsValid(idx) { if (idx < 0 || idx > MAX_METHOD_IDX) { const error3 = new Error( // The stack trace will contain all the needed details `Invalid DSL Method idx value: <${idx}> Idx value must be a none negative value smaller than ${MAX_METHOD_IDX + 1}` ); error3.KNOWN_RECORDER_ERROR = true; throw error3; } } var RECORDING_NULL_OBJECT, HANDLE_SEPARATOR, MAX_METHOD_IDX, RFT, RECORDING_PHASE_TOKEN, RECORDING_PHASE_CSTNODE, GastRecorder; var init_gast_recorder = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/traits/gast_recorder.js"() { "use strict"; init_lodash(); init_api3(); init_lexer_public(); init_tokens(); init_tokens_public(); init_parser(); init_keys2(); RECORDING_NULL_OBJECT = { description: "This Object indicates the Parser is during Recording Phase" }; Object.freeze(RECORDING_NULL_OBJECT); HANDLE_SEPARATOR = true; MAX_METHOD_IDX = Math.pow(2, BITS_FOR_OCCURRENCE_IDX) - 1; RFT = createToken({ name: "RECORDING_PHASE_TOKEN", pattern: Lexer2.NA }); augmentTokenTypes([RFT]); RECORDING_PHASE_TOKEN = createTokenInstance( RFT, "This IToken indicates the Parser is in Recording Phase\n See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details", // Using "-1" instead of NaN (as in EOF) because an actual number is less likely to // cause errors if the output of LA or CONSUME would be (incorrectly) used during the recording phase. -1, -1, -1, -1, -1, -1 ); Object.freeze(RECORDING_PHASE_TOKEN); RECORDING_PHASE_CSTNODE = { name: "This CSTNode indicates the Parser is in Recording Phase\n See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details", children: {} }; GastRecorder = class { static { __name(this, "GastRecorder"); } initGastRecorder(config5) { this.recordingProdStack = []; this.RECORDING_PHASE = false; } enableRecording() { this.RECORDING_PHASE = true; this.TRACE_INIT("Enable Recording", () => { for (let i2 = 0; i2 < 10; i2++) { const idx = i2 > 0 ? i2 : ""; this[`CONSUME${idx}`] = function(arg1, arg2) { return this.consumeInternalRecord(arg1, i2, arg2); }; this[`SUBRULE${idx}`] = function(arg1, arg2) { return this.subruleInternalRecord(arg1, i2, arg2); }; this[`OPTION${idx}`] = function(arg1) { return this.optionInternalRecord(arg1, i2); }; this[`OR${idx}`] = function(arg1) { return this.orInternalRecord(arg1, i2); }; this[`MANY${idx}`] = function(arg1) { this.manyInternalRecord(i2, arg1); }; this[`MANY_SEP${idx}`] = function(arg1) { this.manySepFirstInternalRecord(i2, arg1); }; this[`AT_LEAST_ONE${idx}`] = function(arg1) { this.atLeastOneInternalRecord(i2, arg1); }; this[`AT_LEAST_ONE_SEP${idx}`] = function(arg1) { this.atLeastOneSepFirstInternalRecord(i2, arg1); }; } this[`consume`] = function(idx, arg1, arg2) { return this.consumeInternalRecord(arg1, idx, arg2); }; this[`subrule`] = function(idx, arg1, arg2) { return this.subruleInternalRecord(arg1, idx, arg2); }; this[`option`] = function(idx, arg1) { return this.optionInternalRecord(arg1, idx); }; this[`or`] = function(idx, arg1) { return this.orInternalRecord(arg1, idx); }; this[`many`] = function(idx, arg1) { this.manyInternalRecord(idx, arg1); }; this[`atLeastOne`] = function(idx, arg1) { this.atLeastOneInternalRecord(idx, arg1); }; this.ACTION = this.ACTION_RECORD; this.BACKTRACK = this.BACKTRACK_RECORD; this.LA = this.LA_RECORD; }); } disableRecording() { this.RECORDING_PHASE = false; this.TRACE_INIT("Deleting Recording methods", () => { const that = this; for (let i2 = 0; i2 < 10; i2++) { const idx = i2 > 0 ? i2 : ""; delete that[`CONSUME${idx}`]; delete that[`SUBRULE${idx}`]; delete that[`OPTION${idx}`]; delete that[`OR${idx}`]; delete that[`MANY${idx}`]; delete that[`MANY_SEP${idx}`]; delete that[`AT_LEAST_ONE${idx}`]; delete that[`AT_LEAST_ONE_SEP${idx}`]; } delete that[`consume`]; delete that[`subrule`]; delete that[`option`]; delete that[`or`]; delete that[`many`]; delete that[`atLeastOne`]; delete that.ACTION; delete that.BACKTRACK; delete that.LA; }); } // Parser methods are called inside an ACTION? // Maybe try/catch/finally on ACTIONS while disabling the recorders state changes? // @ts-expect-error -- noop place holder ACTION_RECORD(impl2) { } // Executing backtracking logic will break our recording logic assumptions BACKTRACK_RECORD(grammarRule, args) { return () => true; } // LA is part of the official API and may be used for custom lookahead logic // by end users who may forget to wrap it in ACTION or inside a GATE LA_RECORD(howMuch) { return END_OF_FILE; } topLevelRuleRecord(name, def) { try { const newTopLevelRule = new Rule({ definition: [], name }); newTopLevelRule.name = name; this.recordingProdStack.push(newTopLevelRule); def.call(this); this.recordingProdStack.pop(); return newTopLevelRule; } catch (originalError) { if (originalError.KNOWN_RECORDER_ERROR !== true) { try { originalError.message = originalError.message + '\n This error was thrown during the "grammar recording phase" For more info see:\n https://chevrotain.io/docs/guide/internals.html#grammar-recording'; } catch (mutabilityError) { throw originalError; } } throw originalError; } } // Implementation of parsing DSL optionInternalRecord(actionORMethodDef, occurrence) { return recordProd.call(this, Option2, actionORMethodDef, occurrence); } atLeastOneInternalRecord(occurrence, actionORMethodDef) { recordProd.call(this, RepetitionMandatory, actionORMethodDef, occurrence); } atLeastOneSepFirstInternalRecord(occurrence, options2) { recordProd.call(this, RepetitionMandatoryWithSeparator, options2, occurrence, HANDLE_SEPARATOR); } manyInternalRecord(occurrence, actionORMethodDef) { recordProd.call(this, Repetition, actionORMethodDef, occurrence); } manySepFirstInternalRecord(occurrence, options2) { recordProd.call(this, RepetitionWithSeparator, options2, occurrence, HANDLE_SEPARATOR); } orInternalRecord(altsOrOpts, occurrence) { return recordOrProd.call(this, altsOrOpts, occurrence); } subruleInternalRecord(ruleToCall, occurrence, options2) { assertMethodIdxIsValid(occurrence); if (!ruleToCall || has_default(ruleToCall, "ruleName") === false) { const error3 = new Error(` argument is invalid expecting a Parser method reference but got: <${JSON.stringify(ruleToCall)}> inside top level rule: <${this.recordingProdStack[0].name}>`); error3.KNOWN_RECORDER_ERROR = true; throw error3; } const prevProd = last_default(this.recordingProdStack); const ruleName = ruleToCall.ruleName; const newNoneTerminal = new NonTerminal({ idx: occurrence, nonTerminalName: ruleName, label: options2 === null || options2 === void 0 ? void 0 : options2.LABEL, // The resolving of the `referencedRule` property will be done once all the Rule's GASTs have been created referencedRule: void 0 }); prevProd.definition.push(newNoneTerminal); return this.outputCst ? RECORDING_PHASE_CSTNODE : RECORDING_NULL_OBJECT; } consumeInternalRecord(tokType, occurrence, options2) { assertMethodIdxIsValid(occurrence); if (!hasShortKeyProperty(tokType)) { const error3 = new Error(` argument is invalid expecting a TokenType reference but got: <${JSON.stringify(tokType)}> inside top level rule: <${this.recordingProdStack[0].name}>`); error3.KNOWN_RECORDER_ERROR = true; throw error3; } const prevProd = last_default(this.recordingProdStack); const newNoneTerminal = new Terminal({ idx: occurrence, terminalType: tokType, label: options2 === null || options2 === void 0 ? void 0 : options2.LABEL }); prevProd.definition.push(newNoneTerminal); return RECORDING_PHASE_TOKEN; } }; __name(recordProd, "recordProd"); __name(recordOrProd, "recordOrProd"); __name(getIdxSuffix, "getIdxSuffix"); __name(assertMethodIdxIsValid, "assertMethodIdxIsValid"); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/traits/perf_tracer.js var PerformanceTracer; var init_perf_tracer = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/traits/perf_tracer.js"() { "use strict"; init_lodash(); init_api2(); init_parser(); PerformanceTracer = class { static { __name(this, "PerformanceTracer"); } initPerformanceTracer(config5) { if (has_default(config5, "traceInitPerf")) { const userTraceInitPerf = config5.traceInitPerf; const traceIsNumber = typeof userTraceInitPerf === "number"; this.traceInitMaxIdent = traceIsNumber ? userTraceInitPerf : Infinity; this.traceInitPerf = traceIsNumber ? userTraceInitPerf > 0 : userTraceInitPerf; } else { this.traceInitMaxIdent = 0; this.traceInitPerf = DEFAULT_PARSER_CONFIG.traceInitPerf; } this.traceInitIndent = -1; } TRACE_INIT(phaseDesc, phaseImpl) { if (this.traceInitPerf === true) { this.traceInitIndent++; const indent = new Array(this.traceInitIndent + 1).join(" "); if (this.traceInitIndent < this.traceInitMaxIdent) { console.log(`${indent}--> <${phaseDesc}>`); } const { time: time4, value: value2 } = timer2(phaseImpl); const traceMethod = time4 > 10 ? console.warn : console.log; if (this.traceInitIndent < this.traceInitMaxIdent) { traceMethod(`${indent}<-- <${phaseDesc}> time: ${time4}ms`); } this.traceInitIndent--; return value2; } else { return phaseImpl(); } } }; } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/utils/apply_mixins.js function applyMixins(derivedCtor, baseCtors) { baseCtors.forEach((baseCtor) => { const baseProto = baseCtor.prototype; Object.getOwnPropertyNames(baseProto).forEach((propName) => { if (propName === "constructor") { return; } const basePropDescriptor = Object.getOwnPropertyDescriptor(baseProto, propName); if (basePropDescriptor && (basePropDescriptor.get || basePropDescriptor.set)) { Object.defineProperty(derivedCtor.prototype, propName, basePropDescriptor); } else { derivedCtor.prototype[propName] = baseCtor.prototype[propName]; } }); }); } var init_apply_mixins = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/utils/apply_mixins.js"() { "use strict"; __name(applyMixins, "applyMixins"); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/parser.js function EMPTY_ALT(value2 = void 0) { return function() { return value2; }; } var END_OF_FILE, DEFAULT_PARSER_CONFIG, DEFAULT_RULE_CONFIG, ParserDefinitionErrorType, Parser2, EmbeddedActionsParser; var init_parser = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/parse/parser/parser.js"() { "use strict"; init_lodash(); init_api2(); init_follow(); init_tokens_public(); init_errors_public(); init_gast_resolver_public(); init_recoverable(); init_looksahead(); init_tree_builder(); init_lexer_adapter(); init_recognizer_api(); init_recognizer_engine(); init_error_handler(); init_context_assist(); init_gast_recorder(); init_perf_tracer(); init_apply_mixins(); init_checks(); END_OF_FILE = createTokenInstance(EOF, "", NaN, NaN, NaN, NaN, NaN, NaN); Object.freeze(END_OF_FILE); DEFAULT_PARSER_CONFIG = Object.freeze({ recoveryEnabled: false, maxLookahead: 3, dynamicTokensEnabled: false, outputCst: true, errorMessageProvider: defaultParserErrorProvider, nodeLocationTracking: "none", traceInitPerf: false, skipValidations: false }); DEFAULT_RULE_CONFIG = Object.freeze({ recoveryValueFunc: /* @__PURE__ */ __name(() => void 0, "recoveryValueFunc"), resyncEnabled: true }); (function(ParserDefinitionErrorType2) { ParserDefinitionErrorType2[ParserDefinitionErrorType2["INVALID_RULE_NAME"] = 0] = "INVALID_RULE_NAME"; ParserDefinitionErrorType2[ParserDefinitionErrorType2["DUPLICATE_RULE_NAME"] = 1] = "DUPLICATE_RULE_NAME"; ParserDefinitionErrorType2[ParserDefinitionErrorType2["INVALID_RULE_OVERRIDE"] = 2] = "INVALID_RULE_OVERRIDE"; ParserDefinitionErrorType2[ParserDefinitionErrorType2["DUPLICATE_PRODUCTIONS"] = 3] = "DUPLICATE_PRODUCTIONS"; ParserDefinitionErrorType2[ParserDefinitionErrorType2["UNRESOLVED_SUBRULE_REF"] = 4] = "UNRESOLVED_SUBRULE_REF"; ParserDefinitionErrorType2[ParserDefinitionErrorType2["LEFT_RECURSION"] = 5] = "LEFT_RECURSION"; ParserDefinitionErrorType2[ParserDefinitionErrorType2["NONE_LAST_EMPTY_ALT"] = 6] = "NONE_LAST_EMPTY_ALT"; ParserDefinitionErrorType2[ParserDefinitionErrorType2["AMBIGUOUS_ALTS"] = 7] = "AMBIGUOUS_ALTS"; ParserDefinitionErrorType2[ParserDefinitionErrorType2["CONFLICT_TOKENS_RULES_NAMESPACE"] = 8] = "CONFLICT_TOKENS_RULES_NAMESPACE"; ParserDefinitionErrorType2[ParserDefinitionErrorType2["INVALID_TOKEN_NAME"] = 9] = "INVALID_TOKEN_NAME"; ParserDefinitionErrorType2[ParserDefinitionErrorType2["NO_NON_EMPTY_LOOKAHEAD"] = 10] = "NO_NON_EMPTY_LOOKAHEAD"; ParserDefinitionErrorType2[ParserDefinitionErrorType2["AMBIGUOUS_PREFIX_ALTS"] = 11] = "AMBIGUOUS_PREFIX_ALTS"; ParserDefinitionErrorType2[ParserDefinitionErrorType2["TOO_MANY_ALTS"] = 12] = "TOO_MANY_ALTS"; ParserDefinitionErrorType2[ParserDefinitionErrorType2["CUSTOM_LOOKAHEAD_VALIDATION"] = 13] = "CUSTOM_LOOKAHEAD_VALIDATION"; })(ParserDefinitionErrorType || (ParserDefinitionErrorType = {})); __name(EMPTY_ALT, "EMPTY_ALT"); Parser2 = class _Parser { static { __name(this, "Parser"); } /** * @deprecated use the **instance** method with the same name instead */ static performSelfAnalysis(parserInstance) { throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead."); } performSelfAnalysis() { this.TRACE_INIT("performSelfAnalysis", () => { let defErrorsMsgs; this.selfAnalysisDone = true; const className = this.className; this.TRACE_INIT("toFastProps", () => { toFastProperties(this); }); this.TRACE_INIT("Grammar Recording", () => { try { this.enableRecording(); forEach_default(this.definedRulesNames, (currRuleName) => { const wrappedRule = this[currRuleName]; const originalGrammarAction = wrappedRule["originalGrammarAction"]; let recordedRuleGast; this.TRACE_INIT(`${currRuleName} Rule`, () => { recordedRuleGast = this.topLevelRuleRecord(currRuleName, originalGrammarAction); }); this.gastProductionsCache[currRuleName] = recordedRuleGast; }); } finally { this.disableRecording(); } }); let resolverErrors = []; this.TRACE_INIT("Grammar Resolving", () => { resolverErrors = resolveGrammar2({ rules: values_default(this.gastProductionsCache) }); this.definitionErrors = this.definitionErrors.concat(resolverErrors); }); this.TRACE_INIT("Grammar Validations", () => { if (isEmpty_default(resolverErrors) && this.skipValidations === false) { const validationErrors = validateGrammar2({ rules: values_default(this.gastProductionsCache), tokenTypes: values_default(this.tokensMap), errMsgProvider: defaultGrammarValidatorErrorProvider, grammarName: className }); const lookaheadValidationErrors = validateLookahead({ lookaheadStrategy: this.lookaheadStrategy, rules: values_default(this.gastProductionsCache), tokenTypes: values_default(this.tokensMap), grammarName: className }); this.definitionErrors = this.definitionErrors.concat(validationErrors, lookaheadValidationErrors); } }); if (isEmpty_default(this.definitionErrors)) { if (this.recoveryEnabled) { this.TRACE_INIT("computeAllProdsFollows", () => { const allFollows = computeAllProdsFollows(values_default(this.gastProductionsCache)); this.resyncFollows = allFollows; }); } this.TRACE_INIT("ComputeLookaheadFunctions", () => { var _a, _b; (_b = (_a = this.lookaheadStrategy).initialize) === null || _b === void 0 ? void 0 : _b.call(_a, { rules: values_default(this.gastProductionsCache) }); this.preComputeLookaheadFunctions(values_default(this.gastProductionsCache)); }); } if (!_Parser.DEFER_DEFINITION_ERRORS_HANDLING && !isEmpty_default(this.definitionErrors)) { defErrorsMsgs = map_default(this.definitionErrors, (defError) => defError.message); throw new Error(`Parser Definition Errors detected: ${defErrorsMsgs.join("\n-------------------------------\n")}`); } }); } constructor(tokenVocabulary, config5) { this.definitionErrors = []; this.selfAnalysisDone = false; const that = this; that.initErrorHandler(config5); that.initLexerAdapter(); that.initLooksAhead(config5); that.initRecognizerEngine(tokenVocabulary, config5); that.initRecoverable(config5); that.initTreeBuilder(config5); that.initContentAssist(); that.initGastRecorder(config5); that.initPerformanceTracer(config5); if (has_default(config5, "ignoredIssues")) { throw new Error("The IParserConfig property has been deprecated.\n Please use the flag on the relevant DSL method instead.\n See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES\n For further details."); } this.skipValidations = has_default(config5, "skipValidations") ? config5.skipValidations : DEFAULT_PARSER_CONFIG.skipValidations; } }; Parser2.DEFER_DEFINITION_ERRORS_HANDLING = false; applyMixins(Parser2, [ Recoverable, LooksAhead, TreeBuilder, LexerAdapter, RecognizerEngine, RecognizerApi, ErrorHandler, ContentAssist, GastRecorder, PerformanceTracer ]); EmbeddedActionsParser = class extends Parser2 { static { __name(this, "EmbeddedActionsParser"); } constructor(tokenVocabulary, config5 = DEFAULT_PARSER_CONFIG) { const configClone = clone_default2(config5); configClone.outputCst = false; super(tokenVocabulary, configClone); } }; } }); // ../../node_modules/.pnpm/@chevrotain+cst-dts-gen@11.0.3/node_modules/@chevrotain/cst-dts-gen/lib/src/model.js var init_model2 = __esm({ "../../node_modules/.pnpm/@chevrotain+cst-dts-gen@11.0.3/node_modules/@chevrotain/cst-dts-gen/lib/src/model.js"() { "use strict"; init_api3(); } }); // ../../node_modules/.pnpm/@chevrotain+cst-dts-gen@11.0.3/node_modules/@chevrotain/cst-dts-gen/lib/src/generate.js var init_generate = __esm({ "../../node_modules/.pnpm/@chevrotain+cst-dts-gen@11.0.3/node_modules/@chevrotain/cst-dts-gen/lib/src/generate.js"() { "use strict"; } }); // ../../node_modules/.pnpm/@chevrotain+cst-dts-gen@11.0.3/node_modules/@chevrotain/cst-dts-gen/lib/src/api.js var init_api4 = __esm({ "../../node_modules/.pnpm/@chevrotain+cst-dts-gen@11.0.3/node_modules/@chevrotain/cst-dts-gen/lib/src/api.js"() { "use strict"; init_model2(); init_generate(); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/diagrams/render_public.js var init_render_public = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/diagrams/render_public.js"() { "use strict"; init_version(); } }); // ../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/api.js var init_api5 = __esm({ "../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/lib/src/api.js"() { "use strict"; init_version(); init_parser(); init_lexer_public(); init_tokens_public(); init_lookahead(); init_llk_lookahead(); init_errors_public(); init_exceptions_public(); init_lexer_errors_public(); init_api3(); init_api3(); init_api4(); init_render_public(); } }); // ../../node_modules/.pnpm/chevrotain-allstar@0.3.1_chevrotain@11.0.3/node_modules/chevrotain-allstar/lib/atn.js function buildATNKey(rule, type3, occurrence) { return `${rule.name}_${type3}_${occurrence}`; } function createATN(rules) { const atn = { decisionMap: {}, decisionStates: [], ruleToStartState: /* @__PURE__ */ new Map(), ruleToStopState: /* @__PURE__ */ new Map(), states: [] }; createRuleStartAndStopATNStates(atn, rules); const ruleLength = rules.length; for (let i2 = 0; i2 < ruleLength; i2++) { const rule = rules[i2]; const ruleBlock = block(atn, rule, rule); if (ruleBlock === void 0) { continue; } buildRuleHandle(atn, rule, ruleBlock); } return atn; } function createRuleStartAndStopATNStates(atn, rules) { const ruleLength = rules.length; for (let i2 = 0; i2 < ruleLength; i2++) { const rule = rules[i2]; const start3 = newState(atn, rule, void 0, { type: ATN_RULE_START }); const stop5 = newState(atn, rule, void 0, { type: ATN_RULE_STOP }); start3.stop = stop5; atn.ruleToStartState.set(rule, start3); atn.ruleToStopState.set(rule, stop5); } } function atom(atn, rule, production) { if (production instanceof Terminal) { return tokenRef(atn, rule, production.terminalType, production); } else if (production instanceof NonTerminal) { return ruleRef(atn, rule, production); } else if (production instanceof Alternation) { return alternation(atn, rule, production); } else if (production instanceof Option2) { return option(atn, rule, production); } else if (production instanceof Repetition) { return repetition(atn, rule, production); } else if (production instanceof RepetitionWithSeparator) { return repetitionSep(atn, rule, production); } else if (production instanceof RepetitionMandatory) { return repetitionMandatory(atn, rule, production); } else if (production instanceof RepetitionMandatoryWithSeparator) { return repetitionMandatorySep(atn, rule, production); } else { return block(atn, rule, production); } } function repetition(atn, rule, repetition2) { const starState = newState(atn, rule, repetition2, { type: ATN_STAR_BLOCK_START }); defineDecisionState(atn, starState); const handle = makeAlts(atn, rule, starState, repetition2, block(atn, rule, repetition2)); return star(atn, rule, repetition2, handle); } function repetitionSep(atn, rule, repetition2) { const starState = newState(atn, rule, repetition2, { type: ATN_STAR_BLOCK_START }); defineDecisionState(atn, starState); const handle = makeAlts(atn, rule, starState, repetition2, block(atn, rule, repetition2)); const sep2 = tokenRef(atn, rule, repetition2.separator, repetition2); return star(atn, rule, repetition2, handle, sep2); } function repetitionMandatory(atn, rule, repetition2) { const plusState = newState(atn, rule, repetition2, { type: ATN_PLUS_BLOCK_START }); defineDecisionState(atn, plusState); const handle = makeAlts(atn, rule, plusState, repetition2, block(atn, rule, repetition2)); return plus(atn, rule, repetition2, handle); } function repetitionMandatorySep(atn, rule, repetition2) { const plusState = newState(atn, rule, repetition2, { type: ATN_PLUS_BLOCK_START }); defineDecisionState(atn, plusState); const handle = makeAlts(atn, rule, plusState, repetition2, block(atn, rule, repetition2)); const sep2 = tokenRef(atn, rule, repetition2.separator, repetition2); return plus(atn, rule, repetition2, handle, sep2); } function alternation(atn, rule, alternation2) { const start3 = newState(atn, rule, alternation2, { type: ATN_BASIC }); defineDecisionState(atn, start3); const alts = map_default(alternation2.definition, (e3) => atom(atn, rule, e3)); const handle = makeAlts(atn, rule, start3, alternation2, ...alts); return handle; } function option(atn, rule, option2) { const start3 = newState(atn, rule, option2, { type: ATN_BASIC }); defineDecisionState(atn, start3); const handle = makeAlts(atn, rule, start3, option2, block(atn, rule, option2)); return optional(atn, rule, option2, handle); } function block(atn, rule, block2) { const handles = filter_default3(map_default(block2.definition, (e3) => atom(atn, rule, e3)), (e3) => e3 !== void 0); if (handles.length === 1) { return handles[0]; } else if (handles.length === 0) { return void 0; } else { return makeBlock(atn, handles); } } function plus(atn, rule, plus2, handle, sep2) { const blkStart = handle.left; const blkEnd = handle.right; const loop = newState(atn, rule, plus2, { type: ATN_PLUS_LOOP_BACK }); defineDecisionState(atn, loop); const end2 = newState(atn, rule, plus2, { type: ATN_LOOP_END }); blkStart.loopback = loop; end2.loopback = loop; atn.decisionMap[buildATNKey(rule, sep2 ? "RepetitionMandatoryWithSeparator" : "RepetitionMandatory", plus2.idx)] = loop; epsilon4(blkEnd, loop); if (sep2 === void 0) { epsilon4(loop, blkStart); epsilon4(loop, end2); } else { epsilon4(loop, end2); epsilon4(loop, sep2.left); epsilon4(sep2.right, blkStart); } return { left: blkStart, right: end2 }; } function star(atn, rule, star2, handle, sep2) { const start3 = handle.left; const end2 = handle.right; const entry = newState(atn, rule, star2, { type: ATN_STAR_LOOP_ENTRY }); defineDecisionState(atn, entry); const loopEnd = newState(atn, rule, star2, { type: ATN_LOOP_END }); const loop = newState(atn, rule, star2, { type: ATN_STAR_LOOP_BACK }); entry.loopback = loop; loopEnd.loopback = loop; epsilon4(entry, start3); epsilon4(entry, loopEnd); epsilon4(end2, loop); if (sep2 !== void 0) { epsilon4(loop, loopEnd); epsilon4(loop, sep2.left); epsilon4(sep2.right, start3); } else { epsilon4(loop, entry); } atn.decisionMap[buildATNKey(rule, sep2 ? "RepetitionWithSeparator" : "Repetition", star2.idx)] = entry; return { left: entry, right: loopEnd }; } function optional(atn, rule, optional2, handle) { const start3 = handle.left; const end2 = handle.right; epsilon4(start3, end2); atn.decisionMap[buildATNKey(rule, "Option", optional2.idx)] = start3; return handle; } function defineDecisionState(atn, state3) { atn.decisionStates.push(state3); state3.decision = atn.decisionStates.length - 1; return state3.decision; } function makeAlts(atn, rule, start3, production, ...alts) { const end2 = newState(atn, rule, production, { type: ATN_BLOCK_END, start: start3 }); start3.end = end2; for (const alt of alts) { if (alt !== void 0) { epsilon4(start3, alt.left); epsilon4(alt.right, end2); } else { epsilon4(start3, end2); } } const handle = { left: start3, right: end2 }; atn.decisionMap[buildATNKey(rule, getProdType2(production), production.idx)] = start3; return handle; } function getProdType2(production) { if (production instanceof Alternation) { return "Alternation"; } else if (production instanceof Option2) { return "Option"; } else if (production instanceof Repetition) { return "Repetition"; } else if (production instanceof RepetitionWithSeparator) { return "RepetitionWithSeparator"; } else if (production instanceof RepetitionMandatory) { return "RepetitionMandatory"; } else if (production instanceof RepetitionMandatoryWithSeparator) { return "RepetitionMandatoryWithSeparator"; } else { throw new Error("Invalid production type encountered"); } } function makeBlock(atn, alts) { const altsLength = alts.length; for (let i2 = 0; i2 < altsLength - 1; i2++) { const handle = alts[i2]; let transition2; if (handle.left.transitions.length === 1) { transition2 = handle.left.transitions[0]; } const isRuleTransition = transition2 instanceof RuleTransition; const ruleTransition = transition2; const next3 = alts[i2 + 1].left; if (handle.left.type === ATN_BASIC && handle.right.type === ATN_BASIC && transition2 !== void 0 && (isRuleTransition && ruleTransition.followState === handle.right || transition2.target === handle.right)) { if (isRuleTransition) { ruleTransition.followState = next3; } else { transition2.target = next3; } removeState(atn, handle.right); } else { epsilon4(handle.right, next3); } } const first3 = alts[0]; const last3 = alts[altsLength - 1]; return { left: first3.left, right: last3.right }; } function tokenRef(atn, rule, tokenType, production) { const left3 = newState(atn, rule, production, { type: ATN_BASIC }); const right3 = newState(atn, rule, production, { type: ATN_BASIC }); addTransition(left3, new AtomTransition(right3, tokenType)); return { left: left3, right: right3 }; } function ruleRef(atn, currentRule, nonTerminal) { const rule = nonTerminal.referencedRule; const start3 = atn.ruleToStartState.get(rule); const left3 = newState(atn, currentRule, nonTerminal, { type: ATN_BASIC }); const right3 = newState(atn, currentRule, nonTerminal, { type: ATN_BASIC }); const call = new RuleTransition(start3, rule, right3); addTransition(left3, call); return { left: left3, right: right3 }; } function buildRuleHandle(atn, rule, block2) { const start3 = atn.ruleToStartState.get(rule); epsilon4(start3, block2.left); const stop5 = atn.ruleToStopState.get(rule); epsilon4(block2.right, stop5); const handle = { left: start3, right: stop5 }; return handle; } function epsilon4(a2, b3) { const transition2 = new EpsilonTransition(b3); addTransition(a2, transition2); } function newState(atn, rule, production, partial) { const t4 = Object.assign({ atn, production, epsilonOnlyTransitions: false, rule, transitions: [], nextTokenWithinRule: [], stateNumber: atn.states.length }, partial); atn.states.push(t4); return t4; } function addTransition(state3, transition2) { if (state3.transitions.length === 0) { state3.epsilonOnlyTransitions = transition2.isEpsilon(); } state3.transitions.push(transition2); } function removeState(atn, state3) { atn.states.splice(atn.states.indexOf(state3), 1); } var ATN_BASIC, ATN_RULE_START, ATN_PLUS_BLOCK_START, ATN_STAR_BLOCK_START, ATN_RULE_STOP, ATN_BLOCK_END, ATN_STAR_LOOP_BACK, ATN_STAR_LOOP_ENTRY, ATN_PLUS_LOOP_BACK, ATN_LOOP_END, AbstractTransition, AtomTransition, EpsilonTransition, RuleTransition; var init_atn = __esm({ "../../node_modules/.pnpm/chevrotain-allstar@0.3.1_chevrotain@11.0.3/node_modules/chevrotain-allstar/lib/atn.js"() { "use strict"; init_map(); init_filter3(); init_api5(); __name(buildATNKey, "buildATNKey"); ATN_BASIC = 1; ATN_RULE_START = 2; ATN_PLUS_BLOCK_START = 4; ATN_STAR_BLOCK_START = 5; ATN_RULE_STOP = 7; ATN_BLOCK_END = 8; ATN_STAR_LOOP_BACK = 9; ATN_STAR_LOOP_ENTRY = 10; ATN_PLUS_LOOP_BACK = 11; ATN_LOOP_END = 12; AbstractTransition = class { static { __name(this, "AbstractTransition"); } constructor(target) { this.target = target; } isEpsilon() { return false; } }; AtomTransition = class extends AbstractTransition { static { __name(this, "AtomTransition"); } constructor(target, tokenType) { super(target); this.tokenType = tokenType; } }; EpsilonTransition = class extends AbstractTransition { static { __name(this, "EpsilonTransition"); } constructor(target) { super(target); } isEpsilon() { return true; } }; RuleTransition = class extends AbstractTransition { static { __name(this, "RuleTransition"); } constructor(ruleStart, rule, followState) { super(ruleStart); this.rule = rule; this.followState = followState; } isEpsilon() { return true; } }; __name(createATN, "createATN"); __name(createRuleStartAndStopATNStates, "createRuleStartAndStopATNStates"); __name(atom, "atom"); __name(repetition, "repetition"); __name(repetitionSep, "repetitionSep"); __name(repetitionMandatory, "repetitionMandatory"); __name(repetitionMandatorySep, "repetitionMandatorySep"); __name(alternation, "alternation"); __name(option, "option"); __name(block, "block"); __name(plus, "plus"); __name(star, "star"); __name(optional, "optional"); __name(defineDecisionState, "defineDecisionState"); __name(makeAlts, "makeAlts"); __name(getProdType2, "getProdType"); __name(makeBlock, "makeBlock"); __name(tokenRef, "tokenRef"); __name(ruleRef, "ruleRef"); __name(buildRuleHandle, "buildRuleHandle"); __name(epsilon4, "epsilon"); __name(newState, "newState"); __name(addTransition, "addTransition"); __name(removeState, "removeState"); } }); // ../../node_modules/.pnpm/chevrotain-allstar@0.3.1_chevrotain@11.0.3/node_modules/chevrotain-allstar/lib/dfa.js function getATNConfigKey(config5, alt = true) { return `${alt ? `a${config5.alt}` : ""}s${config5.state.stateNumber}:${config5.stack.map((e3) => e3.stateNumber.toString()).join("_")}`; } var DFA_ERROR, ATNConfigSet; var init_dfa = __esm({ "../../node_modules/.pnpm/chevrotain-allstar@0.3.1_chevrotain@11.0.3/node_modules/chevrotain-allstar/lib/dfa.js"() { "use strict"; init_map(); DFA_ERROR = {}; ATNConfigSet = class { static { __name(this, "ATNConfigSet"); } constructor() { this.map = {}; this.configs = []; } get size() { return this.configs.length; } finalize() { this.map = {}; } add(config5) { const key = getATNConfigKey(config5); if (!(key in this.map)) { this.map[key] = this.configs.length; this.configs.push(config5); } } get elements() { return this.configs; } get alts() { return map_default(this.configs, (e3) => e3.alt); } get key() { let value2 = ""; for (const k2 in this.map) { value2 += k2 + ":"; } return value2; } }; __name(getATNConfigKey, "getATNConfigKey"); } }); // ../../node_modules/.pnpm/chevrotain-allstar@0.3.1_chevrotain@11.0.3/node_modules/chevrotain-allstar/lib/all-star-lookahead.js function createDFACache(startState, decision) { const map5 = {}; return (predicateSet) => { const key = predicateSet.toString(); let existing = map5[key]; if (existing !== void 0) { return existing; } else { existing = { atnStartState: startState, decision, states: {} }; map5[key] = existing; return existing; } }; } function isLL1Sequence(sequences, allowEmpty = true) { const fullSet = /* @__PURE__ */ new Set(); for (const alt of sequences) { const altSet = /* @__PURE__ */ new Set(); for (const tokType of alt) { if (tokType === void 0) { if (allowEmpty) { break; } else { return false; } } const indices = [tokType.tokenTypeIdx].concat(tokType.categoryMatches); for (const index of indices) { if (fullSet.has(index)) { if (!altSet.has(index)) { return false; } } else { fullSet.add(index); altSet.add(index); } } } } return true; } function initATNSimulator(atn) { const decisionLength = atn.decisionStates.length; const decisionToDFA = Array(decisionLength); for (let i2 = 0; i2 < decisionLength; i2++) { decisionToDFA[i2] = createDFACache(atn.decisionStates[i2], i2); } return decisionToDFA; } function adaptivePredict(dfaCaches, decision, predicateSet, logging) { const dfa = dfaCaches[decision](predicateSet); let start3 = dfa.start; if (start3 === void 0) { const closure2 = computeStartState(dfa.atnStartState); start3 = addDFAState(dfa, newDFAState(closure2)); dfa.start = start3; } const alt = performLookahead.apply(this, [dfa, start3, predicateSet, logging]); return alt; } function performLookahead(dfa, s0, predicateSet, logging) { let previousD = s0; let i2 = 1; const path4 = []; let t4 = this.LA(i2++); while (true) { let d3 = getExistingTargetState(previousD, t4); if (d3 === void 0) { d3 = computeLookaheadTarget.apply(this, [dfa, previousD, t4, i2, predicateSet, logging]); } if (d3 === DFA_ERROR) { return buildAdaptivePredictError(path4, previousD, t4); } if (d3.isAcceptState === true) { return d3.prediction; } previousD = d3; path4.push(t4); t4 = this.LA(i2++); } } function computeLookaheadTarget(dfa, previousD, token2, lookahead, predicateSet, logging) { const reach = computeReachSet(previousD.configs, token2, predicateSet); if (reach.size === 0) { addDFAEdge(dfa, previousD, token2, DFA_ERROR); return DFA_ERROR; } let newState2 = newDFAState(reach); const predictedAlt = getUniqueAlt(reach, predicateSet); if (predictedAlt !== void 0) { newState2.isAcceptState = true; newState2.prediction = predictedAlt; newState2.configs.uniqueAlt = predictedAlt; } else if (hasConflictTerminatingPrediction(reach)) { const prediction = min_default(reach.alts); newState2.isAcceptState = true; newState2.prediction = prediction; newState2.configs.uniqueAlt = prediction; reportLookaheadAmbiguity.apply(this, [dfa, lookahead, reach.alts, logging]); } newState2 = addDFAEdge(dfa, previousD, token2, newState2); return newState2; } function reportLookaheadAmbiguity(dfa, lookahead, ambiguityIndices, logging) { const prefixPath = []; for (let i2 = 1; i2 <= lookahead; i2++) { prefixPath.push(this.LA(i2).tokenType); } const atnState = dfa.atnStartState; const topLevelRule = atnState.rule; const production = atnState.production; const message = buildAmbiguityError({ topLevelRule, ambiguityIndices, production, prefixPath }); logging(message); } function buildAmbiguityError(options2) { const pathMsg = map_default(options2.prefixPath, (currtok) => tokenLabel2(currtok)).join(", "); const occurrence = options2.production.idx === 0 ? "" : options2.production.idx; let currMessage = `Ambiguous Alternatives Detected: <${options2.ambiguityIndices.join(", ")}> in <${getProductionDslName2(options2.production)}${occurrence}> inside <${options2.topLevelRule.name}> Rule, <${pathMsg}> may appears as a prefix path in all these alternatives. `; currMessage = currMessage + `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES For Further details.`; return currMessage; } function getProductionDslName2(prod) { if (prod instanceof NonTerminal) { return "SUBRULE"; } else if (prod instanceof Option2) { return "OPTION"; } else if (prod instanceof Alternation) { return "OR"; } else if (prod instanceof RepetitionMandatory) { return "AT_LEAST_ONE"; } else if (prod instanceof RepetitionMandatoryWithSeparator) { return "AT_LEAST_ONE_SEP"; } else if (prod instanceof RepetitionWithSeparator) { return "MANY_SEP"; } else if (prod instanceof Repetition) { return "MANY"; } else if (prod instanceof Terminal) { return "CONSUME"; } else { throw Error("non exhaustive match"); } } function buildAdaptivePredictError(path4, previous, current) { const nextTransitions = flatMap_default(previous.configs.elements, (e3) => e3.state.transitions); const nextTokenTypes = uniqBy_default(nextTransitions.filter((e3) => e3 instanceof AtomTransition).map((e3) => e3.tokenType), (e3) => e3.tokenTypeIdx); return { actualToken: current, possibleTokenTypes: nextTokenTypes, tokenPath: path4 }; } function getExistingTargetState(state3, token2) { return state3.edges[token2.tokenTypeIdx]; } function computeReachSet(configs, token2, predicateSet) { const intermediate = new ATNConfigSet(); const skippedStopStates = []; for (const c3 of configs.elements) { if (predicateSet.is(c3.alt) === false) { continue; } if (c3.state.type === ATN_RULE_STOP) { skippedStopStates.push(c3); continue; } const transitionLength = c3.state.transitions.length; for (let i2 = 0; i2 < transitionLength; i2++) { const transition2 = c3.state.transitions[i2]; const target = getReachableTarget(transition2, token2); if (target !== void 0) { intermediate.add({ state: target, alt: c3.alt, stack: c3.stack }); } } } let reach; if (skippedStopStates.length === 0 && intermediate.size === 1) { reach = intermediate; } if (reach === void 0) { reach = new ATNConfigSet(); for (const c3 of intermediate.elements) { closure(c3, reach); } } if (skippedStopStates.length > 0 && !hasConfigInRuleStopState(reach)) { for (const c3 of skippedStopStates) { reach.add(c3); } } return reach; } function getReachableTarget(transition2, token2) { if (transition2 instanceof AtomTransition && tokenMatcher(token2, transition2.tokenType)) { return transition2.target; } return void 0; } function getUniqueAlt(configs, predicateSet) { let alt; for (const c3 of configs.elements) { if (predicateSet.is(c3.alt) === true) { if (alt === void 0) { alt = c3.alt; } else if (alt !== c3.alt) { return void 0; } } } return alt; } function newDFAState(closure2) { return { configs: closure2, edges: {}, isAcceptState: false, prediction: -1 }; } function addDFAEdge(dfa, from2, token2, to) { to = addDFAState(dfa, to); from2.edges[token2.tokenTypeIdx] = to; return to; } function addDFAState(dfa, state3) { if (state3 === DFA_ERROR) { return state3; } const mapKey = state3.configs.key; const existing = dfa.states[mapKey]; if (existing !== void 0) { return existing; } state3.configs.finalize(); dfa.states[mapKey] = state3; return state3; } function computeStartState(atnState) { const configs = new ATNConfigSet(); const numberOfTransitions = atnState.transitions.length; for (let i2 = 0; i2 < numberOfTransitions; i2++) { const target = atnState.transitions[i2].target; const config5 = { state: target, alt: i2, stack: [] }; closure(config5, configs); } return configs; } function closure(config5, configs) { const p3 = config5.state; if (p3.type === ATN_RULE_STOP) { if (config5.stack.length > 0) { const atnStack = [...config5.stack]; const followState = atnStack.pop(); const followConfig = { state: followState, alt: config5.alt, stack: atnStack }; closure(followConfig, configs); } else { configs.add(config5); } return; } if (!p3.epsilonOnlyTransitions) { configs.add(config5); } const transitionLength = p3.transitions.length; for (let i2 = 0; i2 < transitionLength; i2++) { const transition2 = p3.transitions[i2]; const c3 = getEpsilonTarget(config5, transition2); if (c3 !== void 0) { closure(c3, configs); } } } function getEpsilonTarget(config5, transition2) { if (transition2 instanceof EpsilonTransition) { return { state: transition2.target, alt: config5.alt, stack: config5.stack }; } else if (transition2 instanceof RuleTransition) { const stack = [...config5.stack, transition2.followState]; return { state: transition2.target, alt: config5.alt, stack }; } return void 0; } function hasConfigInRuleStopState(configs) { for (const c3 of configs.elements) { if (c3.state.type === ATN_RULE_STOP) { return true; } } return false; } function allConfigsInRuleStopStates(configs) { for (const c3 of configs.elements) { if (c3.state.type !== ATN_RULE_STOP) { return false; } } return true; } function hasConflictTerminatingPrediction(configs) { if (allConfigsInRuleStopStates(configs)) { return true; } const altSets = getConflictingAltSets(configs.elements); const heuristic2 = hasConflictingAltSet(altSets) && !hasStateAssociatedWithOneAlt(altSets); return heuristic2; } function getConflictingAltSets(configs) { const configToAlts = /* @__PURE__ */ new Map(); for (const c3 of configs) { const key = getATNConfigKey(c3, false); let alts = configToAlts.get(key); if (alts === void 0) { alts = {}; configToAlts.set(key, alts); } alts[c3.alt] = true; } return configToAlts; } function hasConflictingAltSet(altSets) { for (const value2 of Array.from(altSets.values())) { if (Object.keys(value2).length > 1) { return true; } } return false; } function hasStateAssociatedWithOneAlt(altSets) { for (const value2 of Array.from(altSets.values())) { if (Object.keys(value2).length === 1) { return true; } } return false; } var PredicateSet, EMPTY_PREDICATES, LLStarLookaheadStrategy; var init_all_star_lookahead = __esm({ "../../node_modules/.pnpm/chevrotain-allstar@0.3.1_chevrotain@11.0.3/node_modules/chevrotain-allstar/lib/all-star-lookahead.js"() { "use strict"; init_api5(); init_atn(); init_dfa(); init_min2(); init_flatMap(); init_uniqBy(); init_map(); init_flatten(); init_forEach(); init_isEmpty(); init_reduce(); __name(createDFACache, "createDFACache"); PredicateSet = class { static { __name(this, "PredicateSet"); } constructor() { this.predicates = []; } is(index) { return index >= this.predicates.length || this.predicates[index]; } set(index, value2) { this.predicates[index] = value2; } toString() { let value2 = ""; const size4 = this.predicates.length; for (let i2 = 0; i2 < size4; i2++) { value2 += this.predicates[i2] === true ? "1" : "0"; } return value2; } }; EMPTY_PREDICATES = new PredicateSet(); LLStarLookaheadStrategy = class extends LLkLookaheadStrategy { static { __name(this, "LLStarLookaheadStrategy"); } constructor(options2) { var _a; super(); this.logging = (_a = options2 === null || options2 === void 0 ? void 0 : options2.logging) !== null && _a !== void 0 ? _a : ((message) => console.log(message)); } initialize(options2) { this.atn = createATN(options2.rules); this.dfas = initATNSimulator(this.atn); } validateAmbiguousAlternationAlternatives() { return []; } validateEmptyOrAlternatives() { return []; } buildLookaheadForAlternation(options2) { const { prodOccurrence, rule, hasPredicates, dynamicTokensEnabled } = options2; const dfas = this.dfas; const logging = this.logging; const key = buildATNKey(rule, "Alternation", prodOccurrence); const decisionState = this.atn.decisionMap[key]; const decisionIndex = decisionState.decision; const partialAlts = map_default(getLookaheadPaths({ maxLookahead: 1, occurrence: prodOccurrence, prodType: "Alternation", rule }), (currAlt) => map_default(currAlt, (path4) => path4[0])); if (isLL1Sequence(partialAlts, false) && !dynamicTokensEnabled) { const choiceToAlt = reduce_default(partialAlts, (result, currAlt, idx) => { forEach_default(currAlt, (currTokType) => { if (currTokType) { result[currTokType.tokenTypeIdx] = idx; forEach_default(currTokType.categoryMatches, (currExtendingType) => { result[currExtendingType] = idx; }); } }); return result; }, {}); if (hasPredicates) { return function(orAlts) { var _a; const nextToken = this.LA(1); const prediction = choiceToAlt[nextToken.tokenTypeIdx]; if (orAlts !== void 0 && prediction !== void 0) { const gate = (_a = orAlts[prediction]) === null || _a === void 0 ? void 0 : _a.GATE; if (gate !== void 0 && gate.call(this) === false) { return void 0; } } return prediction; }; } else { return function() { const nextToken = this.LA(1); return choiceToAlt[nextToken.tokenTypeIdx]; }; } } else if (hasPredicates) { return function(orAlts) { const predicates = new PredicateSet(); const length2 = orAlts === void 0 ? 0 : orAlts.length; for (let i2 = 0; i2 < length2; i2++) { const gate = orAlts === null || orAlts === void 0 ? void 0 : orAlts[i2].GATE; predicates.set(i2, gate === void 0 || gate.call(this)); } const result = adaptivePredict.call(this, dfas, decisionIndex, predicates, logging); return typeof result === "number" ? result : void 0; }; } else { return function() { const result = adaptivePredict.call(this, dfas, decisionIndex, EMPTY_PREDICATES, logging); return typeof result === "number" ? result : void 0; }; } } buildLookaheadForOptional(options2) { const { prodOccurrence, rule, prodType, dynamicTokensEnabled } = options2; const dfas = this.dfas; const logging = this.logging; const key = buildATNKey(rule, prodType, prodOccurrence); const decisionState = this.atn.decisionMap[key]; const decisionIndex = decisionState.decision; const alts = map_default(getLookaheadPaths({ maxLookahead: 1, occurrence: prodOccurrence, prodType, rule }), (e3) => { return map_default(e3, (g2) => g2[0]); }); if (isLL1Sequence(alts) && alts[0][0] && !dynamicTokensEnabled) { const alt = alts[0]; const singleTokensTypes = flatten_default(alt); if (singleTokensTypes.length === 1 && isEmpty_default(singleTokensTypes[0].categoryMatches)) { const expectedTokenType = singleTokensTypes[0]; const expectedTokenUniqueKey = expectedTokenType.tokenTypeIdx; return function() { return this.LA(1).tokenTypeIdx === expectedTokenUniqueKey; }; } else { const choiceToAlt = reduce_default(singleTokensTypes, (result, currTokType) => { if (currTokType !== void 0) { result[currTokType.tokenTypeIdx] = true; forEach_default(currTokType.categoryMatches, (currExtendingType) => { result[currExtendingType] = true; }); } return result; }, {}); return function() { const nextToken = this.LA(1); return choiceToAlt[nextToken.tokenTypeIdx] === true; }; } } return function() { const result = adaptivePredict.call(this, dfas, decisionIndex, EMPTY_PREDICATES, logging); return typeof result === "object" ? false : result === 0; }; } }; __name(isLL1Sequence, "isLL1Sequence"); __name(initATNSimulator, "initATNSimulator"); __name(adaptivePredict, "adaptivePredict"); __name(performLookahead, "performLookahead"); __name(computeLookaheadTarget, "computeLookaheadTarget"); __name(reportLookaheadAmbiguity, "reportLookaheadAmbiguity"); __name(buildAmbiguityError, "buildAmbiguityError"); __name(getProductionDslName2, "getProductionDslName"); __name(buildAdaptivePredictError, "buildAdaptivePredictError"); __name(getExistingTargetState, "getExistingTargetState"); __name(computeReachSet, "computeReachSet"); __name(getReachableTarget, "getReachableTarget"); __name(getUniqueAlt, "getUniqueAlt"); __name(newDFAState, "newDFAState"); __name(addDFAEdge, "addDFAEdge"); __name(addDFAState, "addDFAState"); __name(computeStartState, "computeStartState"); __name(closure, "closure"); __name(getEpsilonTarget, "getEpsilonTarget"); __name(hasConfigInRuleStopState, "hasConfigInRuleStopState"); __name(allConfigsInRuleStopStates, "allConfigsInRuleStopStates"); __name(hasConflictTerminatingPrediction, "hasConflictTerminatingPrediction"); __name(getConflictingAltSets, "getConflictingAltSets"); __name(hasConflictingAltSet, "hasConflictingAltSet"); __name(hasStateAssociatedWithOneAlt, "hasStateAssociatedWithOneAlt"); } }); // ../../node_modules/.pnpm/chevrotain-allstar@0.3.1_chevrotain@11.0.3/node_modules/chevrotain-allstar/lib/index.js var init_lib2 = __esm({ "../../node_modules/.pnpm/chevrotain-allstar@0.3.1_chevrotain@11.0.3/node_modules/chevrotain-allstar/lib/index.js"() { "use strict"; init_all_star_lookahead(); } }); // ../../node_modules/.pnpm/vscode-languageserver-types@3.17.5/node_modules/vscode-languageserver-types/lib/esm/main.js var DocumentUri, URI, integer3, uinteger, Position, Range, Location, LocationLink, Color3, ColorInformation, ColorPresentation, FoldingRangeKind, FoldingRange, DiagnosticRelatedInformation, DiagnosticSeverity, DiagnosticTag, CodeDescription, Diagnostic, Command, TextEdit, ChangeAnnotation, ChangeAnnotationIdentifier, AnnotatedTextEdit, TextDocumentEdit, CreateFile, RenameFile, DeleteFile, WorkspaceEdit, TextDocumentIdentifier, VersionedTextDocumentIdentifier, OptionalVersionedTextDocumentIdentifier, TextDocumentItem, MarkupKind, MarkupContent, CompletionItemKind, InsertTextFormat, CompletionItemTag, InsertReplaceEdit, InsertTextMode, CompletionItemLabelDetails, CompletionItem, CompletionList, MarkedString, Hover, ParameterInformation, SignatureInformation, DocumentHighlightKind, DocumentHighlight, SymbolKind, SymbolTag, SymbolInformation, WorkspaceSymbol, DocumentSymbol, CodeActionKind, CodeActionTriggerKind, CodeActionContext, CodeAction, CodeLens, FormattingOptions, DocumentLink, SelectionRange, SemanticTokenTypes, SemanticTokenModifiers, SemanticTokens, InlineValueText, InlineValueVariableLookup, InlineValueEvaluatableExpression, InlineValueContext, InlayHintKind, InlayHintLabelPart, InlayHint, StringValue, InlineCompletionItem, InlineCompletionList, InlineCompletionTriggerKind, SelectedCompletionInfo, InlineCompletionContext, WorkspaceFolder, TextDocument, FullTextDocument, Is; var init_main = __esm({ "../../node_modules/.pnpm/vscode-languageserver-types@3.17.5/node_modules/vscode-languageserver-types/lib/esm/main.js"() { "use strict"; (function(DocumentUri2) { function is2(value2) { return typeof value2 === "string"; } __name(is2, "is"); DocumentUri2.is = is2; })(DocumentUri || (DocumentUri = {})); (function(URI3) { function is2(value2) { return typeof value2 === "string"; } __name(is2, "is"); URI3.is = is2; })(URI || (URI = {})); (function(integer4) { integer4.MIN_VALUE = -2147483648; integer4.MAX_VALUE = 2147483647; function is2(value2) { return typeof value2 === "number" && integer4.MIN_VALUE <= value2 && value2 <= integer4.MAX_VALUE; } __name(is2, "is"); integer4.is = is2; })(integer3 || (integer3 = {})); (function(uinteger2) { uinteger2.MIN_VALUE = 0; uinteger2.MAX_VALUE = 2147483647; function is2(value2) { return typeof value2 === "number" && uinteger2.MIN_VALUE <= value2 && value2 <= uinteger2.MAX_VALUE; } __name(is2, "is"); uinteger2.is = is2; })(uinteger || (uinteger = {})); (function(Position2) { function create4(line2, character2) { if (line2 === Number.MAX_VALUE) { line2 = uinteger.MAX_VALUE; } if (character2 === Number.MAX_VALUE) { character2 = uinteger.MAX_VALUE; } return { line: line2, character: character2 }; } __name(create4, "create"); Position2.create = create4; function is2(value2) { let candidate = value2; return Is.objectLiteral(candidate) && Is.uinteger(candidate.line) && Is.uinteger(candidate.character); } __name(is2, "is"); Position2.is = is2; })(Position || (Position = {})); (function(Range2) { function create4(one4, two, three, four) { if (Is.uinteger(one4) && Is.uinteger(two) && Is.uinteger(three) && Is.uinteger(four)) { return { start: Position.create(one4, two), end: Position.create(three, four) }; } else if (Position.is(one4) && Position.is(two)) { return { start: one4, end: two }; } else { throw new Error(`Range#create called with invalid arguments[${one4}, ${two}, ${three}, ${four}]`); } } __name(create4, "create"); Range2.create = create4; function is2(value2) { let candidate = value2; return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end); } __name(is2, "is"); Range2.is = is2; })(Range || (Range = {})); (function(Location2) { function create4(uri, range3) { return { uri, range: range3 }; } __name(create4, "create"); Location2.create = create4; function is2(value2) { let candidate = value2; return Is.objectLiteral(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri)); } __name(is2, "is"); Location2.is = is2; })(Location || (Location = {})); (function(LocationLink2) { function create4(targetUri, targetRange, targetSelectionRange, originSelectionRange) { return { targetUri, targetRange, targetSelectionRange, originSelectionRange }; } __name(create4, "create"); LocationLink2.create = create4; function is2(value2) { let candidate = value2; return Is.objectLiteral(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri) && Range.is(candidate.targetSelectionRange) && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange)); } __name(is2, "is"); LocationLink2.is = is2; })(LocationLink || (LocationLink = {})); (function(Color4) { function create4(red, green, blue, alpha) { return { red, green, blue, alpha }; } __name(create4, "create"); Color4.create = create4; function is2(value2) { const candidate = value2; return Is.objectLiteral(candidate) && Is.numberRange(candidate.red, 0, 1) && Is.numberRange(candidate.green, 0, 1) && Is.numberRange(candidate.blue, 0, 1) && Is.numberRange(candidate.alpha, 0, 1); } __name(is2, "is"); Color4.is = is2; })(Color3 || (Color3 = {})); (function(ColorInformation2) { function create4(range3, color2) { return { range: range3, color: color2 }; } __name(create4, "create"); ColorInformation2.create = create4; function is2(value2) { const candidate = value2; return Is.objectLiteral(candidate) && Range.is(candidate.range) && Color3.is(candidate.color); } __name(is2, "is"); ColorInformation2.is = is2; })(ColorInformation || (ColorInformation = {})); (function(ColorPresentation2) { function create4(label, textEdit, additionalTextEdits) { return { label, textEdit, additionalTextEdits }; } __name(create4, "create"); ColorPresentation2.create = create4; function is2(value2) { const candidate = value2; return Is.objectLiteral(candidate) && Is.string(candidate.label) && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate)) && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is)); } __name(is2, "is"); ColorPresentation2.is = is2; })(ColorPresentation || (ColorPresentation = {})); (function(FoldingRangeKind2) { FoldingRangeKind2.Comment = "comment"; FoldingRangeKind2.Imports = "imports"; FoldingRangeKind2.Region = "region"; })(FoldingRangeKind || (FoldingRangeKind = {})); (function(FoldingRange2) { function create4(startLine, endLine, startCharacter, endCharacter, kind, collapsedText) { const result = { startLine, endLine }; if (Is.defined(startCharacter)) { result.startCharacter = startCharacter; } if (Is.defined(endCharacter)) { result.endCharacter = endCharacter; } if (Is.defined(kind)) { result.kind = kind; } if (Is.defined(collapsedText)) { result.collapsedText = collapsedText; } return result; } __name(create4, "create"); FoldingRange2.create = create4; function is2(value2) { const candidate = value2; return Is.objectLiteral(candidate) && Is.uinteger(candidate.startLine) && Is.uinteger(candidate.startLine) && (Is.undefined(candidate.startCharacter) || Is.uinteger(candidate.startCharacter)) && (Is.undefined(candidate.endCharacter) || Is.uinteger(candidate.endCharacter)) && (Is.undefined(candidate.kind) || Is.string(candidate.kind)); } __name(is2, "is"); FoldingRange2.is = is2; })(FoldingRange || (FoldingRange = {})); (function(DiagnosticRelatedInformation2) { function create4(location, message) { return { location, message }; } __name(create4, "create"); DiagnosticRelatedInformation2.create = create4; function is2(value2) { let candidate = value2; return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message); } __name(is2, "is"); DiagnosticRelatedInformation2.is = is2; })(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {})); (function(DiagnosticSeverity2) { DiagnosticSeverity2.Error = 1; DiagnosticSeverity2.Warning = 2; DiagnosticSeverity2.Information = 3; DiagnosticSeverity2.Hint = 4; })(DiagnosticSeverity || (DiagnosticSeverity = {})); (function(DiagnosticTag2) { DiagnosticTag2.Unnecessary = 1; DiagnosticTag2.Deprecated = 2; })(DiagnosticTag || (DiagnosticTag = {})); (function(CodeDescription2) { function is2(value2) { const candidate = value2; return Is.objectLiteral(candidate) && Is.string(candidate.href); } __name(is2, "is"); CodeDescription2.is = is2; })(CodeDescription || (CodeDescription = {})); (function(Diagnostic2) { function create4(range3, message, severity, code, source, relatedInformation) { let result = { range: range3, message }; if (Is.defined(severity)) { result.severity = severity; } if (Is.defined(code)) { result.code = code; } if (Is.defined(source)) { result.source = source; } if (Is.defined(relatedInformation)) { result.relatedInformation = relatedInformation; } return result; } __name(create4, "create"); Diagnostic2.create = create4; function is2(value2) { var _a; let candidate = value2; return Is.defined(candidate) && Range.is(candidate.range) && Is.string(candidate.message) && (Is.number(candidate.severity) || Is.undefined(candidate.severity)) && (Is.integer(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code)) && (Is.undefined(candidate.codeDescription) || Is.string((_a = candidate.codeDescription) === null || _a === void 0 ? void 0 : _a.href)) && (Is.string(candidate.source) || Is.undefined(candidate.source)) && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is)); } __name(is2, "is"); Diagnostic2.is = is2; })(Diagnostic || (Diagnostic = {})); (function(Command2) { function create4(title2, command, ...args) { let result = { title: title2, command }; if (Is.defined(args) && args.length > 0) { result.arguments = args; } return result; } __name(create4, "create"); Command2.create = create4; function is2(value2) { let candidate = value2; return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command); } __name(is2, "is"); Command2.is = is2; })(Command || (Command = {})); (function(TextEdit2) { function replace2(range3, newText) { return { range: range3, newText }; } __name(replace2, "replace"); TextEdit2.replace = replace2; function insert(position5, newText) { return { range: { start: position5, end: position5 }, newText }; } __name(insert, "insert"); TextEdit2.insert = insert; function del(range3) { return { range: range3, newText: "" }; } __name(del, "del"); TextEdit2.del = del; function is2(value2) { const candidate = value2; return Is.objectLiteral(candidate) && Is.string(candidate.newText) && Range.is(candidate.range); } __name(is2, "is"); TextEdit2.is = is2; })(TextEdit || (TextEdit = {})); (function(ChangeAnnotation2) { function create4(label, needsConfirmation, description) { const result = { label }; if (needsConfirmation !== void 0) { result.needsConfirmation = needsConfirmation; } if (description !== void 0) { result.description = description; } return result; } __name(create4, "create"); ChangeAnnotation2.create = create4; function is2(value2) { const candidate = value2; return Is.objectLiteral(candidate) && Is.string(candidate.label) && (Is.boolean(candidate.needsConfirmation) || candidate.needsConfirmation === void 0) && (Is.string(candidate.description) || candidate.description === void 0); } __name(is2, "is"); ChangeAnnotation2.is = is2; })(ChangeAnnotation || (ChangeAnnotation = {})); (function(ChangeAnnotationIdentifier2) { function is2(value2) { const candidate = value2; return Is.string(candidate); } __name(is2, "is"); ChangeAnnotationIdentifier2.is = is2; })(ChangeAnnotationIdentifier || (ChangeAnnotationIdentifier = {})); (function(AnnotatedTextEdit2) { function replace2(range3, newText, annotation) { return { range: range3, newText, annotationId: annotation }; } __name(replace2, "replace"); AnnotatedTextEdit2.replace = replace2; function insert(position5, newText, annotation) { return { range: { start: position5, end: position5 }, newText, annotationId: annotation }; } __name(insert, "insert"); AnnotatedTextEdit2.insert = insert; function del(range3, annotation) { return { range: range3, newText: "", annotationId: annotation }; } __name(del, "del"); AnnotatedTextEdit2.del = del; function is2(value2) { const candidate = value2; return TextEdit.is(candidate) && (ChangeAnnotation.is(candidate.annotationId) || ChangeAnnotationIdentifier.is(candidate.annotationId)); } __name(is2, "is"); AnnotatedTextEdit2.is = is2; })(AnnotatedTextEdit || (AnnotatedTextEdit = {})); (function(TextDocumentEdit2) { function create4(textDocument, edits) { return { textDocument, edits }; } __name(create4, "create"); TextDocumentEdit2.create = create4; function is2(value2) { let candidate = value2; return Is.defined(candidate) && OptionalVersionedTextDocumentIdentifier.is(candidate.textDocument) && Array.isArray(candidate.edits); } __name(is2, "is"); TextDocumentEdit2.is = is2; })(TextDocumentEdit || (TextDocumentEdit = {})); (function(CreateFile2) { function create4(uri, options2, annotation) { let result = { kind: "create", uri }; if (options2 !== void 0 && (options2.overwrite !== void 0 || options2.ignoreIfExists !== void 0)) { result.options = options2; } if (annotation !== void 0) { result.annotationId = annotation; } return result; } __name(create4, "create"); CreateFile2.create = create4; function is2(value2) { let candidate = value2; return candidate && candidate.kind === "create" && Is.string(candidate.uri) && (candidate.options === void 0 || (candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))) && (candidate.annotationId === void 0 || ChangeAnnotationIdentifier.is(candidate.annotationId)); } __name(is2, "is"); CreateFile2.is = is2; })(CreateFile || (CreateFile = {})); (function(RenameFile2) { function create4(oldUri, newUri, options2, annotation) { let result = { kind: "rename", oldUri, newUri }; if (options2 !== void 0 && (options2.overwrite !== void 0 || options2.ignoreIfExists !== void 0)) { result.options = options2; } if (annotation !== void 0) { result.annotationId = annotation; } return result; } __name(create4, "create"); RenameFile2.create = create4; function is2(value2) { let candidate = value2; return candidate && candidate.kind === "rename" && Is.string(candidate.oldUri) && Is.string(candidate.newUri) && (candidate.options === void 0 || (candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))) && (candidate.annotationId === void 0 || ChangeAnnotationIdentifier.is(candidate.annotationId)); } __name(is2, "is"); RenameFile2.is = is2; })(RenameFile || (RenameFile = {})); (function(DeleteFile2) { function create4(uri, options2, annotation) { let result = { kind: "delete", uri }; if (options2 !== void 0 && (options2.recursive !== void 0 || options2.ignoreIfNotExists !== void 0)) { result.options = options2; } if (annotation !== void 0) { result.annotationId = annotation; } return result; } __name(create4, "create"); DeleteFile2.create = create4; function is2(value2) { let candidate = value2; return candidate && candidate.kind === "delete" && Is.string(candidate.uri) && (candidate.options === void 0 || (candidate.options.recursive === void 0 || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === void 0 || Is.boolean(candidate.options.ignoreIfNotExists))) && (candidate.annotationId === void 0 || ChangeAnnotationIdentifier.is(candidate.annotationId)); } __name(is2, "is"); DeleteFile2.is = is2; })(DeleteFile || (DeleteFile = {})); (function(WorkspaceEdit2) { function is2(value2) { let candidate = value2; return candidate && (candidate.changes !== void 0 || candidate.documentChanges !== void 0) && (candidate.documentChanges === void 0 || candidate.documentChanges.every((change2) => { if (Is.string(change2.kind)) { return CreateFile.is(change2) || RenameFile.is(change2) || DeleteFile.is(change2); } else { return TextDocumentEdit.is(change2); } })); } __name(is2, "is"); WorkspaceEdit2.is = is2; })(WorkspaceEdit || (WorkspaceEdit = {})); (function(TextDocumentIdentifier2) { function create4(uri) { return { uri }; } __name(create4, "create"); TextDocumentIdentifier2.create = create4; function is2(value2) { let candidate = value2; return Is.defined(candidate) && Is.string(candidate.uri); } __name(is2, "is"); TextDocumentIdentifier2.is = is2; })(TextDocumentIdentifier || (TextDocumentIdentifier = {})); (function(VersionedTextDocumentIdentifier2) { function create4(uri, version3) { return { uri, version: version3 }; } __name(create4, "create"); VersionedTextDocumentIdentifier2.create = create4; function is2(value2) { let candidate = value2; return Is.defined(candidate) && Is.string(candidate.uri) && Is.integer(candidate.version); } __name(is2, "is"); VersionedTextDocumentIdentifier2.is = is2; })(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {})); (function(OptionalVersionedTextDocumentIdentifier2) { function create4(uri, version3) { return { uri, version: version3 }; } __name(create4, "create"); OptionalVersionedTextDocumentIdentifier2.create = create4; function is2(value2) { let candidate = value2; return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.integer(candidate.version)); } __name(is2, "is"); OptionalVersionedTextDocumentIdentifier2.is = is2; })(OptionalVersionedTextDocumentIdentifier || (OptionalVersionedTextDocumentIdentifier = {})); (function(TextDocumentItem2) { function create4(uri, languageId, version3, text4) { return { uri, languageId, version: version3, text: text4 }; } __name(create4, "create"); TextDocumentItem2.create = create4; function is2(value2) { let candidate = value2; return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.integer(candidate.version) && Is.string(candidate.text); } __name(is2, "is"); TextDocumentItem2.is = is2; })(TextDocumentItem || (TextDocumentItem = {})); (function(MarkupKind2) { MarkupKind2.PlainText = "plaintext"; MarkupKind2.Markdown = "markdown"; function is2(value2) { const candidate = value2; return candidate === MarkupKind2.PlainText || candidate === MarkupKind2.Markdown; } __name(is2, "is"); MarkupKind2.is = is2; })(MarkupKind || (MarkupKind = {})); (function(MarkupContent2) { function is2(value2) { const candidate = value2; return Is.objectLiteral(value2) && MarkupKind.is(candidate.kind) && Is.string(candidate.value); } __name(is2, "is"); MarkupContent2.is = is2; })(MarkupContent || (MarkupContent = {})); (function(CompletionItemKind2) { CompletionItemKind2.Text = 1; CompletionItemKind2.Method = 2; CompletionItemKind2.Function = 3; CompletionItemKind2.Constructor = 4; CompletionItemKind2.Field = 5; CompletionItemKind2.Variable = 6; CompletionItemKind2.Class = 7; CompletionItemKind2.Interface = 8; CompletionItemKind2.Module = 9; CompletionItemKind2.Property = 10; CompletionItemKind2.Unit = 11; CompletionItemKind2.Value = 12; CompletionItemKind2.Enum = 13; CompletionItemKind2.Keyword = 14; CompletionItemKind2.Snippet = 15; CompletionItemKind2.Color = 16; CompletionItemKind2.File = 17; CompletionItemKind2.Reference = 18; CompletionItemKind2.Folder = 19; CompletionItemKind2.EnumMember = 20; CompletionItemKind2.Constant = 21; CompletionItemKind2.Struct = 22; CompletionItemKind2.Event = 23; CompletionItemKind2.Operator = 24; CompletionItemKind2.TypeParameter = 25; })(CompletionItemKind || (CompletionItemKind = {})); (function(InsertTextFormat2) { InsertTextFormat2.PlainText = 1; InsertTextFormat2.Snippet = 2; })(InsertTextFormat || (InsertTextFormat = {})); (function(CompletionItemTag2) { CompletionItemTag2.Deprecated = 1; })(CompletionItemTag || (CompletionItemTag = {})); (function(InsertReplaceEdit2) { function create4(newText, insert, replace2) { return { newText, insert, replace: replace2 }; } __name(create4, "create"); InsertReplaceEdit2.create = create4; function is2(value2) { const candidate = value2; return candidate && Is.string(candidate.newText) && Range.is(candidate.insert) && Range.is(candidate.replace); } __name(is2, "is"); InsertReplaceEdit2.is = is2; })(InsertReplaceEdit || (InsertReplaceEdit = {})); (function(InsertTextMode2) { InsertTextMode2.asIs = 1; InsertTextMode2.adjustIndentation = 2; })(InsertTextMode || (InsertTextMode = {})); (function(CompletionItemLabelDetails2) { function is2(value2) { const candidate = value2; return candidate && (Is.string(candidate.detail) || candidate.detail === void 0) && (Is.string(candidate.description) || candidate.description === void 0); } __name(is2, "is"); CompletionItemLabelDetails2.is = is2; })(CompletionItemLabelDetails || (CompletionItemLabelDetails = {})); (function(CompletionItem2) { function create4(label) { return { label }; } __name(create4, "create"); CompletionItem2.create = create4; })(CompletionItem || (CompletionItem = {})); (function(CompletionList2) { function create4(items, isIncomplete) { return { items: items ? items : [], isIncomplete: !!isIncomplete }; } __name(create4, "create"); CompletionList2.create = create4; })(CompletionList || (CompletionList = {})); (function(MarkedString2) { function fromPlainText(plainText) { return plainText.replace(/[\\`*_{}[\]()#+\-.!]/g, "\\$&"); } __name(fromPlainText, "fromPlainText"); MarkedString2.fromPlainText = fromPlainText; function is2(value2) { const candidate = value2; return Is.string(candidate) || Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value); } __name(is2, "is"); MarkedString2.is = is2; })(MarkedString || (MarkedString = {})); (function(Hover2) { function is2(value2) { let candidate = value2; return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) || MarkedString.is(candidate.contents) || Is.typedArray(candidate.contents, MarkedString.is)) && (value2.range === void 0 || Range.is(value2.range)); } __name(is2, "is"); Hover2.is = is2; })(Hover || (Hover = {})); (function(ParameterInformation2) { function create4(label, documentation) { return documentation ? { label, documentation } : { label }; } __name(create4, "create"); ParameterInformation2.create = create4; })(ParameterInformation || (ParameterInformation = {})); (function(SignatureInformation2) { function create4(label, documentation, ...parameters) { let result = { label }; if (Is.defined(documentation)) { result.documentation = documentation; } if (Is.defined(parameters)) { result.parameters = parameters; } else { result.parameters = []; } return result; } __name(create4, "create"); SignatureInformation2.create = create4; })(SignatureInformation || (SignatureInformation = {})); (function(DocumentHighlightKind2) { DocumentHighlightKind2.Text = 1; DocumentHighlightKind2.Read = 2; DocumentHighlightKind2.Write = 3; })(DocumentHighlightKind || (DocumentHighlightKind = {})); (function(DocumentHighlight2) { function create4(range3, kind) { let result = { range: range3 }; if (Is.number(kind)) { result.kind = kind; } return result; } __name(create4, "create"); DocumentHighlight2.create = create4; })(DocumentHighlight || (DocumentHighlight = {})); (function(SymbolKind2) { SymbolKind2.File = 1; SymbolKind2.Module = 2; SymbolKind2.Namespace = 3; SymbolKind2.Package = 4; SymbolKind2.Class = 5; SymbolKind2.Method = 6; SymbolKind2.Property = 7; SymbolKind2.Field = 8; SymbolKind2.Constructor = 9; SymbolKind2.Enum = 10; SymbolKind2.Interface = 11; SymbolKind2.Function = 12; SymbolKind2.Variable = 13; SymbolKind2.Constant = 14; SymbolKind2.String = 15; SymbolKind2.Number = 16; SymbolKind2.Boolean = 17; SymbolKind2.Array = 18; SymbolKind2.Object = 19; SymbolKind2.Key = 20; SymbolKind2.Null = 21; SymbolKind2.EnumMember = 22; SymbolKind2.Struct = 23; SymbolKind2.Event = 24; SymbolKind2.Operator = 25; SymbolKind2.TypeParameter = 26; })(SymbolKind || (SymbolKind = {})); (function(SymbolTag2) { SymbolTag2.Deprecated = 1; })(SymbolTag || (SymbolTag = {})); (function(SymbolInformation2) { function create4(name, kind, range3, uri, containerName) { let result = { name, kind, location: { uri, range: range3 } }; if (containerName) { result.containerName = containerName; } return result; } __name(create4, "create"); SymbolInformation2.create = create4; })(SymbolInformation || (SymbolInformation = {})); (function(WorkspaceSymbol2) { function create4(name, kind, uri, range3) { return range3 !== void 0 ? { name, kind, location: { uri, range: range3 } } : { name, kind, location: { uri } }; } __name(create4, "create"); WorkspaceSymbol2.create = create4; })(WorkspaceSymbol || (WorkspaceSymbol = {})); (function(DocumentSymbol2) { function create4(name, detail, kind, range3, selectionRange, children2) { let result = { name, detail, kind, range: range3, selectionRange }; if (children2 !== void 0) { result.children = children2; } return result; } __name(create4, "create"); DocumentSymbol2.create = create4; function is2(value2) { let candidate = value2; return candidate && Is.string(candidate.name) && Is.number(candidate.kind) && Range.is(candidate.range) && Range.is(candidate.selectionRange) && (candidate.detail === void 0 || Is.string(candidate.detail)) && (candidate.deprecated === void 0 || Is.boolean(candidate.deprecated)) && (candidate.children === void 0 || Array.isArray(candidate.children)) && (candidate.tags === void 0 || Array.isArray(candidate.tags)); } __name(is2, "is"); DocumentSymbol2.is = is2; })(DocumentSymbol || (DocumentSymbol = {})); (function(CodeActionKind2) { CodeActionKind2.Empty = ""; CodeActionKind2.QuickFix = "quickfix"; CodeActionKind2.Refactor = "refactor"; CodeActionKind2.RefactorExtract = "refactor.extract"; CodeActionKind2.RefactorInline = "refactor.inline"; CodeActionKind2.RefactorRewrite = "refactor.rewrite"; CodeActionKind2.Source = "source"; CodeActionKind2.SourceOrganizeImports = "source.organizeImports"; CodeActionKind2.SourceFixAll = "source.fixAll"; })(CodeActionKind || (CodeActionKind = {})); (function(CodeActionTriggerKind2) { CodeActionTriggerKind2.Invoked = 1; CodeActionTriggerKind2.Automatic = 2; })(CodeActionTriggerKind || (CodeActionTriggerKind = {})); (function(CodeActionContext2) { function create4(diagnostics, only, triggerKind) { let result = { diagnostics }; if (only !== void 0 && only !== null) { result.only = only; } if (triggerKind !== void 0 && triggerKind !== null) { result.triggerKind = triggerKind; } return result; } __name(create4, "create"); CodeActionContext2.create = create4; function is2(value2) { let candidate = value2; return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is) && (candidate.only === void 0 || Is.typedArray(candidate.only, Is.string)) && (candidate.triggerKind === void 0 || candidate.triggerKind === CodeActionTriggerKind.Invoked || candidate.triggerKind === CodeActionTriggerKind.Automatic); } __name(is2, "is"); CodeActionContext2.is = is2; })(CodeActionContext || (CodeActionContext = {})); (function(CodeAction2) { function create4(title2, kindOrCommandOrEdit, kind) { let result = { title: title2 }; let checkKind = true; if (typeof kindOrCommandOrEdit === "string") { checkKind = false; result.kind = kindOrCommandOrEdit; } else if (Command.is(kindOrCommandOrEdit)) { result.command = kindOrCommandOrEdit; } else { result.edit = kindOrCommandOrEdit; } if (checkKind && kind !== void 0) { result.kind = kind; } return result; } __name(create4, "create"); CodeAction2.create = create4; function is2(value2) { let candidate = value2; return candidate && Is.string(candidate.title) && (candidate.diagnostics === void 0 || Is.typedArray(candidate.diagnostics, Diagnostic.is)) && (candidate.kind === void 0 || Is.string(candidate.kind)) && (candidate.edit !== void 0 || candidate.command !== void 0) && (candidate.command === void 0 || Command.is(candidate.command)) && (candidate.isPreferred === void 0 || Is.boolean(candidate.isPreferred)) && (candidate.edit === void 0 || WorkspaceEdit.is(candidate.edit)); } __name(is2, "is"); CodeAction2.is = is2; })(CodeAction || (CodeAction = {})); (function(CodeLens2) { function create4(range3, data5) { let result = { range: range3 }; if (Is.defined(data5)) { result.data = data5; } return result; } __name(create4, "create"); CodeLens2.create = create4; function is2(value2) { let candidate = value2; return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command)); } __name(is2, "is"); CodeLens2.is = is2; })(CodeLens || (CodeLens = {})); (function(FormattingOptions2) { function create4(tabSize, insertSpaces) { return { tabSize, insertSpaces }; } __name(create4, "create"); FormattingOptions2.create = create4; function is2(value2) { let candidate = value2; return Is.defined(candidate) && Is.uinteger(candidate.tabSize) && Is.boolean(candidate.insertSpaces); } __name(is2, "is"); FormattingOptions2.is = is2; })(FormattingOptions || (FormattingOptions = {})); (function(DocumentLink2) { function create4(range3, target, data5) { return { range: range3, target, data: data5 }; } __name(create4, "create"); DocumentLink2.create = create4; function is2(value2) { let candidate = value2; return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target)); } __name(is2, "is"); DocumentLink2.is = is2; })(DocumentLink || (DocumentLink = {})); (function(SelectionRange2) { function create4(range3, parent4) { return { range: range3, parent: parent4 }; } __name(create4, "create"); SelectionRange2.create = create4; function is2(value2) { let candidate = value2; return Is.objectLiteral(candidate) && Range.is(candidate.range) && (candidate.parent === void 0 || SelectionRange2.is(candidate.parent)); } __name(is2, "is"); SelectionRange2.is = is2; })(SelectionRange || (SelectionRange = {})); (function(SemanticTokenTypes2) { SemanticTokenTypes2["namespace"] = "namespace"; SemanticTokenTypes2["type"] = "type"; SemanticTokenTypes2["class"] = "class"; SemanticTokenTypes2["enum"] = "enum"; SemanticTokenTypes2["interface"] = "interface"; SemanticTokenTypes2["struct"] = "struct"; SemanticTokenTypes2["typeParameter"] = "typeParameter"; SemanticTokenTypes2["parameter"] = "parameter"; SemanticTokenTypes2["variable"] = "variable"; SemanticTokenTypes2["property"] = "property"; SemanticTokenTypes2["enumMember"] = "enumMember"; SemanticTokenTypes2["event"] = "event"; SemanticTokenTypes2["function"] = "function"; SemanticTokenTypes2["method"] = "method"; SemanticTokenTypes2["macro"] = "macro"; SemanticTokenTypes2["keyword"] = "keyword"; SemanticTokenTypes2["modifier"] = "modifier"; SemanticTokenTypes2["comment"] = "comment"; SemanticTokenTypes2["string"] = "string"; SemanticTokenTypes2["number"] = "number"; SemanticTokenTypes2["regexp"] = "regexp"; SemanticTokenTypes2["operator"] = "operator"; SemanticTokenTypes2["decorator"] = "decorator"; })(SemanticTokenTypes || (SemanticTokenTypes = {})); (function(SemanticTokenModifiers2) { SemanticTokenModifiers2["declaration"] = "declaration"; SemanticTokenModifiers2["definition"] = "definition"; SemanticTokenModifiers2["readonly"] = "readonly"; SemanticTokenModifiers2["static"] = "static"; SemanticTokenModifiers2["deprecated"] = "deprecated"; SemanticTokenModifiers2["abstract"] = "abstract"; SemanticTokenModifiers2["async"] = "async"; SemanticTokenModifiers2["modification"] = "modification"; SemanticTokenModifiers2["documentation"] = "documentation"; SemanticTokenModifiers2["defaultLibrary"] = "defaultLibrary"; })(SemanticTokenModifiers || (SemanticTokenModifiers = {})); (function(SemanticTokens2) { function is2(value2) { const candidate = value2; return Is.objectLiteral(candidate) && (candidate.resultId === void 0 || typeof candidate.resultId === "string") && Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === "number"); } __name(is2, "is"); SemanticTokens2.is = is2; })(SemanticTokens || (SemanticTokens = {})); (function(InlineValueText2) { function create4(range3, text4) { return { range: range3, text: text4 }; } __name(create4, "create"); InlineValueText2.create = create4; function is2(value2) { const candidate = value2; return candidate !== void 0 && candidate !== null && Range.is(candidate.range) && Is.string(candidate.text); } __name(is2, "is"); InlineValueText2.is = is2; })(InlineValueText || (InlineValueText = {})); (function(InlineValueVariableLookup2) { function create4(range3, variableName, caseSensitiveLookup) { return { range: range3, variableName, caseSensitiveLookup }; } __name(create4, "create"); InlineValueVariableLookup2.create = create4; function is2(value2) { const candidate = value2; return candidate !== void 0 && candidate !== null && Range.is(candidate.range) && Is.boolean(candidate.caseSensitiveLookup) && (Is.string(candidate.variableName) || candidate.variableName === void 0); } __name(is2, "is"); InlineValueVariableLookup2.is = is2; })(InlineValueVariableLookup || (InlineValueVariableLookup = {})); (function(InlineValueEvaluatableExpression2) { function create4(range3, expression) { return { range: range3, expression }; } __name(create4, "create"); InlineValueEvaluatableExpression2.create = create4; function is2(value2) { const candidate = value2; return candidate !== void 0 && candidate !== null && Range.is(candidate.range) && (Is.string(candidate.expression) || candidate.expression === void 0); } __name(is2, "is"); InlineValueEvaluatableExpression2.is = is2; })(InlineValueEvaluatableExpression || (InlineValueEvaluatableExpression = {})); (function(InlineValueContext2) { function create4(frameId, stoppedLocation) { return { frameId, stoppedLocation }; } __name(create4, "create"); InlineValueContext2.create = create4; function is2(value2) { const candidate = value2; return Is.defined(candidate) && Range.is(value2.stoppedLocation); } __name(is2, "is"); InlineValueContext2.is = is2; })(InlineValueContext || (InlineValueContext = {})); (function(InlayHintKind2) { InlayHintKind2.Type = 1; InlayHintKind2.Parameter = 2; function is2(value2) { return value2 === 1 || value2 === 2; } __name(is2, "is"); InlayHintKind2.is = is2; })(InlayHintKind || (InlayHintKind = {})); (function(InlayHintLabelPart2) { function create4(value2) { return { value: value2 }; } __name(create4, "create"); InlayHintLabelPart2.create = create4; function is2(value2) { const candidate = value2; return Is.objectLiteral(candidate) && (candidate.tooltip === void 0 || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip)) && (candidate.location === void 0 || Location.is(candidate.location)) && (candidate.command === void 0 || Command.is(candidate.command)); } __name(is2, "is"); InlayHintLabelPart2.is = is2; })(InlayHintLabelPart || (InlayHintLabelPart = {})); (function(InlayHint2) { function create4(position5, label, kind) { const result = { position: position5, label }; if (kind !== void 0) { result.kind = kind; } return result; } __name(create4, "create"); InlayHint2.create = create4; function is2(value2) { const candidate = value2; return Is.objectLiteral(candidate) && Position.is(candidate.position) && (Is.string(candidate.label) || Is.typedArray(candidate.label, InlayHintLabelPart.is)) && (candidate.kind === void 0 || InlayHintKind.is(candidate.kind)) && candidate.textEdits === void 0 || Is.typedArray(candidate.textEdits, TextEdit.is) && (candidate.tooltip === void 0 || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip)) && (candidate.paddingLeft === void 0 || Is.boolean(candidate.paddingLeft)) && (candidate.paddingRight === void 0 || Is.boolean(candidate.paddingRight)); } __name(is2, "is"); InlayHint2.is = is2; })(InlayHint || (InlayHint = {})); (function(StringValue2) { function createSnippet(value2) { return { kind: "snippet", value: value2 }; } __name(createSnippet, "createSnippet"); StringValue2.createSnippet = createSnippet; })(StringValue || (StringValue = {})); (function(InlineCompletionItem2) { function create4(insertText, filterText, range3, command) { return { insertText, filterText, range: range3, command }; } __name(create4, "create"); InlineCompletionItem2.create = create4; })(InlineCompletionItem || (InlineCompletionItem = {})); (function(InlineCompletionList2) { function create4(items) { return { items }; } __name(create4, "create"); InlineCompletionList2.create = create4; })(InlineCompletionList || (InlineCompletionList = {})); (function(InlineCompletionTriggerKind2) { InlineCompletionTriggerKind2.Invoked = 0; InlineCompletionTriggerKind2.Automatic = 1; })(InlineCompletionTriggerKind || (InlineCompletionTriggerKind = {})); (function(SelectedCompletionInfo2) { function create4(range3, text4) { return { range: range3, text: text4 }; } __name(create4, "create"); SelectedCompletionInfo2.create = create4; })(SelectedCompletionInfo || (SelectedCompletionInfo = {})); (function(InlineCompletionContext2) { function create4(triggerKind, selectedCompletionInfo) { return { triggerKind, selectedCompletionInfo }; } __name(create4, "create"); InlineCompletionContext2.create = create4; })(InlineCompletionContext || (InlineCompletionContext = {})); (function(WorkspaceFolder2) { function is2(value2) { const candidate = value2; return Is.objectLiteral(candidate) && URI.is(candidate.uri) && Is.string(candidate.name); } __name(is2, "is"); WorkspaceFolder2.is = is2; })(WorkspaceFolder || (WorkspaceFolder = {})); (function(TextDocument3) { function create4(uri, languageId, version3, content) { return new FullTextDocument(uri, languageId, version3, content); } __name(create4, "create"); TextDocument3.create = create4; function is2(value2) { let candidate = value2; return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.uinteger(candidate.lineCount) && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false; } __name(is2, "is"); TextDocument3.is = is2; function applyEdits(document2, edits) { let text4 = document2.getText(); let sortedEdits = mergeSort2(edits, (a2, b3) => { let diff2 = a2.range.start.line - b3.range.start.line; if (diff2 === 0) { return a2.range.start.character - b3.range.start.character; } return diff2; }); let lastModifiedOffset = text4.length; for (let i2 = sortedEdits.length - 1; i2 >= 0; i2--) { let e3 = sortedEdits[i2]; let startOffset = document2.offsetAt(e3.range.start); let endOffset = document2.offsetAt(e3.range.end); if (endOffset <= lastModifiedOffset) { text4 = text4.substring(0, startOffset) + e3.newText + text4.substring(endOffset, text4.length); } else { throw new Error("Overlapping edit"); } lastModifiedOffset = startOffset; } return text4; } __name(applyEdits, "applyEdits"); TextDocument3.applyEdits = applyEdits; function mergeSort2(data5, compare) { if (data5.length <= 1) { return data5; } const p3 = data5.length / 2 | 0; const left3 = data5.slice(0, p3); const right3 = data5.slice(p3); mergeSort2(left3, compare); mergeSort2(right3, compare); let leftIdx = 0; let rightIdx = 0; let i2 = 0; while (leftIdx < left3.length && rightIdx < right3.length) { let ret = compare(left3[leftIdx], right3[rightIdx]); if (ret <= 0) { data5[i2++] = left3[leftIdx++]; } else { data5[i2++] = right3[rightIdx++]; } } while (leftIdx < left3.length) { data5[i2++] = left3[leftIdx++]; } while (rightIdx < right3.length) { data5[i2++] = right3[rightIdx++]; } return data5; } __name(mergeSort2, "mergeSort"); })(TextDocument || (TextDocument = {})); FullTextDocument = class { static { __name(this, "FullTextDocument"); } constructor(uri, languageId, version3, content) { this._uri = uri; this._languageId = languageId; this._version = version3; this._content = content; this._lineOffsets = void 0; } get uri() { return this._uri; } get languageId() { return this._languageId; } get version() { return this._version; } getText(range3) { if (range3) { let start3 = this.offsetAt(range3.start); let end2 = this.offsetAt(range3.end); return this._content.substring(start3, end2); } return this._content; } update(event3, version3) { this._content = event3.text; this._version = version3; this._lineOffsets = void 0; } getLineOffsets() { if (this._lineOffsets === void 0) { let lineOffsets = []; let text4 = this._content; let isLineStart = true; for (let i2 = 0; i2 < text4.length; i2++) { if (isLineStart) { lineOffsets.push(i2); isLineStart = false; } let ch = text4.charAt(i2); isLineStart = ch === "\r" || ch === "\n"; if (ch === "\r" && i2 + 1 < text4.length && text4.charAt(i2 + 1) === "\n") { i2++; } } if (isLineStart && text4.length > 0) { lineOffsets.push(text4.length); } this._lineOffsets = lineOffsets; } return this._lineOffsets; } positionAt(offset) { offset = Math.max(Math.min(offset, this._content.length), 0); let lineOffsets = this.getLineOffsets(); let low = 0, high = lineOffsets.length; if (high === 0) { return Position.create(0, offset); } while (low < high) { let mid = Math.floor((low + high) / 2); if (lineOffsets[mid] > offset) { high = mid; } else { low = mid + 1; } } let line2 = low - 1; return Position.create(line2, offset - lineOffsets[line2]); } offsetAt(position5) { let lineOffsets = this.getLineOffsets(); if (position5.line >= lineOffsets.length) { return this._content.length; } else if (position5.line < 0) { return 0; } let lineOffset = lineOffsets[position5.line]; let nextLineOffset = position5.line + 1 < lineOffsets.length ? lineOffsets[position5.line + 1] : this._content.length; return Math.max(Math.min(lineOffset + position5.character, nextLineOffset), lineOffset); } get lineCount() { return this.getLineOffsets().length; } }; (function(Is2) { const toString6 = Object.prototype.toString; function defined(value2) { return typeof value2 !== "undefined"; } __name(defined, "defined"); Is2.defined = defined; function undefined2(value2) { return typeof value2 === "undefined"; } __name(undefined2, "undefined"); Is2.undefined = undefined2; function boolean(value2) { return value2 === true || value2 === false; } __name(boolean, "boolean"); Is2.boolean = boolean; function string3(value2) { return toString6.call(value2) === "[object String]"; } __name(string3, "string"); Is2.string = string3; function number7(value2) { return toString6.call(value2) === "[object Number]"; } __name(number7, "number"); Is2.number = number7; function numberRange(value2, min9, max10) { return toString6.call(value2) === "[object Number]" && min9 <= value2 && value2 <= max10; } __name(numberRange, "numberRange"); Is2.numberRange = numberRange; function integer4(value2) { return toString6.call(value2) === "[object Number]" && -2147483648 <= value2 && value2 <= 2147483647; } __name(integer4, "integer"); Is2.integer = integer4; function uinteger2(value2) { return toString6.call(value2) === "[object Number]" && 0 <= value2 && value2 <= 2147483647; } __name(uinteger2, "uinteger"); Is2.uinteger = uinteger2; function func(value2) { return toString6.call(value2) === "[object Function]"; } __name(func, "func"); Is2.func = func; function objectLiteral(value2) { return value2 !== null && typeof value2 === "object"; } __name(objectLiteral, "objectLiteral"); Is2.objectLiteral = objectLiteral; function typedArray(value2, check) { return Array.isArray(value2) && value2.every(check); } __name(typedArray, "typedArray"); Is2.typedArray = typedArray; })(Is || (Is = {})); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/cst-node-builder.js var CstNodeBuilder, AbstractCstNode, LeafCstNodeImpl, CompositeCstNodeImpl, CstNodeContainer, RootCstNodeImpl; var init_cst_node_builder = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/cst-node-builder.js"() { "use strict"; init_main(); init_cst_utils(); CstNodeBuilder = class { static { __name(this, "CstNodeBuilder"); } constructor() { this.nodeStack = []; } get current() { var _a; return (_a = this.nodeStack[this.nodeStack.length - 1]) !== null && _a !== void 0 ? _a : this.rootNode; } buildRootNode(input) { this.rootNode = new RootCstNodeImpl(input); this.rootNode.root = this.rootNode; this.nodeStack = [this.rootNode]; return this.rootNode; } buildCompositeNode(feature) { const compositeNode = new CompositeCstNodeImpl(); compositeNode.grammarSource = feature; compositeNode.root = this.rootNode; this.current.content.push(compositeNode); this.nodeStack.push(compositeNode); return compositeNode; } buildLeafNode(token2, feature) { const leafNode = new LeafCstNodeImpl(token2.startOffset, token2.image.length, tokenToRange(token2), token2.tokenType, !feature); leafNode.grammarSource = feature; leafNode.root = this.rootNode; this.current.content.push(leafNode); return leafNode; } removeNode(node2) { const parent4 = node2.container; if (parent4) { const index = parent4.content.indexOf(node2); if (index >= 0) { parent4.content.splice(index, 1); } } } addHiddenNodes(tokens2) { const nodes5 = []; for (const token2 of tokens2) { const leafNode = new LeafCstNodeImpl(token2.startOffset, token2.image.length, tokenToRange(token2), token2.tokenType, true); leafNode.root = this.rootNode; nodes5.push(leafNode); } let current = this.current; let added = false; if (current.content.length > 0) { current.content.push(...nodes5); return; } while (current.container) { const index = current.container.content.indexOf(current); if (index > 0) { current.container.content.splice(index, 0, ...nodes5); added = true; break; } current = current.container; } if (!added) { this.rootNode.content.unshift(...nodes5); } } construct(item) { const current = this.current; if (typeof item.$type === "string") { this.current.astNode = item; } item.$cstNode = current; const node2 = this.nodeStack.pop(); if ((node2 === null || node2 === void 0 ? void 0 : node2.content.length) === 0) { this.removeNode(node2); } } }; AbstractCstNode = class { static { __name(this, "AbstractCstNode"); } /** @deprecated use `container` instead. */ get parent() { return this.container; } /** @deprecated use `grammarSource` instead. */ get feature() { return this.grammarSource; } get hidden() { return false; } get astNode() { var _a, _b; const node2 = typeof ((_a = this._astNode) === null || _a === void 0 ? void 0 : _a.$type) === "string" ? this._astNode : (_b = this.container) === null || _b === void 0 ? void 0 : _b.astNode; if (!node2) { throw new Error("This node has no associated AST element"); } return node2; } set astNode(value2) { this._astNode = value2; } /** @deprecated use `astNode` instead. */ get element() { return this.astNode; } get text() { return this.root.fullText.substring(this.offset, this.end); } }; LeafCstNodeImpl = class extends AbstractCstNode { static { __name(this, "LeafCstNodeImpl"); } get offset() { return this._offset; } get length() { return this._length; } get end() { return this._offset + this._length; } get hidden() { return this._hidden; } get tokenType() { return this._tokenType; } get range() { return this._range; } constructor(offset, length2, range3, tokenType, hidden = false) { super(); this._hidden = hidden; this._offset = offset; this._tokenType = tokenType; this._length = length2; this._range = range3; } }; CompositeCstNodeImpl = class extends AbstractCstNode { static { __name(this, "CompositeCstNodeImpl"); } constructor() { super(...arguments); this.content = new CstNodeContainer(this); } /** @deprecated use `content` instead. */ get children() { return this.content; } get offset() { var _a, _b; return (_b = (_a = this.firstNonHiddenNode) === null || _a === void 0 ? void 0 : _a.offset) !== null && _b !== void 0 ? _b : 0; } get length() { return this.end - this.offset; } get end() { var _a, _b; return (_b = (_a = this.lastNonHiddenNode) === null || _a === void 0 ? void 0 : _a.end) !== null && _b !== void 0 ? _b : 0; } get range() { const firstNode = this.firstNonHiddenNode; const lastNode = this.lastNonHiddenNode; if (firstNode && lastNode) { if (this._rangeCache === void 0) { const { range: firstRange } = firstNode; const { range: lastRange } = lastNode; this._rangeCache = { start: firstRange.start, end: lastRange.end.line < firstRange.start.line ? firstRange.start : lastRange.end }; } return this._rangeCache; } else { return { start: Position.create(0, 0), end: Position.create(0, 0) }; } } get firstNonHiddenNode() { for (const child of this.content) { if (!child.hidden) { return child; } } return this.content[0]; } get lastNonHiddenNode() { for (let i2 = this.content.length - 1; i2 >= 0; i2--) { const child = this.content[i2]; if (!child.hidden) { return child; } } return this.content[this.content.length - 1]; } }; CstNodeContainer = class _CstNodeContainer extends Array { static { __name(this, "CstNodeContainer"); } constructor(parent4) { super(); this.parent = parent4; Object.setPrototypeOf(this, _CstNodeContainer.prototype); } push(...items) { this.addParents(items); return super.push(...items); } unshift(...items) { this.addParents(items); return super.unshift(...items); } splice(start3, count2, ...items) { this.addParents(items); return super.splice(start3, count2, ...items); } addParents(items) { for (const item of items) { item.container = this.parent; } } }; RootCstNodeImpl = class extends CompositeCstNodeImpl { static { __name(this, "RootCstNodeImpl"); } get text() { return this._text.substring(this.offset, this.end); } get fullText() { return this._text; } constructor(input) { super(); this._text = ""; this._text = input !== null && input !== void 0 ? input : ""; } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/langium-parser.js function isDataTypeNode(node2) { return node2.$type === DatatypeSymbol; } var DatatypeSymbol, ruleSuffix, withRuleSuffix, AbstractLangiumParser, LangiumParser, AbstractParserErrorMessageProvider, LangiumParserErrorMessageProvider, LangiumCompletionParser, defaultConfig3, ChevrotainWrapper; var init_langium_parser = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/langium-parser.js"() { "use strict"; init_api5(); init_lib2(); init_ast(); init_grammar_utils(); init_ast_utils(); init_cst_node_builder(); DatatypeSymbol = Symbol("Datatype"); __name(isDataTypeNode, "isDataTypeNode"); ruleSuffix = "\u200B"; withRuleSuffix = /* @__PURE__ */ __name((name) => name.endsWith(ruleSuffix) ? name : name + ruleSuffix, "withRuleSuffix"); AbstractLangiumParser = class { static { __name(this, "AbstractLangiumParser"); } constructor(services) { this._unorderedGroups = /* @__PURE__ */ new Map(); this.allRules = /* @__PURE__ */ new Map(); this.lexer = services.parser.Lexer; const tokens2 = this.lexer.definition; const production = services.LanguageMetaData.mode === "production"; this.wrapper = new ChevrotainWrapper(tokens2, Object.assign(Object.assign({}, services.parser.ParserConfig), { skipValidations: production, errorMessageProvider: services.parser.ParserErrorMessageProvider })); } alternatives(idx, choices) { this.wrapper.wrapOr(idx, choices); } optional(idx, callback) { this.wrapper.wrapOption(idx, callback); } many(idx, callback) { this.wrapper.wrapMany(idx, callback); } atLeastOne(idx, callback) { this.wrapper.wrapAtLeastOne(idx, callback); } getRule(name) { return this.allRules.get(name); } isRecording() { return this.wrapper.IS_RECORDING; } get unorderedGroups() { return this._unorderedGroups; } getRuleStack() { return this.wrapper.RULE_STACK; } finalize() { this.wrapper.wrapSelfAnalysis(); } }; LangiumParser = class extends AbstractLangiumParser { static { __name(this, "LangiumParser"); } get current() { return this.stack[this.stack.length - 1]; } constructor(services) { super(services); this.nodeBuilder = new CstNodeBuilder(); this.stack = []; this.assignmentMap = /* @__PURE__ */ new Map(); this.linker = services.references.Linker; this.converter = services.parser.ValueConverter; this.astReflection = services.shared.AstReflection; } rule(rule, impl2) { const type3 = this.computeRuleType(rule); const ruleMethod = this.wrapper.DEFINE_RULE(withRuleSuffix(rule.name), this.startImplementation(type3, impl2).bind(this)); this.allRules.set(rule.name, ruleMethod); if (rule.entry) { this.mainRule = ruleMethod; } return ruleMethod; } computeRuleType(rule) { if (rule.fragment) { return void 0; } else if (isDataTypeRule(rule)) { return DatatypeSymbol; } else { const explicit = getExplicitRuleType(rule); return explicit !== null && explicit !== void 0 ? explicit : rule.name; } } parse(input, options2 = {}) { this.nodeBuilder.buildRootNode(input); const lexerResult = this.lexerResult = this.lexer.tokenize(input); this.wrapper.input = lexerResult.tokens; const ruleMethod = options2.rule ? this.allRules.get(options2.rule) : this.mainRule; if (!ruleMethod) { throw new Error(options2.rule ? `No rule found with name '${options2.rule}'` : "No main rule available."); } const result = ruleMethod.call(this.wrapper, {}); this.nodeBuilder.addHiddenNodes(lexerResult.hidden); this.unorderedGroups.clear(); this.lexerResult = void 0; return { value: result, lexerErrors: lexerResult.errors, lexerReport: lexerResult.report, parserErrors: this.wrapper.errors }; } startImplementation($type, implementation) { return (args) => { const createNode = !this.isRecording() && $type !== void 0; if (createNode) { const node2 = { $type }; this.stack.push(node2); if ($type === DatatypeSymbol) { node2.value = ""; } } let result; try { result = implementation(args); } catch (err) { result = void 0; } if (result === void 0 && createNode) { result = this.construct(); } return result; }; } extractHiddenTokens(token2) { const hiddenTokens = this.lexerResult.hidden; if (!hiddenTokens.length) { return []; } const offset = token2.startOffset; for (let i2 = 0; i2 < hiddenTokens.length; i2++) { const token3 = hiddenTokens[i2]; if (token3.startOffset > offset) { return hiddenTokens.splice(0, i2); } } return hiddenTokens.splice(0, hiddenTokens.length); } consume(idx, tokenType, feature) { const token2 = this.wrapper.wrapConsume(idx, tokenType); if (!this.isRecording() && this.isValidToken(token2)) { const hiddenTokens = this.extractHiddenTokens(token2); this.nodeBuilder.addHiddenNodes(hiddenTokens); const leafNode = this.nodeBuilder.buildLeafNode(token2, feature); const { assignment, isCrossRef } = this.getAssignment(feature); const current = this.current; if (assignment) { const convertedValue = isKeyword(feature) ? token2.image : this.converter.convert(token2.image, leafNode); this.assign(assignment.operator, assignment.feature, convertedValue, leafNode, isCrossRef); } else if (isDataTypeNode(current)) { let text4 = token2.image; if (!isKeyword(feature)) { text4 = this.converter.convert(text4, leafNode).toString(); } current.value += text4; } } } /** * Most consumed parser tokens are valid. However there are two cases in which they are not valid: * * 1. They were inserted during error recovery by the parser. These tokens don't really exist and should not be further processed * 2. They contain invalid token ranges. This might include the special EOF token, or other tokens produced by invalid token builders. */ isValidToken(token2) { return !token2.isInsertedInRecovery && !isNaN(token2.startOffset) && typeof token2.endOffset === "number" && !isNaN(token2.endOffset); } subrule(idx, rule, fragment, feature, args) { let cstNode; if (!this.isRecording() && !fragment) { cstNode = this.nodeBuilder.buildCompositeNode(feature); } const subruleResult = this.wrapper.wrapSubrule(idx, rule, args); if (!this.isRecording() && cstNode && cstNode.length > 0) { this.performSubruleAssignment(subruleResult, feature, cstNode); } } performSubruleAssignment(result, feature, cstNode) { const { assignment, isCrossRef } = this.getAssignment(feature); if (assignment) { this.assign(assignment.operator, assignment.feature, result, cstNode, isCrossRef); } else if (!assignment) { const current = this.current; if (isDataTypeNode(current)) { current.value += result.toString(); } else if (typeof result === "object" && result) { const object3 = this.assignWithoutOverride(result, current); const newItem = object3; this.stack.pop(); this.stack.push(newItem); } } } action($type, action) { if (!this.isRecording()) { let last3 = this.current; if (action.feature && action.operator) { last3 = this.construct(); this.nodeBuilder.removeNode(last3.$cstNode); const node2 = this.nodeBuilder.buildCompositeNode(action); node2.content.push(last3.$cstNode); const newItem = { $type }; this.stack.push(newItem); this.assign(action.operator, action.feature, last3, last3.$cstNode, false); } else { last3.$type = $type; } } } construct() { if (this.isRecording()) { return void 0; } const obj = this.current; linkContentToContainer(obj); this.nodeBuilder.construct(obj); this.stack.pop(); if (isDataTypeNode(obj)) { return this.converter.convert(obj.value, obj.$cstNode); } else { assignMandatoryProperties(this.astReflection, obj); } return obj; } getAssignment(feature) { if (!this.assignmentMap.has(feature)) { const assignment = getContainerOfType(feature, isAssignment); this.assignmentMap.set(feature, { assignment, isCrossRef: assignment ? isCrossReference(assignment.terminal) : false }); } return this.assignmentMap.get(feature); } assign(operator, feature, value2, cstNode, isCrossRef) { const obj = this.current; let item; if (isCrossRef && typeof value2 === "string") { item = this.linker.buildReference(obj, feature, cstNode, value2); } else { item = value2; } switch (operator) { case "=": { obj[feature] = item; break; } case "?=": { obj[feature] = true; break; } case "+=": { if (!Array.isArray(obj[feature])) { obj[feature] = []; } obj[feature].push(item); } } } assignWithoutOverride(target, source) { for (const [name, existingValue] of Object.entries(source)) { const newValue = target[name]; if (newValue === void 0) { target[name] = existingValue; } else if (Array.isArray(newValue) && Array.isArray(existingValue)) { existingValue.push(...newValue); target[name] = existingValue; } } const targetCstNode = target.$cstNode; if (targetCstNode) { targetCstNode.astNode = void 0; target.$cstNode = void 0; } return target; } get definitionErrors() { return this.wrapper.definitionErrors; } }; AbstractParserErrorMessageProvider = class { static { __name(this, "AbstractParserErrorMessageProvider"); } buildMismatchTokenMessage(options2) { return defaultParserErrorProvider.buildMismatchTokenMessage(options2); } buildNotAllInputParsedMessage(options2) { return defaultParserErrorProvider.buildNotAllInputParsedMessage(options2); } buildNoViableAltMessage(options2) { return defaultParserErrorProvider.buildNoViableAltMessage(options2); } buildEarlyExitMessage(options2) { return defaultParserErrorProvider.buildEarlyExitMessage(options2); } }; LangiumParserErrorMessageProvider = class extends AbstractParserErrorMessageProvider { static { __name(this, "LangiumParserErrorMessageProvider"); } buildMismatchTokenMessage({ expected, actual }) { const expectedMsg = expected.LABEL ? "`" + expected.LABEL + "`" : expected.name.endsWith(":KW") ? `keyword '${expected.name.substring(0, expected.name.length - 3)}'` : `token of type '${expected.name}'`; return `Expecting ${expectedMsg} but found \`${actual.image}\`.`; } buildNotAllInputParsedMessage({ firstRedundant }) { return `Expecting end of file but found \`${firstRedundant.image}\`.`; } }; LangiumCompletionParser = class extends AbstractLangiumParser { static { __name(this, "LangiumCompletionParser"); } constructor() { super(...arguments); this.tokens = []; this.elementStack = []; this.lastElementStack = []; this.nextTokenIndex = 0; this.stackSize = 0; } action() { } construct() { return void 0; } parse(input) { this.resetState(); const tokens2 = this.lexer.tokenize(input, { mode: "partial" }); this.tokens = tokens2.tokens; this.wrapper.input = [...this.tokens]; this.mainRule.call(this.wrapper, {}); this.unorderedGroups.clear(); return { tokens: this.tokens, elementStack: [...this.lastElementStack], tokenIndex: this.nextTokenIndex }; } rule(rule, impl2) { const ruleMethod = this.wrapper.DEFINE_RULE(withRuleSuffix(rule.name), this.startImplementation(impl2).bind(this)); this.allRules.set(rule.name, ruleMethod); if (rule.entry) { this.mainRule = ruleMethod; } return ruleMethod; } resetState() { this.elementStack = []; this.lastElementStack = []; this.nextTokenIndex = 0; this.stackSize = 0; } startImplementation(implementation) { return (args) => { const size4 = this.keepStackSize(); try { implementation(args); } finally { this.resetStackSize(size4); } }; } removeUnexpectedElements() { this.elementStack.splice(this.stackSize); } keepStackSize() { const size4 = this.elementStack.length; this.stackSize = size4; return size4; } resetStackSize(size4) { this.removeUnexpectedElements(); this.stackSize = size4; } consume(idx, tokenType, feature) { this.wrapper.wrapConsume(idx, tokenType); if (!this.isRecording()) { this.lastElementStack = [...this.elementStack, feature]; this.nextTokenIndex = this.currIdx + 1; } } subrule(idx, rule, fragment, feature, args) { this.before(feature); this.wrapper.wrapSubrule(idx, rule, args); this.after(feature); } before(element3) { if (!this.isRecording()) { this.elementStack.push(element3); } } after(element3) { if (!this.isRecording()) { const index = this.elementStack.lastIndexOf(element3); if (index >= 0) { this.elementStack.splice(index); } } } get currIdx() { return this.wrapper.currIdx; } }; defaultConfig3 = { recoveryEnabled: true, nodeLocationTracking: "full", skipValidations: true, errorMessageProvider: new LangiumParserErrorMessageProvider() }; ChevrotainWrapper = class extends EmbeddedActionsParser { static { __name(this, "ChevrotainWrapper"); } constructor(tokens2, config5) { const useDefaultLookahead = config5 && "maxLookahead" in config5; super(tokens2, Object.assign(Object.assign(Object.assign({}, defaultConfig3), { lookaheadStrategy: useDefaultLookahead ? new LLkLookaheadStrategy({ maxLookahead: config5.maxLookahead }) : new LLStarLookaheadStrategy({ // If validations are skipped, don't log the lookahead warnings logging: config5.skipValidations ? () => { } : void 0 }) }), config5)); } get IS_RECORDING() { return this.RECORDING_PHASE; } DEFINE_RULE(name, impl2) { return this.RULE(name, impl2); } wrapSelfAnalysis() { this.performSelfAnalysis(); } wrapConsume(idx, tokenType) { return this.consume(idx, tokenType); } wrapSubrule(idx, rule, args) { return this.subrule(idx, rule, { ARGS: [args] }); } wrapOr(idx, choices) { this.or(idx, choices); } wrapOption(idx, callback) { this.option(idx, callback); } wrapMany(idx, callback) { this.many(idx, callback); } wrapAtLeastOne(idx, callback) { this.atLeastOne(idx, callback); } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/parser-builder-base.js function createParser(grammar, parser24, tokens2) { const parserContext = { parser: parser24, tokens: tokens2, ruleNames: /* @__PURE__ */ new Map() }; buildRules(parserContext, grammar); return parser24; } function buildRules(parserContext, grammar) { const reachable = getAllReachableRules(grammar, false); const parserRules = stream(grammar.rules).filter(isParserRule).filter((rule) => reachable.has(rule)); for (const rule of parserRules) { const ctx = Object.assign(Object.assign({}, parserContext), { consume: 1, optional: 1, subrule: 1, many: 1, or: 1 }); parserContext.parser.rule(rule, buildElement(ctx, rule.definition)); } } function buildElement(ctx, element3, ignoreGuard = false) { let method; if (isKeyword(element3)) { method = buildKeyword(ctx, element3); } else if (isAction(element3)) { method = buildAction(ctx, element3); } else if (isAssignment(element3)) { method = buildElement(ctx, element3.terminal); } else if (isCrossReference(element3)) { method = buildCrossReference(ctx, element3); } else if (isRuleCall(element3)) { method = buildRuleCall(ctx, element3); } else if (isAlternatives(element3)) { method = buildAlternatives(ctx, element3); } else if (isUnorderedGroup(element3)) { method = buildUnorderedGroup(ctx, element3); } else if (isGroup(element3)) { method = buildGroup4(ctx, element3); } else if (isEndOfFile(element3)) { const idx = ctx.consume++; method = /* @__PURE__ */ __name(() => ctx.parser.consume(idx, EOF, element3), "method"); } else { throw new ErrorWithLocation(element3.$cstNode, `Unexpected element type: ${element3.$type}`); } return wrap(ctx, ignoreGuard ? void 0 : getGuardCondition(element3), method, element3.cardinality); } function buildAction(ctx, action) { const actionType = getTypeName(action); return () => ctx.parser.action(actionType, action); } function buildRuleCall(ctx, ruleCall) { const rule = ruleCall.rule.ref; if (isParserRule(rule)) { const idx = ctx.subrule++; const fragment = rule.fragment; const predicate = ruleCall.arguments.length > 0 ? buildRuleCallPredicate(rule, ruleCall.arguments) : () => ({}); return (args) => ctx.parser.subrule(idx, getRule(ctx, rule), fragment, ruleCall, predicate(args)); } else if (isTerminalRule(rule)) { const idx = ctx.consume++; const method = getToken(ctx, rule.name); return () => ctx.parser.consume(idx, method, ruleCall); } else if (!rule) { throw new ErrorWithLocation(ruleCall.$cstNode, `Undefined rule: ${ruleCall.rule.$refText}`); } else { assertUnreachable(rule); } } function buildRuleCallPredicate(rule, namedArgs) { const predicates = namedArgs.map((e3) => buildPredicate(e3.value)); return (args) => { const ruleArgs = {}; for (let i2 = 0; i2 < predicates.length; i2++) { const ruleTarget = rule.parameters[i2]; const predicate = predicates[i2]; ruleArgs[ruleTarget.name] = predicate(args); } return ruleArgs; }; } function buildPredicate(condition) { if (isDisjunction(condition)) { const left3 = buildPredicate(condition.left); const right3 = buildPredicate(condition.right); return (args) => left3(args) || right3(args); } else if (isConjunction(condition)) { const left3 = buildPredicate(condition.left); const right3 = buildPredicate(condition.right); return (args) => left3(args) && right3(args); } else if (isNegation(condition)) { const value2 = buildPredicate(condition.value); return (args) => !value2(args); } else if (isParameterReference(condition)) { const name = condition.parameter.ref.name; return (args) => args !== void 0 && args[name] === true; } else if (isBooleanLiteral(condition)) { const value2 = Boolean(condition.true); return () => value2; } assertUnreachable(condition); } function buildAlternatives(ctx, alternatives) { if (alternatives.elements.length === 1) { return buildElement(ctx, alternatives.elements[0]); } else { const methods = []; for (const element3 of alternatives.elements) { const predicatedMethod = { // Since we handle the guard condition in the alternative already // We can ignore the group guard condition inside ALT: buildElement(ctx, element3, true) }; const guard = getGuardCondition(element3); if (guard) { predicatedMethod.GATE = buildPredicate(guard); } methods.push(predicatedMethod); } const idx = ctx.or++; return (args) => ctx.parser.alternatives(idx, methods.map((method) => { const alt = { ALT: /* @__PURE__ */ __name(() => method.ALT(args), "ALT") }; const gate = method.GATE; if (gate) { alt.GATE = () => gate(args); } return alt; })); } } function buildUnorderedGroup(ctx, group2) { if (group2.elements.length === 1) { return buildElement(ctx, group2.elements[0]); } const methods = []; for (const element3 of group2.elements) { const predicatedMethod = { // Since we handle the guard condition in the alternative already // We can ignore the group guard condition inside ALT: buildElement(ctx, element3, true) }; const guard = getGuardCondition(element3); if (guard) { predicatedMethod.GATE = buildPredicate(guard); } methods.push(predicatedMethod); } const orIdx = ctx.or++; const idFunc = /* @__PURE__ */ __name((groupIdx, lParser) => { const stackId = lParser.getRuleStack().join("-"); return `uGroup_${groupIdx}_${stackId}`; }, "idFunc"); const alternatives = /* @__PURE__ */ __name((args) => ctx.parser.alternatives(orIdx, methods.map((method, idx) => { const alt = { ALT: /* @__PURE__ */ __name(() => true, "ALT") }; const parser24 = ctx.parser; alt.ALT = () => { method.ALT(args); if (!parser24.isRecording()) { const key = idFunc(orIdx, parser24); if (!parser24.unorderedGroups.get(key)) { parser24.unorderedGroups.set(key, []); } const groupState = parser24.unorderedGroups.get(key); if (typeof (groupState === null || groupState === void 0 ? void 0 : groupState[idx]) === "undefined") { groupState[idx] = true; } } }; const gate = method.GATE; if (gate) { alt.GATE = () => gate(args); } else { alt.GATE = () => { const trackedAlternatives = parser24.unorderedGroups.get(idFunc(orIdx, parser24)); const allow = !(trackedAlternatives === null || trackedAlternatives === void 0 ? void 0 : trackedAlternatives[idx]); return allow; }; } return alt; })), "alternatives"); const wrapped = wrap(ctx, getGuardCondition(group2), alternatives, "*"); return (args) => { wrapped(args); if (!ctx.parser.isRecording()) { ctx.parser.unorderedGroups.delete(idFunc(orIdx, ctx.parser)); } }; } function buildGroup4(ctx, group2) { const methods = group2.elements.map((e3) => buildElement(ctx, e3)); return (args) => methods.forEach((method) => method(args)); } function getGuardCondition(element3) { if (isGroup(element3)) { return element3.guardCondition; } return void 0; } function buildCrossReference(ctx, crossRef, terminal = crossRef.terminal) { if (!terminal) { if (!crossRef.type.ref) { throw new Error("Could not resolve reference to type: " + crossRef.type.$refText); } const assignment = findNameAssignment(crossRef.type.ref); const assignTerminal = assignment === null || assignment === void 0 ? void 0 : assignment.terminal; if (!assignTerminal) { throw new Error("Could not find name assignment for type: " + getTypeName(crossRef.type.ref)); } return buildCrossReference(ctx, crossRef, assignTerminal); } else if (isRuleCall(terminal) && isParserRule(terminal.rule.ref)) { const rule = terminal.rule.ref; const idx = ctx.subrule++; return (args) => ctx.parser.subrule(idx, getRule(ctx, rule), false, crossRef, args); } else if (isRuleCall(terminal) && isTerminalRule(terminal.rule.ref)) { const idx = ctx.consume++; const terminalRule = getToken(ctx, terminal.rule.ref.name); return () => ctx.parser.consume(idx, terminalRule, crossRef); } else if (isKeyword(terminal)) { const idx = ctx.consume++; const keyword = getToken(ctx, terminal.value); return () => ctx.parser.consume(idx, keyword, crossRef); } else { throw new Error("Could not build cross reference parser"); } } function buildKeyword(ctx, keyword) { const idx = ctx.consume++; const token2 = ctx.tokens[keyword.value]; if (!token2) { throw new Error("Could not find token for keyword: " + keyword.value); } return () => ctx.parser.consume(idx, token2, keyword); } function wrap(ctx, guard, method, cardinality) { const gate = guard && buildPredicate(guard); if (!cardinality) { if (gate) { const idx = ctx.or++; return (args) => ctx.parser.alternatives(idx, [ { ALT: /* @__PURE__ */ __name(() => method(args), "ALT"), GATE: /* @__PURE__ */ __name(() => gate(args), "GATE") }, { ALT: EMPTY_ALT(), GATE: /* @__PURE__ */ __name(() => !gate(args), "GATE") } ]); } else { return method; } } if (cardinality === "*") { const idx = ctx.many++; return (args) => ctx.parser.many(idx, { DEF: /* @__PURE__ */ __name(() => method(args), "DEF"), GATE: gate ? () => gate(args) : void 0 }); } else if (cardinality === "+") { const idx = ctx.many++; if (gate) { const orIdx = ctx.or++; return (args) => ctx.parser.alternatives(orIdx, [ { ALT: /* @__PURE__ */ __name(() => ctx.parser.atLeastOne(idx, { DEF: /* @__PURE__ */ __name(() => method(args), "DEF") }), "ALT"), GATE: /* @__PURE__ */ __name(() => gate(args), "GATE") }, { ALT: EMPTY_ALT(), GATE: /* @__PURE__ */ __name(() => !gate(args), "GATE") } ]); } else { return (args) => ctx.parser.atLeastOne(idx, { DEF: /* @__PURE__ */ __name(() => method(args), "DEF") }); } } else if (cardinality === "?") { const idx = ctx.optional++; return (args) => ctx.parser.optional(idx, { DEF: /* @__PURE__ */ __name(() => method(args), "DEF"), GATE: gate ? () => gate(args) : void 0 }); } else { assertUnreachable(cardinality); } } function getRule(ctx, element3) { const name = getRuleName(ctx, element3); const rule = ctx.parser.getRule(name); if (!rule) throw new Error(`Rule "${name}" not found."`); return rule; } function getRuleName(ctx, element3) { if (isParserRule(element3)) { return element3.name; } else if (ctx.ruleNames.has(element3)) { return ctx.ruleNames.get(element3); } else { let item = element3; let parent4 = item.$container; let ruleName = element3.$type; while (!isParserRule(parent4)) { if (isGroup(parent4) || isAlternatives(parent4) || isUnorderedGroup(parent4)) { const index = parent4.elements.indexOf(item); ruleName = index.toString() + ":" + ruleName; } item = parent4; parent4 = parent4.$container; } const rule = parent4; ruleName = rule.name + ":" + ruleName; ctx.ruleNames.set(element3, ruleName); return ruleName; } } function getToken(ctx, name) { const token2 = ctx.tokens[name]; if (!token2) throw new Error(`Token "${name}" not found."`); return token2; } var init_parser_builder_base = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/parser-builder-base.js"() { "use strict"; init_api5(); init_ast(); init_errors2(); init_stream(); init_grammar_utils(); __name(createParser, "createParser"); __name(buildRules, "buildRules"); __name(buildElement, "buildElement"); __name(buildAction, "buildAction"); __name(buildRuleCall, "buildRuleCall"); __name(buildRuleCallPredicate, "buildRuleCallPredicate"); __name(buildPredicate, "buildPredicate"); __name(buildAlternatives, "buildAlternatives"); __name(buildUnorderedGroup, "buildUnorderedGroup"); __name(buildGroup4, "buildGroup"); __name(getGuardCondition, "getGuardCondition"); __name(buildCrossReference, "buildCrossReference"); __name(buildKeyword, "buildKeyword"); __name(wrap, "wrap"); __name(getRule, "getRule"); __name(getRuleName, "getRuleName"); __name(getToken, "getToken"); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/completion-parser-builder.js function createCompletionParser(services) { const grammar = services.Grammar; const lexer = services.parser.Lexer; const parser24 = new LangiumCompletionParser(services); createParser(grammar, parser24, lexer.definition); parser24.finalize(); return parser24; } var init_completion_parser_builder = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/completion-parser-builder.js"() { "use strict"; init_langium_parser(); init_parser_builder_base(); __name(createCompletionParser, "createCompletionParser"); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/langium-parser-builder.js function createLangiumParser(services) { const parser24 = prepareLangiumParser(services); parser24.finalize(); return parser24; } function prepareLangiumParser(services) { const grammar = services.Grammar; const lexer = services.parser.Lexer; const parser24 = new LangiumParser(services); return createParser(grammar, parser24, lexer.definition); } var init_langium_parser_builder = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/langium-parser-builder.js"() { "use strict"; init_langium_parser(); init_parser_builder_base(); __name(createLangiumParser, "createLangiumParser"); __name(prepareLangiumParser, "prepareLangiumParser"); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/token-builder.js var DefaultTokenBuilder; var init_token_builder = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/token-builder.js"() { "use strict"; init_api5(); init_ast(); init_ast_utils(); init_grammar_utils(); init_regexp_utils(); init_stream(); DefaultTokenBuilder = class { static { __name(this, "DefaultTokenBuilder"); } constructor() { this.diagnostics = []; } buildTokens(grammar, options2) { const reachableRules = stream(getAllReachableRules(grammar, false)); const terminalTokens = this.buildTerminalTokens(reachableRules); const tokens2 = this.buildKeywordTokens(reachableRules, terminalTokens, options2); terminalTokens.forEach((terminalToken) => { const pattern = terminalToken.PATTERN; if (typeof pattern === "object" && pattern && "test" in pattern && isWhitespace2(pattern)) { tokens2.unshift(terminalToken); } else { tokens2.push(terminalToken); } }); return tokens2; } // eslint-disable-next-line @typescript-eslint/no-unused-vars flushLexingReport(text4) { return { diagnostics: this.popDiagnostics() }; } popDiagnostics() { const diagnostics = [...this.diagnostics]; this.diagnostics = []; return diagnostics; } buildTerminalTokens(rules) { return rules.filter(isTerminalRule).filter((e3) => !e3.fragment).map((terminal) => this.buildTerminalToken(terminal)).toArray(); } buildTerminalToken(terminal) { const regex2 = terminalRegex(terminal); const pattern = this.requiresCustomPattern(regex2) ? this.regexPatternFunction(regex2) : regex2; const tokenType = { name: terminal.name, PATTERN: pattern }; if (typeof pattern === "function") { tokenType.LINE_BREAKS = true; } if (terminal.hidden) { tokenType.GROUP = isWhitespace2(regex2) ? Lexer2.SKIPPED : "hidden"; } return tokenType; } requiresCustomPattern(regex2) { if (regex2.flags.includes("u") || regex2.flags.includes("s")) { return true; } else if (regex2.source.includes("?<=") || regex2.source.includes("? { stickyRegex.lastIndex = offset; const execResult = stickyRegex.exec(text4); return execResult; }; } buildKeywordTokens(rules, terminalTokens, options2) { return rules.filter(isParserRule).flatMap((rule) => streamAllContents(rule).filter(isKeyword)).distinct((e3) => e3.value).toArray().sort((a2, b3) => b3.value.length - a2.value.length).map((keyword) => this.buildKeywordToken(keyword, terminalTokens, Boolean(options2 === null || options2 === void 0 ? void 0 : options2.caseInsensitive))); } buildKeywordToken(keyword, terminalTokens, caseInsensitive) { const keywordPattern = this.buildKeywordPattern(keyword, caseInsensitive); const tokenType = { name: keyword.value, PATTERN: keywordPattern, LONGER_ALT: this.findLongerAlt(keyword, terminalTokens) }; if (typeof keywordPattern === "function") { tokenType.LINE_BREAKS = true; } return tokenType; } buildKeywordPattern(keyword, caseInsensitive) { return caseInsensitive ? new RegExp(getCaseInsensitivePattern(keyword.value)) : keyword.value; } findLongerAlt(keyword, terminalTokens) { return terminalTokens.reduce((longerAlts, token2) => { const pattern = token2 === null || token2 === void 0 ? void 0 : token2.PATTERN; if ((pattern === null || pattern === void 0 ? void 0 : pattern.source) && partialMatches("^" + pattern.source + "$", keyword.value)) { longerAlts.push(token2); } return longerAlts; }, []); } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/value-converter.js var DefaultValueConverter, ValueConverter; var init_value_converter = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/value-converter.js"() { "use strict"; init_ast(); init_grammar_utils(); DefaultValueConverter = class { static { __name(this, "DefaultValueConverter"); } convert(input, cstNode) { let feature = cstNode.grammarSource; if (isCrossReference(feature)) { feature = getCrossReferenceTerminal(feature); } if (isRuleCall(feature)) { const rule = feature.rule.ref; if (!rule) { throw new Error("This cst node was not parsed by a rule."); } return this.runConverter(rule, input, cstNode); } return input; } // eslint-disable-next-line @typescript-eslint/no-unused-vars runConverter(rule, input, cstNode) { var _a; switch (rule.name.toUpperCase()) { case "INT": return ValueConverter.convertInt(input); case "STRING": return ValueConverter.convertString(input); case "ID": return ValueConverter.convertID(input); } switch ((_a = getRuleType(rule)) === null || _a === void 0 ? void 0 : _a.toLowerCase()) { case "number": return ValueConverter.convertNumber(input); case "boolean": return ValueConverter.convertBoolean(input); case "bigint": return ValueConverter.convertBigint(input); case "date": return ValueConverter.convertDate(input); default: return input; } } }; (function(ValueConverter2) { function convertString(input) { let result = ""; for (let i2 = 1; i2 < input.length - 1; i2++) { const c3 = input.charAt(i2); if (c3 === "\\") { const c1 = input.charAt(++i2); result += convertEscapeCharacter(c1); } else { result += c3; } } return result; } __name(convertString, "convertString"); ValueConverter2.convertString = convertString; function convertEscapeCharacter(char2) { switch (char2) { case "b": return "\b"; case "f": return "\f"; case "n": return "\n"; case "r": return "\r"; case "t": return " "; case "v": return "\v"; case "0": return "\0"; default: return char2; } } __name(convertEscapeCharacter, "convertEscapeCharacter"); function convertID(input) { if (input.charAt(0) === "^") { return input.substring(1); } else { return input; } } __name(convertID, "convertID"); ValueConverter2.convertID = convertID; function convertInt(input) { return parseInt(input); } __name(convertInt, "convertInt"); ValueConverter2.convertInt = convertInt; function convertBigint(input) { return BigInt(input); } __name(convertBigint, "convertBigint"); ValueConverter2.convertBigint = convertBigint; function convertDate(input) { return new Date(input); } __name(convertDate, "convertDate"); ValueConverter2.convertDate = convertDate; function convertNumber(input) { return Number(input); } __name(convertNumber, "convertNumber"); ValueConverter2.convertNumber = convertNumber; function convertBoolean(input) { return input.toLowerCase() === "true"; } __name(convertBoolean, "convertBoolean"); ValueConverter2.convertBoolean = convertBoolean; })(ValueConverter || (ValueConverter = {})); } }); // ../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/ral.js var require_ral = __commonJS({ "../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/ral.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); var _ral; function RAL() { if (_ral === void 0) { throw new Error(`No runtime abstraction layer installed`); } return _ral; } __name(RAL, "RAL"); (function(RAL2) { function install(ral) { if (ral === void 0) { throw new Error(`No runtime abstraction layer provided`); } _ral = ral; } __name(install, "install"); RAL2.install = install; })(RAL || (RAL = {})); exports2.default = RAL; } }); // ../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/is.js var require_is = __commonJS({ "../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/is.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.stringArray = exports2.array = exports2.func = exports2.error = exports2.number = exports2.string = exports2.boolean = void 0; function boolean(value2) { return value2 === true || value2 === false; } __name(boolean, "boolean"); exports2.boolean = boolean; function string3(value2) { return typeof value2 === "string" || value2 instanceof String; } __name(string3, "string"); exports2.string = string3; function number7(value2) { return typeof value2 === "number" || value2 instanceof Number; } __name(number7, "number"); exports2.number = number7; function error3(value2) { return value2 instanceof Error; } __name(error3, "error"); exports2.error = error3; function func(value2) { return typeof value2 === "function"; } __name(func, "func"); exports2.func = func; function array4(value2) { return Array.isArray(value2); } __name(array4, "array"); exports2.array = array4; function stringArray(value2) { return array4(value2) && value2.every((elem) => string3(elem)); } __name(stringArray, "stringArray"); exports2.stringArray = stringArray; } }); // ../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/events.js var require_events = __commonJS({ "../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/events.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.Emitter = exports2.Event = void 0; var ral_1 = require_ral(); var Event3; (function(Event4) { const _disposable = { dispose() { } }; Event4.None = function() { return _disposable; }; })(Event3 || (exports2.Event = Event3 = {})); var CallbackList = class { static { __name(this, "CallbackList"); } add(callback, context = null, bucket) { if (!this._callbacks) { this._callbacks = []; this._contexts = []; } this._callbacks.push(callback); this._contexts.push(context); if (Array.isArray(bucket)) { bucket.push({ dispose: /* @__PURE__ */ __name(() => this.remove(callback, context), "dispose") }); } } remove(callback, context = null) { if (!this._callbacks) { return; } let foundCallbackWithDifferentContext = false; for (let i2 = 0, len = this._callbacks.length; i2 < len; i2++) { if (this._callbacks[i2] === callback) { if (this._contexts[i2] === context) { this._callbacks.splice(i2, 1); this._contexts.splice(i2, 1); return; } else { foundCallbackWithDifferentContext = true; } } } if (foundCallbackWithDifferentContext) { throw new Error("When adding a listener with a context, you should remove it with the same context"); } } invoke(...args) { if (!this._callbacks) { return []; } const ret = [], callbacks = this._callbacks.slice(0), contexts = this._contexts.slice(0); for (let i2 = 0, len = callbacks.length; i2 < len; i2++) { try { ret.push(callbacks[i2].apply(contexts[i2], args)); } catch (e3) { (0, ral_1.default)().console.error(e3); } } return ret; } isEmpty() { return !this._callbacks || this._callbacks.length === 0; } dispose() { this._callbacks = void 0; this._contexts = void 0; } }; var Emitter4 = class _Emitter { static { __name(this, "Emitter"); } constructor(_options) { this._options = _options; } /** * For the public to allow to subscribe * to events from this Emitter */ get event() { if (!this._event) { this._event = (listener, thisArgs, disposables) => { if (!this._callbacks) { this._callbacks = new CallbackList(); } if (this._options && this._options.onFirstListenerAdd && this._callbacks.isEmpty()) { this._options.onFirstListenerAdd(this); } this._callbacks.add(listener, thisArgs); const result = { dispose: /* @__PURE__ */ __name(() => { if (!this._callbacks) { return; } this._callbacks.remove(listener, thisArgs); result.dispose = _Emitter._noop; if (this._options && this._options.onLastListenerRemove && this._callbacks.isEmpty()) { this._options.onLastListenerRemove(this); } }, "dispose") }; if (Array.isArray(disposables)) { disposables.push(result); } return result; }; } return this._event; } /** * To be kept private to fire an event to * subscribers */ fire(event3) { if (this._callbacks) { this._callbacks.invoke.call(this._callbacks, event3); } } dispose() { if (this._callbacks) { this._callbacks.dispose(); this._callbacks = void 0; } } }; exports2.Emitter = Emitter4; Emitter4._noop = function() { }; } }); // ../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/cancellation.js var require_cancellation = __commonJS({ "../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/cancellation.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.CancellationTokenSource = exports2.CancellationToken = void 0; var ral_1 = require_ral(); var Is2 = require_is(); var events_1 = require_events(); var CancellationToken11; (function(CancellationToken12) { CancellationToken12.None = Object.freeze({ isCancellationRequested: false, onCancellationRequested: events_1.Event.None }); CancellationToken12.Cancelled = Object.freeze({ isCancellationRequested: true, onCancellationRequested: events_1.Event.None }); function is2(value2) { const candidate = value2; return candidate && (candidate === CancellationToken12.None || candidate === CancellationToken12.Cancelled || Is2.boolean(candidate.isCancellationRequested) && !!candidate.onCancellationRequested); } __name(is2, "is"); CancellationToken12.is = is2; })(CancellationToken11 || (exports2.CancellationToken = CancellationToken11 = {})); var shortcutEvent = Object.freeze(function(callback, context) { const handle = (0, ral_1.default)().timer.setTimeout(callback.bind(context), 0); return { dispose() { handle.dispose(); } }; }); var MutableToken = class { static { __name(this, "MutableToken"); } constructor() { this._isCancelled = false; } cancel() { if (!this._isCancelled) { this._isCancelled = true; if (this._emitter) { this._emitter.fire(void 0); this.dispose(); } } } get isCancellationRequested() { return this._isCancelled; } get onCancellationRequested() { if (this._isCancelled) { return shortcutEvent; } if (!this._emitter) { this._emitter = new events_1.Emitter(); } return this._emitter.event; } dispose() { if (this._emitter) { this._emitter.dispose(); this._emitter = void 0; } } }; var CancellationTokenSource3 = class { static { __name(this, "CancellationTokenSource"); } get token() { if (!this._token) { this._token = new MutableToken(); } return this._token; } cancel() { if (!this._token) { this._token = CancellationToken11.Cancelled; } else { this._token.cancel(); } } dispose() { if (!this._token) { this._token = CancellationToken11.None; } else if (this._token instanceof MutableToken) { this._token.dispose(); } } }; exports2.CancellationTokenSource = CancellationTokenSource3; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/cancellation.js var cancellation_exports = {}; var init_cancellation = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/cancellation.js"() { "use strict"; __reExport(cancellation_exports, __toESM(require_cancellation(), 1)); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/promise-utils.js function delayNextTick() { return new Promise((resolve2) => { if (typeof setImmediate === "undefined") { setTimeout(resolve2, 0); } else { setImmediate(resolve2); } }); } function startCancelableOperation() { lastTick = performance.now(); return new cancellation_exports.CancellationTokenSource(); } function setInterruptionPeriod(period) { globalInterruptionPeriod = period; } function isOperationCancelled(err) { return err === OperationCancelled; } async function interruptAndCheck(token2) { if (token2 === cancellation_exports.CancellationToken.None) { return; } const current = performance.now(); if (current - lastTick >= globalInterruptionPeriod) { lastTick = current; await delayNextTick(); lastTick = performance.now(); } if (token2.isCancellationRequested) { throw OperationCancelled; } } var lastTick, globalInterruptionPeriod, OperationCancelled, Deferred; var init_promise_utils = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/promise-utils.js"() { "use strict"; init_cancellation(); __name(delayNextTick, "delayNextTick"); lastTick = 0; globalInterruptionPeriod = 10; __name(startCancelableOperation, "startCancelableOperation"); __name(setInterruptionPeriod, "setInterruptionPeriod"); OperationCancelled = Symbol("OperationCancelled"); __name(isOperationCancelled, "isOperationCancelled"); __name(interruptAndCheck, "interruptAndCheck"); Deferred = class { static { __name(this, "Deferred"); } constructor() { this.promise = new Promise((resolve2, reject3) => { this.resolve = (arg) => { resolve2(arg); return this; }; this.reject = (err) => { reject3(err); return this; }; }); } }; } }); // ../../node_modules/.pnpm/vscode-languageserver-textdocument@1.0.12/node_modules/vscode-languageserver-textdocument/lib/esm/main.js function mergeSort(data5, compare) { if (data5.length <= 1) { return data5; } const p3 = data5.length / 2 | 0; const left3 = data5.slice(0, p3); const right3 = data5.slice(p3); mergeSort(left3, compare); mergeSort(right3, compare); let leftIdx = 0; let rightIdx = 0; let i2 = 0; while (leftIdx < left3.length && rightIdx < right3.length) { const ret = compare(left3[leftIdx], right3[rightIdx]); if (ret <= 0) { data5[i2++] = left3[leftIdx++]; } else { data5[i2++] = right3[rightIdx++]; } } while (leftIdx < left3.length) { data5[i2++] = left3[leftIdx++]; } while (rightIdx < right3.length) { data5[i2++] = right3[rightIdx++]; } return data5; } function computeLineOffsets(text4, isAtLineStart, textOffset = 0) { const result = isAtLineStart ? [textOffset] : []; for (let i2 = 0; i2 < text4.length; i2++) { const ch = text4.charCodeAt(i2); if (isEOL(ch)) { if (ch === 13 && i2 + 1 < text4.length && text4.charCodeAt(i2 + 1) === 10) { i2++; } result.push(textOffset + i2 + 1); } } return result; } function isEOL(char2) { return char2 === 13 || char2 === 10; } function getWellformedRange(range3) { const start3 = range3.start; const end2 = range3.end; if (start3.line > end2.line || start3.line === end2.line && start3.character > end2.character) { return { start: end2, end: start3 }; } return range3; } function getWellformedEdit(textEdit) { const range3 = getWellformedRange(textEdit.range); if (range3 !== textEdit.range) { return { newText: textEdit.newText, range: range3 }; } return textEdit; } var FullTextDocument2, TextDocument2; var init_main2 = __esm({ "../../node_modules/.pnpm/vscode-languageserver-textdocument@1.0.12/node_modules/vscode-languageserver-textdocument/lib/esm/main.js"() { "use strict"; FullTextDocument2 = class _FullTextDocument { static { __name(this, "FullTextDocument"); } constructor(uri, languageId, version3, content) { this._uri = uri; this._languageId = languageId; this._version = version3; this._content = content; this._lineOffsets = void 0; } get uri() { return this._uri; } get languageId() { return this._languageId; } get version() { return this._version; } getText(range3) { if (range3) { const start3 = this.offsetAt(range3.start); const end2 = this.offsetAt(range3.end); return this._content.substring(start3, end2); } return this._content; } update(changes, version3) { for (const change2 of changes) { if (_FullTextDocument.isIncremental(change2)) { const range3 = getWellformedRange(change2.range); const startOffset = this.offsetAt(range3.start); const endOffset = this.offsetAt(range3.end); this._content = this._content.substring(0, startOffset) + change2.text + this._content.substring(endOffset, this._content.length); const startLine = Math.max(range3.start.line, 0); const endLine = Math.max(range3.end.line, 0); let lineOffsets = this._lineOffsets; const addedLineOffsets = computeLineOffsets(change2.text, false, startOffset); if (endLine - startLine === addedLineOffsets.length) { for (let i2 = 0, len = addedLineOffsets.length; i2 < len; i2++) { lineOffsets[i2 + startLine + 1] = addedLineOffsets[i2]; } } else { if (addedLineOffsets.length < 1e4) { lineOffsets.splice(startLine + 1, endLine - startLine, ...addedLineOffsets); } else { this._lineOffsets = lineOffsets = lineOffsets.slice(0, startLine + 1).concat(addedLineOffsets, lineOffsets.slice(endLine + 1)); } } const diff2 = change2.text.length - (endOffset - startOffset); if (diff2 !== 0) { for (let i2 = startLine + 1 + addedLineOffsets.length, len = lineOffsets.length; i2 < len; i2++) { lineOffsets[i2] = lineOffsets[i2] + diff2; } } } else if (_FullTextDocument.isFull(change2)) { this._content = change2.text; this._lineOffsets = void 0; } else { throw new Error("Unknown change event received"); } } this._version = version3; } getLineOffsets() { if (this._lineOffsets === void 0) { this._lineOffsets = computeLineOffsets(this._content, true); } return this._lineOffsets; } positionAt(offset) { offset = Math.max(Math.min(offset, this._content.length), 0); const lineOffsets = this.getLineOffsets(); let low = 0, high = lineOffsets.length; if (high === 0) { return { line: 0, character: offset }; } while (low < high) { const mid = Math.floor((low + high) / 2); if (lineOffsets[mid] > offset) { high = mid; } else { low = mid + 1; } } const line2 = low - 1; offset = this.ensureBeforeEOL(offset, lineOffsets[line2]); return { line: line2, character: offset - lineOffsets[line2] }; } offsetAt(position5) { const lineOffsets = this.getLineOffsets(); if (position5.line >= lineOffsets.length) { return this._content.length; } else if (position5.line < 0) { return 0; } const lineOffset = lineOffsets[position5.line]; if (position5.character <= 0) { return lineOffset; } const nextLineOffset = position5.line + 1 < lineOffsets.length ? lineOffsets[position5.line + 1] : this._content.length; const offset = Math.min(lineOffset + position5.character, nextLineOffset); return this.ensureBeforeEOL(offset, lineOffset); } ensureBeforeEOL(offset, lineOffset) { while (offset > lineOffset && isEOL(this._content.charCodeAt(offset - 1))) { offset--; } return offset; } get lineCount() { return this.getLineOffsets().length; } static isIncremental(event3) { const candidate = event3; return candidate !== void 0 && candidate !== null && typeof candidate.text === "string" && candidate.range !== void 0 && (candidate.rangeLength === void 0 || typeof candidate.rangeLength === "number"); } static isFull(event3) { const candidate = event3; return candidate !== void 0 && candidate !== null && typeof candidate.text === "string" && candidate.range === void 0 && candidate.rangeLength === void 0; } }; (function(TextDocument3) { function create4(uri, languageId, version3, content) { return new FullTextDocument2(uri, languageId, version3, content); } __name(create4, "create"); TextDocument3.create = create4; function update2(document2, changes, version3) { if (document2 instanceof FullTextDocument2) { document2.update(changes, version3); return document2; } else { throw new Error("TextDocument.update: document must be created by TextDocument.create"); } } __name(update2, "update"); TextDocument3.update = update2; function applyEdits(document2, edits) { const text4 = document2.getText(); const sortedEdits = mergeSort(edits.map(getWellformedEdit), (a2, b3) => { const diff2 = a2.range.start.line - b3.range.start.line; if (diff2 === 0) { return a2.range.start.character - b3.range.start.character; } return diff2; }); let lastModifiedOffset = 0; const spans = []; for (const e3 of sortedEdits) { const startOffset = document2.offsetAt(e3.range.start); if (startOffset < lastModifiedOffset) { throw new Error("Overlapping edit"); } else if (startOffset > lastModifiedOffset) { spans.push(text4.substring(lastModifiedOffset, startOffset)); } if (e3.newText.length) { spans.push(e3.newText); } lastModifiedOffset = document2.offsetAt(e3.range.end); } spans.push(text4.substr(lastModifiedOffset)); return spans.join(""); } __name(applyEdits, "applyEdits"); TextDocument3.applyEdits = applyEdits; })(TextDocument2 || (TextDocument2 = {})); __name(mergeSort, "mergeSort"); __name(computeLineOffsets, "computeLineOffsets"); __name(isEOL, "isEOL"); __name(getWellformedRange, "getWellformedRange"); __name(getWellformedEdit, "getWellformedEdit"); } }); // ../../node_modules/.pnpm/vscode-uri@3.0.8/node_modules/vscode-uri/lib/esm/index.mjs var LIB, URI2, Utils2; var init_esm2 = __esm({ "../../node_modules/.pnpm/vscode-uri@3.0.8/node_modules/vscode-uri/lib/esm/index.mjs"() { "use strict"; (() => { "use strict"; var t4 = { 470: (t5) => { function e4(t6) { if ("string" != typeof t6) throw new TypeError("Path must be a string. Received " + JSON.stringify(t6)); } __name(e4, "e"); function r3(t6, e6) { for (var r4, n4 = "", i2 = 0, o2 = -1, s2 = 0, h3 = 0; h3 <= t6.length; ++h3) { if (h3 < t6.length) r4 = t6.charCodeAt(h3); else { if (47 === r4) break; r4 = 47; } if (47 === r4) { if (o2 === h3 - 1 || 1 === s2) ; else if (o2 !== h3 - 1 && 2 === s2) { if (n4.length < 2 || 2 !== i2 || 46 !== n4.charCodeAt(n4.length - 1) || 46 !== n4.charCodeAt(n4.length - 2)) { if (n4.length > 2) { var a2 = n4.lastIndexOf("/"); if (a2 !== n4.length - 1) { -1 === a2 ? (n4 = "", i2 = 0) : i2 = (n4 = n4.slice(0, a2)).length - 1 - n4.lastIndexOf("/"), o2 = h3, s2 = 0; continue; } } else if (2 === n4.length || 1 === n4.length) { n4 = "", i2 = 0, o2 = h3, s2 = 0; continue; } } e6 && (n4.length > 0 ? n4 += "/.." : n4 = "..", i2 = 2); } else n4.length > 0 ? n4 += "/" + t6.slice(o2 + 1, h3) : n4 = t6.slice(o2 + 1, h3), i2 = h3 - o2 - 1; o2 = h3, s2 = 0; } else 46 === r4 && -1 !== s2 ? ++s2 : s2 = -1; } return n4; } __name(r3, "r"); var n3 = { resolve: /* @__PURE__ */ __name(function() { for (var t6, n4 = "", i2 = false, o2 = arguments.length - 1; o2 >= -1 && !i2; o2--) { var s2; o2 >= 0 ? s2 = arguments[o2] : (void 0 === t6 && (t6 = process.cwd()), s2 = t6), e4(s2), 0 !== s2.length && (n4 = s2 + "/" + n4, i2 = 47 === s2.charCodeAt(0)); } return n4 = r3(n4, !i2), i2 ? n4.length > 0 ? "/" + n4 : "/" : n4.length > 0 ? n4 : "."; }, "resolve"), normalize: /* @__PURE__ */ __name(function(t6) { if (e4(t6), 0 === t6.length) return "."; var n4 = 47 === t6.charCodeAt(0), i2 = 47 === t6.charCodeAt(t6.length - 1); return 0 !== (t6 = r3(t6, !n4)).length || n4 || (t6 = "."), t6.length > 0 && i2 && (t6 += "/"), n4 ? "/" + t6 : t6; }, "normalize"), isAbsolute: /* @__PURE__ */ __name(function(t6) { return e4(t6), t6.length > 0 && 47 === t6.charCodeAt(0); }, "isAbsolute"), join: /* @__PURE__ */ __name(function() { if (0 === arguments.length) return "."; for (var t6, r4 = 0; r4 < arguments.length; ++r4) { var i2 = arguments[r4]; e4(i2), i2.length > 0 && (void 0 === t6 ? t6 = i2 : t6 += "/" + i2); } return void 0 === t6 ? "." : n3.normalize(t6); }, "join"), relative: /* @__PURE__ */ __name(function(t6, r4) { if (e4(t6), e4(r4), t6 === r4) return ""; if ((t6 = n3.resolve(t6)) === (r4 = n3.resolve(r4))) return ""; for (var i2 = 1; i2 < t6.length && 47 === t6.charCodeAt(i2); ++i2) ; for (var o2 = t6.length, s2 = o2 - i2, h3 = 1; h3 < r4.length && 47 === r4.charCodeAt(h3); ++h3) ; for (var a2 = r4.length - h3, c3 = s2 < a2 ? s2 : a2, f2 = -1, u2 = 0; u2 <= c3; ++u2) { if (u2 === c3) { if (a2 > c3) { if (47 === r4.charCodeAt(h3 + u2)) return r4.slice(h3 + u2 + 1); if (0 === u2) return r4.slice(h3 + u2); } else s2 > c3 && (47 === t6.charCodeAt(i2 + u2) ? f2 = u2 : 0 === u2 && (f2 = 0)); break; } var l4 = t6.charCodeAt(i2 + u2); if (l4 !== r4.charCodeAt(h3 + u2)) break; 47 === l4 && (f2 = u2); } var g2 = ""; for (u2 = i2 + f2 + 1; u2 <= o2; ++u2) u2 !== o2 && 47 !== t6.charCodeAt(u2) || (0 === g2.length ? g2 += ".." : g2 += "/.."); return g2.length > 0 ? g2 + r4.slice(h3 + f2) : (h3 += f2, 47 === r4.charCodeAt(h3) && ++h3, r4.slice(h3)); }, "relative"), _makeLong: /* @__PURE__ */ __name(function(t6) { return t6; }, "_makeLong"), dirname: /* @__PURE__ */ __name(function(t6) { if (e4(t6), 0 === t6.length) return "."; for (var r4 = t6.charCodeAt(0), n4 = 47 === r4, i2 = -1, o2 = true, s2 = t6.length - 1; s2 >= 1; --s2) if (47 === (r4 = t6.charCodeAt(s2))) { if (!o2) { i2 = s2; break; } } else o2 = false; return -1 === i2 ? n4 ? "/" : "." : n4 && 1 === i2 ? "//" : t6.slice(0, i2); }, "dirname"), basename: /* @__PURE__ */ __name(function(t6, r4) { if (void 0 !== r4 && "string" != typeof r4) throw new TypeError('"ext" argument must be a string'); e4(t6); var n4, i2 = 0, o2 = -1, s2 = true; if (void 0 !== r4 && r4.length > 0 && r4.length <= t6.length) { if (r4.length === t6.length && r4 === t6) return ""; var h3 = r4.length - 1, a2 = -1; for (n4 = t6.length - 1; n4 >= 0; --n4) { var c3 = t6.charCodeAt(n4); if (47 === c3) { if (!s2) { i2 = n4 + 1; break; } } else -1 === a2 && (s2 = false, a2 = n4 + 1), h3 >= 0 && (c3 === r4.charCodeAt(h3) ? -1 == --h3 && (o2 = n4) : (h3 = -1, o2 = a2)); } return i2 === o2 ? o2 = a2 : -1 === o2 && (o2 = t6.length), t6.slice(i2, o2); } for (n4 = t6.length - 1; n4 >= 0; --n4) if (47 === t6.charCodeAt(n4)) { if (!s2) { i2 = n4 + 1; break; } } else -1 === o2 && (s2 = false, o2 = n4 + 1); return -1 === o2 ? "" : t6.slice(i2, o2); }, "basename"), extname: /* @__PURE__ */ __name(function(t6) { e4(t6); for (var r4 = -1, n4 = 0, i2 = -1, o2 = true, s2 = 0, h3 = t6.length - 1; h3 >= 0; --h3) { var a2 = t6.charCodeAt(h3); if (47 !== a2) -1 === i2 && (o2 = false, i2 = h3 + 1), 46 === a2 ? -1 === r4 ? r4 = h3 : 1 !== s2 && (s2 = 1) : -1 !== r4 && (s2 = -1); else if (!o2) { n4 = h3 + 1; break; } } return -1 === r4 || -1 === i2 || 0 === s2 || 1 === s2 && r4 === i2 - 1 && r4 === n4 + 1 ? "" : t6.slice(r4, i2); }, "extname"), format: /* @__PURE__ */ __name(function(t6) { if (null === t6 || "object" != typeof t6) throw new TypeError('The "pathObject" argument must be of type Object. Received type ' + typeof t6); return (function(t7, e6) { var r4 = e6.dir || e6.root, n4 = e6.base || (e6.name || "") + (e6.ext || ""); return r4 ? r4 === e6.root ? r4 + n4 : r4 + "/" + n4 : n4; })(0, t6); }, "format"), parse: /* @__PURE__ */ __name(function(t6) { e4(t6); var r4 = { root: "", dir: "", base: "", ext: "", name: "" }; if (0 === t6.length) return r4; var n4, i2 = t6.charCodeAt(0), o2 = 47 === i2; o2 ? (r4.root = "/", n4 = 1) : n4 = 0; for (var s2 = -1, h3 = 0, a2 = -1, c3 = true, f2 = t6.length - 1, u2 = 0; f2 >= n4; --f2) if (47 !== (i2 = t6.charCodeAt(f2))) -1 === a2 && (c3 = false, a2 = f2 + 1), 46 === i2 ? -1 === s2 ? s2 = f2 : 1 !== u2 && (u2 = 1) : -1 !== s2 && (u2 = -1); else if (!c3) { h3 = f2 + 1; break; } return -1 === s2 || -1 === a2 || 0 === u2 || 1 === u2 && s2 === a2 - 1 && s2 === h3 + 1 ? -1 !== a2 && (r4.base = r4.name = 0 === h3 && o2 ? t6.slice(1, a2) : t6.slice(h3, a2)) : (0 === h3 && o2 ? (r4.name = t6.slice(1, s2), r4.base = t6.slice(1, a2)) : (r4.name = t6.slice(h3, s2), r4.base = t6.slice(h3, a2)), r4.ext = t6.slice(s2, a2)), h3 > 0 ? r4.dir = t6.slice(0, h3 - 1) : o2 && (r4.dir = "/"), r4; }, "parse"), sep: "/", delimiter: ":", win32: null, posix: null }; n3.posix = n3, t5.exports = n3; } }, e3 = {}; function r2(n3) { var i2 = e3[n3]; if (void 0 !== i2) return i2.exports; var o2 = e3[n3] = { exports: {} }; return t4[n3](o2, o2.exports, r2), o2.exports; } __name(r2, "r"); r2.d = (t5, e4) => { for (var n3 in e4) r2.o(e4, n3) && !r2.o(t5, n3) && Object.defineProperty(t5, n3, { enumerable: true, get: e4[n3] }); }, r2.o = (t5, e4) => Object.prototype.hasOwnProperty.call(t5, e4), r2.r = (t5) => { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t5, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(t5, "__esModule", { value: true }); }; var n2 = {}; (() => { let t5; if (r2.r(n2), r2.d(n2, { URI: /* @__PURE__ */ __name(() => f2, "URI"), Utils: /* @__PURE__ */ __name(() => P3, "Utils") }), "object" == typeof process) t5 = "win32" === process.platform; else if ("object" == typeof navigator) { let e6 = navigator.userAgent; t5 = e6.indexOf("Windows") >= 0; } const e4 = /^\w[\w\d+.-]*$/, i2 = /^\//, o2 = /^\/\//; function s2(t6, r3) { if (!t6.scheme && r3) throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${t6.authority}", path: "${t6.path}", query: "${t6.query}", fragment: "${t6.fragment}"}`); if (t6.scheme && !e4.test(t6.scheme)) throw new Error("[UriError]: Scheme contains illegal characters."); if (t6.path) { if (t6.authority) { if (!i2.test(t6.path)) throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character'); } else if (o2.test(t6.path)) throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")'); } } __name(s2, "s"); const h3 = "", a2 = "/", c3 = /^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/; class f2 { static { __name(this, "f"); } static isUri(t6) { return t6 instanceof f2 || !!t6 && "string" == typeof t6.authority && "string" == typeof t6.fragment && "string" == typeof t6.path && "string" == typeof t6.query && "string" == typeof t6.scheme && "string" == typeof t6.fsPath && "function" == typeof t6.with && "function" == typeof t6.toString; } scheme; authority; path; query; fragment; constructor(t6, e6, r3, n3, i3, o3 = false) { "object" == typeof t6 ? (this.scheme = t6.scheme || h3, this.authority = t6.authority || h3, this.path = t6.path || h3, this.query = t6.query || h3, this.fragment = t6.fragment || h3) : (this.scheme = /* @__PURE__ */ (function(t7, e7) { return t7 || e7 ? t7 : "file"; })(t6, o3), this.authority = e6 || h3, this.path = (function(t7, e7) { switch (t7) { case "https": case "http": case "file": e7 ? e7[0] !== a2 && (e7 = a2 + e7) : e7 = a2; } return e7; })(this.scheme, r3 || h3), this.query = n3 || h3, this.fragment = i3 || h3, s2(this, o3)); } get fsPath() { return m3(this, false); } with(t6) { if (!t6) return this; let { scheme: e6, authority: r3, path: n3, query: i3, fragment: o3 } = t6; return void 0 === e6 ? e6 = this.scheme : null === e6 && (e6 = h3), void 0 === r3 ? r3 = this.authority : null === r3 && (r3 = h3), void 0 === n3 ? n3 = this.path : null === n3 && (n3 = h3), void 0 === i3 ? i3 = this.query : null === i3 && (i3 = h3), void 0 === o3 ? o3 = this.fragment : null === o3 && (o3 = h3), e6 === this.scheme && r3 === this.authority && n3 === this.path && i3 === this.query && o3 === this.fragment ? this : new l4(e6, r3, n3, i3, o3); } static parse(t6, e6 = false) { const r3 = c3.exec(t6); return r3 ? new l4(r3[2] || h3, C3(r3[4] || h3), C3(r3[5] || h3), C3(r3[7] || h3), C3(r3[9] || h3), e6) : new l4(h3, h3, h3, h3, h3); } static file(e6) { let r3 = h3; if (t5 && (e6 = e6.replace(/\\/g, a2)), e6[0] === a2 && e6[1] === a2) { const t6 = e6.indexOf(a2, 2); -1 === t6 ? (r3 = e6.substring(2), e6 = a2) : (r3 = e6.substring(2, t6), e6 = e6.substring(t6) || a2); } return new l4("file", r3, e6, h3, h3); } static from(t6) { const e6 = new l4(t6.scheme, t6.authority, t6.path, t6.query, t6.fragment); return s2(e6, true), e6; } toString(t6 = false) { return y6(this, t6); } toJSON() { return this; } static revive(t6) { if (t6) { if (t6 instanceof f2) return t6; { const e6 = new l4(t6); return e6._formatted = t6.external, e6._fsPath = t6._sep === u2 ? t6.fsPath : null, e6; } } return t6; } } const u2 = t5 ? 1 : void 0; class l4 extends f2 { static { __name(this, "l"); } _formatted = null; _fsPath = null; get fsPath() { return this._fsPath || (this._fsPath = m3(this, false)), this._fsPath; } toString(t6 = false) { return t6 ? y6(this, true) : (this._formatted || (this._formatted = y6(this, false)), this._formatted); } toJSON() { const t6 = { $mid: 1 }; return this._fsPath && (t6.fsPath = this._fsPath, t6._sep = u2), this._formatted && (t6.external = this._formatted), this.path && (t6.path = this.path), this.scheme && (t6.scheme = this.scheme), this.authority && (t6.authority = this.authority), this.query && (t6.query = this.query), this.fragment && (t6.fragment = this.fragment), t6; } } const g2 = { 58: "%3A", 47: "%2F", 63: "%3F", 35: "%23", 91: "%5B", 93: "%5D", 64: "%40", 33: "%21", 36: "%24", 38: "%26", 39: "%27", 40: "%28", 41: "%29", 42: "%2A", 43: "%2B", 44: "%2C", 59: "%3B", 61: "%3D", 32: "%20" }; function d3(t6, e6, r3) { let n3, i3 = -1; for (let o3 = 0; o3 < t6.length; o3++) { const s3 = t6.charCodeAt(o3); if (s3 >= 97 && s3 <= 122 || s3 >= 65 && s3 <= 90 || s3 >= 48 && s3 <= 57 || 45 === s3 || 46 === s3 || 95 === s3 || 126 === s3 || e6 && 47 === s3 || r3 && 91 === s3 || r3 && 93 === s3 || r3 && 58 === s3) -1 !== i3 && (n3 += encodeURIComponent(t6.substring(i3, o3)), i3 = -1), void 0 !== n3 && (n3 += t6.charAt(o3)); else { void 0 === n3 && (n3 = t6.substr(0, o3)); const e7 = g2[s3]; void 0 !== e7 ? (-1 !== i3 && (n3 += encodeURIComponent(t6.substring(i3, o3)), i3 = -1), n3 += e7) : -1 === i3 && (i3 = o3); } } return -1 !== i3 && (n3 += encodeURIComponent(t6.substring(i3))), void 0 !== n3 ? n3 : t6; } __name(d3, "d"); function p3(t6) { let e6; for (let r3 = 0; r3 < t6.length; r3++) { const n3 = t6.charCodeAt(r3); 35 === n3 || 63 === n3 ? (void 0 === e6 && (e6 = t6.substr(0, r3)), e6 += g2[n3]) : void 0 !== e6 && (e6 += t6[r3]); } return void 0 !== e6 ? e6 : t6; } __name(p3, "p"); function m3(e6, r3) { let n3; return n3 = e6.authority && e6.path.length > 1 && "file" === e6.scheme ? `//${e6.authority}${e6.path}` : 47 === e6.path.charCodeAt(0) && (e6.path.charCodeAt(1) >= 65 && e6.path.charCodeAt(1) <= 90 || e6.path.charCodeAt(1) >= 97 && e6.path.charCodeAt(1) <= 122) && 58 === e6.path.charCodeAt(2) ? r3 ? e6.path.substr(1) : e6.path[1].toLowerCase() + e6.path.substr(2) : e6.path, t5 && (n3 = n3.replace(/\//g, "\\")), n3; } __name(m3, "m"); function y6(t6, e6) { const r3 = e6 ? p3 : d3; let n3 = "", { scheme: i3, authority: o3, path: s3, query: h4, fragment: c4 } = t6; if (i3 && (n3 += i3, n3 += ":"), (o3 || "file" === i3) && (n3 += a2, n3 += a2), o3) { let t7 = o3.indexOf("@"); if (-1 !== t7) { const e7 = o3.substr(0, t7); o3 = o3.substr(t7 + 1), t7 = e7.lastIndexOf(":"), -1 === t7 ? n3 += r3(e7, false, false) : (n3 += r3(e7.substr(0, t7), false, false), n3 += ":", n3 += r3(e7.substr(t7 + 1), false, true)), n3 += "@"; } o3 = o3.toLowerCase(), t7 = o3.lastIndexOf(":"), -1 === t7 ? n3 += r3(o3, false, true) : (n3 += r3(o3.substr(0, t7), false, true), n3 += o3.substr(t7)); } if (s3) { if (s3.length >= 3 && 47 === s3.charCodeAt(0) && 58 === s3.charCodeAt(2)) { const t7 = s3.charCodeAt(1); t7 >= 65 && t7 <= 90 && (s3 = `/${String.fromCharCode(t7 + 32)}:${s3.substr(3)}`); } else if (s3.length >= 2 && 58 === s3.charCodeAt(1)) { const t7 = s3.charCodeAt(0); t7 >= 65 && t7 <= 90 && (s3 = `${String.fromCharCode(t7 + 32)}:${s3.substr(2)}`); } n3 += r3(s3, true, false); } return h4 && (n3 += "?", n3 += r3(h4, false, false)), c4 && (n3 += "#", n3 += e6 ? c4 : d3(c4, false, false)), n3; } __name(y6, "y"); function v3(t6) { try { return decodeURIComponent(t6); } catch { return t6.length > 3 ? t6.substr(0, 3) + v3(t6.substr(3)) : t6; } } __name(v3, "v"); const b3 = /(%[0-9A-Za-z][0-9A-Za-z])+/g; function C3(t6) { return t6.match(b3) ? t6.replace(b3, ((t7) => v3(t7))) : t6; } __name(C3, "C"); var A2 = r2(470); const w4 = A2.posix || A2, x5 = "/"; var P3; !(function(t6) { t6.joinPath = function(t7, ...e6) { return t7.with({ path: w4.join(t7.path, ...e6) }); }, t6.resolvePath = function(t7, ...e6) { let r3 = t7.path, n3 = false; r3[0] !== x5 && (r3 = x5 + r3, n3 = true); let i3 = w4.resolve(r3, ...e6); return n3 && i3[0] === x5 && !t7.authority && (i3 = i3.substring(1)), t7.with({ path: i3 }); }, t6.dirname = function(t7) { if (0 === t7.path.length || t7.path === x5) return t7; let e6 = w4.dirname(t7.path); return 1 === e6.length && 46 === e6.charCodeAt(0) && (e6 = ""), t7.with({ path: e6 }); }, t6.basename = function(t7) { return w4.basename(t7.path); }, t6.extname = function(t7) { return w4.extname(t7.path); }; })(P3 || (P3 = {})); })(), LIB = n2; })(); ({ URI: URI2, Utils: Utils2 } = LIB); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/uri-utils.js var UriUtils; var init_uri_utils = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/uri-utils.js"() { "use strict"; init_esm2(); (function(UriUtils2) { UriUtils2.basename = Utils2.basename; UriUtils2.dirname = Utils2.dirname; UriUtils2.extname = Utils2.extname; UriUtils2.joinPath = Utils2.joinPath; UriUtils2.resolvePath = Utils2.resolvePath; function equals(a2, b3) { return (a2 === null || a2 === void 0 ? void 0 : a2.toString()) === (b3 === null || b3 === void 0 ? void 0 : b3.toString()); } __name(equals, "equals"); UriUtils2.equals = equals; function relative(from2, to) { const fromPath = typeof from2 === "string" ? from2 : from2.path; const toPath2 = typeof to === "string" ? to : to.path; const fromParts = fromPath.split("/").filter((e3) => e3.length > 0); const toParts = toPath2.split("/").filter((e3) => e3.length > 0); let i2 = 0; for (; i2 < fromParts.length; i2++) { if (fromParts[i2] !== toParts[i2]) { break; } } const backPart = "../".repeat(fromParts.length - i2); const toPart = toParts.slice(i2).join("/"); return backPart + toPart; } __name(relative, "relative"); UriUtils2.relative = relative; function normalize4(uri) { return URI2.parse(uri.toString()).toString(); } __name(normalize4, "normalize"); UriUtils2.normalize = normalize4; })(UriUtils || (UriUtils = {})); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/workspace/documents.js var DocumentState, DefaultLangiumDocumentFactory, DefaultLangiumDocuments; var init_documents = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/workspace/documents.js"() { "use strict"; init_main2(); init_documents(); init_cancellation(); init_stream(); init_uri_utils(); (function(DocumentState2) { DocumentState2[DocumentState2["Changed"] = 0] = "Changed"; DocumentState2[DocumentState2["Parsed"] = 1] = "Parsed"; DocumentState2[DocumentState2["IndexedContent"] = 2] = "IndexedContent"; DocumentState2[DocumentState2["ComputedScopes"] = 3] = "ComputedScopes"; DocumentState2[DocumentState2["Linked"] = 4] = "Linked"; DocumentState2[DocumentState2["IndexedReferences"] = 5] = "IndexedReferences"; DocumentState2[DocumentState2["Validated"] = 6] = "Validated"; })(DocumentState || (DocumentState = {})); DefaultLangiumDocumentFactory = class { static { __name(this, "DefaultLangiumDocumentFactory"); } constructor(services) { this.serviceRegistry = services.ServiceRegistry; this.textDocuments = services.workspace.TextDocuments; this.fileSystemProvider = services.workspace.FileSystemProvider; } async fromUri(uri, cancellationToken = cancellation_exports.CancellationToken.None) { const content = await this.fileSystemProvider.readFile(uri); return this.createAsync(uri, content, cancellationToken); } fromTextDocument(textDocument, uri, token2) { uri = uri !== null && uri !== void 0 ? uri : URI2.parse(textDocument.uri); if (cancellation_exports.CancellationToken.is(token2)) { return this.createAsync(uri, textDocument, token2); } else { return this.create(uri, textDocument, token2); } } fromString(text4, uri, token2) { if (cancellation_exports.CancellationToken.is(token2)) { return this.createAsync(uri, text4, token2); } else { return this.create(uri, text4, token2); } } fromModel(model, uri) { return this.create(uri, { $model: model }); } create(uri, content, options2) { if (typeof content === "string") { const parseResult = this.parse(uri, content, options2); return this.createLangiumDocument(parseResult, uri, void 0, content); } else if ("$model" in content) { const parseResult = { value: content.$model, parserErrors: [], lexerErrors: [] }; return this.createLangiumDocument(parseResult, uri); } else { const parseResult = this.parse(uri, content.getText(), options2); return this.createLangiumDocument(parseResult, uri, content); } } async createAsync(uri, content, cancelToken) { if (typeof content === "string") { const parseResult = await this.parseAsync(uri, content, cancelToken); return this.createLangiumDocument(parseResult, uri, void 0, content); } else { const parseResult = await this.parseAsync(uri, content.getText(), cancelToken); return this.createLangiumDocument(parseResult, uri, content); } } /** * Create a LangiumDocument from a given parse result. * * A TextDocument is created on demand if it is not provided as argument here. Usually this * should not be necessary because the main purpose of the TextDocument is to convert between * text ranges and offsets, which is done solely in LSP request handling. * * With the introduction of {@link update} below this method is supposed to be mainly called * during workspace initialization and on addition/recognition of new files, while changes in * existing documents are processed via {@link update}. */ createLangiumDocument(parseResult, uri, textDocument, text4) { let document2; if (textDocument) { document2 = { parseResult, uri, state: DocumentState.Parsed, references: [], textDocument }; } else { const textDocumentGetter = this.createTextDocumentGetter(uri, text4); document2 = { parseResult, uri, state: DocumentState.Parsed, references: [], get textDocument() { return textDocumentGetter(); } }; } parseResult.value.$document = document2; return document2; } async update(document2, cancellationToken) { var _a, _b; const oldText = (_a = document2.parseResult.value.$cstNode) === null || _a === void 0 ? void 0 : _a.root.fullText; const textDocument = (_b = this.textDocuments) === null || _b === void 0 ? void 0 : _b.get(document2.uri.toString()); const text4 = textDocument ? textDocument.getText() : await this.fileSystemProvider.readFile(document2.uri); if (textDocument) { Object.defineProperty(document2, "textDocument", { value: textDocument }); } else { const textDocumentGetter = this.createTextDocumentGetter(document2.uri, text4); Object.defineProperty(document2, "textDocument", { get: textDocumentGetter }); } if (oldText !== text4) { document2.parseResult = await this.parseAsync(document2.uri, text4, cancellationToken); document2.parseResult.value.$document = document2; } document2.state = DocumentState.Parsed; return document2; } parse(uri, text4, options2) { const services = this.serviceRegistry.getServices(uri); return services.parser.LangiumParser.parse(text4, options2); } parseAsync(uri, text4, cancellationToken) { const services = this.serviceRegistry.getServices(uri); return services.parser.AsyncParser.parse(text4, cancellationToken); } createTextDocumentGetter(uri, text4) { const serviceRegistry = this.serviceRegistry; let textDoc = void 0; return () => { return textDoc !== null && textDoc !== void 0 ? textDoc : textDoc = TextDocument2.create(uri.toString(), serviceRegistry.getServices(uri).LanguageMetaData.languageId, 0, text4 !== null && text4 !== void 0 ? text4 : ""); }; } }; DefaultLangiumDocuments = class { static { __name(this, "DefaultLangiumDocuments"); } constructor(services) { this.documentMap = /* @__PURE__ */ new Map(); this.langiumDocumentFactory = services.workspace.LangiumDocumentFactory; this.serviceRegistry = services.ServiceRegistry; } get all() { return stream(this.documentMap.values()); } addDocument(document2) { const uriString = document2.uri.toString(); if (this.documentMap.has(uriString)) { throw new Error(`A document with the URI '${uriString}' is already present.`); } this.documentMap.set(uriString, document2); } getDocument(uri) { const uriString = uri.toString(); return this.documentMap.get(uriString); } async getOrCreateDocument(uri, cancellationToken) { let document2 = this.getDocument(uri); if (document2) { return document2; } document2 = await this.langiumDocumentFactory.fromUri(uri, cancellationToken); this.addDocument(document2); return document2; } createDocument(uri, text4, cancellationToken) { if (cancellationToken) { return this.langiumDocumentFactory.fromString(text4, uri, cancellationToken).then((document2) => { this.addDocument(document2); return document2; }); } else { const document2 = this.langiumDocumentFactory.fromString(text4, uri); this.addDocument(document2); return document2; } } hasDocument(uri) { return this.documentMap.has(uri.toString()); } invalidateDocument(uri) { const uriString = uri.toString(); const langiumDoc = this.documentMap.get(uriString); if (langiumDoc) { const linker = this.serviceRegistry.getServices(uri).references.Linker; linker.unlink(langiumDoc); langiumDoc.state = DocumentState.Changed; langiumDoc.precomputedScopes = void 0; langiumDoc.diagnostics = void 0; } return langiumDoc; } deleteDocument(uri) { const uriString = uri.toString(); const langiumDoc = this.documentMap.get(uriString); if (langiumDoc) { langiumDoc.state = DocumentState.Changed; this.documentMap.delete(uriString); } return langiumDoc; } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/references/linker.js var ref_resolving, DefaultLinker; var init_linker = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/references/linker.js"() { "use strict"; init_cancellation(); init_syntax_tree(); init_ast_utils(); init_promise_utils(); init_documents(); ref_resolving = Symbol("ref_resolving"); DefaultLinker = class { static { __name(this, "DefaultLinker"); } constructor(services) { this.reflection = services.shared.AstReflection; this.langiumDocuments = () => services.shared.workspace.LangiumDocuments; this.scopeProvider = services.references.ScopeProvider; this.astNodeLocator = services.workspace.AstNodeLocator; } async link(document2, cancelToken = cancellation_exports.CancellationToken.None) { for (const node2 of streamAst(document2.parseResult.value)) { await interruptAndCheck(cancelToken); streamReferences(node2).forEach((ref) => this.doLink(ref, document2)); } } doLink(refInfo, document2) { var _a; const ref = refInfo.reference; if (ref._ref === void 0) { ref._ref = ref_resolving; try { const description = this.getCandidate(refInfo); if (isLinkingError(description)) { ref._ref = description; } else { ref._nodeDescription = description; if (this.langiumDocuments().hasDocument(description.documentUri)) { const linkedNode = this.loadAstNode(description); ref._ref = linkedNode !== null && linkedNode !== void 0 ? linkedNode : this.createLinkingError(refInfo, description); } else { ref._ref = void 0; } } } catch (err) { console.error(`An error occurred while resolving reference to '${ref.$refText}':`, err); const errorMessage = (_a = err.message) !== null && _a !== void 0 ? _a : String(err); ref._ref = Object.assign(Object.assign({}, refInfo), { message: `An error occurred while resolving reference to '${ref.$refText}': ${errorMessage}` }); } document2.references.push(ref); } } unlink(document2) { for (const ref of document2.references) { delete ref._ref; delete ref._nodeDescription; } document2.references = []; } getCandidate(refInfo) { const scope = this.scopeProvider.getScope(refInfo); const description = scope.getElement(refInfo.reference.$refText); return description !== null && description !== void 0 ? description : this.createLinkingError(refInfo); } buildReference(node2, property2, refNode, refText) { const linker = this; const reference = { $refNode: refNode, $refText: refText, get ref() { var _a; if (isAstNode(this._ref)) { return this._ref; } else if (isAstNodeDescription(this._nodeDescription)) { const linkedNode = linker.loadAstNode(this._nodeDescription); this._ref = linkedNode !== null && linkedNode !== void 0 ? linkedNode : linker.createLinkingError({ reference, container: node2, property: property2 }, this._nodeDescription); } else if (this._ref === void 0) { this._ref = ref_resolving; const document2 = findRootNode(node2).$document; const refData = linker.getLinkedNode({ reference, container: node2, property: property2 }); if (refData.error && document2 && document2.state < DocumentState.ComputedScopes) { return this._ref = void 0; } this._ref = (_a = refData.node) !== null && _a !== void 0 ? _a : refData.error; this._nodeDescription = refData.descr; document2 === null || document2 === void 0 ? void 0 : document2.references.push(this); } else if (this._ref === ref_resolving) { throw new Error(`Cyclic reference resolution detected: ${linker.astNodeLocator.getAstNodePath(node2)}/${property2} (symbol '${refText}')`); } return isAstNode(this._ref) ? this._ref : void 0; }, get $nodeDescription() { return this._nodeDescription; }, get error() { return isLinkingError(this._ref) ? this._ref : void 0; } }; return reference; } getLinkedNode(refInfo) { var _a; try { const description = this.getCandidate(refInfo); if (isLinkingError(description)) { return { error: description }; } const linkedNode = this.loadAstNode(description); if (linkedNode) { return { node: linkedNode, descr: description }; } else { return { descr: description, error: this.createLinkingError(refInfo, description) }; } } catch (err) { console.error(`An error occurred while resolving reference to '${refInfo.reference.$refText}':`, err); const errorMessage = (_a = err.message) !== null && _a !== void 0 ? _a : String(err); return { error: Object.assign(Object.assign({}, refInfo), { message: `An error occurred while resolving reference to '${refInfo.reference.$refText}': ${errorMessage}` }) }; } } loadAstNode(nodeDescription) { if (nodeDescription.node) { return nodeDescription.node; } const doc = this.langiumDocuments().getDocument(nodeDescription.documentUri); if (!doc) { return void 0; } return this.astNodeLocator.getAstNode(doc.parseResult.value, nodeDescription.path); } createLinkingError(refInfo, targetDescription) { const document2 = findRootNode(refInfo.container).$document; if (document2 && document2.state < DocumentState.ComputedScopes) { console.warn(`Attempted reference resolution before document reached ComputedScopes state (${document2.uri}).`); } const referenceType = this.reflection.getReferenceType(refInfo); return Object.assign(Object.assign({}, refInfo), { message: `Could not resolve reference to ${referenceType} named '${refInfo.reference.$refText}'.`, targetDescription }); } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/references/name-provider.js function isNamed(node2) { return typeof node2.name === "string"; } var DefaultNameProvider; var init_name_provider = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/references/name-provider.js"() { "use strict"; init_grammar_utils(); __name(isNamed, "isNamed"); DefaultNameProvider = class { static { __name(this, "DefaultNameProvider"); } getName(node2) { if (isNamed(node2)) { return node2.name; } return void 0; } getNameNode(node2) { return findNodeForProperty(node2.$cstNode, "name"); } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/references/references.js var DefaultReferences; var init_references = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/references/references.js"() { "use strict"; init_grammar_utils(); init_syntax_tree(); init_ast_utils(); init_cst_utils(); init_stream(); init_uri_utils(); DefaultReferences = class { static { __name(this, "DefaultReferences"); } constructor(services) { this.nameProvider = services.references.NameProvider; this.index = services.shared.workspace.IndexManager; this.nodeLocator = services.workspace.AstNodeLocator; } findDeclaration(sourceCstNode) { if (sourceCstNode) { const assignment = findAssignment(sourceCstNode); const nodeElem = sourceCstNode.astNode; if (assignment && nodeElem) { const reference = nodeElem[assignment.feature]; if (isReference(reference)) { return reference.ref; } else if (Array.isArray(reference)) { for (const ref of reference) { if (isReference(ref) && ref.$refNode && ref.$refNode.offset <= sourceCstNode.offset && ref.$refNode.end >= sourceCstNode.end) { return ref.ref; } } } } if (nodeElem) { const nameNode = this.nameProvider.getNameNode(nodeElem); if (nameNode && (nameNode === sourceCstNode || isChildNode(sourceCstNode, nameNode))) { return nodeElem; } } } return void 0; } findDeclarationNode(sourceCstNode) { const astNode = this.findDeclaration(sourceCstNode); if (astNode === null || astNode === void 0 ? void 0 : astNode.$cstNode) { const targetNode = this.nameProvider.getNameNode(astNode); return targetNode !== null && targetNode !== void 0 ? targetNode : astNode.$cstNode; } return void 0; } findReferences(targetNode, options2) { const refs = []; if (options2.includeDeclaration) { const ref = this.getReferenceToSelf(targetNode); if (ref) { refs.push(ref); } } let indexReferences = this.index.findAllReferences(targetNode, this.nodeLocator.getAstNodePath(targetNode)); if (options2.documentUri) { indexReferences = indexReferences.filter((ref) => UriUtils.equals(ref.sourceUri, options2.documentUri)); } refs.push(...indexReferences); return stream(refs); } getReferenceToSelf(targetNode) { const nameNode = this.nameProvider.getNameNode(targetNode); if (nameNode) { const doc = getDocument(targetNode); const path4 = this.nodeLocator.getAstNodePath(targetNode); return { sourceUri: doc.uri, sourcePath: path4, targetUri: doc.uri, targetPath: path4, segment: toDocumentSegment(nameNode), local: true }; } return void 0; } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/collections.js var MultiMap, BiMap; var init_collections = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/collections.js"() { "use strict"; init_stream(); MultiMap = class { static { __name(this, "MultiMap"); } constructor(elements2) { this.map = /* @__PURE__ */ new Map(); if (elements2) { for (const [key, value2] of elements2) { this.add(key, value2); } } } /** * The total number of values in the multimap. */ get size() { return Reduction.sum(stream(this.map.values()).map((a2) => a2.length)); } /** * Clear all entries in the multimap. */ clear() { this.map.clear(); } /** * Operates differently depending on whether a `value` is given: * * With a value, this method deletes the specific key / value pair from the multimap. * * Without a value, all values associated with the given key are deleted. * * @returns `true` if a value existed and has been removed, or `false` if the specified * key / value does not exist. */ delete(key, value2) { if (value2 === void 0) { return this.map.delete(key); } else { const values2 = this.map.get(key); if (values2) { const index = values2.indexOf(value2); if (index >= 0) { if (values2.length === 1) { this.map.delete(key); } else { values2.splice(index, 1); } return true; } } return false; } } /** * Returns an array of all values associated with the given key. If no value exists, * an empty array is returned. * * _Note:_ The returned array is assumed not to be modified. Use the `set` method to add a * value and `delete` to remove a value from the multimap. */ get(key) { var _a; return (_a = this.map.get(key)) !== null && _a !== void 0 ? _a : []; } /** * Operates differently depending on whether a `value` is given: * * With a value, this method returns `true` if the specific key / value pair is present in the multimap. * * Without a value, this method returns `true` if the given key is present in the multimap. */ has(key, value2) { if (value2 === void 0) { return this.map.has(key); } else { const values2 = this.map.get(key); if (values2) { return values2.indexOf(value2) >= 0; } return false; } } /** * Add the given key / value pair to the multimap. */ add(key, value2) { if (this.map.has(key)) { this.map.get(key).push(value2); } else { this.map.set(key, [value2]); } return this; } /** * Add the given set of key / value pairs to the multimap. */ addAll(key, values2) { if (this.map.has(key)) { this.map.get(key).push(...values2); } else { this.map.set(key, Array.from(values2)); } return this; } /** * Invokes the given callback function for every key / value pair in the multimap. */ forEach(callbackfn) { this.map.forEach((array4, key) => array4.forEach((value2) => callbackfn(value2, key, this))); } /** * Returns an iterator of key, value pairs for every entry in the map. */ [Symbol.iterator]() { return this.entries().iterator(); } /** * Returns a stream of key, value pairs for every entry in the map. */ entries() { return stream(this.map.entries()).flatMap(([key, array4]) => array4.map((value2) => [key, value2])); } /** * Returns a stream of keys in the map. */ keys() { return stream(this.map.keys()); } /** * Returns a stream of values in the map. */ values() { return stream(this.map.values()).flat(); } /** * Returns a stream of key, value set pairs for every key in the map. */ entriesGroupedByKey() { return stream(this.map.entries()); } }; BiMap = class { static { __name(this, "BiMap"); } get size() { return this.map.size; } constructor(elements2) { this.map = /* @__PURE__ */ new Map(); this.inverse = /* @__PURE__ */ new Map(); if (elements2) { for (const [key, value2] of elements2) { this.set(key, value2); } } } clear() { this.map.clear(); this.inverse.clear(); } set(key, value2) { this.map.set(key, value2); this.inverse.set(value2, key); return this; } get(key) { return this.map.get(key); } getKey(value2) { return this.inverse.get(value2); } delete(key) { const value2 = this.map.get(key); if (value2 !== void 0) { this.map.delete(key); this.inverse.delete(value2); return true; } return false; } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/references/scope-computation.js var DefaultScopeComputation; var init_scope_computation = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/references/scope-computation.js"() { "use strict"; init_cancellation(); init_ast_utils(); init_collections(); init_promise_utils(); DefaultScopeComputation = class { static { __name(this, "DefaultScopeComputation"); } constructor(services) { this.nameProvider = services.references.NameProvider; this.descriptions = services.workspace.AstNodeDescriptionProvider; } async computeExports(document2, cancelToken = cancellation_exports.CancellationToken.None) { return this.computeExportsForNode(document2.parseResult.value, document2, void 0, cancelToken); } /** * Creates {@link AstNodeDescription AstNodeDescriptions} for the given {@link AstNode parentNode} and its children. * The list of children to be considered is determined by the function parameter {@link children}. * By default only the direct children of {@link parentNode} are visited, nested nodes are not exported. * * @param parentNode AST node to be exported, i.e., of which an {@link AstNodeDescription} shall be added to the returned list. * @param document The document containing the AST node to be exported. * @param children A function called with {@link parentNode} as single argument and returning an {@link Iterable} supplying the children to be visited, which must be directly or transitively contained in {@link parentNode}. * @param cancelToken Indicates when to cancel the current operation. * @throws `OperationCancelled` if a user action occurs during execution. * @returns A list of {@link AstNodeDescription AstNodeDescriptions} to be published to index. */ async computeExportsForNode(parentNode, document2, children2 = streamContents, cancelToken = cancellation_exports.CancellationToken.None) { const exports2 = []; this.exportNode(parentNode, exports2, document2); for (const node2 of children2(parentNode)) { await interruptAndCheck(cancelToken); this.exportNode(node2, exports2, document2); } return exports2; } /** * Add a single node to the list of exports if it has a name. Override this method to change how * symbols are exported, e.g. by modifying their exported name. */ exportNode(node2, exports2, document2) { const name = this.nameProvider.getName(node2); if (name) { exports2.push(this.descriptions.createDescription(node2, name, document2)); } } async computeLocalScopes(document2, cancelToken = cancellation_exports.CancellationToken.None) { const rootNode = document2.parseResult.value; const scopes = new MultiMap(); for (const node2 of streamAllContents(rootNode)) { await interruptAndCheck(cancelToken); this.processNode(node2, document2, scopes); } return scopes; } /** * Process a single node during scopes computation. The default implementation makes the node visible * in the subtree of its container (if the node has a name). Override this method to change this, * e.g. by increasing the visibility to a higher level in the AST. */ processNode(node2, document2, scopes) { const container2 = node2.$container; if (container2) { const name = this.nameProvider.getName(node2); if (name) { scopes.add(container2, this.descriptions.createDescription(node2, name, document2)); } } } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/references/scope.js var StreamScope, MapScope, EMPTY_SCOPE; var init_scope = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/references/scope.js"() { "use strict"; init_stream(); StreamScope = class { static { __name(this, "StreamScope"); } constructor(elements2, outerScope, options2) { var _a; this.elements = elements2; this.outerScope = outerScope; this.caseInsensitive = (_a = options2 === null || options2 === void 0 ? void 0 : options2.caseInsensitive) !== null && _a !== void 0 ? _a : false; } getAllElements() { if (this.outerScope) { return this.elements.concat(this.outerScope.getAllElements()); } else { return this.elements; } } getElement(name) { const local = this.caseInsensitive ? this.elements.find((e3) => e3.name.toLowerCase() === name.toLowerCase()) : this.elements.find((e3) => e3.name === name); if (local) { return local; } if (this.outerScope) { return this.outerScope.getElement(name); } return void 0; } }; MapScope = class { static { __name(this, "MapScope"); } constructor(elements2, outerScope, options2) { var _a; this.elements = /* @__PURE__ */ new Map(); this.caseInsensitive = (_a = options2 === null || options2 === void 0 ? void 0 : options2.caseInsensitive) !== null && _a !== void 0 ? _a : false; for (const element3 of elements2) { const name = this.caseInsensitive ? element3.name.toLowerCase() : element3.name; this.elements.set(name, element3); } this.outerScope = outerScope; } getElement(name) { const localName = this.caseInsensitive ? name.toLowerCase() : name; const local = this.elements.get(localName); if (local) { return local; } if (this.outerScope) { return this.outerScope.getElement(name); } return void 0; } getAllElements() { let elementStream = stream(this.elements.values()); if (this.outerScope) { elementStream = elementStream.concat(this.outerScope.getAllElements()); } return elementStream; } }; EMPTY_SCOPE = { getElement() { return void 0; }, getAllElements() { return EMPTY_STREAM; } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/caching.js var DisposableCache, SimpleCache, ContextCache, DocumentCache, WorkspaceCache; var init_caching = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/caching.js"() { "use strict"; DisposableCache = class { static { __name(this, "DisposableCache"); } constructor() { this.toDispose = []; this.isDisposed = false; } onDispose(disposable) { this.toDispose.push(disposable); } dispose() { this.throwIfDisposed(); this.clear(); this.isDisposed = true; this.toDispose.forEach((disposable) => disposable.dispose()); } throwIfDisposed() { if (this.isDisposed) { throw new Error("This cache has already been disposed"); } } }; SimpleCache = class extends DisposableCache { static { __name(this, "SimpleCache"); } constructor() { super(...arguments); this.cache = /* @__PURE__ */ new Map(); } has(key) { this.throwIfDisposed(); return this.cache.has(key); } set(key, value2) { this.throwIfDisposed(); this.cache.set(key, value2); } get(key, provider) { this.throwIfDisposed(); if (this.cache.has(key)) { return this.cache.get(key); } else if (provider) { const value2 = provider(); this.cache.set(key, value2); return value2; } else { return void 0; } } delete(key) { this.throwIfDisposed(); return this.cache.delete(key); } clear() { this.throwIfDisposed(); this.cache.clear(); } }; ContextCache = class extends DisposableCache { static { __name(this, "ContextCache"); } constructor(converter) { super(); this.cache = /* @__PURE__ */ new Map(); this.converter = converter !== null && converter !== void 0 ? converter : ((value2) => value2); } has(contextKey, key) { this.throwIfDisposed(); return this.cacheForContext(contextKey).has(key); } set(contextKey, key, value2) { this.throwIfDisposed(); this.cacheForContext(contextKey).set(key, value2); } get(contextKey, key, provider) { this.throwIfDisposed(); const contextCache = this.cacheForContext(contextKey); if (contextCache.has(key)) { return contextCache.get(key); } else if (provider) { const value2 = provider(); contextCache.set(key, value2); return value2; } else { return void 0; } } delete(contextKey, key) { this.throwIfDisposed(); return this.cacheForContext(contextKey).delete(key); } clear(contextKey) { this.throwIfDisposed(); if (contextKey) { const mapKey = this.converter(contextKey); this.cache.delete(mapKey); } else { this.cache.clear(); } } cacheForContext(contextKey) { const mapKey = this.converter(contextKey); let documentCache = this.cache.get(mapKey); if (!documentCache) { documentCache = /* @__PURE__ */ new Map(); this.cache.set(mapKey, documentCache); } return documentCache; } }; DocumentCache = class extends ContextCache { static { __name(this, "DocumentCache"); } /** * Creates a new document cache. * * @param sharedServices Service container instance to hook into document lifecycle events. * @param state Optional document state on which the cache should evict. * If not provided, the cache will evict on `DocumentBuilder#onUpdate`. * *Deleted* documents are considered in both cases. * * Providing a state here will use `DocumentBuilder#onDocumentPhase` instead, * which triggers on all documents that have been affected by this change, assuming that the * state is `DocumentState.Linked` or a later state. */ constructor(sharedServices, state3) { super((uri) => uri.toString()); if (state3) { this.toDispose.push(sharedServices.workspace.DocumentBuilder.onDocumentPhase(state3, (document2) => { this.clear(document2.uri.toString()); })); this.toDispose.push(sharedServices.workspace.DocumentBuilder.onUpdate((_changed, deleted) => { for (const uri of deleted) { this.clear(uri); } })); } else { this.toDispose.push(sharedServices.workspace.DocumentBuilder.onUpdate((changed, deleted) => { const allUris = changed.concat(deleted); for (const uri of allUris) { this.clear(uri); } })); } } }; WorkspaceCache = class extends SimpleCache { static { __name(this, "WorkspaceCache"); } /** * Creates a new workspace cache. * * @param sharedServices Service container instance to hook into document lifecycle events. * @param state Optional document state on which the cache should evict. * If not provided, the cache will evict on `DocumentBuilder#onUpdate`. * *Deleted* documents are considered in both cases. */ constructor(sharedServices, state3) { super(); if (state3) { this.toDispose.push(sharedServices.workspace.DocumentBuilder.onBuildPhase(state3, () => { this.clear(); })); this.toDispose.push(sharedServices.workspace.DocumentBuilder.onUpdate((_changed, deleted) => { if (deleted.length > 0) { this.clear(); } })); } else { this.toDispose.push(sharedServices.workspace.DocumentBuilder.onUpdate(() => { this.clear(); })); } } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/references/scope-provider.js var DefaultScopeProvider; var init_scope_provider = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/references/scope-provider.js"() { "use strict"; init_scope(); init_ast_utils(); init_stream(); init_caching(); DefaultScopeProvider = class { static { __name(this, "DefaultScopeProvider"); } constructor(services) { this.reflection = services.shared.AstReflection; this.nameProvider = services.references.NameProvider; this.descriptions = services.workspace.AstNodeDescriptionProvider; this.indexManager = services.shared.workspace.IndexManager; this.globalScopeCache = new WorkspaceCache(services.shared); } getScope(context) { const scopes = []; const referenceType = this.reflection.getReferenceType(context); const precomputed = getDocument(context.container).precomputedScopes; if (precomputed) { let currentNode = context.container; do { const allDescriptions = precomputed.get(currentNode); if (allDescriptions.length > 0) { scopes.push(stream(allDescriptions).filter((desc) => this.reflection.isSubtype(desc.type, referenceType))); } currentNode = currentNode.$container; } while (currentNode); } let result = this.getGlobalScope(referenceType, context); for (let i2 = scopes.length - 1; i2 >= 0; i2--) { result = this.createScope(scopes[i2], result); } return result; } /** * Create a scope for the given collection of AST node descriptions. */ createScope(elements2, outerScope, options2) { return new StreamScope(stream(elements2), outerScope, options2); } /** * Create a scope for the given collection of AST nodes, which need to be transformed into respective * descriptions first. This is done using the `NameProvider` and `AstNodeDescriptionProvider` services. */ createScopeForNodes(elements2, outerScope, options2) { const s2 = stream(elements2).map((e3) => { const name = this.nameProvider.getName(e3); if (name) { return this.descriptions.createDescription(e3, name); } return void 0; }).nonNullable(); return new StreamScope(s2, outerScope, options2); } /** * Create a global scope filtered for the given reference type. */ getGlobalScope(referenceType, _context) { return this.globalScopeCache.get(referenceType, () => new MapScope(this.indexManager.allElements(referenceType))); } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/serializer/json-serializer.js function isAstNodeWithComment(node2) { return typeof node2.$comment === "string"; } function isIntermediateReference(obj) { return typeof obj === "object" && !!obj && ("$ref" in obj || "$error" in obj); } var DefaultJsonSerializer; var init_json_serializer = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/serializer/json-serializer.js"() { "use strict"; init_esm2(); init_syntax_tree(); init_ast_utils(); init_grammar_utils(); __name(isAstNodeWithComment, "isAstNodeWithComment"); __name(isIntermediateReference, "isIntermediateReference"); DefaultJsonSerializer = class { static { __name(this, "DefaultJsonSerializer"); } constructor(services) { this.ignoreProperties = /* @__PURE__ */ new Set(["$container", "$containerProperty", "$containerIndex", "$document", "$cstNode"]); this.langiumDocuments = services.shared.workspace.LangiumDocuments; this.astNodeLocator = services.workspace.AstNodeLocator; this.nameProvider = services.references.NameProvider; this.commentProvider = services.documentation.CommentProvider; } serialize(node2, options2) { const serializeOptions = options2 !== null && options2 !== void 0 ? options2 : {}; const specificReplacer = options2 === null || options2 === void 0 ? void 0 : options2.replacer; const defaultReplacer = /* @__PURE__ */ __name((key, value2) => this.replacer(key, value2, serializeOptions), "defaultReplacer"); const replacer = specificReplacer ? (key, value2) => specificReplacer(key, value2, defaultReplacer) : defaultReplacer; try { this.currentDocument = getDocument(node2); return JSON.stringify(node2, replacer, options2 === null || options2 === void 0 ? void 0 : options2.space); } finally { this.currentDocument = void 0; } } deserialize(content, options2) { const deserializeOptions = options2 !== null && options2 !== void 0 ? options2 : {}; const root3 = JSON.parse(content); this.linkNode(root3, root3, deserializeOptions); return root3; } replacer(key, value2, { refText, sourceText, textRegions, comments, uriConverter }) { var _a, _b, _c, _d; if (this.ignoreProperties.has(key)) { return void 0; } else if (isReference(value2)) { const refValue = value2.ref; const $refText = refText ? value2.$refText : void 0; if (refValue) { const targetDocument = getDocument(refValue); let targetUri = ""; if (this.currentDocument && this.currentDocument !== targetDocument) { if (uriConverter) { targetUri = uriConverter(targetDocument.uri, value2); } else { targetUri = targetDocument.uri.toString(); } } const targetPath = this.astNodeLocator.getAstNodePath(refValue); return { $ref: `${targetUri}#${targetPath}`, $refText }; } else { return { $error: (_b = (_a = value2.error) === null || _a === void 0 ? void 0 : _a.message) !== null && _b !== void 0 ? _b : "Could not resolve reference", $refText }; } } else if (isAstNode(value2)) { let astNode = void 0; if (textRegions) { astNode = this.addAstNodeRegionWithAssignmentsTo(Object.assign({}, value2)); if ((!key || value2.$document) && (astNode === null || astNode === void 0 ? void 0 : astNode.$textRegion)) { astNode.$textRegion.documentURI = (_c = this.currentDocument) === null || _c === void 0 ? void 0 : _c.uri.toString(); } } if (sourceText && !key) { astNode !== null && astNode !== void 0 ? astNode : astNode = Object.assign({}, value2); astNode.$sourceText = (_d = value2.$cstNode) === null || _d === void 0 ? void 0 : _d.text; } if (comments) { astNode !== null && astNode !== void 0 ? astNode : astNode = Object.assign({}, value2); const comment2 = this.commentProvider.getComment(value2); if (comment2) { astNode.$comment = comment2.replace(/\r/g, ""); } } return astNode !== null && astNode !== void 0 ? astNode : value2; } else { return value2; } } addAstNodeRegionWithAssignmentsTo(node2) { const createDocumentSegment = /* @__PURE__ */ __name((cstNode) => ({ offset: cstNode.offset, end: cstNode.end, length: cstNode.length, range: cstNode.range }), "createDocumentSegment"); if (node2.$cstNode) { const textRegion = node2.$textRegion = createDocumentSegment(node2.$cstNode); const assignments = textRegion.assignments = {}; Object.keys(node2).filter((key) => !key.startsWith("$")).forEach((key) => { const propertyAssignments = findNodesForProperty(node2.$cstNode, key).map(createDocumentSegment); if (propertyAssignments.length !== 0) { assignments[key] = propertyAssignments; } }); return node2; } return void 0; } linkNode(node2, root3, options2, container2, containerProperty, containerIndex) { for (const [propertyName, item] of Object.entries(node2)) { if (Array.isArray(item)) { for (let index = 0; index < item.length; index++) { const element3 = item[index]; if (isIntermediateReference(element3)) { item[index] = this.reviveReference(node2, propertyName, root3, element3, options2); } else if (isAstNode(element3)) { this.linkNode(element3, root3, options2, node2, propertyName, index); } } } else if (isIntermediateReference(item)) { node2[propertyName] = this.reviveReference(node2, propertyName, root3, item, options2); } else if (isAstNode(item)) { this.linkNode(item, root3, options2, node2, propertyName); } } const mutable = node2; mutable.$container = container2; mutable.$containerProperty = containerProperty; mutable.$containerIndex = containerIndex; } reviveReference(container2, property2, root3, reference, options2) { let refText = reference.$refText; let error3 = reference.$error; if (reference.$ref) { const ref = this.getRefNode(root3, reference.$ref, options2.uriConverter); if (isAstNode(ref)) { if (!refText) { refText = this.nameProvider.getName(ref); } return { $refText: refText !== null && refText !== void 0 ? refText : "", ref }; } else { error3 = ref; } } if (error3) { const ref = { $refText: refText !== null && refText !== void 0 ? refText : "" }; ref.error = { container: container2, property: property2, message: error3, reference: ref }; return ref; } else { return void 0; } } getRefNode(root3, uri, uriConverter) { try { const fragmentIndex = uri.indexOf("#"); if (fragmentIndex === 0) { const node3 = this.astNodeLocator.getAstNode(root3, uri.substring(1)); if (!node3) { return "Could not resolve path: " + uri; } return node3; } if (fragmentIndex < 0) { const documentUri2 = uriConverter ? uriConverter(uri) : URI2.parse(uri); const document3 = this.langiumDocuments.getDocument(documentUri2); if (!document3) { return "Could not find document for URI: " + uri; } return document3.parseResult.value; } const documentUri = uriConverter ? uriConverter(uri.substring(0, fragmentIndex)) : URI2.parse(uri.substring(0, fragmentIndex)); const document2 = this.langiumDocuments.getDocument(documentUri); if (!document2) { return "Could not find document for URI: " + uri; } if (fragmentIndex === uri.length - 1) { return document2.parseResult.value; } const node2 = this.astNodeLocator.getAstNode(document2.parseResult.value, uri.substring(fragmentIndex + 1)); if (!node2) { return "Could not resolve URI: " + uri; } return node2; } catch (err) { return String(err); } } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/service-registry.js var DefaultServiceRegistry; var init_service_registry = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/service-registry.js"() { "use strict"; init_uri_utils(); DefaultServiceRegistry = class { static { __name(this, "DefaultServiceRegistry"); } /** * @deprecated Use the new `fileExtensionMap` (or `languageIdMap`) property instead. */ get map() { return this.fileExtensionMap; } constructor(services) { this.languageIdMap = /* @__PURE__ */ new Map(); this.fileExtensionMap = /* @__PURE__ */ new Map(); this.textDocuments = services === null || services === void 0 ? void 0 : services.workspace.TextDocuments; } register(language) { const data5 = language.LanguageMetaData; for (const ext of data5.fileExtensions) { if (this.fileExtensionMap.has(ext)) { console.warn(`The file extension ${ext} is used by multiple languages. It is now assigned to '${data5.languageId}'.`); } this.fileExtensionMap.set(ext, language); } this.languageIdMap.set(data5.languageId, language); if (this.languageIdMap.size === 1) { this.singleton = language; } else { this.singleton = void 0; } } getServices(uri) { var _a, _b; if (this.singleton !== void 0) { return this.singleton; } if (this.languageIdMap.size === 0) { throw new Error("The service registry is empty. Use `register` to register the services of a language."); } const languageId = (_b = (_a = this.textDocuments) === null || _a === void 0 ? void 0 : _a.get(uri)) === null || _b === void 0 ? void 0 : _b.languageId; if (languageId !== void 0) { const services2 = this.languageIdMap.get(languageId); if (services2) { return services2; } } const ext = UriUtils.extname(uri); const services = this.fileExtensionMap.get(ext); if (!services) { if (languageId) { throw new Error(`The service registry contains no services for the extension '${ext}' for language '${languageId}'.`); } else { throw new Error(`The service registry contains no services for the extension '${ext}'.`); } } return services; } hasServices(uri) { try { this.getServices(uri); return true; } catch (_a) { return false; } } get all() { return Array.from(this.languageIdMap.values()); } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/validation/validation-registry.js function diagnosticData(code) { return { code }; } var ValidationCategory, ValidationRegistry; var init_validation_registry = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/validation/validation-registry.js"() { "use strict"; init_lib3(); init_collections(); init_promise_utils(); init_stream(); __name(diagnosticData, "diagnosticData"); (function(ValidationCategory2) { ValidationCategory2.all = ["fast", "slow", "built-in"]; })(ValidationCategory || (ValidationCategory = {})); ValidationRegistry = class { static { __name(this, "ValidationRegistry"); } constructor(services) { this.entries = new MultiMap(); this.entriesBefore = []; this.entriesAfter = []; this.reflection = services.shared.AstReflection; } /** * Register a set of validation checks. Each value in the record can be either a single validation check (i.e. a function) * or an array of validation checks. * * @param checksRecord Set of validation checks to register. * @param category Optional category for the validation checks (defaults to `'fast'`). * @param thisObj Optional object to be used as `this` when calling the validation check functions. */ register(checksRecord, thisObj = this, category = "fast") { if (category === "built-in") { throw new Error("The 'built-in' category is reserved for lexer, parser, and linker errors."); } for (const [type3, ch] of Object.entries(checksRecord)) { const callbacks = ch; if (Array.isArray(callbacks)) { for (const check of callbacks) { const entry = { check: this.wrapValidationException(check, thisObj), category }; this.addEntry(type3, entry); } } else if (typeof callbacks === "function") { const entry = { check: this.wrapValidationException(callbacks, thisObj), category }; this.addEntry(type3, entry); } else { assertUnreachable(callbacks); } } } wrapValidationException(check, thisObj) { return async (node2, accept, cancelToken) => { await this.handleException(() => check.call(thisObj, node2, accept, cancelToken), "An error occurred during validation", accept, node2); }; } async handleException(functionality, messageContext, accept, node2) { try { await functionality(); } catch (err) { if (isOperationCancelled(err)) { throw err; } console.error(`${messageContext}:`, err); if (err instanceof Error && err.stack) { console.error(err.stack); } const messageDetails = err instanceof Error ? err.message : String(err); accept("error", `${messageContext}: ${messageDetails}`, { node: node2 }); } } addEntry(type3, entry) { if (type3 === "AstNode") { this.entries.add("AstNode", entry); return; } for (const subtype of this.reflection.getAllSubTypes(type3)) { this.entries.add(subtype, entry); } } getChecks(type3, categories) { let checks = stream(this.entries.get(type3)).concat(this.entries.get("AstNode")); if (categories) { checks = checks.filter((entry) => categories.includes(entry.category)); } return checks.map((entry) => entry.check); } /** * Register logic which will be executed once before validating all the nodes of an AST/Langium document. * This helps to prepare or initialize some information which are required or reusable for the following checks on the AstNodes. * * As an example, for validating unique fully-qualified names of nodes in the AST, * here the map for mapping names to nodes could be established. * During the usual checks on the nodes, they are put into this map with their name. * * Note that this approach makes validations stateful, which is relevant e.g. when cancelling the validation. * Therefore it is recommended to clear stored information * _before_ validating an AST to validate each AST unaffected from other ASTs * AND _after_ validating the AST to free memory by information which are no longer used. * * @param checkBefore a set-up function which will be called once before actually validating an AST * @param thisObj Optional object to be used as `this` when calling the validation check functions. */ registerBeforeDocument(checkBefore, thisObj = this) { this.entriesBefore.push(this.wrapPreparationException(checkBefore, "An error occurred during set-up of the validation", thisObj)); } /** * Register logic which will be executed once after validating all the nodes of an AST/Langium document. * This helps to finally evaluate information which are collected during the checks on the AstNodes. * * As an example, for validating unique fully-qualified names of nodes in the AST, * here the map with all the collected nodes and their names is checked * and validation hints are created for all nodes with the same name. * * Note that this approach makes validations stateful, which is relevant e.g. when cancelling the validation. * Therefore it is recommended to clear stored information * _before_ validating an AST to validate each AST unaffected from other ASTs * AND _after_ validating the AST to free memory by information which are no longer used. * * @param checkBefore a set-up function which will be called once before actually validating an AST * @param thisObj Optional object to be used as `this` when calling the validation check functions. */ registerAfterDocument(checkAfter, thisObj = this) { this.entriesAfter.push(this.wrapPreparationException(checkAfter, "An error occurred during tear-down of the validation", thisObj)); } wrapPreparationException(check, messageContext, thisObj) { return async (rootNode, accept, categories, cancelToken) => { await this.handleException(() => check.call(thisObj, rootNode, accept, categories, cancelToken), messageContext, accept, rootNode); }; } get checksBefore() { return this.entriesBefore; } get checksAfter() { return this.entriesAfter; } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/validation/document-validator.js function getDiagnosticRange(info2) { if (info2.range) { return info2.range; } let cstNode; if (typeof info2.property === "string") { cstNode = findNodeForProperty(info2.node.$cstNode, info2.property, info2.index); } else if (typeof info2.keyword === "string") { cstNode = findNodeForKeyword(info2.node.$cstNode, info2.keyword, info2.index); } cstNode !== null && cstNode !== void 0 ? cstNode : cstNode = info2.node.$cstNode; if (!cstNode) { return { start: { line: 0, character: 0 }, end: { line: 0, character: 0 } }; } return cstNode.range; } function toDiagnosticSeverity(severity) { switch (severity) { case "error": return 1; case "warning": return 2; case "info": return 3; case "hint": return 4; default: throw new Error("Invalid diagnostic severity: " + severity); } } function toDiagnosticData(severity) { switch (severity) { case "error": return diagnosticData(DocumentValidator.LexingError); case "warning": return diagnosticData(DocumentValidator.LexingWarning); case "info": return diagnosticData(DocumentValidator.LexingInfo); case "hint": return diagnosticData(DocumentValidator.LexingHint); default: throw new Error("Invalid diagnostic severity: " + severity); } } var DefaultDocumentValidator, DocumentValidator; var init_document_validator = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/validation/document-validator.js"() { "use strict"; init_cancellation(); init_grammar_utils(); init_ast_utils(); init_cst_utils(); init_promise_utils(); init_validation_registry(); DefaultDocumentValidator = class { static { __name(this, "DefaultDocumentValidator"); } constructor(services) { this.validationRegistry = services.validation.ValidationRegistry; this.metadata = services.LanguageMetaData; } async validateDocument(document2, options2 = {}, cancelToken = cancellation_exports.CancellationToken.None) { const parseResult = document2.parseResult; const diagnostics = []; await interruptAndCheck(cancelToken); if (!options2.categories || options2.categories.includes("built-in")) { this.processLexingErrors(parseResult, diagnostics, options2); if (options2.stopAfterLexingErrors && diagnostics.some((d3) => { var _a; return ((_a = d3.data) === null || _a === void 0 ? void 0 : _a.code) === DocumentValidator.LexingError; })) { return diagnostics; } this.processParsingErrors(parseResult, diagnostics, options2); if (options2.stopAfterParsingErrors && diagnostics.some((d3) => { var _a; return ((_a = d3.data) === null || _a === void 0 ? void 0 : _a.code) === DocumentValidator.ParsingError; })) { return diagnostics; } this.processLinkingErrors(document2, diagnostics, options2); if (options2.stopAfterLinkingErrors && diagnostics.some((d3) => { var _a; return ((_a = d3.data) === null || _a === void 0 ? void 0 : _a.code) === DocumentValidator.LinkingError; })) { return diagnostics; } } try { diagnostics.push(...await this.validateAst(parseResult.value, options2, cancelToken)); } catch (err) { if (isOperationCancelled(err)) { throw err; } console.error("An error occurred during validation:", err); } await interruptAndCheck(cancelToken); return diagnostics; } processLexingErrors(parseResult, diagnostics, _options) { var _a, _b, _c; const lexerDiagnostics = [...parseResult.lexerErrors, ...(_b = (_a = parseResult.lexerReport) === null || _a === void 0 ? void 0 : _a.diagnostics) !== null && _b !== void 0 ? _b : []]; for (const lexerDiagnostic of lexerDiagnostics) { const severity = (_c = lexerDiagnostic.severity) !== null && _c !== void 0 ? _c : "error"; const diagnostic = { severity: toDiagnosticSeverity(severity), range: { start: { line: lexerDiagnostic.line - 1, character: lexerDiagnostic.column - 1 }, end: { line: lexerDiagnostic.line - 1, character: lexerDiagnostic.column + lexerDiagnostic.length - 1 } }, message: lexerDiagnostic.message, data: toDiagnosticData(severity), source: this.getSource() }; diagnostics.push(diagnostic); } } processParsingErrors(parseResult, diagnostics, _options) { for (const parserError of parseResult.parserErrors) { let range3 = void 0; if (isNaN(parserError.token.startOffset)) { if ("previousToken" in parserError) { const token2 = parserError.previousToken; if (!isNaN(token2.startOffset)) { const position5 = { line: token2.endLine - 1, character: token2.endColumn }; range3 = { start: position5, end: position5 }; } else { const position5 = { line: 0, character: 0 }; range3 = { start: position5, end: position5 }; } } } else { range3 = tokenToRange(parserError.token); } if (range3) { const diagnostic = { severity: toDiagnosticSeverity("error"), range: range3, message: parserError.message, data: diagnosticData(DocumentValidator.ParsingError), source: this.getSource() }; diagnostics.push(diagnostic); } } } processLinkingErrors(document2, diagnostics, _options) { for (const reference of document2.references) { const linkingError = reference.error; if (linkingError) { const info2 = { node: linkingError.container, property: linkingError.property, index: linkingError.index, data: { code: DocumentValidator.LinkingError, containerType: linkingError.container.$type, property: linkingError.property, refText: linkingError.reference.$refText } }; diagnostics.push(this.toDiagnostic("error", linkingError.message, info2)); } } } async validateAst(rootNode, options2, cancelToken = cancellation_exports.CancellationToken.None) { const validationItems = []; const acceptor = /* @__PURE__ */ __name((severity, message, info2) => { validationItems.push(this.toDiagnostic(severity, message, info2)); }, "acceptor"); await this.validateAstBefore(rootNode, options2, acceptor, cancelToken); await this.validateAstNodes(rootNode, options2, acceptor, cancelToken); await this.validateAstAfter(rootNode, options2, acceptor, cancelToken); return validationItems; } async validateAstBefore(rootNode, options2, acceptor, cancelToken = cancellation_exports.CancellationToken.None) { var _a; const checksBefore = this.validationRegistry.checksBefore; for (const checkBefore of checksBefore) { await interruptAndCheck(cancelToken); await checkBefore(rootNode, acceptor, (_a = options2.categories) !== null && _a !== void 0 ? _a : [], cancelToken); } } async validateAstNodes(rootNode, options2, acceptor, cancelToken = cancellation_exports.CancellationToken.None) { await Promise.all(streamAst(rootNode).map(async (node2) => { await interruptAndCheck(cancelToken); const checks = this.validationRegistry.getChecks(node2.$type, options2.categories); for (const check of checks) { await check(node2, acceptor, cancelToken); } })); } async validateAstAfter(rootNode, options2, acceptor, cancelToken = cancellation_exports.CancellationToken.None) { var _a; const checksAfter = this.validationRegistry.checksAfter; for (const checkAfter of checksAfter) { await interruptAndCheck(cancelToken); await checkAfter(rootNode, acceptor, (_a = options2.categories) !== null && _a !== void 0 ? _a : [], cancelToken); } } toDiagnostic(severity, message, info2) { return { message, range: getDiagnosticRange(info2), severity: toDiagnosticSeverity(severity), code: info2.code, codeDescription: info2.codeDescription, tags: info2.tags, relatedInformation: info2.relatedInformation, data: info2.data, source: this.getSource() }; } getSource() { return this.metadata.languageId; } }; __name(getDiagnosticRange, "getDiagnosticRange"); __name(toDiagnosticSeverity, "toDiagnosticSeverity"); __name(toDiagnosticData, "toDiagnosticData"); (function(DocumentValidator2) { DocumentValidator2.LexingError = "lexing-error"; DocumentValidator2.LexingWarning = "lexing-warning"; DocumentValidator2.LexingInfo = "lexing-info"; DocumentValidator2.LexingHint = "lexing-hint"; DocumentValidator2.ParsingError = "parsing-error"; DocumentValidator2.LinkingError = "linking-error"; })(DocumentValidator || (DocumentValidator = {})); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/workspace/ast-descriptions.js var DefaultAstNodeDescriptionProvider, DefaultReferenceDescriptionProvider; var init_ast_descriptions = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/workspace/ast-descriptions.js"() { "use strict"; init_cancellation(); init_syntax_tree(); init_ast_utils(); init_cst_utils(); init_promise_utils(); init_uri_utils(); DefaultAstNodeDescriptionProvider = class { static { __name(this, "DefaultAstNodeDescriptionProvider"); } constructor(services) { this.astNodeLocator = services.workspace.AstNodeLocator; this.nameProvider = services.references.NameProvider; } createDescription(node2, name, document2) { const doc = document2 !== null && document2 !== void 0 ? document2 : getDocument(node2); name !== null && name !== void 0 ? name : name = this.nameProvider.getName(node2); const path4 = this.astNodeLocator.getAstNodePath(node2); if (!name) { throw new Error(`Node at path ${path4} has no name.`); } let nameNodeSegment; const nameSegmentGetter = /* @__PURE__ */ __name(() => { var _a; return nameNodeSegment !== null && nameNodeSegment !== void 0 ? nameNodeSegment : nameNodeSegment = toDocumentSegment((_a = this.nameProvider.getNameNode(node2)) !== null && _a !== void 0 ? _a : node2.$cstNode); }, "nameSegmentGetter"); return { node: node2, name, get nameSegment() { return nameSegmentGetter(); }, selectionSegment: toDocumentSegment(node2.$cstNode), type: node2.$type, documentUri: doc.uri, path: path4 }; } }; DefaultReferenceDescriptionProvider = class { static { __name(this, "DefaultReferenceDescriptionProvider"); } constructor(services) { this.nodeLocator = services.workspace.AstNodeLocator; } async createDescriptions(document2, cancelToken = cancellation_exports.CancellationToken.None) { const descr = []; const rootNode = document2.parseResult.value; for (const astNode of streamAst(rootNode)) { await interruptAndCheck(cancelToken); streamReferences(astNode).filter((refInfo) => !isLinkingError(refInfo)).forEach((refInfo) => { const description = this.createDescription(refInfo); if (description) { descr.push(description); } }); } return descr; } createDescription(refInfo) { const targetNodeDescr = refInfo.reference.$nodeDescription; const refCstNode = refInfo.reference.$refNode; if (!targetNodeDescr || !refCstNode) { return void 0; } const docUri = getDocument(refInfo.container).uri; return { sourceUri: docUri, sourcePath: this.nodeLocator.getAstNodePath(refInfo.container), targetUri: targetNodeDescr.documentUri, targetPath: targetNodeDescr.path, segment: toDocumentSegment(refCstNode), local: UriUtils.equals(targetNodeDescr.documentUri, docUri) }; } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/workspace/ast-node-locator.js var DefaultAstNodeLocator; var init_ast_node_locator = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/workspace/ast-node-locator.js"() { "use strict"; DefaultAstNodeLocator = class { static { __name(this, "DefaultAstNodeLocator"); } constructor() { this.segmentSeparator = "/"; this.indexSeparator = "@"; } getAstNodePath(node2) { if (node2.$container) { const containerPath = this.getAstNodePath(node2.$container); const newSegment = this.getPathSegment(node2); const nodePath = containerPath + this.segmentSeparator + newSegment; return nodePath; } return ""; } getPathSegment({ $containerProperty, $containerIndex }) { if (!$containerProperty) { throw new Error("Missing '$containerProperty' in AST node."); } if ($containerIndex !== void 0) { return $containerProperty + this.indexSeparator + $containerIndex; } return $containerProperty; } getAstNode(node2, path4) { const segments = path4.split(this.segmentSeparator); return segments.reduce((previousValue, currentValue) => { if (!previousValue || currentValue.length === 0) { return previousValue; } const propertyIndex = currentValue.indexOf(this.indexSeparator); if (propertyIndex > 0) { const property2 = currentValue.substring(0, propertyIndex); const arrayIndex = parseInt(currentValue.substring(propertyIndex + 1)); const array4 = previousValue[property2]; return array4 === null || array4 === void 0 ? void 0 : array4[arrayIndex]; } return previousValue[currentValue]; }, node2); } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/event.js var event_exports = {}; var init_event3 = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/event.js"() { "use strict"; __reExport(event_exports, __toESM(require_events(), 1)); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/workspace/configuration.js var DefaultConfigurationProvider; var init_configuration = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/workspace/configuration.js"() { "use strict"; init_event3(); init_promise_utils(); DefaultConfigurationProvider = class { static { __name(this, "DefaultConfigurationProvider"); } constructor(services) { this._ready = new Deferred(); this.settings = {}; this.workspaceConfig = false; this.onConfigurationSectionUpdateEmitter = new event_exports.Emitter(); this.serviceRegistry = services.ServiceRegistry; } get ready() { return this._ready.promise; } initialize(params) { var _a, _b; this.workspaceConfig = (_b = (_a = params.capabilities.workspace) === null || _a === void 0 ? void 0 : _a.configuration) !== null && _b !== void 0 ? _b : false; } async initialized(params) { if (this.workspaceConfig) { if (params.register) { const languages = this.serviceRegistry.all; params.register({ // Listen to configuration changes for all languages section: languages.map((lang) => this.toSectionName(lang.LanguageMetaData.languageId)) }); } if (params.fetchConfiguration) { const configToUpdate = this.serviceRegistry.all.map((lang) => ({ // Fetch the configuration changes for all languages section: this.toSectionName(lang.LanguageMetaData.languageId) })); const configs = await params.fetchConfiguration(configToUpdate); configToUpdate.forEach((conf5, idx) => { this.updateSectionConfiguration(conf5.section, configs[idx]); }); } } this._ready.resolve(); } /** * Updates the cached configurations using the `change` notification parameters. * * @param change The parameters of a change configuration notification. * `settings` property of the change object could be expressed as `Record>` */ updateConfiguration(change2) { if (!change2.settings) { return; } Object.keys(change2.settings).forEach((section) => { const configuration = change2.settings[section]; this.updateSectionConfiguration(section, configuration); this.onConfigurationSectionUpdateEmitter.fire({ section, configuration }); }); } updateSectionConfiguration(section, configuration) { this.settings[section] = configuration; } /** * Returns a configuration value stored for the given language. * * @param language The language id * @param configuration Configuration name */ async getConfiguration(language, configuration) { await this.ready; const sectionName = this.toSectionName(language); if (this.settings[sectionName]) { return this.settings[sectionName][configuration]; } } toSectionName(languageId) { return `${languageId}`; } get onConfigurationSectionUpdate() { return this.onConfigurationSectionUpdateEmitter.event; } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/disposable.js var Disposable; var init_disposable = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/disposable.js"() { "use strict"; (function(Disposable2) { function create4(callback) { return { dispose: /* @__PURE__ */ __name(async () => await callback(), "dispose") }; } __name(create4, "create"); Disposable2.create = create4; })(Disposable || (Disposable = {})); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/workspace/document-builder.js var DefaultDocumentBuilder; var init_document_builder = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/workspace/document-builder.js"() { "use strict"; init_cancellation(); init_disposable(); init_collections(); init_promise_utils(); init_stream(); init_validation_registry(); init_documents(); DefaultDocumentBuilder = class { static { __name(this, "DefaultDocumentBuilder"); } constructor(services) { this.updateBuildOptions = { // Default: run only the built-in validation checks and those in the _fast_ category (includes those without category) validation: { categories: ["built-in", "fast"] } }; this.updateListeners = []; this.buildPhaseListeners = new MultiMap(); this.documentPhaseListeners = new MultiMap(); this.buildState = /* @__PURE__ */ new Map(); this.documentBuildWaiters = /* @__PURE__ */ new Map(); this.currentState = DocumentState.Changed; this.langiumDocuments = services.workspace.LangiumDocuments; this.langiumDocumentFactory = services.workspace.LangiumDocumentFactory; this.textDocuments = services.workspace.TextDocuments; this.indexManager = services.workspace.IndexManager; this.serviceRegistry = services.ServiceRegistry; } async build(documents, options2 = {}, cancelToken = cancellation_exports.CancellationToken.None) { var _a, _b; for (const document2 of documents) { const key = document2.uri.toString(); if (document2.state === DocumentState.Validated) { if (typeof options2.validation === "boolean" && options2.validation) { document2.state = DocumentState.IndexedReferences; document2.diagnostics = void 0; this.buildState.delete(key); } else if (typeof options2.validation === "object") { const buildState2 = this.buildState.get(key); const previousCategories = (_a = buildState2 === null || buildState2 === void 0 ? void 0 : buildState2.result) === null || _a === void 0 ? void 0 : _a.validationChecks; if (previousCategories) { const newCategories = (_b = options2.validation.categories) !== null && _b !== void 0 ? _b : ValidationCategory.all; const categories = newCategories.filter((c3) => !previousCategories.includes(c3)); if (categories.length > 0) { this.buildState.set(key, { completed: false, options: { validation: Object.assign(Object.assign({}, options2.validation), { categories }) }, result: buildState2.result }); document2.state = DocumentState.IndexedReferences; } } } } else { this.buildState.delete(key); } } this.currentState = DocumentState.Changed; await this.emitUpdate(documents.map((e3) => e3.uri), []); await this.buildDocuments(documents, options2, cancelToken); } async update(changed, deleted, cancelToken = cancellation_exports.CancellationToken.None) { this.currentState = DocumentState.Changed; for (const deletedUri of deleted) { this.langiumDocuments.deleteDocument(deletedUri); this.buildState.delete(deletedUri.toString()); this.indexManager.remove(deletedUri); } for (const changedUri of changed) { const invalidated = this.langiumDocuments.invalidateDocument(changedUri); if (!invalidated) { const newDocument = this.langiumDocumentFactory.fromModel({ $type: "INVALID" }, changedUri); newDocument.state = DocumentState.Changed; this.langiumDocuments.addDocument(newDocument); } this.buildState.delete(changedUri.toString()); } const allChangedUris = stream(changed).concat(deleted).map((uri) => uri.toString()).toSet(); this.langiumDocuments.all.filter((doc) => !allChangedUris.has(doc.uri.toString()) && this.shouldRelink(doc, allChangedUris)).forEach((doc) => { const linker = this.serviceRegistry.getServices(doc.uri).references.Linker; linker.unlink(doc); doc.state = Math.min(doc.state, DocumentState.ComputedScopes); doc.diagnostics = void 0; }); await this.emitUpdate(changed, deleted); await interruptAndCheck(cancelToken); const rebuildDocuments = this.sortDocuments(this.langiumDocuments.all.filter((doc) => { var _a; return doc.state < DocumentState.Linked || !((_a = this.buildState.get(doc.uri.toString())) === null || _a === void 0 ? void 0 : _a.completed); }).toArray()); await this.buildDocuments(rebuildDocuments, this.updateBuildOptions, cancelToken); } async emitUpdate(changed, deleted) { await Promise.all(this.updateListeners.map((listener) => listener(changed, deleted))); } /** * Sort the given documents by priority. By default, documents with an open text document are prioritized. * This is useful to ensure that visible documents show their diagnostics before all other documents. * * This improves the responsiveness in large workspaces as users usually don't care about diagnostics * in files that are currently not opened in the editor. */ sortDocuments(documents) { let left3 = 0; let right3 = documents.length - 1; while (left3 < right3) { while (left3 < documents.length && this.hasTextDocument(documents[left3])) { left3++; } while (right3 >= 0 && !this.hasTextDocument(documents[right3])) { right3--; } if (left3 < right3) { [documents[left3], documents[right3]] = [documents[right3], documents[left3]]; } } return documents; } hasTextDocument(doc) { var _a; return Boolean((_a = this.textDocuments) === null || _a === void 0 ? void 0 : _a.get(doc.uri)); } /** * Check whether the given document should be relinked after changes were found in the given URIs. */ shouldRelink(document2, changedUris) { if (document2.references.some((ref) => ref.error !== void 0)) { return true; } return this.indexManager.isAffected(document2, changedUris); } onUpdate(callback) { this.updateListeners.push(callback); return Disposable.create(() => { const index = this.updateListeners.indexOf(callback); if (index >= 0) { this.updateListeners.splice(index, 1); } }); } /** * Build the given documents by stepping through all build phases. If a document's state indicates * that a certain build phase is already done, the phase is skipped for that document. * * @param documents The documents to build. * @param options the {@link BuildOptions} to use. * @param cancelToken A cancellation token that can be used to cancel the build. * @returns A promise that resolves when the build is done. */ async buildDocuments(documents, options2, cancelToken) { this.prepareBuild(documents, options2); await this.runCancelable(documents, DocumentState.Parsed, cancelToken, (doc) => this.langiumDocumentFactory.update(doc, cancelToken)); await this.runCancelable(documents, DocumentState.IndexedContent, cancelToken, (doc) => this.indexManager.updateContent(doc, cancelToken)); await this.runCancelable(documents, DocumentState.ComputedScopes, cancelToken, async (doc) => { const scopeComputation = this.serviceRegistry.getServices(doc.uri).references.ScopeComputation; doc.precomputedScopes = await scopeComputation.computeLocalScopes(doc, cancelToken); }); await this.runCancelable(documents, DocumentState.Linked, cancelToken, (doc) => { const linker = this.serviceRegistry.getServices(doc.uri).references.Linker; return linker.link(doc, cancelToken); }); await this.runCancelable(documents, DocumentState.IndexedReferences, cancelToken, (doc) => this.indexManager.updateReferences(doc, cancelToken)); const toBeValidated = documents.filter((doc) => this.shouldValidate(doc)); await this.runCancelable(toBeValidated, DocumentState.Validated, cancelToken, (doc) => this.validate(doc, cancelToken)); for (const doc of documents) { const state3 = this.buildState.get(doc.uri.toString()); if (state3) { state3.completed = true; } } } /** * Runs prior to beginning the build process to update the {@link DocumentBuildState} for each document * * @param documents collection of documents to be built * @param options the {@link BuildOptions} to use */ prepareBuild(documents, options2) { for (const doc of documents) { const key = doc.uri.toString(); const state3 = this.buildState.get(key); if (!state3 || state3.completed) { this.buildState.set(key, { completed: false, options: options2, result: state3 === null || state3 === void 0 ? void 0 : state3.result }); } } } /** * Runs a cancelable operation on a set of documents to bring them to a specified {@link DocumentState}. * * @param documents The array of documents to process. * @param targetState The target {@link DocumentState} to bring the documents to. * @param cancelToken A token that can be used to cancel the operation. * @param callback A function to be called for each document. * @returns A promise that resolves when all documents have been processed or the operation is canceled. * @throws Will throw `OperationCancelled` if the operation is canceled via a `CancellationToken`. */ async runCancelable(documents, targetState, cancelToken, callback) { const filtered = documents.filter((doc) => doc.state < targetState); for (const document2 of filtered) { await interruptAndCheck(cancelToken); await callback(document2); document2.state = targetState; await this.notifyDocumentPhase(document2, targetState, cancelToken); } const targetStateDocs = documents.filter((doc) => doc.state === targetState); await this.notifyBuildPhase(targetStateDocs, targetState, cancelToken); this.currentState = targetState; } onBuildPhase(targetState, callback) { this.buildPhaseListeners.add(targetState, callback); return Disposable.create(() => { this.buildPhaseListeners.delete(targetState, callback); }); } onDocumentPhase(targetState, callback) { this.documentPhaseListeners.add(targetState, callback); return Disposable.create(() => { this.documentPhaseListeners.delete(targetState, callback); }); } waitUntil(state3, uriOrToken, cancelToken) { let uri = void 0; if (uriOrToken && "path" in uriOrToken) { uri = uriOrToken; } else { cancelToken = uriOrToken; } cancelToken !== null && cancelToken !== void 0 ? cancelToken : cancelToken = cancellation_exports.CancellationToken.None; if (uri) { const document2 = this.langiumDocuments.getDocument(uri); if (document2 && document2.state > state3) { return Promise.resolve(uri); } } if (this.currentState >= state3) { return Promise.resolve(void 0); } else if (cancelToken.isCancellationRequested) { return Promise.reject(OperationCancelled); } return new Promise((resolve2, reject3) => { const buildDisposable = this.onBuildPhase(state3, () => { buildDisposable.dispose(); cancelDisposable.dispose(); if (uri) { const document2 = this.langiumDocuments.getDocument(uri); resolve2(document2 === null || document2 === void 0 ? void 0 : document2.uri); } else { resolve2(void 0); } }); const cancelDisposable = cancelToken.onCancellationRequested(() => { buildDisposable.dispose(); cancelDisposable.dispose(); reject3(OperationCancelled); }); }); } async notifyDocumentPhase(document2, state3, cancelToken) { const listeners = this.documentPhaseListeners.get(state3); const listenersCopy = listeners.slice(); for (const listener of listenersCopy) { try { await listener(document2, cancelToken); } catch (err) { if (!isOperationCancelled(err)) { throw err; } } } } async notifyBuildPhase(documents, state3, cancelToken) { if (documents.length === 0) { return; } const listeners = this.buildPhaseListeners.get(state3); const listenersCopy = listeners.slice(); for (const listener of listenersCopy) { await interruptAndCheck(cancelToken); await listener(documents, cancelToken); } } /** * Determine whether the given document should be validated during a build. The default * implementation checks the `validation` property of the build options. If it's set to `true` * or a `ValidationOptions` object, the document is included in the validation phase. */ shouldValidate(document2) { return Boolean(this.getBuildOptions(document2).validation); } /** * Run validation checks on the given document and store the resulting diagnostics in the document. * If the document already contains diagnostics, the new ones are added to the list. */ async validate(document2, cancelToken) { var _a, _b; const validator = this.serviceRegistry.getServices(document2.uri).validation.DocumentValidator; const validationSetting = this.getBuildOptions(document2).validation; const options2 = typeof validationSetting === "object" ? validationSetting : void 0; const diagnostics = await validator.validateDocument(document2, options2, cancelToken); if (document2.diagnostics) { document2.diagnostics.push(...diagnostics); } else { document2.diagnostics = diagnostics; } const state3 = this.buildState.get(document2.uri.toString()); if (state3) { (_a = state3.result) !== null && _a !== void 0 ? _a : state3.result = {}; const newCategories = (_b = options2 === null || options2 === void 0 ? void 0 : options2.categories) !== null && _b !== void 0 ? _b : ValidationCategory.all; if (state3.result.validationChecks) { state3.result.validationChecks.push(...newCategories); } else { state3.result.validationChecks = [...newCategories]; } } } getBuildOptions(document2) { var _a, _b; return (_b = (_a = this.buildState.get(document2.uri.toString())) === null || _a === void 0 ? void 0 : _a.options) !== null && _b !== void 0 ? _b : {}; } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/workspace/index-manager.js var DefaultIndexManager; var init_index_manager = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/workspace/index-manager.js"() { "use strict"; init_ast_utils(); init_caching(); init_cancellation(); init_stream(); init_uri_utils(); DefaultIndexManager = class { static { __name(this, "DefaultIndexManager"); } constructor(services) { this.symbolIndex = /* @__PURE__ */ new Map(); this.symbolByTypeIndex = new ContextCache(); this.referenceIndex = /* @__PURE__ */ new Map(); this.documents = services.workspace.LangiumDocuments; this.serviceRegistry = services.ServiceRegistry; this.astReflection = services.AstReflection; } findAllReferences(targetNode, astNodePath) { const targetDocUri = getDocument(targetNode).uri; const result = []; this.referenceIndex.forEach((docRefs) => { docRefs.forEach((refDescr) => { if (UriUtils.equals(refDescr.targetUri, targetDocUri) && refDescr.targetPath === astNodePath) { result.push(refDescr); } }); }); return stream(result); } allElements(nodeType3, uris) { let documentUris = stream(this.symbolIndex.keys()); if (uris) { documentUris = documentUris.filter((uri) => !uris || uris.has(uri)); } return documentUris.map((uri) => this.getFileDescriptions(uri, nodeType3)).flat(); } getFileDescriptions(uri, nodeType3) { var _a; if (!nodeType3) { return (_a = this.symbolIndex.get(uri)) !== null && _a !== void 0 ? _a : []; } const descriptions = this.symbolByTypeIndex.get(uri, nodeType3, () => { var _a2; const allFileDescriptions = (_a2 = this.symbolIndex.get(uri)) !== null && _a2 !== void 0 ? _a2 : []; return allFileDescriptions.filter((e3) => this.astReflection.isSubtype(e3.type, nodeType3)); }); return descriptions; } remove(uri) { const uriString = uri.toString(); this.symbolIndex.delete(uriString); this.symbolByTypeIndex.clear(uriString); this.referenceIndex.delete(uriString); } async updateContent(document2, cancelToken = cancellation_exports.CancellationToken.None) { const services = this.serviceRegistry.getServices(document2.uri); const exports2 = await services.references.ScopeComputation.computeExports(document2, cancelToken); const uri = document2.uri.toString(); this.symbolIndex.set(uri, exports2); this.symbolByTypeIndex.clear(uri); } async updateReferences(document2, cancelToken = cancellation_exports.CancellationToken.None) { const services = this.serviceRegistry.getServices(document2.uri); const indexData = await services.workspace.ReferenceDescriptionProvider.createDescriptions(document2, cancelToken); this.referenceIndex.set(document2.uri.toString(), indexData); } isAffected(document2, changedUris) { const references = this.referenceIndex.get(document2.uri.toString()); if (!references) { return false; } return references.some((ref) => !ref.local && changedUris.has(ref.targetUri.toString())); } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/workspace/workspace-manager.js var DefaultWorkspaceManager; var init_workspace_manager = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/workspace/workspace-manager.js"() { "use strict"; init_cancellation(); init_promise_utils(); init_uri_utils(); DefaultWorkspaceManager = class { static { __name(this, "DefaultWorkspaceManager"); } constructor(services) { this.initialBuildOptions = {}; this._ready = new Deferred(); this.serviceRegistry = services.ServiceRegistry; this.langiumDocuments = services.workspace.LangiumDocuments; this.documentBuilder = services.workspace.DocumentBuilder; this.fileSystemProvider = services.workspace.FileSystemProvider; this.mutex = services.workspace.WorkspaceLock; } get ready() { return this._ready.promise; } get workspaceFolders() { return this.folders; } initialize(params) { var _a; this.folders = (_a = params.workspaceFolders) !== null && _a !== void 0 ? _a : void 0; } initialized(_params) { return this.mutex.write((token2) => { var _a; return this.initializeWorkspace((_a = this.folders) !== null && _a !== void 0 ? _a : [], token2); }); } async initializeWorkspace(folders, cancelToken = cancellation_exports.CancellationToken.None) { const documents = await this.performStartup(folders); await interruptAndCheck(cancelToken); await this.documentBuilder.build(documents, this.initialBuildOptions, cancelToken); } /** * Performs the uninterruptable startup sequence of the workspace manager. * This methods loads all documents in the workspace and other documents and returns them. */ async performStartup(folders) { const fileExtensions = this.serviceRegistry.all.flatMap((e3) => e3.LanguageMetaData.fileExtensions); const documents = []; const collector = /* @__PURE__ */ __name((document2) => { documents.push(document2); if (!this.langiumDocuments.hasDocument(document2.uri)) { this.langiumDocuments.addDocument(document2); } }, "collector"); await this.loadAdditionalDocuments(folders, collector); await Promise.all(folders.map((wf) => [wf, this.getRootFolder(wf)]).map(async (entry) => this.traverseFolder(...entry, fileExtensions, collector))); this._ready.resolve(); return documents; } /** * Load all additional documents that shall be visible in the context of the given workspace * folders and add them to the collector. This can be used to include built-in libraries of * your language, which can be either loaded from provided files or constructed in memory. */ loadAdditionalDocuments(_folders, _collector) { return Promise.resolve(); } /** * Determine the root folder of the source documents in the given workspace folder. * The default implementation returns the URI of the workspace folder, but you can override * this to return a subfolder like `src` instead. */ getRootFolder(workspaceFolder) { return URI2.parse(workspaceFolder.uri); } /** * Traverse the file system folder identified by the given URI and its subfolders. All * contained files that match the file extensions are added to the collector. */ async traverseFolder(workspaceFolder, folderPath, fileExtensions, collector) { const content = await this.fileSystemProvider.readDirectory(folderPath); await Promise.all(content.map(async (entry) => { if (this.includeEntry(workspaceFolder, entry, fileExtensions)) { if (entry.isDirectory) { await this.traverseFolder(workspaceFolder, entry.uri, fileExtensions, collector); } else if (entry.isFile) { const document2 = await this.langiumDocuments.getOrCreateDocument(entry.uri); collector(document2); } } })); } /** * Determine whether the given folder entry shall be included while indexing the workspace. */ includeEntry(_workspaceFolder, entry, fileExtensions) { const name = UriUtils.basename(entry.uri); if (name.startsWith(".")) { return false; } if (entry.isDirectory) { return name !== "node_modules" && name !== "out"; } else if (entry.isFile) { const extname = UriUtils.extname(entry.uri); return fileExtensions.includes(extname); } return false; } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/lexer.js function isTokenTypeArray(tokenVocabulary) { return Array.isArray(tokenVocabulary) && (tokenVocabulary.length === 0 || "name" in tokenVocabulary[0]); } function isIMultiModeLexerDefinition(tokenVocabulary) { return tokenVocabulary && "modes" in tokenVocabulary && "defaultMode" in tokenVocabulary; } function isTokenTypeDictionary(tokenVocabulary) { return !isTokenTypeArray(tokenVocabulary) && !isIMultiModeLexerDefinition(tokenVocabulary); } var DefaultLexerErrorMessageProvider, DEFAULT_TOKENIZE_OPTIONS, DefaultLexer; var init_lexer2 = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/lexer.js"() { "use strict"; init_api5(); DefaultLexerErrorMessageProvider = class { static { __name(this, "DefaultLexerErrorMessageProvider"); } buildUnexpectedCharactersMessage(fullText, startOffset, length2, line2, column2) { return defaultLexerErrorProvider.buildUnexpectedCharactersMessage(fullText, startOffset, length2, line2, column2); } buildUnableToPopLexerModeMessage(token2) { return defaultLexerErrorProvider.buildUnableToPopLexerModeMessage(token2); } }; DEFAULT_TOKENIZE_OPTIONS = { mode: "full" }; DefaultLexer = class { static { __name(this, "DefaultLexer"); } constructor(services) { this.errorMessageProvider = services.parser.LexerErrorMessageProvider; this.tokenBuilder = services.parser.TokenBuilder; const tokens2 = this.tokenBuilder.buildTokens(services.Grammar, { caseInsensitive: services.LanguageMetaData.caseInsensitive }); this.tokenTypes = this.toTokenTypeDictionary(tokens2); const lexerTokens = isTokenTypeDictionary(tokens2) ? Object.values(tokens2) : tokens2; const production = services.LanguageMetaData.mode === "production"; this.chevrotainLexer = new Lexer2(lexerTokens, { positionTracking: "full", skipValidations: production, errorMessageProvider: this.errorMessageProvider }); } get definition() { return this.tokenTypes; } tokenize(text4, _options = DEFAULT_TOKENIZE_OPTIONS) { var _a, _b, _c; const chevrotainResult = this.chevrotainLexer.tokenize(text4); return { tokens: chevrotainResult.tokens, errors: chevrotainResult.errors, hidden: (_a = chevrotainResult.groups.hidden) !== null && _a !== void 0 ? _a : [], report: (_c = (_b = this.tokenBuilder).flushLexingReport) === null || _c === void 0 ? void 0 : _c.call(_b, text4) }; } toTokenTypeDictionary(buildTokens) { if (isTokenTypeDictionary(buildTokens)) return buildTokens; const tokens2 = isIMultiModeLexerDefinition(buildTokens) ? Object.values(buildTokens.modes).flat() : buildTokens; const res = {}; tokens2.forEach((token2) => res[token2.name] = token2); return res; } }; __name(isTokenTypeArray, "isTokenTypeArray"); __name(isIMultiModeLexerDefinition, "isIMultiModeLexerDefinition"); __name(isTokenTypeDictionary, "isTokenTypeDictionary"); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/documentation/jsdoc.js function parseJSDoc(node2, start3, options2) { let opts; let position5; if (typeof node2 === "string") { position5 = start3; opts = options2; } else { position5 = node2.range.start; opts = start3; } if (!position5) { position5 = Position.create(0, 0); } const lines = getLines(node2); const normalizedOptions = normalizeOptions(opts); const tokens2 = tokenize({ lines, position: position5, options: normalizedOptions }); return parseJSDocComment({ index: 0, tokens: tokens2, position: position5 }); } function isJSDoc(node2, options2) { const normalizedOptions = normalizeOptions(options2); const lines = getLines(node2); if (lines.length === 0) { return false; } const first3 = lines[0]; const last3 = lines[lines.length - 1]; const firstRegex = normalizedOptions.start; const lastRegex = normalizedOptions.end; return Boolean(firstRegex === null || firstRegex === void 0 ? void 0 : firstRegex.exec(first3)) && Boolean(lastRegex === null || lastRegex === void 0 ? void 0 : lastRegex.exec(last3)); } function getLines(node2) { let content = ""; if (typeof node2 === "string") { content = node2; } else { content = node2.text; } const lines = content.split(NEWLINE_REGEXP); return lines; } function tokenize(context) { var _a, _b, _c; const tokens2 = []; let currentLine = context.position.line; let currentCharacter = context.position.character; for (let i2 = 0; i2 < context.lines.length; i2++) { const first3 = i2 === 0; const last3 = i2 === context.lines.length - 1; let line2 = context.lines[i2]; let index = 0; if (first3 && context.options.start) { const match2 = (_a = context.options.start) === null || _a === void 0 ? void 0 : _a.exec(line2); if (match2) { index = match2.index + match2[0].length; } } else { const match2 = (_b = context.options.line) === null || _b === void 0 ? void 0 : _b.exec(line2); if (match2) { index = match2.index + match2[0].length; } } if (last3) { const match2 = (_c = context.options.end) === null || _c === void 0 ? void 0 : _c.exec(line2); if (match2) { line2 = line2.substring(0, match2.index); } } line2 = line2.substring(0, lastCharacter(line2)); const whitespaceEnd = skipWhitespace(line2, index); if (whitespaceEnd >= line2.length) { if (tokens2.length > 0) { const position5 = Position.create(currentLine, currentCharacter); tokens2.push({ type: "break", content: "", range: Range.create(position5, position5) }); } } else { tagRegex.lastIndex = index; const tagMatch = tagRegex.exec(line2); if (tagMatch) { const fullMatch = tagMatch[0]; const value2 = tagMatch[1]; const start3 = Position.create(currentLine, currentCharacter + index); const end2 = Position.create(currentLine, currentCharacter + index + fullMatch.length); tokens2.push({ type: "tag", content: value2, range: Range.create(start3, end2) }); index += fullMatch.length; index = skipWhitespace(line2, index); } if (index < line2.length) { const rest = line2.substring(index); const inlineTagMatches = Array.from(rest.matchAll(inlineTagRegex)); tokens2.push(...buildInlineTokens(inlineTagMatches, rest, currentLine, currentCharacter + index)); } } currentLine++; currentCharacter = 0; } if (tokens2.length > 0 && tokens2[tokens2.length - 1].type === "break") { return tokens2.slice(0, -1); } return tokens2; } function buildInlineTokens(tags2, line2, lineIndex, characterIndex) { const tokens2 = []; if (tags2.length === 0) { const start3 = Position.create(lineIndex, characterIndex); const end2 = Position.create(lineIndex, characterIndex + line2.length); tokens2.push({ type: "text", content: line2, range: Range.create(start3, end2) }); } else { let lastIndex = 0; for (const match2 of tags2) { const matchIndex = match2.index; const startContent = line2.substring(lastIndex, matchIndex); if (startContent.length > 0) { tokens2.push({ type: "text", content: line2.substring(lastIndex, matchIndex), range: Range.create(Position.create(lineIndex, lastIndex + characterIndex), Position.create(lineIndex, matchIndex + characterIndex)) }); } let offset = startContent.length + 1; const tagName = match2[1]; tokens2.push({ type: "inline-tag", content: tagName, range: Range.create(Position.create(lineIndex, lastIndex + offset + characterIndex), Position.create(lineIndex, lastIndex + offset + tagName.length + characterIndex)) }); offset += tagName.length; if (match2.length === 4) { offset += match2[2].length; const value2 = match2[3]; tokens2.push({ type: "text", content: value2, range: Range.create(Position.create(lineIndex, lastIndex + offset + characterIndex), Position.create(lineIndex, lastIndex + offset + value2.length + characterIndex)) }); } else { tokens2.push({ type: "text", content: "", range: Range.create(Position.create(lineIndex, lastIndex + offset + characterIndex), Position.create(lineIndex, lastIndex + offset + characterIndex)) }); } lastIndex = matchIndex + match2[0].length; } const endContent = line2.substring(lastIndex); if (endContent.length > 0) { tokens2.push({ type: "text", content: endContent, range: Range.create(Position.create(lineIndex, lastIndex + characterIndex), Position.create(lineIndex, lastIndex + characterIndex + endContent.length)) }); } } return tokens2; } function skipWhitespace(line2, index) { const match2 = line2.substring(index).match(nonWhitespaceRegex); if (match2) { return index + match2.index; } else { return line2.length; } } function lastCharacter(line2) { const match2 = line2.match(whitespaceEndRegex); if (match2 && typeof match2.index === "number") { return match2.index; } return void 0; } function parseJSDocComment(context) { var _a, _b, _c, _d; const startPosition = Position.create(context.position.line, context.position.character); if (context.tokens.length === 0) { return new JSDocCommentImpl([], Range.create(startPosition, startPosition)); } const elements2 = []; while (context.index < context.tokens.length) { const element3 = parseJSDocElement(context, elements2[elements2.length - 1]); if (element3) { elements2.push(element3); } } const start3 = (_b = (_a = elements2[0]) === null || _a === void 0 ? void 0 : _a.range.start) !== null && _b !== void 0 ? _b : startPosition; const end2 = (_d = (_c = elements2[elements2.length - 1]) === null || _c === void 0 ? void 0 : _c.range.end) !== null && _d !== void 0 ? _d : startPosition; return new JSDocCommentImpl(elements2, Range.create(start3, end2)); } function parseJSDocElement(context, last3) { const next3 = context.tokens[context.index]; if (next3.type === "tag") { return parseJSDocTag(context, false); } else if (next3.type === "text" || next3.type === "inline-tag") { return parseJSDocText(context); } else { appendEmptyLine(next3, last3); context.index++; return void 0; } } function appendEmptyLine(token2, element3) { if (element3) { const line2 = new JSDocLineImpl("", token2.range); if ("inlines" in element3) { element3.inlines.push(line2); } else { element3.content.inlines.push(line2); } } } function parseJSDocText(context) { let token2 = context.tokens[context.index]; const firstToken = token2; let lastToken = token2; const lines = []; while (token2 && token2.type !== "break" && token2.type !== "tag") { lines.push(parseJSDocInline(context)); lastToken = token2; token2 = context.tokens[context.index]; } return new JSDocTextImpl(lines, Range.create(firstToken.range.start, lastToken.range.end)); } function parseJSDocInline(context) { const token2 = context.tokens[context.index]; if (token2.type === "inline-tag") { return parseJSDocTag(context, true); } else { return parseJSDocLine(context); } } function parseJSDocTag(context, inline) { const tagToken = context.tokens[context.index++]; const name = tagToken.content.substring(1); const nextToken = context.tokens[context.index]; if ((nextToken === null || nextToken === void 0 ? void 0 : nextToken.type) === "text") { if (inline) { const docLine = parseJSDocLine(context); return new JSDocTagImpl(name, new JSDocTextImpl([docLine], docLine.range), inline, Range.create(tagToken.range.start, docLine.range.end)); } else { const textDoc = parseJSDocText(context); return new JSDocTagImpl(name, textDoc, inline, Range.create(tagToken.range.start, textDoc.range.end)); } } else { const range3 = tagToken.range; return new JSDocTagImpl(name, new JSDocTextImpl([], range3), inline, range3); } } function parseJSDocLine(context) { const token2 = context.tokens[context.index++]; return new JSDocLineImpl(token2.content, token2.range); } function normalizeOptions(options2) { if (!options2) { return normalizeOptions({ start: "/**", end: "*/", line: "*" }); } const { start: start3, end: end2, line: line2 } = options2; return { start: normalizeOption(start3, true), end: normalizeOption(end2, false), line: normalizeOption(line2, true) }; } function normalizeOption(option2, start3) { if (typeof option2 === "string" || typeof option2 === "object") { const escaped = typeof option2 === "string" ? escapeRegExp(option2) : option2.source; if (start3) { return new RegExp(`^\\s*${escaped}`); } else { return new RegExp(`\\s*${escaped}\\s*$`); } } else { return option2; } } function renderInlineTag(tag, content, options2) { var _a, _b; if (tag === "linkplain" || tag === "linkcode" || tag === "link") { const index = content.indexOf(" "); let display = content; if (index > 0) { const displayStart = skipWhitespace(content, index); display = content.substring(displayStart); content = content.substring(0, index); } if (tag === "linkcode" || tag === "link" && options2.link === "code") { display = `\`${display}\``; } const renderedLink = (_b = (_a = options2.renderLink) === null || _a === void 0 ? void 0 : _a.call(options2, content, display)) !== null && _b !== void 0 ? _b : renderLinkDefault(content, display); return renderedLink; } return void 0; } function renderLinkDefault(content, display) { try { URI2.parse(content, true); return `[${display}](${content})`; } catch (_a) { return content; } } function fillNewlines(text4) { if (text4.endsWith("\n")) { return "\n"; } else { return "\n\n"; } } var tagRegex, inlineTagRegex, nonWhitespaceRegex, whitespaceEndRegex, JSDocCommentImpl, JSDocTagImpl, JSDocTextImpl, JSDocLineImpl; var init_jsdoc = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/documentation/jsdoc.js"() { "use strict"; init_main(); init_regexp_utils(); init_uri_utils(); __name(parseJSDoc, "parseJSDoc"); __name(isJSDoc, "isJSDoc"); __name(getLines, "getLines"); tagRegex = /\s*(@([\p{L}][\p{L}\p{N}]*)?)/uy; inlineTagRegex = /\{(@[\p{L}][\p{L}\p{N}]*)(\s*)([^\r\n}]+)?\}/gu; __name(tokenize, "tokenize"); __name(buildInlineTokens, "buildInlineTokens"); nonWhitespaceRegex = /\S/; whitespaceEndRegex = /\s*$/; __name(skipWhitespace, "skipWhitespace"); __name(lastCharacter, "lastCharacter"); __name(parseJSDocComment, "parseJSDocComment"); __name(parseJSDocElement, "parseJSDocElement"); __name(appendEmptyLine, "appendEmptyLine"); __name(parseJSDocText, "parseJSDocText"); __name(parseJSDocInline, "parseJSDocInline"); __name(parseJSDocTag, "parseJSDocTag"); __name(parseJSDocLine, "parseJSDocLine"); __name(normalizeOptions, "normalizeOptions"); __name(normalizeOption, "normalizeOption"); JSDocCommentImpl = class { static { __name(this, "JSDocCommentImpl"); } constructor(elements2, range3) { this.elements = elements2; this.range = range3; } getTag(name) { return this.getAllTags().find((e3) => e3.name === name); } getTags(name) { return this.getAllTags().filter((e3) => e3.name === name); } getAllTags() { return this.elements.filter((e3) => "name" in e3); } toString() { let value2 = ""; for (const element3 of this.elements) { if (value2.length === 0) { value2 = element3.toString(); } else { const text4 = element3.toString(); value2 += fillNewlines(value2) + text4; } } return value2.trim(); } toMarkdown(options2) { let value2 = ""; for (const element3 of this.elements) { if (value2.length === 0) { value2 = element3.toMarkdown(options2); } else { const text4 = element3.toMarkdown(options2); value2 += fillNewlines(value2) + text4; } } return value2.trim(); } }; JSDocTagImpl = class { static { __name(this, "JSDocTagImpl"); } constructor(name, content, inline, range3) { this.name = name; this.content = content; this.inline = inline; this.range = range3; } toString() { let text4 = `@${this.name}`; const content = this.content.toString(); if (this.content.inlines.length === 1) { text4 = `${text4} ${content}`; } else if (this.content.inlines.length > 1) { text4 = `${text4} ${content}`; } if (this.inline) { return `{${text4}}`; } else { return text4; } } toMarkdown(options2) { var _a, _b; return (_b = (_a = options2 === null || options2 === void 0 ? void 0 : options2.renderTag) === null || _a === void 0 ? void 0 : _a.call(options2, this)) !== null && _b !== void 0 ? _b : this.toMarkdownDefault(options2); } toMarkdownDefault(options2) { const content = this.content.toMarkdown(options2); if (this.inline) { const rendered = renderInlineTag(this.name, content, options2 !== null && options2 !== void 0 ? options2 : {}); if (typeof rendered === "string") { return rendered; } } let marker = ""; if ((options2 === null || options2 === void 0 ? void 0 : options2.tag) === "italic" || (options2 === null || options2 === void 0 ? void 0 : options2.tag) === void 0) { marker = "*"; } else if ((options2 === null || options2 === void 0 ? void 0 : options2.tag) === "bold") { marker = "**"; } else if ((options2 === null || options2 === void 0 ? void 0 : options2.tag) === "bold-italic") { marker = "***"; } let text4 = `${marker}@${this.name}${marker}`; if (this.content.inlines.length === 1) { text4 = `${text4} \u2014 ${content}`; } else if (this.content.inlines.length > 1) { text4 = `${text4} ${content}`; } if (this.inline) { return `{${text4}}`; } else { return text4; } } }; __name(renderInlineTag, "renderInlineTag"); __name(renderLinkDefault, "renderLinkDefault"); JSDocTextImpl = class { static { __name(this, "JSDocTextImpl"); } constructor(lines, range3) { this.inlines = lines; this.range = range3; } toString() { let text4 = ""; for (let i2 = 0; i2 < this.inlines.length; i2++) { const inline = this.inlines[i2]; const next3 = this.inlines[i2 + 1]; text4 += inline.toString(); if (next3 && next3.range.start.line > inline.range.start.line) { text4 += "\n"; } } return text4; } toMarkdown(options2) { let text4 = ""; for (let i2 = 0; i2 < this.inlines.length; i2++) { const inline = this.inlines[i2]; const next3 = this.inlines[i2 + 1]; text4 += inline.toMarkdown(options2); if (next3 && next3.range.start.line > inline.range.start.line) { text4 += "\n"; } } return text4; } }; JSDocLineImpl = class { static { __name(this, "JSDocLineImpl"); } constructor(text4, range3) { this.text = text4; this.range = range3; } toString() { return this.text; } toMarkdown() { return this.text; } }; __name(fillNewlines, "fillNewlines"); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/documentation/documentation-provider.js var JSDocDocumentationProvider; var init_documentation_provider = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/documentation/documentation-provider.js"() { "use strict"; init_ast_utils(); init_jsdoc(); JSDocDocumentationProvider = class { static { __name(this, "JSDocDocumentationProvider"); } constructor(services) { this.indexManager = services.shared.workspace.IndexManager; this.commentProvider = services.documentation.CommentProvider; } getDocumentation(node2) { const comment2 = this.commentProvider.getComment(node2); if (comment2 && isJSDoc(comment2)) { const parsedJSDoc = parseJSDoc(comment2); return parsedJSDoc.toMarkdown({ renderLink: /* @__PURE__ */ __name((link2, display) => { return this.documentationLinkRenderer(node2, link2, display); }, "renderLink"), renderTag: /* @__PURE__ */ __name((tag) => { return this.documentationTagRenderer(node2, tag); }, "renderTag") }); } return void 0; } documentationLinkRenderer(node2, name, display) { var _a; const description = (_a = this.findNameInPrecomputedScopes(node2, name)) !== null && _a !== void 0 ? _a : this.findNameInGlobalScope(node2, name); if (description && description.nameSegment) { const line2 = description.nameSegment.range.start.line + 1; const character2 = description.nameSegment.range.start.character + 1; const uri = description.documentUri.with({ fragment: `L${line2},${character2}` }); return `[${display}](${uri.toString()})`; } else { return void 0; } } documentationTagRenderer(_node, _tag) { return void 0; } findNameInPrecomputedScopes(node2, name) { const document2 = getDocument(node2); const precomputed = document2.precomputedScopes; if (!precomputed) { return void 0; } let currentNode = node2; do { const allDescriptions = precomputed.get(currentNode); const description = allDescriptions.find((e3) => e3.name === name); if (description) { return description; } currentNode = currentNode.$container; } while (currentNode); return void 0; } findNameInGlobalScope(node2, name) { const description = this.indexManager.allElements().find((e3) => e3.name === name); return description; } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/documentation/comment-provider.js var DefaultCommentProvider; var init_comment_provider = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/documentation/comment-provider.js"() { "use strict"; init_json_serializer(); init_cst_utils(); DefaultCommentProvider = class { static { __name(this, "DefaultCommentProvider"); } constructor(services) { this.grammarConfig = () => services.parser.GrammarConfig; } getComment(node2) { var _a; if (isAstNodeWithComment(node2)) { return node2.$comment; } return (_a = findCommentNode(node2.$cstNode, this.grammarConfig().multilineCommentRules)) === null || _a === void 0 ? void 0 : _a.text; } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/async-parser.js var DefaultAsyncParser, AbstractThreadedAsyncParser, ParserWorker; var init_async_parser = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/async-parser.js"() { "use strict"; init_promise_utils(); init_event3(); DefaultAsyncParser = class { static { __name(this, "DefaultAsyncParser"); } constructor(services) { this.syncParser = services.parser.LangiumParser; } parse(text4, _cancelToken) { return Promise.resolve(this.syncParser.parse(text4)); } }; AbstractThreadedAsyncParser = class { static { __name(this, "AbstractThreadedAsyncParser"); } constructor(services) { this.threadCount = 8; this.terminationDelay = 200; this.workerPool = []; this.queue = []; this.hydrator = services.serializer.Hydrator; } initializeWorkers() { while (this.workerPool.length < this.threadCount) { const worker = this.createWorker(); worker.onReady(() => { if (this.queue.length > 0) { const deferred = this.queue.shift(); if (deferred) { worker.lock(); deferred.resolve(worker); } } }); this.workerPool.push(worker); } } async parse(text4, cancelToken) { const worker = await this.acquireParserWorker(cancelToken); const deferred = new Deferred(); let timeout2; const cancellation = cancelToken.onCancellationRequested(() => { timeout2 = setTimeout(() => { this.terminateWorker(worker); }, this.terminationDelay); }); worker.parse(text4).then((result) => { const hydrated = this.hydrator.hydrate(result); deferred.resolve(hydrated); }).catch((err) => { deferred.reject(err); }).finally(() => { cancellation.dispose(); clearTimeout(timeout2); }); return deferred.promise; } terminateWorker(worker) { worker.terminate(); const index = this.workerPool.indexOf(worker); if (index >= 0) { this.workerPool.splice(index, 1); } } async acquireParserWorker(cancelToken) { this.initializeWorkers(); for (const worker of this.workerPool) { if (worker.ready) { worker.lock(); return worker; } } const deferred = new Deferred(); cancelToken.onCancellationRequested(() => { const index = this.queue.indexOf(deferred); if (index >= 0) { this.queue.splice(index, 1); } deferred.reject(OperationCancelled); }); this.queue.push(deferred); return deferred.promise; } }; ParserWorker = class { static { __name(this, "ParserWorker"); } get ready() { return this._ready; } get onReady() { return this.onReadyEmitter.event; } constructor(sendMessage, onMessage, onError, terminate) { this.onReadyEmitter = new event_exports.Emitter(); this.deferred = new Deferred(); this._ready = true; this._parsing = false; this.sendMessage = sendMessage; this._terminate = terminate; onMessage((result) => { const parseResult = result; this.deferred.resolve(parseResult); this.unlock(); }); onError((error3) => { this.deferred.reject(error3); this.unlock(); }); } terminate() { this.deferred.reject(OperationCancelled); this._terminate(); } lock() { this._ready = false; } unlock() { this._parsing = false; this._ready = true; this.onReadyEmitter.fire(); } parse(text4) { if (this._parsing) { throw new Error("Parser worker is busy"); } this._parsing = true; this.deferred = new Deferred(); this.sendMessage(text4); return this.deferred.promise; } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/workspace/workspace-lock.js var DefaultWorkspaceLock; var init_workspace_lock = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/workspace/workspace-lock.js"() { "use strict"; init_cancellation(); init_promise_utils(); DefaultWorkspaceLock = class { static { __name(this, "DefaultWorkspaceLock"); } constructor() { this.previousTokenSource = new cancellation_exports.CancellationTokenSource(); this.writeQueue = []; this.readQueue = []; this.done = true; } write(action) { this.cancelWrite(); const tokenSource = startCancelableOperation(); this.previousTokenSource = tokenSource; return this.enqueue(this.writeQueue, action, tokenSource.token); } read(action) { return this.enqueue(this.readQueue, action); } enqueue(queue, action, cancellationToken = cancellation_exports.CancellationToken.None) { const deferred = new Deferred(); const entry = { action, deferred, cancellationToken }; queue.push(entry); this.performNextOperation(); return deferred.promise; } async performNextOperation() { if (!this.done) { return; } const entries2 = []; if (this.writeQueue.length > 0) { entries2.push(this.writeQueue.shift()); } else if (this.readQueue.length > 0) { entries2.push(...this.readQueue.splice(0, this.readQueue.length)); } else { return; } this.done = false; await Promise.all(entries2.map(async ({ action, deferred, cancellationToken }) => { try { const result = await Promise.resolve().then(() => action(cancellationToken)); deferred.resolve(result); } catch (err) { if (isOperationCancelled(err)) { deferred.resolve(void 0); } else { deferred.reject(err); } } })); this.done = true; this.performNextOperation(); } cancelWrite() { this.previousTokenSource.cancel(); } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/serializer/hydrator.js var DefaultHydrator; var init_hydrator = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/serializer/hydrator.js"() { "use strict"; init_cst_node_builder(); init_ast(); init_syntax_tree(); init_ast_utils(); init_collections(); init_cst_utils(); DefaultHydrator = class { static { __name(this, "DefaultHydrator"); } constructor(services) { this.grammarElementIdMap = new BiMap(); this.tokenTypeIdMap = new BiMap(); this.grammar = services.Grammar; this.lexer = services.parser.Lexer; this.linker = services.references.Linker; } dehydrate(result) { return { lexerErrors: result.lexerErrors, lexerReport: result.lexerReport ? this.dehydrateLexerReport(result.lexerReport) : void 0, // We need to create shallow copies of the errors // The original errors inherit from the `Error` class, which is not transferable across worker threads parserErrors: result.parserErrors.map((e3) => Object.assign(Object.assign({}, e3), { message: e3.message })), value: this.dehydrateAstNode(result.value, this.createDehyrationContext(result.value)) }; } dehydrateLexerReport(lexerReport) { return lexerReport; } createDehyrationContext(node2) { const astNodes = /* @__PURE__ */ new Map(); const cstNodes = /* @__PURE__ */ new Map(); for (const astNode of streamAst(node2)) { astNodes.set(astNode, {}); } if (node2.$cstNode) { for (const cstNode of streamCst(node2.$cstNode)) { cstNodes.set(cstNode, {}); } } return { astNodes, cstNodes }; } dehydrateAstNode(node2, context) { const obj = context.astNodes.get(node2); obj.$type = node2.$type; obj.$containerIndex = node2.$containerIndex; obj.$containerProperty = node2.$containerProperty; if (node2.$cstNode !== void 0) { obj.$cstNode = this.dehydrateCstNode(node2.$cstNode, context); } for (const [name, value2] of Object.entries(node2)) { if (name.startsWith("$")) { continue; } if (Array.isArray(value2)) { const arr = []; obj[name] = arr; for (const item of value2) { if (isAstNode(item)) { arr.push(this.dehydrateAstNode(item, context)); } else if (isReference(item)) { arr.push(this.dehydrateReference(item, context)); } else { arr.push(item); } } } else if (isAstNode(value2)) { obj[name] = this.dehydrateAstNode(value2, context); } else if (isReference(value2)) { obj[name] = this.dehydrateReference(value2, context); } else if (value2 !== void 0) { obj[name] = value2; } } return obj; } dehydrateReference(reference, context) { const obj = {}; obj.$refText = reference.$refText; if (reference.$refNode) { obj.$refNode = context.cstNodes.get(reference.$refNode); } return obj; } dehydrateCstNode(node2, context) { const cstNode = context.cstNodes.get(node2); if (isRootCstNode(node2)) { cstNode.fullText = node2.fullText; } else { cstNode.grammarSource = this.getGrammarElementId(node2.grammarSource); } cstNode.hidden = node2.hidden; cstNode.astNode = context.astNodes.get(node2.astNode); if (isCompositeCstNode(node2)) { cstNode.content = node2.content.map((child) => this.dehydrateCstNode(child, context)); } else if (isLeafCstNode(node2)) { cstNode.tokenType = node2.tokenType.name; cstNode.offset = node2.offset; cstNode.length = node2.length; cstNode.startLine = node2.range.start.line; cstNode.startColumn = node2.range.start.character; cstNode.endLine = node2.range.end.line; cstNode.endColumn = node2.range.end.character; } return cstNode; } hydrate(result) { const node2 = result.value; const context = this.createHydrationContext(node2); if ("$cstNode" in node2) { this.hydrateCstNode(node2.$cstNode, context); } return { lexerErrors: result.lexerErrors, lexerReport: result.lexerReport, parserErrors: result.parserErrors, value: this.hydrateAstNode(node2, context) }; } createHydrationContext(node2) { const astNodes = /* @__PURE__ */ new Map(); const cstNodes = /* @__PURE__ */ new Map(); for (const astNode of streamAst(node2)) { astNodes.set(astNode, {}); } let root3; if (node2.$cstNode) { for (const cstNode of streamCst(node2.$cstNode)) { let cst; if ("fullText" in cstNode) { cst = new RootCstNodeImpl(cstNode.fullText); root3 = cst; } else if ("content" in cstNode) { cst = new CompositeCstNodeImpl(); } else if ("tokenType" in cstNode) { cst = this.hydrateCstLeafNode(cstNode); } if (cst) { cstNodes.set(cstNode, cst); cst.root = root3; } } } return { astNodes, cstNodes }; } hydrateAstNode(node2, context) { const astNode = context.astNodes.get(node2); astNode.$type = node2.$type; astNode.$containerIndex = node2.$containerIndex; astNode.$containerProperty = node2.$containerProperty; if (node2.$cstNode) { astNode.$cstNode = context.cstNodes.get(node2.$cstNode); } for (const [name, value2] of Object.entries(node2)) { if (name.startsWith("$")) { continue; } if (Array.isArray(value2)) { const arr = []; astNode[name] = arr; for (const item of value2) { if (isAstNode(item)) { arr.push(this.setParent(this.hydrateAstNode(item, context), astNode)); } else if (isReference(item)) { arr.push(this.hydrateReference(item, astNode, name, context)); } else { arr.push(item); } } } else if (isAstNode(value2)) { astNode[name] = this.setParent(this.hydrateAstNode(value2, context), astNode); } else if (isReference(value2)) { astNode[name] = this.hydrateReference(value2, astNode, name, context); } else if (value2 !== void 0) { astNode[name] = value2; } } return astNode; } setParent(node2, parent4) { node2.$container = parent4; return node2; } hydrateReference(reference, node2, name, context) { return this.linker.buildReference(node2, name, context.cstNodes.get(reference.$refNode), reference.$refText); } hydrateCstNode(cstNode, context, num = 0) { const cstNodeObj = context.cstNodes.get(cstNode); if (typeof cstNode.grammarSource === "number") { cstNodeObj.grammarSource = this.getGrammarElement(cstNode.grammarSource); } cstNodeObj.astNode = context.astNodes.get(cstNode.astNode); if (isCompositeCstNode(cstNodeObj)) { for (const child of cstNode.content) { const hydrated = this.hydrateCstNode(child, context, num++); cstNodeObj.content.push(hydrated); } } return cstNodeObj; } hydrateCstLeafNode(cstNode) { const tokenType = this.getTokenType(cstNode.tokenType); const offset = cstNode.offset; const length2 = cstNode.length; const startLine = cstNode.startLine; const startColumn = cstNode.startColumn; const endLine = cstNode.endLine; const endColumn = cstNode.endColumn; const hidden = cstNode.hidden; const node2 = new LeafCstNodeImpl(offset, length2, { start: { line: startLine, character: startColumn }, end: { line: endLine, character: endColumn } }, tokenType, hidden); return node2; } getTokenType(name) { return this.lexer.definition[name]; } getGrammarElementId(node2) { if (!node2) { return void 0; } if (this.grammarElementIdMap.size === 0) { this.createGrammarElementIdMap(); } return this.grammarElementIdMap.get(node2); } getGrammarElement(id30) { if (this.grammarElementIdMap.size === 0) { this.createGrammarElementIdMap(); } const element3 = this.grammarElementIdMap.getKey(id30); return element3; } createGrammarElementIdMap() { let id30 = 0; for (const element3 of streamAst(this.grammar)) { if (isAbstractElement(element3)) { this.grammarElementIdMap.set(element3, id30++); } } } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/default-module.js function createDefaultCoreModule(context) { return { documentation: { CommentProvider: /* @__PURE__ */ __name((services) => new DefaultCommentProvider(services), "CommentProvider"), DocumentationProvider: /* @__PURE__ */ __name((services) => new JSDocDocumentationProvider(services), "DocumentationProvider") }, parser: { AsyncParser: /* @__PURE__ */ __name((services) => new DefaultAsyncParser(services), "AsyncParser"), GrammarConfig: /* @__PURE__ */ __name((services) => createGrammarConfig(services), "GrammarConfig"), LangiumParser: /* @__PURE__ */ __name((services) => createLangiumParser(services), "LangiumParser"), CompletionParser: /* @__PURE__ */ __name((services) => createCompletionParser(services), "CompletionParser"), ValueConverter: /* @__PURE__ */ __name(() => new DefaultValueConverter(), "ValueConverter"), TokenBuilder: /* @__PURE__ */ __name(() => new DefaultTokenBuilder(), "TokenBuilder"), Lexer: /* @__PURE__ */ __name((services) => new DefaultLexer(services), "Lexer"), ParserErrorMessageProvider: /* @__PURE__ */ __name(() => new LangiumParserErrorMessageProvider(), "ParserErrorMessageProvider"), LexerErrorMessageProvider: /* @__PURE__ */ __name(() => new DefaultLexerErrorMessageProvider(), "LexerErrorMessageProvider") }, workspace: { AstNodeLocator: /* @__PURE__ */ __name(() => new DefaultAstNodeLocator(), "AstNodeLocator"), AstNodeDescriptionProvider: /* @__PURE__ */ __name((services) => new DefaultAstNodeDescriptionProvider(services), "AstNodeDescriptionProvider"), ReferenceDescriptionProvider: /* @__PURE__ */ __name((services) => new DefaultReferenceDescriptionProvider(services), "ReferenceDescriptionProvider") }, references: { Linker: /* @__PURE__ */ __name((services) => new DefaultLinker(services), "Linker"), NameProvider: /* @__PURE__ */ __name(() => new DefaultNameProvider(), "NameProvider"), ScopeProvider: /* @__PURE__ */ __name((services) => new DefaultScopeProvider(services), "ScopeProvider"), ScopeComputation: /* @__PURE__ */ __name((services) => new DefaultScopeComputation(services), "ScopeComputation"), References: /* @__PURE__ */ __name((services) => new DefaultReferences(services), "References") }, serializer: { Hydrator: /* @__PURE__ */ __name((services) => new DefaultHydrator(services), "Hydrator"), JsonSerializer: /* @__PURE__ */ __name((services) => new DefaultJsonSerializer(services), "JsonSerializer") }, validation: { DocumentValidator: /* @__PURE__ */ __name((services) => new DefaultDocumentValidator(services), "DocumentValidator"), ValidationRegistry: /* @__PURE__ */ __name((services) => new ValidationRegistry(services), "ValidationRegistry") }, shared: /* @__PURE__ */ __name(() => context.shared, "shared") }; } function createDefaultSharedCoreModule(context) { return { ServiceRegistry: /* @__PURE__ */ __name((services) => new DefaultServiceRegistry(services), "ServiceRegistry"), workspace: { LangiumDocuments: /* @__PURE__ */ __name((services) => new DefaultLangiumDocuments(services), "LangiumDocuments"), LangiumDocumentFactory: /* @__PURE__ */ __name((services) => new DefaultLangiumDocumentFactory(services), "LangiumDocumentFactory"), DocumentBuilder: /* @__PURE__ */ __name((services) => new DefaultDocumentBuilder(services), "DocumentBuilder"), IndexManager: /* @__PURE__ */ __name((services) => new DefaultIndexManager(services), "IndexManager"), WorkspaceManager: /* @__PURE__ */ __name((services) => new DefaultWorkspaceManager(services), "WorkspaceManager"), FileSystemProvider: /* @__PURE__ */ __name((services) => context.fileSystemProvider(services), "FileSystemProvider"), WorkspaceLock: /* @__PURE__ */ __name(() => new DefaultWorkspaceLock(), "WorkspaceLock"), ConfigurationProvider: /* @__PURE__ */ __name((services) => new DefaultConfigurationProvider(services), "ConfigurationProvider") } }; } var init_default_module = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/default-module.js"() { "use strict"; init_grammar_config(); init_completion_parser_builder(); init_langium_parser_builder(); init_token_builder(); init_value_converter(); init_linker(); init_name_provider(); init_references(); init_scope_computation(); init_scope_provider(); init_json_serializer(); init_service_registry(); init_document_validator(); init_validation_registry(); init_ast_descriptions(); init_ast_node_locator(); init_configuration(); init_document_builder(); init_documents(); init_index_manager(); init_workspace_manager(); init_lexer2(); init_documentation_provider(); init_comment_provider(); init_langium_parser(); init_async_parser(); init_workspace_lock(); init_hydrator(); __name(createDefaultCoreModule, "createDefaultCoreModule"); __name(createDefaultSharedCoreModule, "createDefaultSharedCoreModule"); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/dependency-injection.js function inject(module1, module2, module3, module4, module5, module6, module7, module8, module9) { const module10 = [module1, module2, module3, module4, module5, module6, module7, module8, module9].reduce(_merge, {}); return _inject(module10); } function eagerLoad(item) { if (item && item[isProxy]) { for (const value2 of Object.values(item)) { eagerLoad(value2); } } return item; } function _inject(module2, injector) { const proxy = new Proxy({}, { deleteProperty: /* @__PURE__ */ __name(() => false, "deleteProperty"), set: /* @__PURE__ */ __name(() => { throw new Error("Cannot set property on injected service container"); }, "set"), get: /* @__PURE__ */ __name((obj, prop) => { if (prop === isProxy) { return true; } else { return _resolve2(obj, prop, module2, injector || proxy); } }, "get"), getOwnPropertyDescriptor: /* @__PURE__ */ __name((obj, prop) => (_resolve2(obj, prop, module2, injector || proxy), Object.getOwnPropertyDescriptor(obj, prop)), "getOwnPropertyDescriptor"), // used by for..in has: /* @__PURE__ */ __name((_3, prop) => prop in module2, "has"), // used by ..in.. ownKeys: /* @__PURE__ */ __name(() => [...Object.getOwnPropertyNames(module2)], "ownKeys") // used by for..in }); return proxy; } function _resolve2(obj, prop, module2, injector) { if (prop in obj) { if (obj[prop] instanceof Error) { throw new Error("Construction failure. Please make sure that your dependencies are constructable.", { cause: obj[prop] }); } if (obj[prop] === __requested__) { throw new Error('Cycle detected. Please make "' + String(prop) + '" lazy. Visit https://langium.org/docs/reference/configuration-services/#resolving-cyclic-dependencies'); } return obj[prop]; } else if (prop in module2) { const value2 = module2[prop]; obj[prop] = __requested__; try { obj[prop] = typeof value2 === "function" ? value2(injector) : _inject(value2, injector); } catch (error3) { obj[prop] = error3 instanceof Error ? error3 : void 0; throw error3; } return obj[prop]; } else { return void 0; } } function _merge(target, source) { if (source) { for (const [key, value2] of Object.entries(source)) { if (value2 !== void 0) { const value1 = target[key]; if (value1 !== null && value2 !== null && typeof value1 === "object" && typeof value2 === "object") { target[key] = _merge(value1, value2); } else { target[key] = value2; } } } } return target; } var Module, isProxy, __requested__; var init_dependency_injection = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/dependency-injection.js"() { "use strict"; (function(Module2) { Module2.merge = (m1, m22) => _merge(_merge({}, m1), m22); })(Module || (Module = {})); __name(inject, "inject"); isProxy = Symbol("isProxy"); __name(eagerLoad, "eagerLoad"); __name(_inject, "_inject"); __requested__ = Symbol(); __name(_resolve2, "_resolve"); __name(_merge, "_merge"); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/services.js var init_services = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/services.js"() { "use strict"; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/documentation/index.js var init_documentation = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/documentation/index.js"() { "use strict"; init_comment_provider(); init_documentation_provider(); init_jsdoc(); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/languages/language-meta-data.js var init_language_meta_data = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/languages/language-meta-data.js"() { "use strict"; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/languages/index.js var init_languages = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/languages/index.js"() { "use strict"; init_grammar_config(); init_language_meta_data(); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/indentation-aware.js var indentationBuilderDefaultOptions, LexingMode, IndentationAwareTokenBuilder, IndentationAwareLexer; var init_indentation_aware = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/indentation-aware.js"() { "use strict"; init_api5(); init_token_builder(); init_lexer2(); indentationBuilderDefaultOptions = { indentTokenName: "INDENT", dedentTokenName: "DEDENT", whitespaceTokenName: "WS", ignoreIndentationDelimiters: [] }; (function(LexingMode2) { LexingMode2["REGULAR"] = "indentation-sensitive"; LexingMode2["IGNORE_INDENTATION"] = "ignore-indentation"; })(LexingMode || (LexingMode = {})); IndentationAwareTokenBuilder = class extends DefaultTokenBuilder { static { __name(this, "IndentationAwareTokenBuilder"); } constructor(options2 = indentationBuilderDefaultOptions) { super(); this.indentationStack = [0]; this.whitespaceRegExp = /[ \t]+/y; this.options = Object.assign(Object.assign({}, indentationBuilderDefaultOptions), options2); this.indentTokenType = createToken({ name: this.options.indentTokenName, pattern: this.indentMatcher.bind(this), line_breaks: false }); this.dedentTokenType = createToken({ name: this.options.dedentTokenName, pattern: this.dedentMatcher.bind(this), line_breaks: false }); } buildTokens(grammar, options2) { const tokenTypes = super.buildTokens(grammar, options2); if (!isTokenTypeArray(tokenTypes)) { throw new Error("Invalid tokens built by default builder"); } const { indentTokenName, dedentTokenName, whitespaceTokenName, ignoreIndentationDelimiters } = this.options; let dedent2; let indent; let ws; const otherTokens = []; for (const tokenType of tokenTypes) { for (const [begin, end2] of ignoreIndentationDelimiters) { if (tokenType.name === begin) { tokenType.PUSH_MODE = LexingMode.IGNORE_INDENTATION; } else if (tokenType.name === end2) { tokenType.POP_MODE = true; } } if (tokenType.name === dedentTokenName) { dedent2 = tokenType; } else if (tokenType.name === indentTokenName) { indent = tokenType; } else if (tokenType.name === whitespaceTokenName) { ws = tokenType; } else { otherTokens.push(tokenType); } } if (!dedent2 || !indent || !ws) { throw new Error("Some indentation/whitespace tokens not found!"); } if (ignoreIndentationDelimiters.length > 0) { const multiModeLexerDef = { modes: { [LexingMode.REGULAR]: [dedent2, indent, ...otherTokens, ws], [LexingMode.IGNORE_INDENTATION]: [...otherTokens, ws] }, defaultMode: LexingMode.REGULAR }; return multiModeLexerDef; } else { return [dedent2, indent, ws, ...otherTokens]; } } flushLexingReport(text4) { const result = super.flushLexingReport(text4); return Object.assign(Object.assign({}, result), { remainingDedents: this.flushRemainingDedents(text4) }); } /** * Helper function to check if the current position is the start of a new line. * * @param text The full input string. * @param offset The current position at which to check * @returns Whether the current position is the start of a new line */ isStartOfLine(text4, offset) { return offset === 0 || "\r\n".includes(text4[offset - 1]); } /** * A helper function used in matching both indents and dedents. * * @param text The full input string. * @param offset The current position at which to attempt a match * @param tokens Previously scanned tokens * @param groups Token Groups * @returns The current and previous indentation levels and the matched whitespace */ // eslint-disable-next-line @typescript-eslint/no-unused-vars matchWhitespace(text4, offset, tokens2, groups) { var _a; this.whitespaceRegExp.lastIndex = offset; const match2 = this.whitespaceRegExp.exec(text4); return { currIndentLevel: (_a = match2 === null || match2 === void 0 ? void 0 : match2[0].length) !== null && _a !== void 0 ? _a : 0, prevIndentLevel: this.indentationStack.at(-1), match: match2 }; } /** * Helper function to create an instance of an indentation token. * * @param tokenType Indent or dedent token type * @param text Full input string, used to calculate the line number * @param image The original image of the token (tabs or spaces) * @param offset Current position in the input string * @returns The indentation token instance */ createIndentationTokenInstance(tokenType, text4, image, offset) { const lineNumber = this.getLineNumber(text4, offset); return createTokenInstance(tokenType, image, offset, offset + image.length, lineNumber, lineNumber, 1, image.length); } /** * Helper function to get the line number at a given offset. * * @param text Full input string, used to calculate the line number * @param offset Current position in the input string * @returns The line number at the given offset */ getLineNumber(text4, offset) { return text4.substring(0, offset).split(/\r\n|\r|\n/).length; } /** * A custom pattern for matching indents * * @param text The full input string. * @param offset The offset at which to attempt a match * @param tokens Previously scanned tokens * @param groups Token Groups */ indentMatcher(text4, offset, tokens2, groups) { if (!this.isStartOfLine(text4, offset)) { return null; } const { currIndentLevel, prevIndentLevel, match: match2 } = this.matchWhitespace(text4, offset, tokens2, groups); if (currIndentLevel <= prevIndentLevel) { return null; } this.indentationStack.push(currIndentLevel); return match2; } /** * A custom pattern for matching dedents * * @param text The full input string. * @param offset The offset at which to attempt a match * @param tokens Previously scanned tokens * @param groups Token Groups */ dedentMatcher(text4, offset, tokens2, groups) { var _a, _b, _c, _d; if (!this.isStartOfLine(text4, offset)) { return null; } const { currIndentLevel, prevIndentLevel, match: match2 } = this.matchWhitespace(text4, offset, tokens2, groups); if (currIndentLevel >= prevIndentLevel) { return null; } const matchIndentIndex = this.indentationStack.lastIndexOf(currIndentLevel); if (matchIndentIndex === -1) { this.diagnostics.push({ severity: "error", message: `Invalid dedent level ${currIndentLevel} at offset: ${offset}. Current indentation stack: ${this.indentationStack}`, offset, length: (_b = (_a = match2 === null || match2 === void 0 ? void 0 : match2[0]) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0, line: this.getLineNumber(text4, offset), column: 1 }); return null; } const numberOfDedents = this.indentationStack.length - matchIndentIndex - 1; const newlinesBeforeDedent = (_d = (_c = text4.substring(0, offset).match(/[\r\n]+$/)) === null || _c === void 0 ? void 0 : _c[0].length) !== null && _d !== void 0 ? _d : 1; for (let i2 = 0; i2 < numberOfDedents; i2++) { const token2 = this.createIndentationTokenInstance( this.dedentTokenType, text4, "", // Dedents are 0-width tokens offset - (newlinesBeforeDedent - 1) ); tokens2.push(token2); this.indentationStack.pop(); } return null; } buildTerminalToken(terminal) { const tokenType = super.buildTerminalToken(terminal); const { indentTokenName, dedentTokenName, whitespaceTokenName } = this.options; if (tokenType.name === indentTokenName) { return this.indentTokenType; } else if (tokenType.name === dedentTokenName) { return this.dedentTokenType; } else if (tokenType.name === whitespaceTokenName) { return createToken({ name: whitespaceTokenName, pattern: this.whitespaceRegExp, group: Lexer2.SKIPPED }); } return tokenType; } /** * Resets the indentation stack between different runs of the lexer * * @param text Full text that was tokenized * @returns Remaining dedent tokens to match all previous indents at the end of the file */ flushRemainingDedents(text4) { const remainingDedents = []; while (this.indentationStack.length > 1) { remainingDedents.push(this.createIndentationTokenInstance(this.dedentTokenType, text4, "", text4.length)); this.indentationStack.pop(); } this.indentationStack = [0]; return remainingDedents; } }; IndentationAwareLexer = class extends DefaultLexer { static { __name(this, "IndentationAwareLexer"); } constructor(services) { super(services); if (services.parser.TokenBuilder instanceof IndentationAwareTokenBuilder) { this.indentationTokenBuilder = services.parser.TokenBuilder; } else { throw new Error("IndentationAwareLexer requires an accompanying IndentationAwareTokenBuilder"); } } tokenize(text4, options2 = DEFAULT_TOKENIZE_OPTIONS) { const result = super.tokenize(text4); const report = result.report; if ((options2 === null || options2 === void 0 ? void 0 : options2.mode) === "full") { result.tokens.push(...report.remainingDedents); } report.remainingDedents = []; const { indentTokenType, dedentTokenType } = this.indentationTokenBuilder; const indentTokenIdx = indentTokenType.tokenTypeIdx; const dedentTokenIdx = dedentTokenType.tokenTypeIdx; const cleanTokens = []; const length2 = result.tokens.length - 1; for (let i2 = 0; i2 < length2; i2++) { const token2 = result.tokens[i2]; const nextToken = result.tokens[i2 + 1]; if (token2.tokenTypeIdx === indentTokenIdx && nextToken.tokenTypeIdx === dedentTokenIdx) { i2++; continue; } cleanTokens.push(token2); } if (length2 >= 0) { cleanTokens.push(result.tokens[length2]); } result.tokens = cleanTokens; return result; } }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/parser-config.js var init_parser_config = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/parser-config.js"() { "use strict"; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/index.js var init_parser2 = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/parser/index.js"() { "use strict"; init_async_parser(); init_completion_parser_builder(); init_cst_node_builder(); init_indentation_aware(); init_langium_parser_builder(); init_langium_parser(); init_lexer2(); init_parser_builder_base(); init_parser_config(); init_token_builder(); init_value_converter(); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/references/index.js var init_references2 = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/references/index.js"() { "use strict"; init_linker(); init_name_provider(); init_references(); init_scope(); init_scope_computation(); init_scope_provider(); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/serializer/index.js var init_serializer = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/serializer/index.js"() { "use strict"; init_hydrator(); init_json_serializer(); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/workspace/file-system-provider.js var EmptyFileSystemProvider, EmptyFileSystem; var init_file_system_provider = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/workspace/file-system-provider.js"() { "use strict"; EmptyFileSystemProvider = class { static { __name(this, "EmptyFileSystemProvider"); } readFile() { throw new Error("No file system is available."); } async readDirectory() { return []; } }; EmptyFileSystem = { fileSystemProvider: /* @__PURE__ */ __name(() => new EmptyFileSystemProvider(), "fileSystemProvider") }; } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/grammar-loader.js function createMinimalGrammarServices() { const shared = inject(createDefaultSharedCoreModule(EmptyFileSystem), minimalSharedGrammarModule); const grammar = inject(createDefaultCoreModule({ shared }), minimalGrammarModule); shared.ServiceRegistry.register(grammar); return grammar; } function loadGrammarFromJson(json3) { var _a; const services = createMinimalGrammarServices(); const astNode = services.serializer.JsonSerializer.deserialize(json3); services.shared.workspace.LangiumDocumentFactory.fromModel(astNode, URI2.parse(`memory://${(_a = astNode.name) !== null && _a !== void 0 ? _a : "grammar"}.langium`)); return astNode; } var minimalGrammarModule, minimalSharedGrammarModule; var init_grammar_loader = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/grammar-loader.js"() { "use strict"; init_default_module(); init_dependency_injection(); init_ast(); init_file_system_provider(); init_uri_utils(); minimalGrammarModule = { Grammar: /* @__PURE__ */ __name(() => void 0, "Grammar"), LanguageMetaData: /* @__PURE__ */ __name(() => ({ caseInsensitive: false, fileExtensions: [".langium"], languageId: "langium" }), "LanguageMetaData") }; minimalSharedGrammarModule = { AstReflection: /* @__PURE__ */ __name(() => new LangiumGrammarAstReflection(), "AstReflection") }; __name(createMinimalGrammarServices, "createMinimalGrammarServices"); __name(loadGrammarFromJson, "loadGrammarFromJson"); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/index.js var utils_exports = {}; __export(utils_exports, { AstUtils: () => ast_utils_exports, BiMap: () => BiMap, Cancellation: () => cancellation_exports, ContextCache: () => ContextCache, CstUtils: () => cst_utils_exports, DONE_RESULT: () => DONE_RESULT, Deferred: () => Deferred, Disposable: () => Disposable, DisposableCache: () => DisposableCache, DocumentCache: () => DocumentCache, EMPTY_STREAM: () => EMPTY_STREAM, ErrorWithLocation: () => ErrorWithLocation, GrammarUtils: () => grammar_utils_exports, MultiMap: () => MultiMap, OperationCancelled: () => OperationCancelled, Reduction: () => Reduction, RegExpUtils: () => regexp_utils_exports, SimpleCache: () => SimpleCache, StreamImpl: () => StreamImpl, TreeStreamImpl: () => TreeStreamImpl, URI: () => URI2, UriUtils: () => UriUtils, WorkspaceCache: () => WorkspaceCache, assertUnreachable: () => assertUnreachable, delayNextTick: () => delayNextTick, interruptAndCheck: () => interruptAndCheck, isOperationCancelled: () => isOperationCancelled, loadGrammarFromJson: () => loadGrammarFromJson, setInterruptionPeriod: () => setInterruptionPeriod, startCancelableOperation: () => startCancelableOperation, stream: () => stream }); var init_utils4 = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/utils/index.js"() { "use strict"; init_caching(); init_event3(); __reExport(utils_exports, event_exports); init_collections(); init_disposable(); init_errors2(); init_grammar_loader(); init_promise_utils(); init_stream(); init_uri_utils(); init_ast_utils(); init_cancellation(); init_cst_utils(); init_grammar_utils(); init_regexp_utils(); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/validation/index.js var init_validation = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/validation/index.js"() { "use strict"; init_document_validator(); init_validation_registry(); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/workspace/index.js var init_workspace = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/workspace/index.js"() { "use strict"; init_ast_descriptions(); init_ast_node_locator(); init_configuration(); init_document_builder(); init_documents(); init_file_system_provider(); init_index_manager(); init_workspace_lock(); init_workspace_manager(); } }); // ../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/index.js var lib_exports = {}; __export(lib_exports, { AbstractAstReflection: () => AbstractAstReflection, AbstractCstNode: () => AbstractCstNode, AbstractLangiumParser: () => AbstractLangiumParser, AbstractParserErrorMessageProvider: () => AbstractParserErrorMessageProvider, AbstractThreadedAsyncParser: () => AbstractThreadedAsyncParser, AstUtils: () => ast_utils_exports, BiMap: () => BiMap, Cancellation: () => cancellation_exports, CompositeCstNodeImpl: () => CompositeCstNodeImpl, ContextCache: () => ContextCache, CstNodeBuilder: () => CstNodeBuilder, CstUtils: () => cst_utils_exports, DEFAULT_TOKENIZE_OPTIONS: () => DEFAULT_TOKENIZE_OPTIONS, DONE_RESULT: () => DONE_RESULT, DatatypeSymbol: () => DatatypeSymbol, DefaultAstNodeDescriptionProvider: () => DefaultAstNodeDescriptionProvider, DefaultAstNodeLocator: () => DefaultAstNodeLocator, DefaultAsyncParser: () => DefaultAsyncParser, DefaultCommentProvider: () => DefaultCommentProvider, DefaultConfigurationProvider: () => DefaultConfigurationProvider, DefaultDocumentBuilder: () => DefaultDocumentBuilder, DefaultDocumentValidator: () => DefaultDocumentValidator, DefaultHydrator: () => DefaultHydrator, DefaultIndexManager: () => DefaultIndexManager, DefaultJsonSerializer: () => DefaultJsonSerializer, DefaultLangiumDocumentFactory: () => DefaultLangiumDocumentFactory, DefaultLangiumDocuments: () => DefaultLangiumDocuments, DefaultLexer: () => DefaultLexer, DefaultLexerErrorMessageProvider: () => DefaultLexerErrorMessageProvider, DefaultLinker: () => DefaultLinker, DefaultNameProvider: () => DefaultNameProvider, DefaultReferenceDescriptionProvider: () => DefaultReferenceDescriptionProvider, DefaultReferences: () => DefaultReferences, DefaultScopeComputation: () => DefaultScopeComputation, DefaultScopeProvider: () => DefaultScopeProvider, DefaultServiceRegistry: () => DefaultServiceRegistry, DefaultTokenBuilder: () => DefaultTokenBuilder, DefaultValueConverter: () => DefaultValueConverter, DefaultWorkspaceLock: () => DefaultWorkspaceLock, DefaultWorkspaceManager: () => DefaultWorkspaceManager, Deferred: () => Deferred, Disposable: () => Disposable, DisposableCache: () => DisposableCache, DocumentCache: () => DocumentCache, DocumentState: () => DocumentState, DocumentValidator: () => DocumentValidator, EMPTY_SCOPE: () => EMPTY_SCOPE, EMPTY_STREAM: () => EMPTY_STREAM, EmptyFileSystem: () => EmptyFileSystem, EmptyFileSystemProvider: () => EmptyFileSystemProvider, ErrorWithLocation: () => ErrorWithLocation, GrammarAST: () => ast_exports, GrammarUtils: () => grammar_utils_exports, IndentationAwareLexer: () => IndentationAwareLexer, IndentationAwareTokenBuilder: () => IndentationAwareTokenBuilder, JSDocDocumentationProvider: () => JSDocDocumentationProvider, LangiumCompletionParser: () => LangiumCompletionParser, LangiumParser: () => LangiumParser, LangiumParserErrorMessageProvider: () => LangiumParserErrorMessageProvider, LeafCstNodeImpl: () => LeafCstNodeImpl, LexingMode: () => LexingMode, MapScope: () => MapScope, Module: () => Module, MultiMap: () => MultiMap, OperationCancelled: () => OperationCancelled, ParserWorker: () => ParserWorker, Reduction: () => Reduction, RegExpUtils: () => regexp_utils_exports, RootCstNodeImpl: () => RootCstNodeImpl, SimpleCache: () => SimpleCache, StreamImpl: () => StreamImpl, StreamScope: () => StreamScope, TextDocument: () => TextDocument2, TreeStreamImpl: () => TreeStreamImpl, URI: () => URI2, UriUtils: () => UriUtils, ValidationCategory: () => ValidationCategory, ValidationRegistry: () => ValidationRegistry, ValueConverter: () => ValueConverter, WorkspaceCache: () => WorkspaceCache, assertUnreachable: () => assertUnreachable, createCompletionParser: () => createCompletionParser, createDefaultCoreModule: () => createDefaultCoreModule, createDefaultSharedCoreModule: () => createDefaultSharedCoreModule, createGrammarConfig: () => createGrammarConfig, createLangiumParser: () => createLangiumParser, createParser: () => createParser, delayNextTick: () => delayNextTick, diagnosticData: () => diagnosticData, eagerLoad: () => eagerLoad, getDiagnosticRange: () => getDiagnosticRange, indentationBuilderDefaultOptions: () => indentationBuilderDefaultOptions, inject: () => inject, interruptAndCheck: () => interruptAndCheck, isAstNode: () => isAstNode, isAstNodeDescription: () => isAstNodeDescription, isAstNodeWithComment: () => isAstNodeWithComment, isCompositeCstNode: () => isCompositeCstNode, isIMultiModeLexerDefinition: () => isIMultiModeLexerDefinition, isJSDoc: () => isJSDoc, isLeafCstNode: () => isLeafCstNode, isLinkingError: () => isLinkingError, isNamed: () => isNamed, isOperationCancelled: () => isOperationCancelled, isReference: () => isReference, isRootCstNode: () => isRootCstNode, isTokenTypeArray: () => isTokenTypeArray, isTokenTypeDictionary: () => isTokenTypeDictionary, loadGrammarFromJson: () => loadGrammarFromJson, parseJSDoc: () => parseJSDoc, prepareLangiumParser: () => prepareLangiumParser, setInterruptionPeriod: () => setInterruptionPeriod, startCancelableOperation: () => startCancelableOperation, stream: () => stream, toDiagnosticData: () => toDiagnosticData, toDiagnosticSeverity: () => toDiagnosticSeverity }); var init_lib3 = __esm({ "../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/lib/index.js"() { "use strict"; init_default_module(); init_dependency_injection(); init_service_registry(); init_services(); init_syntax_tree(); init_documentation(); init_languages(); init_parser2(); init_references2(); init_serializer(); init_utils4(); __reExport(lib_exports, utils_exports); init_validation(); init_workspace(); init_ast(); } }); // ../parser/dist/chunks/mermaid-parser.core/chunk-FPAJGGOC.mjs function isArchitecture(item) { return reflection2.isInstance(item, Architecture); } function isBranch(item) { return reflection2.isInstance(item, Branch); } function isCommit(item) { return reflection2.isInstance(item, Commit); } function isGitGraph(item) { return reflection2.isInstance(item, GitGraph); } function isInfo(item) { return reflection2.isInstance(item, Info); } function isMerge(item) { return reflection2.isInstance(item, Merge); } function isPacket(item) { return reflection2.isInstance(item, Packet); } function isPacketBlock(item) { return reflection2.isInstance(item, PacketBlock); } function isPie(item) { return reflection2.isInstance(item, Pie); } function isPieSection(item) { return reflection2.isInstance(item, PieSection); } function isTreemap(item) { return reflection2.isInstance(item, Treemap); } var __defProp2, __name2, Statement, Architecture, Axis, Branch, Checkout, CherryPicking, ClassDefStatement, Commit, Curve, Edge, Entry, GitGraph, Group2, Info, Item, Junction, Merge, Option3, Packet, PacketBlock, Pie, PieSection, Radar, Service, Treemap, TreemapRow, Direction, Leaf, Section, MermaidAstReflection, reflection2, loadedInfoGrammar, InfoGrammar, loadedPacketGrammar, PacketGrammar, loadedPieGrammar, PieGrammar, loadedArchitectureGrammar, ArchitectureGrammar, loadedGitGraphGrammar, GitGraphGrammar, loadedRadarGrammar, RadarGrammar, loadedTreemapGrammar, TreemapGrammar, InfoLanguageMetaData, PacketLanguageMetaData, PieLanguageMetaData, ArchitectureLanguageMetaData, GitGraphLanguageMetaData, RadarLanguageMetaData, TreemapLanguageMetaData, MermaidGeneratedSharedModule, InfoGeneratedModule, PacketGeneratedModule, PieGeneratedModule, ArchitectureGeneratedModule, GitGraphGeneratedModule, RadarGeneratedModule, TreemapGeneratedModule, accessibilityDescrRegex, accessibilityTitleRegex, titleRegex, rulesRegexes, AbstractMermaidValueConverter, CommonValueConverter, AbstractMermaidTokenBuilder, CommonTokenBuilder; var init_chunk_FPAJGGOC = __esm({ "../parser/dist/chunks/mermaid-parser.core/chunk-FPAJGGOC.mjs"() { "use strict"; init_lib3(); init_lib3(); init_lib3(); init_lib3(); __defProp2 = Object.defineProperty; __name2 = /* @__PURE__ */ __name((target, value2) => __defProp2(target, "name", { value: value2, configurable: true }), "__name"); Statement = "Statement"; Architecture = "Architecture"; __name(isArchitecture, "isArchitecture"); __name2(isArchitecture, "isArchitecture"); Axis = "Axis"; Branch = "Branch"; __name(isBranch, "isBranch"); __name2(isBranch, "isBranch"); Checkout = "Checkout"; CherryPicking = "CherryPicking"; ClassDefStatement = "ClassDefStatement"; Commit = "Commit"; __name(isCommit, "isCommit"); __name2(isCommit, "isCommit"); Curve = "Curve"; Edge = "Edge"; Entry = "Entry"; GitGraph = "GitGraph"; __name(isGitGraph, "isGitGraph"); __name2(isGitGraph, "isGitGraph"); Group2 = "Group"; Info = "Info"; __name(isInfo, "isInfo"); __name2(isInfo, "isInfo"); Item = "Item"; Junction = "Junction"; Merge = "Merge"; __name(isMerge, "isMerge"); __name2(isMerge, "isMerge"); Option3 = "Option"; Packet = "Packet"; __name(isPacket, "isPacket"); __name2(isPacket, "isPacket"); PacketBlock = "PacketBlock"; __name(isPacketBlock, "isPacketBlock"); __name2(isPacketBlock, "isPacketBlock"); Pie = "Pie"; __name(isPie, "isPie"); __name2(isPie, "isPie"); PieSection = "PieSection"; __name(isPieSection, "isPieSection"); __name2(isPieSection, "isPieSection"); Radar = "Radar"; Service = "Service"; Treemap = "Treemap"; __name(isTreemap, "isTreemap"); __name2(isTreemap, "isTreemap"); TreemapRow = "TreemapRow"; Direction = "Direction"; Leaf = "Leaf"; Section = "Section"; MermaidAstReflection = class extends AbstractAstReflection { static { __name(this, "MermaidAstReflection"); } static { __name2(this, "MermaidAstReflection"); } getAllTypes() { return [Architecture, Axis, Branch, Checkout, CherryPicking, ClassDefStatement, Commit, Curve, Direction, Edge, Entry, GitGraph, Group2, Info, Item, Junction, Leaf, Merge, Option3, Packet, PacketBlock, Pie, PieSection, Radar, Section, Service, Statement, Treemap, TreemapRow]; } computeIsSubtype(subtype, supertype) { switch (subtype) { case Branch: case Checkout: case CherryPicking: case Commit: case Merge: { return this.isSubtype(Statement, supertype); } case Direction: { return this.isSubtype(GitGraph, supertype); } case Leaf: case Section: { return this.isSubtype(Item, supertype); } default: { return false; } } } getReferenceType(refInfo) { const referenceId = `${refInfo.container.$type}:${refInfo.property}`; switch (referenceId) { case "Entry:axis": { return Axis; } default: { throw new Error(`${referenceId} is not a valid reference id.`); } } } getTypeMetaData(type3) { switch (type3) { case Architecture: { return { name: Architecture, properties: [ { name: "accDescr" }, { name: "accTitle" }, { name: "edges", defaultValue: [] }, { name: "groups", defaultValue: [] }, { name: "junctions", defaultValue: [] }, { name: "services", defaultValue: [] }, { name: "title" } ] }; } case Axis: { return { name: Axis, properties: [ { name: "label" }, { name: "name" } ] }; } case Branch: { return { name: Branch, properties: [ { name: "name" }, { name: "order" } ] }; } case Checkout: { return { name: Checkout, properties: [ { name: "branch" } ] }; } case CherryPicking: { return { name: CherryPicking, properties: [ { name: "id" }, { name: "parent" }, { name: "tags", defaultValue: [] } ] }; } case ClassDefStatement: { return { name: ClassDefStatement, properties: [ { name: "className" }, { name: "styleText" } ] }; } case Commit: { return { name: Commit, properties: [ { name: "id" }, { name: "message" }, { name: "tags", defaultValue: [] }, { name: "type" } ] }; } case Curve: { return { name: Curve, properties: [ { name: "entries", defaultValue: [] }, { name: "label" }, { name: "name" } ] }; } case Edge: { return { name: Edge, properties: [ { name: "lhsDir" }, { name: "lhsGroup", defaultValue: false }, { name: "lhsId" }, { name: "lhsInto", defaultValue: false }, { name: "rhsDir" }, { name: "rhsGroup", defaultValue: false }, { name: "rhsId" }, { name: "rhsInto", defaultValue: false }, { name: "title" } ] }; } case Entry: { return { name: Entry, properties: [ { name: "axis" }, { name: "value" } ] }; } case GitGraph: { return { name: GitGraph, properties: [ { name: "accDescr" }, { name: "accTitle" }, { name: "statements", defaultValue: [] }, { name: "title" } ] }; } case Group2: { return { name: Group2, properties: [ { name: "icon" }, { name: "id" }, { name: "in" }, { name: "title" } ] }; } case Info: { return { name: Info, properties: [ { name: "accDescr" }, { name: "accTitle" }, { name: "title" } ] }; } case Item: { return { name: Item, properties: [ { name: "classSelector" }, { name: "name" } ] }; } case Junction: { return { name: Junction, properties: [ { name: "id" }, { name: "in" } ] }; } case Merge: { return { name: Merge, properties: [ { name: "branch" }, { name: "id" }, { name: "tags", defaultValue: [] }, { name: "type" } ] }; } case Option3: { return { name: Option3, properties: [ { name: "name" }, { name: "value", defaultValue: false } ] }; } case Packet: { return { name: Packet, properties: [ { name: "accDescr" }, { name: "accTitle" }, { name: "blocks", defaultValue: [] }, { name: "title" } ] }; } case PacketBlock: { return { name: PacketBlock, properties: [ { name: "bits" }, { name: "end" }, { name: "label" }, { name: "start" } ] }; } case Pie: { return { name: Pie, properties: [ { name: "accDescr" }, { name: "accTitle" }, { name: "sections", defaultValue: [] }, { name: "showData", defaultValue: false }, { name: "title" } ] }; } case PieSection: { return { name: PieSection, properties: [ { name: "label" }, { name: "value" } ] }; } case Radar: { return { name: Radar, properties: [ { name: "accDescr" }, { name: "accTitle" }, { name: "axes", defaultValue: [] }, { name: "curves", defaultValue: [] }, { name: "options", defaultValue: [] }, { name: "title" } ] }; } case Service: { return { name: Service, properties: [ { name: "icon" }, { name: "iconText" }, { name: "id" }, { name: "in" }, { name: "title" } ] }; } case Treemap: { return { name: Treemap, properties: [ { name: "accDescr" }, { name: "accTitle" }, { name: "title" }, { name: "TreemapRows", defaultValue: [] } ] }; } case TreemapRow: { return { name: TreemapRow, properties: [ { name: "indent" }, { name: "item" } ] }; } case Direction: { return { name: Direction, properties: [ { name: "accDescr" }, { name: "accTitle" }, { name: "dir" }, { name: "statements", defaultValue: [] }, { name: "title" } ] }; } case Leaf: { return { name: Leaf, properties: [ { name: "classSelector" }, { name: "name" }, { name: "value" } ] }; } case Section: { return { name: Section, properties: [ { name: "classSelector" }, { name: "name" } ] }; } default: { return { name: type3, properties: [] }; } } } }; reflection2 = new MermaidAstReflection(); InfoGrammar = /* @__PURE__ */ __name2(() => loadedInfoGrammar ?? (loadedInfoGrammar = loadGrammarFromJson(`{"$type":"Grammar","isDeclared":true,"name":"Info","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Info","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"info"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"showInfo"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"?"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@7"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@8"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[],"types":[],"usedGrammars":[]}`)), "InfoGrammar"); PacketGrammar = /* @__PURE__ */ __name2(() => loadedPacketGrammar ?? (loadedPacketGrammar = loadGrammarFromJson(`{"$type":"Grammar","isDeclared":true,"name":"Packet","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Packet","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"packet"},{"$type":"Keyword","value":"packet-beta"}]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PacketBlock","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"start","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"end","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}],"cardinality":"?"}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"+"},{"$type":"Assignment","feature":"bits","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]}]},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@8"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@9"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[],"types":[],"usedGrammars":[]}`)), "PacketGrammar"); PieGrammar = /* @__PURE__ */ __name2(() => loadedPieGrammar ?? (loadedPieGrammar = loadGrammarFromJson(`{"$type":"Grammar","isDeclared":true,"name":"Pie","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Pie","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"pie"},{"$type":"Assignment","feature":"showData","operator":"?=","terminal":{"$type":"Keyword","value":"showData"},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PieSection","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"FLOAT_PIE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/-?[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT_PIE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/-?(0|[1-9][0-9]*)(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER_PIE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@2"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@3"}}]},"fragment":false,"hidden":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@11"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@12"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[],"types":[],"usedGrammars":[]}`)), "PieGrammar"); ArchitectureGrammar = /* @__PURE__ */ __name2(() => loadedArchitectureGrammar ?? (loadedArchitectureGrammar = loadGrammarFromJson(`{"$type":"Grammar","isDeclared":true,"name":"Architecture","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Architecture","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"architecture-beta"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"groups","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"services","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"junctions","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"edges","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"LeftPort","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"lhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"RightPort","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"rhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Keyword","value":":"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Arrow","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Assignment","feature":"lhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"--"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]}},{"$type":"Keyword","value":"-"}]}]},{"$type":"Assignment","feature":"rhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Group","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"group"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Service","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"service"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"iconText","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]}}],"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Junction","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"junction"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Edge","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"lhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"lhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"rhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"rhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"ARROW_DIRECTION","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"L"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"R"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"T"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"B"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_GROUP","definition":{"$type":"RegexToken","regex":"/\\\\{group\\\\}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_INTO","definition":{"$type":"RegexToken","regex":"/<|>/"},"fragment":false,"hidden":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@18"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@19"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"TerminalRule","name":"ARCH_ICON","definition":{"$type":"RegexToken","regex":"/\\\\([\\\\w-:]+\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TITLE","definition":{"$type":"RegexToken","regex":"/\\\\[[\\\\w ]+\\\\]/"},"fragment":false,"hidden":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[],"types":[],"usedGrammars":[]}`)), "ArchitectureGrammar"); GitGraphGrammar = /* @__PURE__ */ __name2(() => loadedGitGraphGrammar ?? (loadedGitGraphGrammar = loadGrammarFromJson(`{"$type":"Grammar","isDeclared":true,"name":"GitGraph","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"GitGraph","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Keyword","value":":"}]},{"$type":"Keyword","value":"gitGraph:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Keyword","value":":"}]}]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]},{"$type":"Assignment","feature":"statements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Direction","definition":{"$type":"Assignment","feature":"dir","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"LR"},{"$type":"Keyword","value":"TB"},{"$type":"Keyword","value":"BT"}]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Commit","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"commit"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"msg:","cardinality":"?"},{"$type":"Assignment","feature":"message","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Branch","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"branch"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"order:"},{"$type":"Assignment","feature":"order","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Merge","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"merge"},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Checkout","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"checkout"},{"$type":"Keyword","value":"switch"}]},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CherryPicking","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"cherry-pick"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"parent:"},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@14"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@15"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"TerminalRule","name":"REFERENCE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\\\w([-\\\\./\\\\w]*[-\\\\w])?/"},"fragment":false,"hidden":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[],"types":[],"usedGrammars":[]}`)), "GitGraphGrammar"); RadarGrammar = /* @__PURE__ */ __name2(() => loadedRadarGrammar ?? (loadedRadarGrammar = loadGrammarFromJson(`{"$type":"Grammar","isDeclared":true,"name":"Radar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Radar","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":"radar-beta:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Keyword","value":"axis"},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"curve"},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Label","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}},{"$type":"Keyword","value":"]"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Axis","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Curve","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"},{"$type":"Keyword","value":"{"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Entries","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DetailedEntry","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"axis","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@2"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},"deprecatedSyntax":false}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"NumberEntry","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Option","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"showLegend"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"ticks"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"max"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"min"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"graticule"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"GRATICULE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"circle"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"polygon"}}]},"fragment":false,"hidden":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@15"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@16"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"interfaces":[{"$type":"Interface","name":"Entry","attributes":[{"$type":"TypeAttribute","name":"axis","isOptional":true,"type":{"$type":"ReferenceType","referenceType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@2"}}}},{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"number"},"isOptional":false}],"superTypes":[]}],"definesHiddenTokens":false,"hiddenTokens":[],"types":[],"usedGrammars":[]}`)), "RadarGrammar"); TreemapGrammar = /* @__PURE__ */ __name2(() => loadedTreemapGrammar ?? (loadedTreemapGrammar = loadGrammarFromJson(`{"$type":"Grammar","isDeclared":true,"name":"Treemap","rules":[{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"ParserRule","entry":true,"name":"Treemap","returnType":{"$ref":"#/interfaces@4"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]},{"$type":"Assignment","feature":"TreemapRows","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"TREEMAP_KEYWORD","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"treemap-beta"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"treemap"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"CLASS_DEF","definition":{"$type":"RegexToken","regex":"/classDef\\\\s+([a-zA-Z_][a-zA-Z0-9_]+)(?:\\\\s+([^;\\\\r\\\\n]*))?(?:;)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STYLE_SEPARATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":":::"}},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"SEPARATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":":"}},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"COMMA","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":","}},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WS","definition":{"$type":"RegexToken","regex":"/[ \\\\t]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"ML_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\%\\\\%[^\\\\n]*/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"NL","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false},{"$type":"ParserRule","name":"TreemapRow","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"indent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"item","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ClassDef","dataType":"string","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Item","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Section","returnType":{"$ref":"#/interfaces@1"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]},{"$type":"Assignment","feature":"classSelector","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Leaf","returnType":{"$ref":"#/interfaces@2"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]},{"$type":"Assignment","feature":"classSelector","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INDENTATION","definition":{"$type":"RegexToken","regex":"/[ \\\\t]{1,}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID2","definition":{"$type":"RegexToken","regex":"/[a-zA-Z_][a-zA-Z0-9_]*/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER2","definition":{"$type":"RegexToken","regex":"/[0-9_\\\\.\\\\,]+/"},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"MyNumber","dataType":"number","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"STRING2","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false}],"interfaces":[{"$type":"Interface","name":"Item","attributes":[{"$type":"TypeAttribute","name":"name","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false},{"$type":"TypeAttribute","name":"classSelector","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]},{"$type":"Interface","name":"Section","superTypes":[{"$ref":"#/interfaces@0"}],"attributes":[]},{"$type":"Interface","name":"Leaf","superTypes":[{"$ref":"#/interfaces@0"}],"attributes":[{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"number"},"isOptional":false}]},{"$type":"Interface","name":"ClassDefStatement","attributes":[{"$type":"TypeAttribute","name":"className","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false},{"$type":"TypeAttribute","name":"styleText","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"Treemap","attributes":[{"$type":"TypeAttribute","name":"TreemapRows","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@14"}}},"isOptional":false},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"definesHiddenTokens":false,"hiddenTokens":[],"imports":[],"types":[],"usedGrammars":[],"$comment":"/**\\n * Treemap grammar for Langium\\n * Converted from mindmap grammar\\n *\\n * The ML_COMMENT and NL hidden terminals handle whitespace, comments, and newlines\\n * before the treemap keyword, allowing for empty lines and comments before the\\n * treemap declaration.\\n */"}`)), "TreemapGrammar"); InfoLanguageMetaData = { languageId: "info", fileExtensions: [".mmd", ".mermaid"], caseInsensitive: false, mode: "production" }; PacketLanguageMetaData = { languageId: "packet", fileExtensions: [".mmd", ".mermaid"], caseInsensitive: false, mode: "production" }; PieLanguageMetaData = { languageId: "pie", fileExtensions: [".mmd", ".mermaid"], caseInsensitive: false, mode: "production" }; ArchitectureLanguageMetaData = { languageId: "architecture", fileExtensions: [".mmd", ".mermaid"], caseInsensitive: false, mode: "production" }; GitGraphLanguageMetaData = { languageId: "gitGraph", fileExtensions: [".mmd", ".mermaid"], caseInsensitive: false, mode: "production" }; RadarLanguageMetaData = { languageId: "radar", fileExtensions: [".mmd", ".mermaid"], caseInsensitive: false, mode: "production" }; TreemapLanguageMetaData = { languageId: "treemap", fileExtensions: [".mmd", ".mermaid"], caseInsensitive: false, mode: "production" }; MermaidGeneratedSharedModule = { AstReflection: /* @__PURE__ */ __name2(() => new MermaidAstReflection(), "AstReflection") }; InfoGeneratedModule = { Grammar: /* @__PURE__ */ __name2(() => InfoGrammar(), "Grammar"), LanguageMetaData: /* @__PURE__ */ __name2(() => InfoLanguageMetaData, "LanguageMetaData"), parser: {} }; PacketGeneratedModule = { Grammar: /* @__PURE__ */ __name2(() => PacketGrammar(), "Grammar"), LanguageMetaData: /* @__PURE__ */ __name2(() => PacketLanguageMetaData, "LanguageMetaData"), parser: {} }; PieGeneratedModule = { Grammar: /* @__PURE__ */ __name2(() => PieGrammar(), "Grammar"), LanguageMetaData: /* @__PURE__ */ __name2(() => PieLanguageMetaData, "LanguageMetaData"), parser: {} }; ArchitectureGeneratedModule = { Grammar: /* @__PURE__ */ __name2(() => ArchitectureGrammar(), "Grammar"), LanguageMetaData: /* @__PURE__ */ __name2(() => ArchitectureLanguageMetaData, "LanguageMetaData"), parser: {} }; GitGraphGeneratedModule = { Grammar: /* @__PURE__ */ __name2(() => GitGraphGrammar(), "Grammar"), LanguageMetaData: /* @__PURE__ */ __name2(() => GitGraphLanguageMetaData, "LanguageMetaData"), parser: {} }; RadarGeneratedModule = { Grammar: /* @__PURE__ */ __name2(() => RadarGrammar(), "Grammar"), LanguageMetaData: /* @__PURE__ */ __name2(() => RadarLanguageMetaData, "LanguageMetaData"), parser: {} }; TreemapGeneratedModule = { Grammar: /* @__PURE__ */ __name2(() => TreemapGrammar(), "Grammar"), LanguageMetaData: /* @__PURE__ */ __name2(() => TreemapLanguageMetaData, "LanguageMetaData"), parser: {} }; accessibilityDescrRegex = /accDescr(?:[\t ]*:([^\n\r]*)|\s*{([^}]*)})/; accessibilityTitleRegex = /accTitle[\t ]*:([^\n\r]*)/; titleRegex = /title([\t ][^\n\r]*|)/; rulesRegexes = { ACC_DESCR: accessibilityDescrRegex, ACC_TITLE: accessibilityTitleRegex, TITLE: titleRegex }; AbstractMermaidValueConverter = class extends DefaultValueConverter { static { __name(this, "AbstractMermaidValueConverter"); } static { __name2(this, "AbstractMermaidValueConverter"); } runConverter(rule, input, cstNode) { let value2 = this.runCommonConverter(rule, input, cstNode); if (value2 === void 0) { value2 = this.runCustomConverter(rule, input, cstNode); } if (value2 === void 0) { return super.runConverter(rule, input, cstNode); } return value2; } runCommonConverter(rule, input, _cstNode) { const regex2 = rulesRegexes[rule.name]; if (regex2 === void 0) { return void 0; } const match2 = regex2.exec(input); if (match2 === null) { return void 0; } if (match2[1] !== void 0) { return match2[1].trim().replace(/[\t ]{2,}/gm, " "); } if (match2[2] !== void 0) { return match2[2].replace(/^\s*/gm, "").replace(/\s+$/gm, "").replace(/[\t ]{2,}/gm, " ").replace(/[\n\r]{2,}/gm, "\n"); } return void 0; } }; CommonValueConverter = class extends AbstractMermaidValueConverter { static { __name(this, "CommonValueConverter"); } static { __name2(this, "CommonValueConverter"); } runCustomConverter(_rule, _input, _cstNode) { return void 0; } }; AbstractMermaidTokenBuilder = class extends DefaultTokenBuilder { static { __name(this, "AbstractMermaidTokenBuilder"); } static { __name2(this, "AbstractMermaidTokenBuilder"); } constructor(keywords) { super(); this.keywords = new Set(keywords); } buildKeywordTokens(rules, terminalTokens, options2) { const tokenTypes = super.buildKeywordTokens(rules, terminalTokens, options2); tokenTypes.forEach((tokenType) => { if (this.keywords.has(tokenType.name) && tokenType.PATTERN !== void 0) { tokenType.PATTERN = new RegExp(tokenType.PATTERN.toString() + "(?:(?=%%)|(?!\\S))"); } }); return tokenTypes; } }; CommonTokenBuilder = class extends AbstractMermaidTokenBuilder { static { __name(this, "CommonTokenBuilder"); } static { __name2(this, "CommonTokenBuilder"); } }; } }); // ../parser/dist/chunks/mermaid-parser.core/chunk-S6J4BHB3.mjs function createGitGraphServices(context = EmptyFileSystem) { const shared = inject( createDefaultSharedCoreModule(context), MermaidGeneratedSharedModule ); const GitGraph2 = inject( createDefaultCoreModule({ shared }), GitGraphGeneratedModule, GitGraphModule ); shared.ServiceRegistry.register(GitGraph2); return { shared, GitGraph: GitGraph2 }; } var GitGraphTokenBuilder, GitGraphModule; var init_chunk_S6J4BHB3 = __esm({ "../parser/dist/chunks/mermaid-parser.core/chunk-S6J4BHB3.mjs"() { "use strict"; init_chunk_FPAJGGOC(); init_lib3(); GitGraphTokenBuilder = class extends AbstractMermaidTokenBuilder { static { __name(this, "GitGraphTokenBuilder"); } static { __name2(this, "GitGraphTokenBuilder"); } constructor() { super(["gitGraph"]); } }; GitGraphModule = { parser: { TokenBuilder: /* @__PURE__ */ __name2(() => new GitGraphTokenBuilder(), "TokenBuilder"), ValueConverter: /* @__PURE__ */ __name2(() => new CommonValueConverter(), "ValueConverter") } }; __name(createGitGraphServices, "createGitGraphServices"); __name2(createGitGraphServices, "createGitGraphServices"); } }); // ../parser/dist/chunks/mermaid-parser.core/chunk-LBM3YZW2.mjs function createInfoServices(context = EmptyFileSystem) { const shared = inject( createDefaultSharedCoreModule(context), MermaidGeneratedSharedModule ); const Info2 = inject( createDefaultCoreModule({ shared }), InfoGeneratedModule, InfoModule ); shared.ServiceRegistry.register(Info2); return { shared, Info: Info2 }; } var InfoTokenBuilder, InfoModule; var init_chunk_LBM3YZW2 = __esm({ "../parser/dist/chunks/mermaid-parser.core/chunk-LBM3YZW2.mjs"() { "use strict"; init_chunk_FPAJGGOC(); init_lib3(); InfoTokenBuilder = class extends AbstractMermaidTokenBuilder { static { __name(this, "InfoTokenBuilder"); } static { __name2(this, "InfoTokenBuilder"); } constructor() { super(["info", "showInfo"]); } }; InfoModule = { parser: { TokenBuilder: /* @__PURE__ */ __name2(() => new InfoTokenBuilder(), "TokenBuilder"), ValueConverter: /* @__PURE__ */ __name2(() => new CommonValueConverter(), "ValueConverter") } }; __name(createInfoServices, "createInfoServices"); __name2(createInfoServices, "createInfoServices"); } }); // ../parser/dist/chunks/mermaid-parser.core/chunk-76Q3JFCE.mjs function createPacketServices(context = EmptyFileSystem) { const shared = inject( createDefaultSharedCoreModule(context), MermaidGeneratedSharedModule ); const Packet2 = inject( createDefaultCoreModule({ shared }), PacketGeneratedModule, PacketModule ); shared.ServiceRegistry.register(Packet2); return { shared, Packet: Packet2 }; } var PacketTokenBuilder, PacketModule; var init_chunk_76Q3JFCE = __esm({ "../parser/dist/chunks/mermaid-parser.core/chunk-76Q3JFCE.mjs"() { "use strict"; init_chunk_FPAJGGOC(); init_lib3(); PacketTokenBuilder = class extends AbstractMermaidTokenBuilder { static { __name(this, "PacketTokenBuilder"); } static { __name2(this, "PacketTokenBuilder"); } constructor() { super(["packet"]); } }; PacketModule = { parser: { TokenBuilder: /* @__PURE__ */ __name2(() => new PacketTokenBuilder(), "TokenBuilder"), ValueConverter: /* @__PURE__ */ __name2(() => new CommonValueConverter(), "ValueConverter") } }; __name(createPacketServices, "createPacketServices"); __name2(createPacketServices, "createPacketServices"); } }); // ../parser/dist/chunks/mermaid-parser.core/chunk-T53DSG4Q.mjs function createPieServices(context = EmptyFileSystem) { const shared = inject( createDefaultSharedCoreModule(context), MermaidGeneratedSharedModule ); const Pie2 = inject( createDefaultCoreModule({ shared }), PieGeneratedModule, PieModule ); shared.ServiceRegistry.register(Pie2); return { shared, Pie: Pie2 }; } var PieTokenBuilder, PieValueConverter, PieModule; var init_chunk_T53DSG4Q = __esm({ "../parser/dist/chunks/mermaid-parser.core/chunk-T53DSG4Q.mjs"() { "use strict"; init_chunk_FPAJGGOC(); init_lib3(); PieTokenBuilder = class extends AbstractMermaidTokenBuilder { static { __name(this, "PieTokenBuilder"); } static { __name2(this, "PieTokenBuilder"); } constructor() { super(["pie", "showData"]); } }; PieValueConverter = class extends AbstractMermaidValueConverter { static { __name(this, "PieValueConverter"); } static { __name2(this, "PieValueConverter"); } runCustomConverter(rule, input, _cstNode) { if (rule.name !== "PIE_SECTION_LABEL") { return void 0; } return input.replace(/"/g, "").trim(); } }; PieModule = { parser: { TokenBuilder: /* @__PURE__ */ __name2(() => new PieTokenBuilder(), "TokenBuilder"), ValueConverter: /* @__PURE__ */ __name2(() => new PieValueConverter(), "ValueConverter") } }; __name(createPieServices, "createPieServices"); __name2(createPieServices, "createPieServices"); } }); // ../parser/dist/chunks/mermaid-parser.core/chunk-O7ZBX7Z2.mjs function createArchitectureServices(context = EmptyFileSystem) { const shared = inject( createDefaultSharedCoreModule(context), MermaidGeneratedSharedModule ); const Architecture2 = inject( createDefaultCoreModule({ shared }), ArchitectureGeneratedModule, ArchitectureModule ); shared.ServiceRegistry.register(Architecture2); return { shared, Architecture: Architecture2 }; } var ArchitectureTokenBuilder, ArchitectureValueConverter, ArchitectureModule; var init_chunk_O7ZBX7Z2 = __esm({ "../parser/dist/chunks/mermaid-parser.core/chunk-O7ZBX7Z2.mjs"() { "use strict"; init_chunk_FPAJGGOC(); init_lib3(); ArchitectureTokenBuilder = class extends AbstractMermaidTokenBuilder { static { __name(this, "ArchitectureTokenBuilder"); } static { __name2(this, "ArchitectureTokenBuilder"); } constructor() { super(["architecture"]); } }; ArchitectureValueConverter = class extends AbstractMermaidValueConverter { static { __name(this, "ArchitectureValueConverter"); } static { __name2(this, "ArchitectureValueConverter"); } runCustomConverter(rule, input, _cstNode) { if (rule.name === "ARCH_ICON") { return input.replace(/[()]/g, "").trim(); } else if (rule.name === "ARCH_TEXT_ICON") { return input.replace(/["()]/g, ""); } else if (rule.name === "ARCH_TITLE") { return input.replace(/[[\]]/g, "").trim(); } return void 0; } }; ArchitectureModule = { parser: { TokenBuilder: /* @__PURE__ */ __name2(() => new ArchitectureTokenBuilder(), "TokenBuilder"), ValueConverter: /* @__PURE__ */ __name2(() => new ArchitectureValueConverter(), "ValueConverter") } }; __name(createArchitectureServices, "createArchitectureServices"); __name2(createArchitectureServices, "createArchitectureServices"); } }); // ../parser/dist/chunks/mermaid-parser.core/chunk-LHMN2FUI.mjs function createRadarServices(context = EmptyFileSystem) { const shared = inject( createDefaultSharedCoreModule(context), MermaidGeneratedSharedModule ); const Radar2 = inject( createDefaultCoreModule({ shared }), RadarGeneratedModule, RadarModule ); shared.ServiceRegistry.register(Radar2); return { shared, Radar: Radar2 }; } var RadarTokenBuilder, RadarModule; var init_chunk_LHMN2FUI = __esm({ "../parser/dist/chunks/mermaid-parser.core/chunk-LHMN2FUI.mjs"() { "use strict"; init_chunk_FPAJGGOC(); init_lib3(); RadarTokenBuilder = class extends AbstractMermaidTokenBuilder { static { __name(this, "RadarTokenBuilder"); } static { __name2(this, "RadarTokenBuilder"); } constructor() { super(["radar-beta"]); } }; RadarModule = { parser: { TokenBuilder: /* @__PURE__ */ __name2(() => new RadarTokenBuilder(), "TokenBuilder"), ValueConverter: /* @__PURE__ */ __name2(() => new CommonValueConverter(), "ValueConverter") } }; __name(createRadarServices, "createRadarServices"); __name2(createRadarServices, "createRadarServices"); } }); // ../parser/dist/chunks/mermaid-parser.core/chunk-FWNWRKHM.mjs function registerValidationChecks(services) { const validator = services.validation.TreemapValidator; const registry = services.validation.ValidationRegistry; if (registry) { const checks = { Treemap: validator.checkSingleRoot.bind(validator) // Remove unused validation for TreemapRow }; registry.register(checks, validator); } } function createTreemapServices(context = EmptyFileSystem) { const shared = inject( createDefaultSharedCoreModule(context), MermaidGeneratedSharedModule ); const Treemap2 = inject( createDefaultCoreModule({ shared }), TreemapGeneratedModule, TreemapModule ); shared.ServiceRegistry.register(Treemap2); registerValidationChecks(Treemap2); return { shared, Treemap: Treemap2 }; } var TreemapTokenBuilder, classDefRegex, TreemapValueConverter, TreemapValidator, TreemapModule; var init_chunk_FWNWRKHM = __esm({ "../parser/dist/chunks/mermaid-parser.core/chunk-FWNWRKHM.mjs"() { "use strict"; init_chunk_FPAJGGOC(); init_lib3(); TreemapTokenBuilder = class extends AbstractMermaidTokenBuilder { static { __name(this, "TreemapTokenBuilder"); } static { __name2(this, "TreemapTokenBuilder"); } constructor() { super(["treemap"]); } }; classDefRegex = /classDef\s+([A-Z_a-z]\w+)(?:\s+([^\n\r;]*))?;?/; TreemapValueConverter = class extends AbstractMermaidValueConverter { static { __name(this, "TreemapValueConverter"); } static { __name2(this, "TreemapValueConverter"); } runCustomConverter(rule, input, _cstNode) { if (rule.name === "NUMBER2") { return parseFloat(input.replace(/,/g, "")); } else if (rule.name === "SEPARATOR") { return input.substring(1, input.length - 1); } else if (rule.name === "STRING2") { return input.substring(1, input.length - 1); } else if (rule.name === "INDENTATION") { return input.length; } else if (rule.name === "ClassDef") { if (typeof input !== "string") { return input; } const match2 = classDefRegex.exec(input); if (match2) { return { $type: "ClassDefStatement", className: match2[1], styleText: match2[2] || void 0 }; } } return void 0; } }; __name(registerValidationChecks, "registerValidationChecks"); __name2(registerValidationChecks, "registerValidationChecks"); TreemapValidator = class { static { __name(this, "TreemapValidator"); } static { __name2(this, "TreemapValidator"); } /** * Validates that a treemap has only one root node. * A root node is defined as a node that has no indentation. */ checkSingleRoot(doc, accept) { let rootNodeIndentation; for (const row of doc.TreemapRows) { if (!row.item) { continue; } if (rootNodeIndentation === void 0 && // Check if this is a root node (no indentation) row.indent === void 0) { rootNodeIndentation = 0; } else if (row.indent === void 0) { accept("error", "Multiple root nodes are not allowed in a treemap.", { node: row, property: "item" }); } else if (rootNodeIndentation !== void 0 && rootNodeIndentation >= parseInt(row.indent, 10)) { accept("error", "Multiple root nodes are not allowed in a treemap.", { node: row, property: "item" }); } } } }; TreemapModule = { parser: { TokenBuilder: /* @__PURE__ */ __name2(() => new TreemapTokenBuilder(), "TokenBuilder"), ValueConverter: /* @__PURE__ */ __name2(() => new TreemapValueConverter(), "ValueConverter") }, validation: { TreemapValidator: /* @__PURE__ */ __name2(() => new TreemapValidator(), "TreemapValidator") } }; __name(createTreemapServices, "createTreemapServices"); __name2(createTreemapServices, "createTreemapServices"); } }); // ../parser/dist/chunks/mermaid-parser.core/info-NVLQJR56.mjs var info_NVLQJR56_exports = {}; __export(info_NVLQJR56_exports, { InfoModule: () => InfoModule, createInfoServices: () => createInfoServices }); var init_info_NVLQJR56 = __esm({ "../parser/dist/chunks/mermaid-parser.core/info-NVLQJR56.mjs"() { "use strict"; init_chunk_LBM3YZW2(); init_chunk_FPAJGGOC(); } }); // ../parser/dist/chunks/mermaid-parser.core/packet-BFZMPI3H.mjs var packet_BFZMPI3H_exports = {}; __export(packet_BFZMPI3H_exports, { PacketModule: () => PacketModule, createPacketServices: () => createPacketServices }); var init_packet_BFZMPI3H = __esm({ "../parser/dist/chunks/mermaid-parser.core/packet-BFZMPI3H.mjs"() { "use strict"; init_chunk_76Q3JFCE(); init_chunk_FPAJGGOC(); } }); // ../parser/dist/chunks/mermaid-parser.core/pie-7BOR55EZ.mjs var pie_7BOR55EZ_exports = {}; __export(pie_7BOR55EZ_exports, { PieModule: () => PieModule, createPieServices: () => createPieServices }); var init_pie_7BOR55EZ = __esm({ "../parser/dist/chunks/mermaid-parser.core/pie-7BOR55EZ.mjs"() { "use strict"; init_chunk_T53DSG4Q(); init_chunk_FPAJGGOC(); } }); // ../parser/dist/chunks/mermaid-parser.core/architecture-U656AL7Q.mjs var architecture_U656AL7Q_exports = {}; __export(architecture_U656AL7Q_exports, { ArchitectureModule: () => ArchitectureModule, createArchitectureServices: () => createArchitectureServices }); var init_architecture_U656AL7Q = __esm({ "../parser/dist/chunks/mermaid-parser.core/architecture-U656AL7Q.mjs"() { "use strict"; init_chunk_O7ZBX7Z2(); init_chunk_FPAJGGOC(); } }); // ../parser/dist/chunks/mermaid-parser.core/gitGraph-F6HP7TQM.mjs var gitGraph_F6HP7TQM_exports = {}; __export(gitGraph_F6HP7TQM_exports, { GitGraphModule: () => GitGraphModule, createGitGraphServices: () => createGitGraphServices }); var init_gitGraph_F6HP7TQM = __esm({ "../parser/dist/chunks/mermaid-parser.core/gitGraph-F6HP7TQM.mjs"() { "use strict"; init_chunk_S6J4BHB3(); init_chunk_FPAJGGOC(); } }); // ../parser/dist/chunks/mermaid-parser.core/radar-NHE76QYJ.mjs var radar_NHE76QYJ_exports = {}; __export(radar_NHE76QYJ_exports, { RadarModule: () => RadarModule, createRadarServices: () => createRadarServices }); var init_radar_NHE76QYJ = __esm({ "../parser/dist/chunks/mermaid-parser.core/radar-NHE76QYJ.mjs"() { "use strict"; init_chunk_LHMN2FUI(); init_chunk_FPAJGGOC(); } }); // ../parser/dist/chunks/mermaid-parser.core/treemap-KMMF4GRG.mjs var treemap_KMMF4GRG_exports = {}; __export(treemap_KMMF4GRG_exports, { TreemapModule: () => TreemapModule, createTreemapServices: () => createTreemapServices }); var init_treemap_KMMF4GRG = __esm({ "../parser/dist/chunks/mermaid-parser.core/treemap-KMMF4GRG.mjs"() { "use strict"; init_chunk_FWNWRKHM(); init_chunk_FPAJGGOC(); } }); // ../parser/dist/mermaid-parser.core.mjs async function parse3(diagramType, text4) { const initializer = initializers[diagramType]; if (!initializer) { throw new Error(`Unknown diagram type: ${diagramType}`); } if (!parsers[diagramType]) { await initializer(); } const parser24 = parsers[diagramType]; const result = parser24.parse(text4); if (result.lexerErrors.length > 0 || result.parserErrors.length > 0) { throw new MermaidParseError(result); } return result.value; } var parsers, initializers, MermaidParseError; var init_mermaid_parser_core = __esm({ "../parser/dist/mermaid-parser.core.mjs"() { "use strict"; init_chunk_S6J4BHB3(); init_chunk_LBM3YZW2(); init_chunk_76Q3JFCE(); init_chunk_T53DSG4Q(); init_chunk_O7ZBX7Z2(); init_chunk_LHMN2FUI(); init_chunk_FWNWRKHM(); init_chunk_FPAJGGOC(); parsers = {}; initializers = { info: /* @__PURE__ */ __name2(async () => { const { createInfoServices: createInfoServices2 } = await Promise.resolve().then(() => (init_info_NVLQJR56(), info_NVLQJR56_exports)); const parser24 = createInfoServices2().Info.parser.LangiumParser; parsers.info = parser24; }, "info"), packet: /* @__PURE__ */ __name2(async () => { const { createPacketServices: createPacketServices2 } = await Promise.resolve().then(() => (init_packet_BFZMPI3H(), packet_BFZMPI3H_exports)); const parser24 = createPacketServices2().Packet.parser.LangiumParser; parsers.packet = parser24; }, "packet"), pie: /* @__PURE__ */ __name2(async () => { const { createPieServices: createPieServices2 } = await Promise.resolve().then(() => (init_pie_7BOR55EZ(), pie_7BOR55EZ_exports)); const parser24 = createPieServices2().Pie.parser.LangiumParser; parsers.pie = parser24; }, "pie"), architecture: /* @__PURE__ */ __name2(async () => { const { createArchitectureServices: createArchitectureServices2 } = await Promise.resolve().then(() => (init_architecture_U656AL7Q(), architecture_U656AL7Q_exports)); const parser24 = createArchitectureServices2().Architecture.parser.LangiumParser; parsers.architecture = parser24; }, "architecture"), gitGraph: /* @__PURE__ */ __name2(async () => { const { createGitGraphServices: createGitGraphServices2 } = await Promise.resolve().then(() => (init_gitGraph_F6HP7TQM(), gitGraph_F6HP7TQM_exports)); const parser24 = createGitGraphServices2().GitGraph.parser.LangiumParser; parsers.gitGraph = parser24; }, "gitGraph"), radar: /* @__PURE__ */ __name2(async () => { const { createRadarServices: createRadarServices2 } = await Promise.resolve().then(() => (init_radar_NHE76QYJ(), radar_NHE76QYJ_exports)); const parser24 = createRadarServices2().Radar.parser.LangiumParser; parsers.radar = parser24; }, "radar"), treemap: /* @__PURE__ */ __name2(async () => { const { createTreemapServices: createTreemapServices2 } = await Promise.resolve().then(() => (init_treemap_KMMF4GRG(), treemap_KMMF4GRG_exports)); const parser24 = createTreemapServices2().Treemap.parser.LangiumParser; parsers.treemap = parser24; }, "treemap") }; __name(parse3, "parse"); __name2(parse3, "parse"); MermaidParseError = class extends Error { static { __name(this, "MermaidParseError"); } constructor(result) { const lexerErrors = result.lexerErrors.map((err) => err.message).join("\n"); const parserErrors = result.parserErrors.map((err) => err.message).join("\n"); super(`Parsing failed: ${lexerErrors} ${parserErrors}`); this.result = result; } static { __name2(this, "MermaidParseError"); } }; } }); // src/diagrams/common/populateCommonDb.ts function populateCommonDb(ast, db7) { if (ast.accDescr) { db7.setAccDescription?.(ast.accDescr); } if (ast.accTitle) { db7.setAccTitle?.(ast.accTitle); } if (ast.title) { db7.setDiagramTitle?.(ast.title); } } var init_populateCommonDb = __esm({ "src/diagrams/common/populateCommonDb.ts"() { "use strict"; __name(populateCommonDb, "populateCommonDb"); } }); // src/diagrams/git/gitGraphTypes.ts var commitType; var init_gitGraphTypes = __esm({ "src/diagrams/git/gitGraphTypes.ts"() { "use strict"; commitType = { NORMAL: 0, REVERSE: 1, HIGHLIGHT: 2, MERGE: 3, CHERRY_PICK: 4 }; } }); // src/utils/imperativeState.ts var ImperativeState; var init_imperativeState = __esm({ "src/utils/imperativeState.ts"() { "use strict"; ImperativeState = class { /** * @param init - Function that creates the default state. */ constructor(init3) { this.init = init3; this.records = this.init(); } static { __name(this, "ImperativeState"); } reset() { this.records = this.init(); } }; } }); // src/diagrams/git/gitGraphAst.ts function getID() { return random({ length: 7 }); } function uniqBy2(list, fn3) { const recordMap = /* @__PURE__ */ Object.create(null); return list.reduce((out, item) => { const key = fn3(item); if (!recordMap[key]) { recordMap[key] = true; out.push(item); } return out; }, []); } function upsert(arr, key, newVal) { const index = arr.indexOf(key); if (index === -1) { arr.push(newVal); } else { arr.splice(index, 1, newVal); } } function prettyPrintCommitHistory(commitArr) { const commit2 = commitArr.reduce((out, commit3) => { if (out.seq > commit3.seq) { return out; } return commit3; }, commitArr[0]); let line2 = ""; commitArr.forEach(function(c3) { if (c3 === commit2) { line2 += " *"; } else { line2 += " |"; } }); const label = [line2, commit2.id, commit2.seq]; for (const branch2 in state2.records.branches) { if (state2.records.branches.get(branch2) === commit2.id) { label.push(branch2); } } log.debug(label.join(" ")); if (commit2.parents && commit2.parents.length == 2 && commit2.parents[0] && commit2.parents[1]) { const newCommit = state2.records.commits.get(commit2.parents[0]); upsert(commitArr, commit2, newCommit); if (commit2.parents[1]) { commitArr.push(state2.records.commits.get(commit2.parents[1])); } } else if (commit2.parents.length == 0) { return; } else { if (commit2.parents[0]) { const newCommit = state2.records.commits.get(commit2.parents[0]); upsert(commitArr, commit2, newCommit); } } commitArr = uniqBy2(commitArr, (c3) => c3.id); prettyPrintCommitHistory(commitArr); } var DEFAULT_GITGRAPH_CONFIG, getConfig3, state2, setDirection, setOptions6, getOptions, commit, branch, merge4, cherryPick, checkout, prettyPrint, clear7, getBranchesAsObjArray, getBranches, getCommits, getCommitsArray, getCurrentBranch, getDirection, getHead, db; var init_gitGraphAst = __esm({ "src/diagrams/git/gitGraphAst.ts"() { "use strict"; init_logger(); init_utils2(); init_config(); init_common(); init_commonDb(); init_gitGraphTypes(); init_imperativeState(); init_defaultConfig(); DEFAULT_GITGRAPH_CONFIG = defaultConfig_default.gitGraph; getConfig3 = /* @__PURE__ */ __name(() => { const config5 = cleanAndMerge({ ...DEFAULT_GITGRAPH_CONFIG, ...getConfig().gitGraph }); return config5; }, "getConfig"); state2 = new ImperativeState(() => { const config5 = getConfig3(); const mainBranchName = config5.mainBranchName; const mainBranchOrder = config5.mainBranchOrder; return { mainBranchName, commits: /* @__PURE__ */ new Map(), head: null, branchConfig: /* @__PURE__ */ new Map([[mainBranchName, { name: mainBranchName, order: mainBranchOrder }]]), branches: /* @__PURE__ */ new Map([[mainBranchName, null]]), currBranch: mainBranchName, direction: "LR", seq: 0, options: {} }; }); __name(getID, "getID"); __name(uniqBy2, "uniqBy"); setDirection = /* @__PURE__ */ __name(function(dir2) { state2.records.direction = dir2; }, "setDirection"); setOptions6 = /* @__PURE__ */ __name(function(rawOptString) { log.debug("options str", rawOptString); rawOptString = rawOptString?.trim(); rawOptString = rawOptString || "{}"; try { state2.records.options = JSON.parse(rawOptString); } catch (e3) { log.error("error while parsing gitGraph options", e3.message); } }, "setOptions"); getOptions = /* @__PURE__ */ __name(function() { return state2.records.options; }, "getOptions"); commit = /* @__PURE__ */ __name(function(commitDB) { let msg = commitDB.msg; let id30 = commitDB.id; const type3 = commitDB.type; let tags2 = commitDB.tags; log.info("commit", msg, id30, type3, tags2); log.debug("Entering commit:", msg, id30, type3, tags2); const config5 = getConfig3(); id30 = common_default.sanitizeText(id30, config5); msg = common_default.sanitizeText(msg, config5); tags2 = tags2?.map((tag) => common_default.sanitizeText(tag, config5)); const newCommit = { id: id30 ? id30 : state2.records.seq + "-" + getID(), message: msg, seq: state2.records.seq++, type: type3 ?? commitType.NORMAL, tags: tags2 ?? [], parents: state2.records.head == null ? [] : [state2.records.head.id], branch: state2.records.currBranch }; state2.records.head = newCommit; log.info("main branch", config5.mainBranchName); if (state2.records.commits.has(newCommit.id)) { log.warn(`Commit ID ${newCommit.id} already exists`); } state2.records.commits.set(newCommit.id, newCommit); state2.records.branches.set(state2.records.currBranch, newCommit.id); log.debug("in pushCommit " + newCommit.id); }, "commit"); branch = /* @__PURE__ */ __name(function(branchDB) { let name = branchDB.name; const order2 = branchDB.order; name = common_default.sanitizeText(name, getConfig3()); if (state2.records.branches.has(name)) { throw new Error( `Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${name}")` ); } state2.records.branches.set(name, state2.records.head != null ? state2.records.head.id : null); state2.records.branchConfig.set(name, { name, order: order2 }); checkout(name); log.debug("in createBranch"); }, "branch"); merge4 = /* @__PURE__ */ __name((mergeDB) => { let otherBranch = mergeDB.branch; let customId = mergeDB.id; const overrideType = mergeDB.type; const customTags = mergeDB.tags; const config5 = getConfig3(); otherBranch = common_default.sanitizeText(otherBranch, config5); if (customId) { customId = common_default.sanitizeText(customId, config5); } const currentBranchCheck = state2.records.branches.get(state2.records.currBranch); const otherBranchCheck = state2.records.branches.get(otherBranch); const currentCommit = currentBranchCheck ? state2.records.commits.get(currentBranchCheck) : void 0; const otherCommit = otherBranchCheck ? state2.records.commits.get(otherBranchCheck) : void 0; if (currentCommit && otherCommit && currentCommit.branch === otherBranch) { throw new Error(`Cannot merge branch '${otherBranch}' into itself.`); } if (state2.records.currBranch === otherBranch) { const error3 = new Error('Incorrect usage of "merge". Cannot merge a branch to itself'); error3.hash = { text: `merge ${otherBranch}`, token: `merge ${otherBranch}`, expected: ["branch abc"] }; throw error3; } if (currentCommit === void 0 || !currentCommit) { const error3 = new Error( `Incorrect usage of "merge". Current branch (${state2.records.currBranch})has no commits` ); error3.hash = { text: `merge ${otherBranch}`, token: `merge ${otherBranch}`, expected: ["commit"] }; throw error3; } if (!state2.records.branches.has(otherBranch)) { const error3 = new Error( 'Incorrect usage of "merge". Branch to be merged (' + otherBranch + ") does not exist" ); error3.hash = { text: `merge ${otherBranch}`, token: `merge ${otherBranch}`, expected: [`branch ${otherBranch}`] }; throw error3; } if (otherCommit === void 0 || !otherCommit) { const error3 = new Error( 'Incorrect usage of "merge". Branch to be merged (' + otherBranch + ") has no commits" ); error3.hash = { text: `merge ${otherBranch}`, token: `merge ${otherBranch}`, expected: ['"commit"'] }; throw error3; } if (currentCommit === otherCommit) { const error3 = new Error('Incorrect usage of "merge". Both branches have same head'); error3.hash = { text: `merge ${otherBranch}`, token: `merge ${otherBranch}`, expected: ["branch abc"] }; throw error3; } if (customId && state2.records.commits.has(customId)) { const error3 = new Error( 'Incorrect usage of "merge". Commit with id:' + customId + " already exists, use different custom id" ); error3.hash = { text: `merge ${otherBranch} ${customId} ${overrideType} ${customTags?.join(" ")}`, token: `merge ${otherBranch} ${customId} ${overrideType} ${customTags?.join(" ")}`, expected: [ `merge ${otherBranch} ${customId}_UNIQUE ${overrideType} ${customTags?.join(" ")}` ] }; throw error3; } const verifiedBranch = otherBranchCheck ? otherBranchCheck : ""; const commit2 = { id: customId || `${state2.records.seq}-${getID()}`, message: `merged branch ${otherBranch} into ${state2.records.currBranch}`, seq: state2.records.seq++, parents: state2.records.head == null ? [] : [state2.records.head.id, verifiedBranch], branch: state2.records.currBranch, type: commitType.MERGE, customType: overrideType, customId: customId ? true : false, tags: customTags ?? [] }; state2.records.head = commit2; state2.records.commits.set(commit2.id, commit2); state2.records.branches.set(state2.records.currBranch, commit2.id); log.debug(state2.records.branches); log.debug("in mergeBranch"); }, "merge"); cherryPick = /* @__PURE__ */ __name(function(cherryPickDB) { let sourceId = cherryPickDB.id; let targetId = cherryPickDB.targetId; let tags2 = cherryPickDB.tags; let parentCommitId = cherryPickDB.parent; log.debug("Entering cherryPick:", sourceId, targetId, tags2); const config5 = getConfig3(); sourceId = common_default.sanitizeText(sourceId, config5); targetId = common_default.sanitizeText(targetId, config5); tags2 = tags2?.map((tag) => common_default.sanitizeText(tag, config5)); parentCommitId = common_default.sanitizeText(parentCommitId, config5); if (!sourceId || !state2.records.commits.has(sourceId)) { const error3 = new Error( 'Incorrect usage of "cherryPick". Source commit id should exist and provided' ); error3.hash = { text: `cherryPick ${sourceId} ${targetId}`, token: `cherryPick ${sourceId} ${targetId}`, expected: ["cherry-pick abc"] }; throw error3; } const sourceCommit = state2.records.commits.get(sourceId); if (sourceCommit === void 0 || !sourceCommit) { throw new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided'); } if (parentCommitId && !(Array.isArray(sourceCommit.parents) && sourceCommit.parents.includes(parentCommitId))) { const error3 = new Error( "Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit." ); throw error3; } const sourceCommitBranch = sourceCommit.branch; if (sourceCommit.type === commitType.MERGE && !parentCommitId) { const error3 = new Error( "Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified." ); throw error3; } if (!targetId || !state2.records.commits.has(targetId)) { if (sourceCommitBranch === state2.records.currBranch) { const error3 = new Error( 'Incorrect usage of "cherryPick". Source commit is already on current branch' ); error3.hash = { text: `cherryPick ${sourceId} ${targetId}`, token: `cherryPick ${sourceId} ${targetId}`, expected: ["cherry-pick abc"] }; throw error3; } const currentCommitId = state2.records.branches.get(state2.records.currBranch); if (currentCommitId === void 0 || !currentCommitId) { const error3 = new Error( `Incorrect usage of "cherry-pick". Current branch (${state2.records.currBranch})has no commits` ); error3.hash = { text: `cherryPick ${sourceId} ${targetId}`, token: `cherryPick ${sourceId} ${targetId}`, expected: ["cherry-pick abc"] }; throw error3; } const currentCommit = state2.records.commits.get(currentCommitId); if (currentCommit === void 0 || !currentCommit) { const error3 = new Error( `Incorrect usage of "cherry-pick". Current branch (${state2.records.currBranch})has no commits` ); error3.hash = { text: `cherryPick ${sourceId} ${targetId}`, token: `cherryPick ${sourceId} ${targetId}`, expected: ["cherry-pick abc"] }; throw error3; } const commit2 = { id: state2.records.seq + "-" + getID(), message: `cherry-picked ${sourceCommit?.message} into ${state2.records.currBranch}`, seq: state2.records.seq++, parents: state2.records.head == null ? [] : [state2.records.head.id, sourceCommit.id], branch: state2.records.currBranch, type: commitType.CHERRY_PICK, tags: tags2 ? tags2.filter(Boolean) : [ `cherry-pick:${sourceCommit.id}${sourceCommit.type === commitType.MERGE ? `|parent:${parentCommitId}` : ""}` ] }; state2.records.head = commit2; state2.records.commits.set(commit2.id, commit2); state2.records.branches.set(state2.records.currBranch, commit2.id); log.debug(state2.records.branches); log.debug("in cherryPick"); } }, "cherryPick"); checkout = /* @__PURE__ */ __name(function(branch2) { branch2 = common_default.sanitizeText(branch2, getConfig3()); if (!state2.records.branches.has(branch2)) { const error3 = new Error( `Trying to checkout branch which is not yet created. (Help try using "branch ${branch2}")` ); error3.hash = { text: `checkout ${branch2}`, token: `checkout ${branch2}`, expected: [`branch ${branch2}`] }; throw error3; } else { state2.records.currBranch = branch2; const id30 = state2.records.branches.get(state2.records.currBranch); if (id30 === void 0 || !id30) { state2.records.head = null; } else { state2.records.head = state2.records.commits.get(id30) ?? null; } } }, "checkout"); __name(upsert, "upsert"); __name(prettyPrintCommitHistory, "prettyPrintCommitHistory"); prettyPrint = /* @__PURE__ */ __name(function() { log.debug(state2.records.commits); const node2 = getCommitsArray()[0]; prettyPrintCommitHistory([node2]); }, "prettyPrint"); clear7 = /* @__PURE__ */ __name(function() { state2.reset(); clear(); }, "clear"); getBranchesAsObjArray = /* @__PURE__ */ __name(function() { const branchesArray = [...state2.records.branchConfig.values()].map((branchConfig, i2) => { if (branchConfig.order !== null && branchConfig.order !== void 0) { return branchConfig; } return { ...branchConfig, order: parseFloat(`0.${i2}`) }; }).sort((a2, b3) => (a2.order ?? 0) - (b3.order ?? 0)).map(({ name }) => ({ name })); return branchesArray; }, "getBranchesAsObjArray"); getBranches = /* @__PURE__ */ __name(function() { return state2.records.branches; }, "getBranches"); getCommits = /* @__PURE__ */ __name(function() { return state2.records.commits; }, "getCommits"); getCommitsArray = /* @__PURE__ */ __name(function() { const commitArr = [...state2.records.commits.values()]; commitArr.forEach(function(o2) { log.debug(o2.id); }); commitArr.sort((a2, b3) => a2.seq - b3.seq); return commitArr; }, "getCommitsArray"); getCurrentBranch = /* @__PURE__ */ __name(function() { return state2.records.currBranch; }, "getCurrentBranch"); getDirection = /* @__PURE__ */ __name(function() { return state2.records.direction; }, "getDirection"); getHead = /* @__PURE__ */ __name(function() { return state2.records.head; }, "getHead"); db = { commitType, getConfig: getConfig3, setDirection, setOptions: setOptions6, getOptions, commit, branch, merge: merge4, cherryPick, checkout, //reset, prettyPrint, clear: clear7, getBranchesAsObjArray, getBranches, getCommits, getCommitsArray, getCurrentBranch, getDirection, getHead, setAccTitle, getAccTitle, getAccDescription, setAccDescription, setDiagramTitle, getDiagramTitle }; } }); // src/diagrams/git/gitGraphParser.ts var populate15, parseStatement, parseCommit, parseBranch, parseMerge, parseCheckout, parseCherryPicking, parser4; var init_gitGraphParser = __esm({ "src/diagrams/git/gitGraphParser.ts"() { "use strict"; init_mermaid_parser_core(); init_logger(); init_populateCommonDb(); init_gitGraphAst(); init_gitGraphTypes(); populate15 = /* @__PURE__ */ __name((ast, db7) => { populateCommonDb(ast, db7); if (ast.dir) { db7.setDirection(ast.dir); } for (const statement of ast.statements) { parseStatement(statement, db7); } }, "populate"); parseStatement = /* @__PURE__ */ __name((statement, db7) => { const parsers2 = { Commit: /* @__PURE__ */ __name((stmt) => db7.commit(parseCommit(stmt)), "Commit"), Branch: /* @__PURE__ */ __name((stmt) => db7.branch(parseBranch(stmt)), "Branch"), Merge: /* @__PURE__ */ __name((stmt) => db7.merge(parseMerge(stmt)), "Merge"), Checkout: /* @__PURE__ */ __name((stmt) => db7.checkout(parseCheckout(stmt)), "Checkout"), CherryPicking: /* @__PURE__ */ __name((stmt) => db7.cherryPick(parseCherryPicking(stmt)), "CherryPicking") }; const parser24 = parsers2[statement.$type]; if (parser24) { parser24(statement); } else { log.error(`Unknown statement type: ${statement.$type}`); } }, "parseStatement"); parseCommit = /* @__PURE__ */ __name((commit2) => { const commitDB = { id: commit2.id, msg: commit2.message ?? "", type: commit2.type !== void 0 ? commitType[commit2.type] : commitType.NORMAL, tags: commit2.tags ?? void 0 }; return commitDB; }, "parseCommit"); parseBranch = /* @__PURE__ */ __name((branch2) => { const branchDB = { name: branch2.name, order: branch2.order ?? 0 }; return branchDB; }, "parseBranch"); parseMerge = /* @__PURE__ */ __name((merge5) => { const mergeDB = { branch: merge5.branch, id: merge5.id ?? "", type: merge5.type !== void 0 ? commitType[merge5.type] : void 0, tags: merge5.tags ?? void 0 }; return mergeDB; }, "parseMerge"); parseCheckout = /* @__PURE__ */ __name((checkout2) => { const branch2 = checkout2.branch; return branch2; }, "parseCheckout"); parseCherryPicking = /* @__PURE__ */ __name((cherryPicking) => { const cherryPickDB = { id: cherryPicking.id, targetId: "", tags: cherryPicking.tags?.length === 0 ? void 0 : cherryPicking.tags, parent: cherryPicking.parent }; return cherryPickDB; }, "parseCherryPicking"); parser4 = { parse: /* @__PURE__ */ __name(async (input) => { const ast = await parse3("gitGraph", input); log.debug(ast); populate15(ast, db); }, "parse") }; if (void 0) { const { it, expect, describe } = void 0; const mockDB = { commitType, setDirection: vi.fn(), commit: vi.fn(), branch: vi.fn(), merge: vi.fn(), cherryPick: vi.fn(), checkout: vi.fn() }; describe("GitGraph Parser", () => { it("should parse a commit statement", () => { const commit2 = { $type: "Commit", id: "1", message: "test", tags: ["tag1", "tag2"], type: "NORMAL" }; parseStatement(commit2, mockDB); expect(mockDB.commit).toHaveBeenCalledWith({ id: "1", msg: "test", tags: ["tag1", "tag2"], type: 0 }); }); it("should parse a branch statement", () => { const branch2 = { $type: "Branch", name: "newBranch", order: 1 }; parseStatement(branch2, mockDB); expect(mockDB.branch).toHaveBeenCalledWith({ name: "newBranch", order: 1 }); }); it("should parse a checkout statement", () => { const checkout2 = { $type: "Checkout", branch: "newBranch" }; parseStatement(checkout2, mockDB); expect(mockDB.checkout).toHaveBeenCalledWith("newBranch"); }); it("should parse a merge statement", () => { const merge5 = { $type: "Merge", branch: "newBranch", id: "1", tags: ["tag1", "tag2"], type: "NORMAL" }; parseStatement(merge5, mockDB); expect(mockDB.merge).toHaveBeenCalledWith({ branch: "newBranch", id: "1", tags: ["tag1", "tag2"], type: 0 }); }); it("should parse a cherry picking statement", () => { const cherryPick2 = { $type: "CherryPicking", id: "1", tags: ["tag1", "tag2"], parent: "2" }; parseStatement(cherryPick2, mockDB); expect(mockDB.cherryPick).toHaveBeenCalledWith({ id: "1", targetId: "", parent: "2", tags: ["tag1", "tag2"] }); }); it("should parse a langium generated gitGraph ast", () => { const dummy = { $type: "GitGraph", statements: [] }; const gitGraphAst = { $type: "GitGraph", statements: [ { $container: dummy, $type: "Commit", id: "1", message: "test", tags: ["tag1", "tag2"], type: "NORMAL" }, { $container: dummy, $type: "Branch", name: "newBranch", order: 1 }, { $container: dummy, $type: "Merge", branch: "newBranch", id: "1", tags: ["tag1", "tag2"], type: "NORMAL" }, { $container: dummy, $type: "Checkout", branch: "newBranch" }, { $container: dummy, $type: "CherryPicking", id: "1", tags: ["tag1", "tag2"], parent: "2" } ] }; populate15(gitGraphAst, mockDB); expect(mockDB.commit).toHaveBeenCalledWith({ id: "1", msg: "test", tags: ["tag1", "tag2"], type: 0 }); expect(mockDB.branch).toHaveBeenCalledWith({ name: "newBranch", order: 1 }); expect(mockDB.merge).toHaveBeenCalledWith({ branch: "newBranch", id: "1", tags: ["tag1", "tag2"], type: 0 }); expect(mockDB.checkout).toHaveBeenCalledWith("newBranch"); }); }); } } }); // src/diagrams/git/gitGraphRenderer.ts var DEFAULT_CONFIG, DEFAULT_GITGRAPH_CONFIG2, LAYOUT_OFFSET, COMMIT_STEP, PX, PY, THEME_COLOR_LIMIT, branchPos, commitPos, defaultPos, allCommitsDict, lanes, maxPos, dir, clear8, drawText2, findClosestParent, findClosestParentBT, setParallelBTPos, findClosestParentPos, calculateCommitPosition, setCommitPosition, setRootPosition, drawCommitBullet, drawCommitLabel, drawCommitTags, getCommitClassType, calculatePosition, getCommitPosition, drawCommits, shouldRerouteArrow, findLane, drawArrow, drawArrows, drawBranches, setBranchPosition, draw4, gitGraphRenderer_default; var init_gitGraphRenderer = __esm({ "src/diagrams/git/gitGraphRenderer.ts"() { "use strict"; init_src32(); init_diagramAPI(); init_logger(); init_utils2(); init_gitGraphTypes(); DEFAULT_CONFIG = getConfig2(); DEFAULT_GITGRAPH_CONFIG2 = DEFAULT_CONFIG?.gitGraph; LAYOUT_OFFSET = 10; COMMIT_STEP = 40; PX = 4; PY = 2; THEME_COLOR_LIMIT = 8; branchPos = /* @__PURE__ */ new Map(); commitPos = /* @__PURE__ */ new Map(); defaultPos = 30; allCommitsDict = /* @__PURE__ */ new Map(); lanes = []; maxPos = 0; dir = "LR"; clear8 = /* @__PURE__ */ __name(() => { branchPos.clear(); commitPos.clear(); allCommitsDict.clear(); maxPos = 0; lanes = []; dir = "LR"; }, "clear"); drawText2 = /* @__PURE__ */ __name((txt) => { const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); const rows = typeof txt === "string" ? txt.split(/\\n|\n|/gi) : txt; rows.forEach((row) => { const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); tspan.setAttribute("dy", "1em"); tspan.setAttribute("x", "0"); tspan.setAttribute("class", "row"); tspan.textContent = row.trim(); svgLabel.appendChild(tspan); }); return svgLabel; }, "drawText"); findClosestParent = /* @__PURE__ */ __name((parents3) => { let closestParent; let comparisonFunc; let targetPosition; if (dir === "BT") { comparisonFunc = /* @__PURE__ */ __name((a2, b3) => a2 <= b3, "comparisonFunc"); targetPosition = Infinity; } else { comparisonFunc = /* @__PURE__ */ __name((a2, b3) => a2 >= b3, "comparisonFunc"); targetPosition = 0; } parents3.forEach((parent4) => { const parentPosition = dir === "TB" || dir == "BT" ? commitPos.get(parent4)?.y : commitPos.get(parent4)?.x; if (parentPosition !== void 0 && comparisonFunc(parentPosition, targetPosition)) { closestParent = parent4; targetPosition = parentPosition; } }); return closestParent; }, "findClosestParent"); findClosestParentBT = /* @__PURE__ */ __name((parents3) => { let closestParent = ""; let maxPosition = Infinity; parents3.forEach((parent4) => { const parentPosition = commitPos.get(parent4).y; if (parentPosition <= maxPosition) { closestParent = parent4; maxPosition = parentPosition; } }); return closestParent || void 0; }, "findClosestParentBT"); setParallelBTPos = /* @__PURE__ */ __name((sortedKeys, commits, defaultPos2) => { let curPos = defaultPos2; let maxPosition = defaultPos2; const roots = []; sortedKeys.forEach((key) => { const commit2 = commits.get(key); if (!commit2) { throw new Error(`Commit not found for key ${key}`); } if (commit2.parents.length) { curPos = calculateCommitPosition(commit2); maxPosition = Math.max(curPos, maxPosition); } else { roots.push(commit2); } setCommitPosition(commit2, curPos); }); curPos = maxPosition; roots.forEach((commit2) => { setRootPosition(commit2, curPos, defaultPos2); }); sortedKeys.forEach((key) => { const commit2 = commits.get(key); if (commit2?.parents.length) { const closestParent = findClosestParentBT(commit2.parents); curPos = commitPos.get(closestParent).y - COMMIT_STEP; if (curPos <= maxPosition) { maxPosition = curPos; } const x5 = branchPos.get(commit2.branch).pos; const y6 = curPos - LAYOUT_OFFSET; commitPos.set(commit2.id, { x: x5, y: y6 }); } }); }, "setParallelBTPos"); findClosestParentPos = /* @__PURE__ */ __name((commit2) => { const closestParent = findClosestParent(commit2.parents.filter((p3) => p3 !== null)); if (!closestParent) { throw new Error(`Closest parent not found for commit ${commit2.id}`); } const closestParentPos = commitPos.get(closestParent)?.y; if (closestParentPos === void 0) { throw new Error(`Closest parent position not found for commit ${commit2.id}`); } return closestParentPos; }, "findClosestParentPos"); calculateCommitPosition = /* @__PURE__ */ __name((commit2) => { const closestParentPos = findClosestParentPos(commit2); return closestParentPos + COMMIT_STEP; }, "calculateCommitPosition"); setCommitPosition = /* @__PURE__ */ __name((commit2, curPos) => { const branch2 = branchPos.get(commit2.branch); if (!branch2) { throw new Error(`Branch not found for commit ${commit2.id}`); } const x5 = branch2.pos; const y6 = curPos + LAYOUT_OFFSET; commitPos.set(commit2.id, { x: x5, y: y6 }); return { x: x5, y: y6 }; }, "setCommitPosition"); setRootPosition = /* @__PURE__ */ __name((commit2, curPos, defaultPos2) => { const branch2 = branchPos.get(commit2.branch); if (!branch2) { throw new Error(`Branch not found for commit ${commit2.id}`); } const y6 = curPos + defaultPos2; const x5 = branch2.pos; commitPos.set(commit2.id, { x: x5, y: y6 }); }, "setRootPosition"); drawCommitBullet = /* @__PURE__ */ __name((gBullets, commit2, commitPosition, typeClass, branchIndex, commitSymbolType) => { if (commitSymbolType === commitType.HIGHLIGHT) { gBullets.append("rect").attr("x", commitPosition.x - 10).attr("y", commitPosition.y - 10).attr("width", 20).attr("height", 20).attr( "class", `commit ${commit2.id} commit-highlight${branchIndex % THEME_COLOR_LIMIT} ${typeClass}-outer` ); gBullets.append("rect").attr("x", commitPosition.x - 6).attr("y", commitPosition.y - 6).attr("width", 12).attr("height", 12).attr( "class", `commit ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT} ${typeClass}-inner` ); } else if (commitSymbolType === commitType.CHERRY_PICK) { gBullets.append("circle").attr("cx", commitPosition.x).attr("cy", commitPosition.y).attr("r", 10).attr("class", `commit ${commit2.id} ${typeClass}`); gBullets.append("circle").attr("cx", commitPosition.x - 3).attr("cy", commitPosition.y + 2).attr("r", 2.75).attr("fill", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); gBullets.append("circle").attr("cx", commitPosition.x + 3).attr("cy", commitPosition.y + 2).attr("r", 2.75).attr("fill", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); gBullets.append("line").attr("x1", commitPosition.x + 3).attr("y1", commitPosition.y + 1).attr("x2", commitPosition.x).attr("y2", commitPosition.y - 5).attr("stroke", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); gBullets.append("line").attr("x1", commitPosition.x - 3).attr("y1", commitPosition.y + 1).attr("x2", commitPosition.x).attr("y2", commitPosition.y - 5).attr("stroke", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); } else { const circle6 = gBullets.append("circle"); circle6.attr("cx", commitPosition.x); circle6.attr("cy", commitPosition.y); circle6.attr("r", commit2.type === commitType.MERGE ? 9 : 10); circle6.attr("class", `commit ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT}`); if (commitSymbolType === commitType.MERGE) { const circle22 = gBullets.append("circle"); circle22.attr("cx", commitPosition.x); circle22.attr("cy", commitPosition.y); circle22.attr("r", 6); circle22.attr( "class", `commit ${typeClass} ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT}` ); } if (commitSymbolType === commitType.REVERSE) { const cross3 = gBullets.append("path"); cross3.attr( "d", `M ${commitPosition.x - 5},${commitPosition.y - 5}L${commitPosition.x + 5},${commitPosition.y + 5}M${commitPosition.x - 5},${commitPosition.y + 5}L${commitPosition.x + 5},${commitPosition.y - 5}` ).attr("class", `commit ${typeClass} ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT}`); } } }, "drawCommitBullet"); drawCommitLabel = /* @__PURE__ */ __name((gLabels, commit2, commitPosition, pos) => { if (commit2.type !== commitType.CHERRY_PICK && (commit2.customId && commit2.type === commitType.MERGE || commit2.type !== commitType.MERGE) && DEFAULT_GITGRAPH_CONFIG2?.showCommitLabel) { const wrapper = gLabels.append("g"); const labelBkg = wrapper.insert("rect").attr("class", "commit-label-bkg"); const text4 = wrapper.append("text").attr("x", pos).attr("y", commitPosition.y + 25).attr("class", "commit-label").text(commit2.id); const bbox = text4.node()?.getBBox(); if (bbox) { labelBkg.attr("x", commitPosition.posWithOffset - bbox.width / 2 - PY).attr("y", commitPosition.y + 13.5).attr("width", bbox.width + 2 * PY).attr("height", bbox.height + 2 * PY); if (dir === "TB" || dir === "BT") { labelBkg.attr("x", commitPosition.x - (bbox.width + 4 * PX + 5)).attr("y", commitPosition.y - 12); text4.attr("x", commitPosition.x - (bbox.width + 4 * PX)).attr("y", commitPosition.y + bbox.height - 12); } else { text4.attr("x", commitPosition.posWithOffset - bbox.width / 2); } if (DEFAULT_GITGRAPH_CONFIG2.rotateCommitLabel) { if (dir === "TB" || dir === "BT") { text4.attr( "transform", "rotate(-45, " + commitPosition.x + ", " + commitPosition.y + ")" ); labelBkg.attr( "transform", "rotate(-45, " + commitPosition.x + ", " + commitPosition.y + ")" ); } else { const r_x = -7.5 - (bbox.width + 10) / 25 * 9.5; const r_y = 10 + bbox.width / 25 * 8.5; wrapper.attr( "transform", "translate(" + r_x + ", " + r_y + ") rotate(-45, " + pos + ", " + commitPosition.y + ")" ); } } } } }, "drawCommitLabel"); drawCommitTags = /* @__PURE__ */ __name((gLabels, commit2, commitPosition, pos) => { if (commit2.tags.length > 0) { let yOffset = 0; let maxTagBboxWidth = 0; let maxTagBboxHeight = 0; const tagElements = []; for (const tagValue of commit2.tags.reverse()) { const rect3 = gLabels.insert("polygon"); const hole = gLabels.append("circle"); const tag = gLabels.append("text").attr("y", commitPosition.y - 16 - yOffset).attr("class", "tag-label").text(tagValue); const tagBbox = tag.node()?.getBBox(); if (!tagBbox) { throw new Error("Tag bbox not found"); } maxTagBboxWidth = Math.max(maxTagBboxWidth, tagBbox.width); maxTagBboxHeight = Math.max(maxTagBboxHeight, tagBbox.height); tag.attr("x", commitPosition.posWithOffset - tagBbox.width / 2); tagElements.push({ tag, hole, rect: rect3, yOffset }); yOffset += 20; } for (const { tag, hole, rect: rect3, yOffset: yOffset2 } of tagElements) { const h22 = maxTagBboxHeight / 2; const ly = commitPosition.y - 19.2 - yOffset2; rect3.attr("class", "tag-label-bkg").attr( "points", ` ${pos - maxTagBboxWidth / 2 - PX / 2},${ly + PY} ${pos - maxTagBboxWidth / 2 - PX / 2},${ly - PY} ${commitPosition.posWithOffset - maxTagBboxWidth / 2 - PX},${ly - h22 - PY} ${commitPosition.posWithOffset + maxTagBboxWidth / 2 + PX},${ly - h22 - PY} ${commitPosition.posWithOffset + maxTagBboxWidth / 2 + PX},${ly + h22 + PY} ${commitPosition.posWithOffset - maxTagBboxWidth / 2 - PX},${ly + h22 + PY}` ); hole.attr("cy", ly).attr("cx", pos - maxTagBboxWidth / 2 + PX / 2).attr("r", 1.5).attr("class", "tag-hole"); if (dir === "TB" || dir === "BT") { const yOrigin = pos + yOffset2; rect3.attr("class", "tag-label-bkg").attr( "points", ` ${commitPosition.x},${yOrigin + 2} ${commitPosition.x},${yOrigin - 2} ${commitPosition.x + LAYOUT_OFFSET},${yOrigin - h22 - 2} ${commitPosition.x + LAYOUT_OFFSET + maxTagBboxWidth + 4},${yOrigin - h22 - 2} ${commitPosition.x + LAYOUT_OFFSET + maxTagBboxWidth + 4},${yOrigin + h22 + 2} ${commitPosition.x + LAYOUT_OFFSET},${yOrigin + h22 + 2}` ).attr("transform", "translate(12,12) rotate(45, " + commitPosition.x + "," + pos + ")"); hole.attr("cx", commitPosition.x + PX / 2).attr("cy", yOrigin).attr("transform", "translate(12,12) rotate(45, " + commitPosition.x + "," + pos + ")"); tag.attr("x", commitPosition.x + 5).attr("y", yOrigin + 3).attr("transform", "translate(14,14) rotate(45, " + commitPosition.x + "," + pos + ")"); } } } }, "drawCommitTags"); getCommitClassType = /* @__PURE__ */ __name((commit2) => { const commitSymbolType = commit2.customType ?? commit2.type; switch (commitSymbolType) { case commitType.NORMAL: return "commit-normal"; case commitType.REVERSE: return "commit-reverse"; case commitType.HIGHLIGHT: return "commit-highlight"; case commitType.MERGE: return "commit-merge"; case commitType.CHERRY_PICK: return "commit-cherry-pick"; default: return "commit-normal"; } }, "getCommitClassType"); calculatePosition = /* @__PURE__ */ __name((commit2, dir2, pos, commitPos2) => { const defaultCommitPosition = { x: 0, y: 0 }; if (commit2.parents.length > 0) { const closestParent = findClosestParent(commit2.parents); if (closestParent) { const parentPosition = commitPos2.get(closestParent) ?? defaultCommitPosition; if (dir2 === "TB") { return parentPosition.y + COMMIT_STEP; } else if (dir2 === "BT") { const currentPosition = commitPos2.get(commit2.id) ?? defaultCommitPosition; return currentPosition.y - COMMIT_STEP; } else { return parentPosition.x + COMMIT_STEP; } } } else { if (dir2 === "TB") { return defaultPos; } else if (dir2 === "BT") { const currentPosition = commitPos2.get(commit2.id) ?? defaultCommitPosition; return currentPosition.y - COMMIT_STEP; } else { return 0; } } return 0; }, "calculatePosition"); getCommitPosition = /* @__PURE__ */ __name((commit2, pos, isParallelCommits) => { const posWithOffset = dir === "BT" && isParallelCommits ? pos : pos + LAYOUT_OFFSET; const y6 = dir === "TB" || dir === "BT" ? posWithOffset : branchPos.get(commit2.branch)?.pos; const x5 = dir === "TB" || dir === "BT" ? branchPos.get(commit2.branch)?.pos : posWithOffset; if (x5 === void 0 || y6 === void 0) { throw new Error(`Position were undefined for commit ${commit2.id}`); } return { x: x5, y: y6, posWithOffset }; }, "getCommitPosition"); drawCommits = /* @__PURE__ */ __name((svg2, commits, modifyGraph) => { if (!DEFAULT_GITGRAPH_CONFIG2) { throw new Error("GitGraph config not found"); } const gBullets = svg2.append("g").attr("class", "commit-bullets"); const gLabels = svg2.append("g").attr("class", "commit-labels"); let pos = dir === "TB" || dir === "BT" ? defaultPos : 0; const keys2 = [...commits.keys()]; const isParallelCommits = DEFAULT_GITGRAPH_CONFIG2?.parallelCommits ?? false; const sortKeys = /* @__PURE__ */ __name((a2, b3) => { const seqA = commits.get(a2)?.seq; const seqB = commits.get(b3)?.seq; return seqA !== void 0 && seqB !== void 0 ? seqA - seqB : 0; }, "sortKeys"); let sortedKeys = keys2.sort(sortKeys); if (dir === "BT") { if (isParallelCommits) { setParallelBTPos(sortedKeys, commits, pos); } sortedKeys = sortedKeys.reverse(); } sortedKeys.forEach((key) => { const commit2 = commits.get(key); if (!commit2) { throw new Error(`Commit not found for key ${key}`); } if (isParallelCommits) { pos = calculatePosition(commit2, dir, pos, commitPos); } const commitPosition = getCommitPosition(commit2, pos, isParallelCommits); if (modifyGraph) { const typeClass = getCommitClassType(commit2); const commitSymbolType = commit2.customType ?? commit2.type; const branchIndex = branchPos.get(commit2.branch)?.index ?? 0; drawCommitBullet(gBullets, commit2, commitPosition, typeClass, branchIndex, commitSymbolType); drawCommitLabel(gLabels, commit2, commitPosition, pos); drawCommitTags(gLabels, commit2, commitPosition, pos); } if (dir === "TB" || dir === "BT") { commitPos.set(commit2.id, { x: commitPosition.x, y: commitPosition.posWithOffset }); } else { commitPos.set(commit2.id, { x: commitPosition.posWithOffset, y: commitPosition.y }); } pos = dir === "BT" && isParallelCommits ? pos + COMMIT_STEP : pos + COMMIT_STEP + LAYOUT_OFFSET; if (pos > maxPos) { maxPos = pos; } }); }, "drawCommits"); shouldRerouteArrow = /* @__PURE__ */ __name((commitA, commitB, p1, p22, allCommits) => { const commitBIsFurthest = dir === "TB" || dir === "BT" ? p1.x < p22.x : p1.y < p22.y; const branchToGetCurve = commitBIsFurthest ? commitB.branch : commitA.branch; const isOnBranchToGetCurve = /* @__PURE__ */ __name((x5) => x5.branch === branchToGetCurve, "isOnBranchToGetCurve"); const isBetweenCommits = /* @__PURE__ */ __name((x5) => x5.seq > commitA.seq && x5.seq < commitB.seq, "isBetweenCommits"); return [...allCommits.values()].some((commitX) => { return isBetweenCommits(commitX) && isOnBranchToGetCurve(commitX); }); }, "shouldRerouteArrow"); findLane = /* @__PURE__ */ __name((y1, y22, depth = 0) => { const candidate = y1 + Math.abs(y1 - y22) / 2; if (depth > 5) { return candidate; } const ok = lanes.every((lane) => Math.abs(lane - candidate) >= 10); if (ok) { lanes.push(candidate); return candidate; } const diff2 = Math.abs(y1 - y22); return findLane(y1, y22 - diff2 / 5, depth + 1); }, "findLane"); drawArrow = /* @__PURE__ */ __name((svg2, commitA, commitB, allCommits) => { const p1 = commitPos.get(commitA.id); const p22 = commitPos.get(commitB.id); if (p1 === void 0 || p22 === void 0) { throw new Error(`Commit positions not found for commits ${commitA.id} and ${commitB.id}`); } const arrowNeedsRerouting = shouldRerouteArrow(commitA, commitB, p1, p22, allCommits); let arc = ""; let arc2 = ""; let radius2 = 0; let offset = 0; let colorClassNum = branchPos.get(commitB.branch)?.index; if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) { colorClassNum = branchPos.get(commitA.branch)?.index; } let lineDef; if (arrowNeedsRerouting) { arc = "A 10 10, 0, 0, 0,"; arc2 = "A 10 10, 0, 0, 1,"; radius2 = 10; offset = 10; const lineY = p1.y < p22.y ? findLane(p1.y, p22.y) : findLane(p22.y, p1.y); const lineX = p1.x < p22.x ? findLane(p1.x, p22.x) : findLane(p22.x, p1.x); if (dir === "TB") { if (p1.x < p22.x) { lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius2} ${p1.y} ${arc2} ${lineX} ${p1.y + offset} L ${lineX} ${p22.y - radius2} ${arc} ${lineX + offset} ${p22.y} L ${p22.x} ${p22.y}`; } else { colorClassNum = branchPos.get(commitA.branch)?.index; lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius2} ${p1.y} ${arc} ${lineX} ${p1.y + offset} L ${lineX} ${p22.y - radius2} ${arc2} ${lineX - offset} ${p22.y} L ${p22.x} ${p22.y}`; } } else if (dir === "BT") { if (p1.x < p22.x) { lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius2} ${p1.y} ${arc} ${lineX} ${p1.y - offset} L ${lineX} ${p22.y + radius2} ${arc2} ${lineX + offset} ${p22.y} L ${p22.x} ${p22.y}`; } else { colorClassNum = branchPos.get(commitA.branch)?.index; lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius2} ${p1.y} ${arc2} ${lineX} ${p1.y - offset} L ${lineX} ${p22.y + radius2} ${arc} ${lineX - offset} ${p22.y} L ${p22.x} ${p22.y}`; } } else { if (p1.y < p22.y) { lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY - radius2} ${arc} ${p1.x + offset} ${lineY} L ${p22.x - radius2} ${lineY} ${arc2} ${p22.x} ${lineY + offset} L ${p22.x} ${p22.y}`; } else { colorClassNum = branchPos.get(commitA.branch)?.index; lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY + radius2} ${arc2} ${p1.x + offset} ${lineY} L ${p22.x - radius2} ${lineY} ${arc} ${p22.x} ${lineY - offset} L ${p22.x} ${p22.y}`; } } } else { arc = "A 20 20, 0, 0, 0,"; arc2 = "A 20 20, 0, 0, 1,"; radius2 = 20; offset = 20; if (dir === "TB") { if (p1.x < p22.x) { if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) { lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p22.y - radius2} ${arc} ${p1.x + offset} ${p22.y} L ${p22.x} ${p22.y}`; } else { lineDef = `M ${p1.x} ${p1.y} L ${p22.x - radius2} ${p1.y} ${arc2} ${p22.x} ${p1.y + offset} L ${p22.x} ${p22.y}`; } } if (p1.x > p22.x) { arc = "A 20 20, 0, 0, 0,"; arc2 = "A 20 20, 0, 0, 1,"; radius2 = 20; offset = 20; if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) { lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p22.y - radius2} ${arc2} ${p1.x - offset} ${p22.y} L ${p22.x} ${p22.y}`; } else { lineDef = `M ${p1.x} ${p1.y} L ${p22.x + radius2} ${p1.y} ${arc} ${p22.x} ${p1.y + offset} L ${p22.x} ${p22.y}`; } } if (p1.x === p22.x) { lineDef = `M ${p1.x} ${p1.y} L ${p22.x} ${p22.y}`; } } else if (dir === "BT") { if (p1.x < p22.x) { if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) { lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p22.y + radius2} ${arc2} ${p1.x + offset} ${p22.y} L ${p22.x} ${p22.y}`; } else { lineDef = `M ${p1.x} ${p1.y} L ${p22.x - radius2} ${p1.y} ${arc} ${p22.x} ${p1.y - offset} L ${p22.x} ${p22.y}`; } } if (p1.x > p22.x) { arc = "A 20 20, 0, 0, 0,"; arc2 = "A 20 20, 0, 0, 1,"; radius2 = 20; offset = 20; if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) { lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p22.y + radius2} ${arc} ${p1.x - offset} ${p22.y} L ${p22.x} ${p22.y}`; } else { lineDef = `M ${p1.x} ${p1.y} L ${p22.x - radius2} ${p1.y} ${arc} ${p22.x} ${p1.y - offset} L ${p22.x} ${p22.y}`; } } if (p1.x === p22.x) { lineDef = `M ${p1.x} ${p1.y} L ${p22.x} ${p22.y}`; } } else { if (p1.y < p22.y) { if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) { lineDef = `M ${p1.x} ${p1.y} L ${p22.x - radius2} ${p1.y} ${arc2} ${p22.x} ${p1.y + offset} L ${p22.x} ${p22.y}`; } else { lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p22.y - radius2} ${arc} ${p1.x + offset} ${p22.y} L ${p22.x} ${p22.y}`; } } if (p1.y > p22.y) { if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) { lineDef = `M ${p1.x} ${p1.y} L ${p22.x - radius2} ${p1.y} ${arc} ${p22.x} ${p1.y - offset} L ${p22.x} ${p22.y}`; } else { lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p22.y + radius2} ${arc2} ${p1.x + offset} ${p22.y} L ${p22.x} ${p22.y}`; } } if (p1.y === p22.y) { lineDef = `M ${p1.x} ${p1.y} L ${p22.x} ${p22.y}`; } } } if (lineDef === void 0) { throw new Error("Line definition not found"); } svg2.append("path").attr("d", lineDef).attr("class", "arrow arrow" + colorClassNum % THEME_COLOR_LIMIT); }, "drawArrow"); drawArrows = /* @__PURE__ */ __name((svg2, commits) => { const gArrows = svg2.append("g").attr("class", "commit-arrows"); [...commits.keys()].forEach((key) => { const commit2 = commits.get(key); if (commit2.parents && commit2.parents.length > 0) { commit2.parents.forEach((parent4) => { drawArrow(gArrows, commits.get(parent4), commit2, commits); }); } }); }, "drawArrows"); drawBranches = /* @__PURE__ */ __name((svg2, branches) => { const g2 = svg2.append("g"); branches.forEach((branch2, index) => { const adjustIndexForTheme = index % THEME_COLOR_LIMIT; const pos = branchPos.get(branch2.name)?.pos; if (pos === void 0) { throw new Error(`Position not found for branch ${branch2.name}`); } const line2 = g2.append("line"); line2.attr("x1", 0); line2.attr("y1", pos); line2.attr("x2", maxPos); line2.attr("y2", pos); line2.attr("class", "branch branch" + adjustIndexForTheme); if (dir === "TB") { line2.attr("y1", defaultPos); line2.attr("x1", pos); line2.attr("y2", maxPos); line2.attr("x2", pos); } else if (dir === "BT") { line2.attr("y1", maxPos); line2.attr("x1", pos); line2.attr("y2", defaultPos); line2.attr("x2", pos); } lanes.push(pos); const name = branch2.name; const labelElement = drawText2(name); const bkg = g2.insert("rect"); const branchLabel = g2.insert("g").attr("class", "branchLabel"); const label = branchLabel.insert("g").attr("class", "label branch-label" + adjustIndexForTheme); label.node().appendChild(labelElement); const bbox = labelElement.getBBox(); bkg.attr("class", "branchLabelBkg label" + adjustIndexForTheme).attr("rx", 4).attr("ry", 4).attr("x", -bbox.width - 4 - (DEFAULT_GITGRAPH_CONFIG2?.rotateCommitLabel === true ? 30 : 0)).attr("y", -bbox.height / 2 + 8).attr("width", bbox.width + 18).attr("height", bbox.height + 4); label.attr( "transform", "translate(" + (-bbox.width - 14 - (DEFAULT_GITGRAPH_CONFIG2?.rotateCommitLabel === true ? 30 : 0)) + ", " + (pos - bbox.height / 2 - 1) + ")" ); if (dir === "TB") { bkg.attr("x", pos - bbox.width / 2 - 10).attr("y", 0); label.attr("transform", "translate(" + (pos - bbox.width / 2 - 5) + ", 0)"); } else if (dir === "BT") { bkg.attr("x", pos - bbox.width / 2 - 10).attr("y", maxPos); label.attr("transform", "translate(" + (pos - bbox.width / 2 - 5) + ", " + maxPos + ")"); } else { bkg.attr("transform", "translate(-19, " + (pos - bbox.height / 2) + ")"); } }); }, "drawBranches"); setBranchPosition = /* @__PURE__ */ __name(function(name, pos, index, bbox, rotateCommitLabel) { branchPos.set(name, { pos, index }); pos += 50 + (rotateCommitLabel ? 40 : 0) + (dir === "TB" || dir === "BT" ? bbox.width / 2 : 0); return pos; }, "setBranchPosition"); draw4 = /* @__PURE__ */ __name(function(txt, id30, ver, diagObj) { clear8(); log.debug("in gitgraph renderer", txt + "\n", "id:", id30, ver); if (!DEFAULT_GITGRAPH_CONFIG2) { throw new Error("GitGraph config not found"); } const rotateCommitLabel = DEFAULT_GITGRAPH_CONFIG2.rotateCommitLabel ?? false; const db7 = diagObj.db; allCommitsDict = db7.getCommits(); const branches = db7.getBranchesAsObjArray(); dir = db7.getDirection(); const diagram27 = select_default2(`[id="${id30}"]`); let pos = 0; branches.forEach((branch2, index) => { const labelElement = drawText2(branch2.name); const g2 = diagram27.append("g"); const branchLabel = g2.insert("g").attr("class", "branchLabel"); const label = branchLabel.insert("g").attr("class", "label branch-label"); label.node()?.appendChild(labelElement); const bbox = labelElement.getBBox(); pos = setBranchPosition(branch2.name, pos, index, bbox, rotateCommitLabel); label.remove(); branchLabel.remove(); g2.remove(); }); drawCommits(diagram27, allCommitsDict, false); if (DEFAULT_GITGRAPH_CONFIG2.showBranches) { drawBranches(diagram27, branches); } drawArrows(diagram27, allCommitsDict); drawCommits(diagram27, allCommitsDict, true); utils_default2.insertTitle( diagram27, "gitTitleText", DEFAULT_GITGRAPH_CONFIG2.titleTopMargin ?? 0, db7.getDiagramTitle() ); setupGraphViewbox2( void 0, diagram27, DEFAULT_GITGRAPH_CONFIG2.diagramPadding, DEFAULT_GITGRAPH_CONFIG2.useMaxWidth ); }, "draw"); gitGraphRenderer_default = { draw: draw4 }; if (void 0) { const { it, expect, describe } = void 0; describe("drawText", () => { it("should drawText", () => { const svgLabel = drawText2("main"); expect(svgLabel).toBeDefined(); expect(svgLabel.children[0].innerHTML).toBe("main"); }); }); describe("branchPosition", () => { const bbox = { x: 0, y: 0, width: 10, height: 10, top: 0, right: 0, bottom: 0, left: 0, toJSON: /* @__PURE__ */ __name(() => "", "toJSON") }; it("should setBranchPositions LR with two branches", () => { dir = "LR"; const pos = setBranchPosition("main", 0, 0, bbox, true); expect(pos).toBe(90); expect(branchPos.get("main")).toEqual({ pos: 0, index: 0 }); const posNext = setBranchPosition("develop", pos, 1, bbox, true); expect(posNext).toBe(180); expect(branchPos.get("develop")).toEqual({ pos, index: 1 }); }); it("should setBranchPositions TB with two branches", () => { dir = "TB"; bbox.width = 34.9921875; const pos = setBranchPosition("main", 0, 0, bbox, true); expect(pos).toBe(107.49609375); expect(branchPos.get("main")).toEqual({ pos: 0, index: 0 }); bbox.width = 56.421875; const posNext = setBranchPosition("develop", pos, 1, bbox, true); expect(posNext).toBe(225.70703125); expect(branchPos.get("develop")).toEqual({ pos, index: 1 }); }); }); describe("commitPosition", () => { const commits = /* @__PURE__ */ new Map([ [ "commitZero", { id: "ZERO", message: "", seq: 0, type: commitType.NORMAL, tags: [], parents: [], branch: "main" } ], [ "commitA", { id: "A", message: "", seq: 1, type: commitType.NORMAL, tags: [], parents: ["ZERO"], branch: "feature" } ], [ "commitB", { id: "B", message: "", seq: 2, type: commitType.NORMAL, tags: [], parents: ["A"], branch: "feature" } ], [ "commitM", { id: "M", message: "merged branch feature into main", seq: 3, type: commitType.MERGE, tags: [], parents: ["ZERO", "B"], branch: "main", customId: true } ], [ "commitC", { id: "C", message: "", seq: 4, type: commitType.NORMAL, tags: [], parents: ["ZERO"], branch: "release" } ], [ "commit5_8928ea0", { id: "5-8928ea0", message: "cherry-picked [object Object] into release", seq: 5, type: commitType.CHERRY_PICK, tags: [], parents: ["C", "M"], branch: "release" } ], [ "commitD", { id: "D", message: "", seq: 6, type: commitType.NORMAL, tags: [], parents: ["5-8928ea0"], branch: "release" } ], [ "commit7_ed848ba", { id: "7-ed848ba", message: "cherry-picked [object Object] into release", seq: 7, type: commitType.CHERRY_PICK, tags: [], parents: ["D", "M"], branch: "release" } ] ]); let pos = 0; branchPos.set("main", { pos: 0, index: 0 }); branchPos.set("feature", { pos: 107.49609375, index: 1 }); branchPos.set("release", { pos: 224.03515625, index: 2 }); describe("TB", () => { pos = 30; dir = "TB"; const expectedCommitPositionTB = /* @__PURE__ */ new Map([ ["commitZero", { x: 0, y: 40, posWithOffset: 40 }], ["commitA", { x: 107.49609375, y: 90, posWithOffset: 90 }], ["commitB", { x: 107.49609375, y: 140, posWithOffset: 140 }], ["commitM", { x: 0, y: 190, posWithOffset: 190 }], ["commitC", { x: 224.03515625, y: 240, posWithOffset: 240 }], ["commit5_8928ea0", { x: 224.03515625, y: 290, posWithOffset: 290 }], ["commitD", { x: 224.03515625, y: 340, posWithOffset: 340 }], ["commit7_ed848ba", { x: 224.03515625, y: 390, posWithOffset: 390 }] ]); commits.forEach((commit2, key) => { it(`should give the correct position for commit ${key}`, () => { const position5 = getCommitPosition(commit2, pos, false); expect(position5).toEqual(expectedCommitPositionTB.get(key)); pos += 50; }); }); }); describe("LR", () => { let pos2 = 30; dir = "LR"; const expectedCommitPositionLR = /* @__PURE__ */ new Map([ ["commitZero", { x: 0, y: 40, posWithOffset: 40 }], ["commitA", { x: 107.49609375, y: 90, posWithOffset: 90 }], ["commitB", { x: 107.49609375, y: 140, posWithOffset: 140 }], ["commitM", { x: 0, y: 190, posWithOffset: 190 }], ["commitC", { x: 224.03515625, y: 240, posWithOffset: 240 }], ["commit5_8928ea0", { x: 224.03515625, y: 290, posWithOffset: 290 }], ["commitD", { x: 224.03515625, y: 340, posWithOffset: 340 }], ["commit7_ed848ba", { x: 224.03515625, y: 390, posWithOffset: 390 }] ]); commits.forEach((commit2, key) => { it(`should give the correct position for commit ${key}`, () => { const position5 = getCommitPosition(commit2, pos2, false); expect(position5).toEqual(expectedCommitPositionLR.get(key)); pos2 += 50; }); }); }); describe("getCommitClassType", () => { const expectedCommitClassType = /* @__PURE__ */ new Map([ ["commitZero", "commit-normal"], ["commitA", "commit-normal"], ["commitB", "commit-normal"], ["commitM", "commit-merge"], ["commitC", "commit-normal"], ["commit5_8928ea0", "commit-cherry-pick"], ["commitD", "commit-normal"], ["commit7_ed848ba", "commit-cherry-pick"] ]); commits.forEach((commit2, key) => { it(`should give the correct class type for commit ${key}`, () => { const classType = getCommitClassType(commit2); expect(classType).toBe(expectedCommitClassType.get(key)); }); }); }); }); describe("building BT parallel commit diagram", () => { const commits = /* @__PURE__ */ new Map([ [ "1-abcdefg", { id: "1-abcdefg", message: "", seq: 0, type: 0, tags: [], parents: [], branch: "main" } ], [ "2-abcdefg", { id: "2-abcdefg", message: "", seq: 1, type: 0, tags: [], parents: ["1-abcdefg"], branch: "main" } ], [ "3-abcdefg", { id: "3-abcdefg", message: "", seq: 2, type: 0, tags: [], parents: ["2-abcdefg"], branch: "develop" } ], [ "4-abcdefg", { id: "4-abcdefg", message: "", seq: 3, type: 0, tags: [], parents: ["3-abcdefg"], branch: "develop" } ], [ "5-abcdefg", { id: "5-abcdefg", message: "", seq: 4, type: 0, tags: [], parents: ["2-abcdefg"], branch: "feature" } ], [ "6-abcdefg", { id: "6-abcdefg", message: "", seq: 5, type: 0, tags: [], parents: ["5-abcdefg"], branch: "feature" } ], [ "7-abcdefg", { id: "7-abcdefg", message: "", seq: 6, type: 0, tags: [], parents: ["2-abcdefg"], branch: "main" } ], [ "8-abcdefg", { id: "8-abcdefg", message: "", seq: 7, type: 0, tags: [], parents: ["7-abcdefg"], branch: "main" } ] ]); const expectedCommitPosition = /* @__PURE__ */ new Map([ ["1-abcdefg", { x: 0, y: 40 }], ["2-abcdefg", { x: 0, y: 90 }], ["3-abcdefg", { x: 107.49609375, y: 140 }], ["4-abcdefg", { x: 107.49609375, y: 190 }], ["5-abcdefg", { x: 225.70703125, y: 140 }], ["6-abcdefg", { x: 225.70703125, y: 190 }], ["7-abcdefg", { x: 0, y: 140 }], ["8-abcdefg", { x: 0, y: 190 }] ]); const expectedCommitPositionAfterParallel = /* @__PURE__ */ new Map([ ["1-abcdefg", { x: 0, y: 210 }], ["2-abcdefg", { x: 0, y: 160 }], ["3-abcdefg", { x: 107.49609375, y: 110 }], ["4-abcdefg", { x: 107.49609375, y: 60 }], ["5-abcdefg", { x: 225.70703125, y: 110 }], ["6-abcdefg", { x: 225.70703125, y: 60 }], ["7-abcdefg", { x: 0, y: 110 }], ["8-abcdefg", { x: 0, y: 60 }] ]); const expectedCommitCurrentPosition = /* @__PURE__ */ new Map([ ["1-abcdefg", 30], ["2-abcdefg", 80], ["3-abcdefg", 130], ["4-abcdefg", 180], ["5-abcdefg", 130], ["6-abcdefg", 180], ["7-abcdefg", 130], ["8-abcdefg", 180] ]); const sortedKeys = [...expectedCommitPosition.keys()]; it("should get the correct commit position and current position", () => { dir = "BT"; let curPos = 30; commitPos.clear(); branchPos.clear(); branchPos.set("main", { pos: 0, index: 0 }); branchPos.set("develop", { pos: 107.49609375, index: 1 }); branchPos.set("feature", { pos: 225.70703125, index: 2 }); DEFAULT_GITGRAPH_CONFIG2.parallelCommits = true; commits.forEach((commit2, key) => { if (commit2.parents.length > 0) { curPos = calculateCommitPosition(commit2); } const position5 = setCommitPosition(commit2, curPos); expect(position5).toEqual(expectedCommitPosition.get(key)); expect(curPos).toEqual(expectedCommitCurrentPosition.get(key)); }); }); it("should get the correct commit position after parallel commits", () => { commitPos.clear(); branchPos.clear(); dir = "BT"; const curPos = 30; commitPos.clear(); branchPos.clear(); branchPos.set("main", { pos: 0, index: 0 }); branchPos.set("develop", { pos: 107.49609375, index: 1 }); branchPos.set("feature", { pos: 225.70703125, index: 2 }); setParallelBTPos(sortedKeys, commits, curPos); sortedKeys.forEach((commit2) => { const position5 = commitPos.get(commit2); expect(position5).toEqual(expectedCommitPositionAfterParallel.get(commit2)); }); }); }); DEFAULT_GITGRAPH_CONFIG2.parallelCommits = false; it("add", () => { commitPos.set("parent1", { x: 1, y: 1 }); commitPos.set("parent2", { x: 2, y: 2 }); commitPos.set("parent3", { x: 3, y: 3 }); dir = "LR"; const parents3 = ["parent1", "parent2", "parent3"]; const closestParent = findClosestParent(parents3); expect(closestParent).toBe("parent3"); commitPos.clear(); }); } } }); // src/diagrams/git/styles.js var getStyles5, styles_default5; var init_styles5 = __esm({ "src/diagrams/git/styles.js"() { "use strict"; getStyles5 = /* @__PURE__ */ __name((options2) => ` .commit-id, .commit-msg, .branch-label { fill: lightgrey; color: lightgrey; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-family: var(--mermaid-font-family); } ${[0, 1, 2, 3, 4, 5, 6, 7].map( (i2) => ` .branch-label${i2} { fill: ${options2["gitBranchLabel" + i2]}; } .commit${i2} { stroke: ${options2["git" + i2]}; fill: ${options2["git" + i2]}; } .commit-highlight${i2} { stroke: ${options2["gitInv" + i2]}; fill: ${options2["gitInv" + i2]}; } .label${i2} { fill: ${options2["git" + i2]}; } .arrow${i2} { stroke: ${options2["git" + i2]}; } ` ).join("\n")} .branch { stroke-width: 1; stroke: ${options2.lineColor}; stroke-dasharray: 2; } .commit-label { font-size: ${options2.commitLabelFontSize}; fill: ${options2.commitLabelColor};} .commit-label-bkg { font-size: ${options2.commitLabelFontSize}; fill: ${options2.commitLabelBackground}; opacity: 0.5; } .tag-label { font-size: ${options2.tagLabelFontSize}; fill: ${options2.tagLabelColor};} .tag-label-bkg { fill: ${options2.tagLabelBackground}; stroke: ${options2.tagLabelBorder}; } .tag-hole { fill: ${options2.textColor}; } .commit-merge { stroke: ${options2.primaryColor}; fill: ${options2.primaryColor}; } .commit-reverse { stroke: ${options2.primaryColor}; fill: ${options2.primaryColor}; stroke-width: 3; } .commit-highlight-outer { } .commit-highlight-inner { stroke: ${options2.primaryColor}; fill: ${options2.primaryColor}; } .arrow { stroke-width: 8; stroke-linecap: round; fill: none} .gitTitleText { text-anchor: middle; font-size: 18px; fill: ${options2.textColor}; } `, "getStyles"); styles_default5 = getStyles5; } }); // src/diagrams/git/gitGraphDiagram.ts var gitGraphDiagram_exports = {}; __export(gitGraphDiagram_exports, { diagram: () => diagram4 }); var diagram4; var init_gitGraphDiagram = __esm({ "src/diagrams/git/gitGraphDiagram.ts"() { "use strict"; init_gitGraphParser(); init_gitGraphAst(); init_gitGraphRenderer(); init_styles5(); diagram4 = { parser: parser4, db, renderer: gitGraphRenderer_default, styles: styles_default5 }; } }); // src/diagrams/gantt/parser/gantt.jison var parser5, gantt_default; var init_gantt = __esm({ "src/diagrams/gantt/parser/gantt.jison"() { "use strict"; parser5 = (function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) { for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ; return o3; }, "o"), $V0 = [6, 8, 10, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 35, 36, 38, 40], $V1 = [1, 26], $V2 = [1, 27], $V3 = [1, 28], $V4 = [1, 29], $V5 = [1, 30], $V6 = [1, 31], $V7 = [1, 32], $V8 = [1, 33], $V9 = [1, 34], $Va = [1, 9], $Vb = [1, 10], $Vc = [1, 11], $Vd = [1, 12], $Ve = [1, 13], $Vf = [1, 14], $Vg = [1, 15], $Vh = [1, 16], $Vi = [1, 19], $Vj = [1, 20], $Vk = [1, 21], $Vl = [1, 22], $Vm = [1, 23], $Vn = [1, 25], $Vo = [1, 35]; var parser24 = { trace: /* @__PURE__ */ __name(function trace() { }, "trace"), yy: {}, symbols_: { "error": 2, "start": 3, "gantt": 4, "document": 5, "EOF": 6, "line": 7, "SPACE": 8, "statement": 9, "NL": 10, "weekday": 11, "weekday_monday": 12, "weekday_tuesday": 13, "weekday_wednesday": 14, "weekday_thursday": 15, "weekday_friday": 16, "weekday_saturday": 17, "weekday_sunday": 18, "weekend": 19, "weekend_friday": 20, "weekend_saturday": 21, "dateFormat": 22, "inclusiveEndDates": 23, "topAxis": 24, "axisFormat": 25, "tickInterval": 26, "excludes": 27, "includes": 28, "todayMarker": 29, "title": 30, "acc_title": 31, "acc_title_value": 32, "acc_descr": 33, "acc_descr_value": 34, "acc_descr_multiline_value": 35, "section": 36, "clickStatement": 37, "taskTxt": 38, "taskData": 39, "click": 40, "callbackname": 41, "callbackargs": 42, "href": 43, "clickStatementDebug": 44, "$accept": 0, "$end": 1 }, terminals_: { 2: "error", 4: "gantt", 6: "EOF", 8: "SPACE", 10: "NL", 12: "weekday_monday", 13: "weekday_tuesday", 14: "weekday_wednesday", 15: "weekday_thursday", 16: "weekday_friday", 17: "weekday_saturday", 18: "weekday_sunday", 20: "weekend_friday", 21: "weekend_saturday", 22: "dateFormat", 23: "inclusiveEndDates", 24: "topAxis", 25: "axisFormat", 26: "tickInterval", 27: "excludes", 28: "includes", 29: "todayMarker", 30: "title", 31: "acc_title", 32: "acc_title_value", 33: "acc_descr", 34: "acc_descr_value", 35: "acc_descr_multiline_value", 36: "section", 38: "taskTxt", 39: "taskData", 40: "click", 41: "callbackname", 42: "callbackargs", 43: "href" }, productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [11, 1], [11, 1], [11, 1], [11, 1], [11, 1], [11, 1], [11, 1], [19, 1], [19, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 2], [9, 2], [9, 1], [9, 1], [9, 1], [9, 2], [37, 2], [37, 3], [37, 3], [37, 4], [37, 3], [37, 4], [37, 2], [44, 2], [44, 3], [44, 3], [44, 4], [44, 3], [44, 4], [44, 2]], performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { var $0 = $$.length - 1; switch (yystate) { case 1: return $$[$0 - 1]; break; case 2: this.$ = []; break; case 3: $$[$0 - 1].push($$[$0]); this.$ = $$[$0 - 1]; break; case 4: case 5: this.$ = $$[$0]; break; case 6: case 7: this.$ = []; break; case 8: yy.setWeekday("monday"); break; case 9: yy.setWeekday("tuesday"); break; case 10: yy.setWeekday("wednesday"); break; case 11: yy.setWeekday("thursday"); break; case 12: yy.setWeekday("friday"); break; case 13: yy.setWeekday("saturday"); break; case 14: yy.setWeekday("sunday"); break; case 15: yy.setWeekend("friday"); break; case 16: yy.setWeekend("saturday"); break; case 17: yy.setDateFormat($$[$0].substr(11)); this.$ = $$[$0].substr(11); break; case 18: yy.enableInclusiveEndDates(); this.$ = $$[$0].substr(18); break; case 19: yy.TopAxis(); this.$ = $$[$0].substr(8); break; case 20: yy.setAxisFormat($$[$0].substr(11)); this.$ = $$[$0].substr(11); break; case 21: yy.setTickInterval($$[$0].substr(13)); this.$ = $$[$0].substr(13); break; case 22: yy.setExcludes($$[$0].substr(9)); this.$ = $$[$0].substr(9); break; case 23: yy.setIncludes($$[$0].substr(9)); this.$ = $$[$0].substr(9); break; case 24: yy.setTodayMarker($$[$0].substr(12)); this.$ = $$[$0].substr(12); break; case 27: yy.setDiagramTitle($$[$0].substr(6)); this.$ = $$[$0].substr(6); break; case 28: this.$ = $$[$0].trim(); yy.setAccTitle(this.$); break; case 29: case 30: this.$ = $$[$0].trim(); yy.setAccDescription(this.$); break; case 31: yy.addSection($$[$0].substr(8)); this.$ = $$[$0].substr(8); break; case 33: yy.addTask($$[$0 - 1], $$[$0]); this.$ = "task"; break; case 34: this.$ = $$[$0 - 1]; yy.setClickEvent($$[$0 - 1], $$[$0], null); break; case 35: this.$ = $$[$0 - 2]; yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); break; case 36: this.$ = $$[$0 - 2]; yy.setClickEvent($$[$0 - 2], $$[$0 - 1], null); yy.setLink($$[$0 - 2], $$[$0]); break; case 37: this.$ = $$[$0 - 3]; yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]); yy.setLink($$[$0 - 3], $$[$0]); break; case 38: this.$ = $$[$0 - 2]; yy.setClickEvent($$[$0 - 2], $$[$0], null); yy.setLink($$[$0 - 2], $$[$0 - 1]); break; case 39: this.$ = $$[$0 - 3]; yy.setClickEvent($$[$0 - 3], $$[$0 - 1], $$[$0]); yy.setLink($$[$0 - 3], $$[$0 - 2]); break; case 40: this.$ = $$[$0 - 1]; yy.setLink($$[$0 - 1], $$[$0]); break; case 41: case 47: this.$ = $$[$0 - 1] + " " + $$[$0]; break; case 42: case 43: case 45: this.$ = $$[$0 - 2] + " " + $$[$0 - 1] + " " + $$[$0]; break; case 44: case 46: this.$ = $$[$0 - 3] + " " + $$[$0 - 2] + " " + $$[$0 - 1] + " " + $$[$0]; break; } }, "anonymous"), table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o2($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: 17, 12: $V1, 13: $V2, 14: $V3, 15: $V4, 16: $V5, 17: $V6, 18: $V7, 19: 18, 20: $V8, 21: $V9, 22: $Va, 23: $Vb, 24: $Vc, 25: $Vd, 26: $Ve, 27: $Vf, 28: $Vg, 29: $Vh, 30: $Vi, 31: $Vj, 33: $Vk, 35: $Vl, 36: $Vm, 37: 24, 38: $Vn, 40: $Vo }, o2($V0, [2, 7], { 1: [2, 1] }), o2($V0, [2, 3]), { 9: 36, 11: 17, 12: $V1, 13: $V2, 14: $V3, 15: $V4, 16: $V5, 17: $V6, 18: $V7, 19: 18, 20: $V8, 21: $V9, 22: $Va, 23: $Vb, 24: $Vc, 25: $Vd, 26: $Ve, 27: $Vf, 28: $Vg, 29: $Vh, 30: $Vi, 31: $Vj, 33: $Vk, 35: $Vl, 36: $Vm, 37: 24, 38: $Vn, 40: $Vo }, o2($V0, [2, 5]), o2($V0, [2, 6]), o2($V0, [2, 17]), o2($V0, [2, 18]), o2($V0, [2, 19]), o2($V0, [2, 20]), o2($V0, [2, 21]), o2($V0, [2, 22]), o2($V0, [2, 23]), o2($V0, [2, 24]), o2($V0, [2, 25]), o2($V0, [2, 26]), o2($V0, [2, 27]), { 32: [1, 37] }, { 34: [1, 38] }, o2($V0, [2, 30]), o2($V0, [2, 31]), o2($V0, [2, 32]), { 39: [1, 39] }, o2($V0, [2, 8]), o2($V0, [2, 9]), o2($V0, [2, 10]), o2($V0, [2, 11]), o2($V0, [2, 12]), o2($V0, [2, 13]), o2($V0, [2, 14]), o2($V0, [2, 15]), o2($V0, [2, 16]), { 41: [1, 40], 43: [1, 41] }, o2($V0, [2, 4]), o2($V0, [2, 28]), o2($V0, [2, 29]), o2($V0, [2, 33]), o2($V0, [2, 34], { 42: [1, 42], 43: [1, 43] }), o2($V0, [2, 40], { 41: [1, 44] }), o2($V0, [2, 35], { 43: [1, 45] }), o2($V0, [2, 36]), o2($V0, [2, 38], { 42: [1, 46] }), o2($V0, [2, 37]), o2($V0, [2, 39])], defaultActions: {}, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (hash.recoverable) { this.trace(str2); } else { var error3 = new Error(str2); error3.hash = hash; throw error3; } }, "parseError"), parse: /* @__PURE__ */ __name(function parse7(input) { var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1; var args = lstack.slice.call(arguments, 1); var lexer2 = Object.create(this.lexer); var sharedState = { yy: {} }; for (var k2 in this.yy) { if (Object.prototype.hasOwnProperty.call(this.yy, k2)) { sharedState.yy[k2] = this.yy[k2]; } } lexer2.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer2; sharedState.yy.parser = this; if (typeof lexer2.yylloc == "undefined") { lexer2.yylloc = {}; } var yyloc = lexer2.yylloc; lstack.push(yyloc); var ranges = lexer2.options && lexer2.options.ranges; if (typeof sharedState.yy.parseError === "function") { this.parseError = sharedState.yy.parseError; } else { this.parseError = Object.getPrototypeOf(this).parseError; } function popStack(n2) { stack.length = stack.length - 2 * n2; vstack.length = vstack.length - n2; lstack.length = lstack.length - n2; } __name(popStack, "popStack"); function lex() { var token2; token2 = tstack.pop() || lexer2.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex, "lex"); var symbol, preErrorSymbol, state3, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state3 = stack[stack.length - 1]; if (this.defaultActions[state3]) { action = this.defaultActions[state3]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex(); } action = table[state3] && table[state3][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state3]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer2.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; } else { errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); } this.parseError(errStr, { text: lexer2.match, token: this.terminals_[symbol] || symbol, line: lexer2.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state3 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer2.yytext); lstack.push(lexer2.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer2.yyleng; yytext = lexer2.yytext; yylineno = lexer2.yylineno; yyloc = lexer2.yylloc; if (recovering > 0) { recovering--; } } else { symbol = preErrorSymbol; preErrorSymbol = null; } break; case 2: len = this.productions_[action[1]][1]; yyval.$ = vstack[vstack.length - len]; yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; if (ranges) { yyval._$.range = [ lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1] ]; } r2 = this.performAction.apply(yyval, [ yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack ].concat(args)); if (typeof r2 !== "undefined") { return r2; } if (len) { stack = stack.slice(0, -1 * len * 2); vstack = vstack.slice(0, -1 * len); lstack = lstack.slice(0, -1 * len); } stack.push(this.productions_[action[1]][0]); vstack.push(yyval.$); lstack.push(yyval._$); newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]]; stack.push(newState2); break; case 3: return true; } } return true; }, "parse") }; var lexer = /* @__PURE__ */ (function() { var lexer2 = { EOF: 1, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (this.yy.parser) { this.yy.parser.parseError(str2, hash); } else { throw new Error(str2); } }, "parseError"), // resets the lexer, sets new input setInput: /* @__PURE__ */ __name(function(input, yy) { this.yy = yy || this.yy || {}; this._input = input; this._more = this._backtrack = this.done = false; 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 }; if (this.options.ranges) { this.yylloc.range = [0, 0]; } this.offset = 0; return this; }, "setInput"), // consumes and returns one char from the input input: /* @__PURE__ */ __name(function() { var ch = this._input[0]; this.yytext += ch; this.yyleng++; this.offset++; this.match += ch; this.matched += ch; var lines = ch.match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno++; this.yylloc.last_line++; } else { this.yylloc.last_column++; } if (this.options.ranges) { this.yylloc.range[1]++; } this._input = this._input.slice(1); return ch; }, "input"), // unshifts one char (or a string) into the input unput: /* @__PURE__ */ __name(function(ch) { var len = ch.length; var lines = ch.split(/(?:\r\n?|\n)/g); this._input = ch + this._input; this.yytext = this.yytext.substr(0, this.yytext.length - len); this.offset -= len; var oldLines = 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); if (lines.length - 1) { this.yylineno -= lines.length - 1; } var r2 = this.yylloc.range; this.yylloc = { first_line: this.yylloc.first_line, last_line: this.yylineno + 1, first_column: this.yylloc.first_column, last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len }; if (this.options.ranges) { this.yylloc.range = [r2[0], r2[0] + this.yyleng - len]; } this.yyleng = this.yytext.length; return this; }, "unput"), // When called from action, caches matched text and appends it on next action more: /* @__PURE__ */ __name(function() { this._more = true; return this; }, "more"), // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. reject: /* @__PURE__ */ __name(function() { if (this.options.backtrack_lexer) { this._backtrack = true; } 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"), // retain first n characters of the match less: /* @__PURE__ */ __name(function(n2) { this.unput(this.match.slice(n2)); }, "less"), // displays already matched input, i.e. for error messages pastInput: /* @__PURE__ */ __name(function() { var past = this.matched.substr(0, this.matched.length - this.match.length); return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); }, "pastInput"), // displays upcoming input, i.e. for error messages upcomingInput: /* @__PURE__ */ __name(function() { var next3 = this.match; if (next3.length < 20) { next3 += this._input.substr(0, 20 - next3.length); } return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, ""); }, "upcomingInput"), // displays the character position where the lexing error occurred, i.e. for error messages showPosition: /* @__PURE__ */ __name(function() { var pre = this.pastInput(); var c3 = new Array(pre.length + 1).join("-"); return pre + this.upcomingInput() + "\n" + c3 + "^"; }, "showPosition"), // test the lexed token: return FALSE when not a match, otherwise return token test_match: /* @__PURE__ */ __name(function(match2, indexed_rule) { var token2, lines, backup; if (this.options.backtrack_lexer) { backup = { 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 }; if (this.options.ranges) { backup.yylloc.range = this.yylloc.range.slice(0); } } lines = match2[0].match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno += lines.length; } this.yylloc = { first_line: this.yylloc.last_line, last_line: this.yylineno + 1, first_column: this.yylloc.last_column, last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; this.yyleng = this.yytext.length; if (this.options.ranges) { this.yylloc.range = [this.offset, this.offset += this.yyleng]; } this._more = false; this._backtrack = false; this._input = this._input.slice(match2[0].length); this.matched += match2[0]; token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); if (this.done && this._input) { this.done = false; } if (token2) { return token2; } else if (this._backtrack) { for (var k2 in backup) { this[k2] = backup[k2]; } return false; } return false; }, "test_match"), // return next match in input next: /* @__PURE__ */ __name(function() { if (this.done) { return this.EOF; } if (!this._input) { this.done = true; } var token2, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[index]); if (token2 !== false) { return token2; } return false; } if (this._input === "") { return this.EOF; } else { return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { text: "", token: null, line: this.yylineno }); } }, "next"), // return next match that has a token lex: /* @__PURE__ */ __name(function lex() { var r2 = this.next(); if (r2) { return r2; } else { return this.lex(); } }, "lex"), // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) begin: /* @__PURE__ */ __name(function begin(condition) { this.conditionStack.push(condition); }, "begin"), // pop the previously active lexer condition state off the condition stack popState: /* @__PURE__ */ __name(function popState() { var n2 = this.conditionStack.length - 1; if (n2 > 0) { return this.conditionStack.pop(); } else { return this.conditionStack[0]; } }, "popState"), // produce the lexer rule set which is active for the currently active lexer condition state _currentRules: /* @__PURE__ */ __name(function _currentRules() { if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; } else { return this.conditions["INITIAL"].rules; } }, "_currentRules"), // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available topState: /* @__PURE__ */ __name(function topState(n2) { n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0); if (n2 >= 0) { return this.conditionStack[n2]; } else { return "INITIAL"; } }, "topState"), // alias for begin(condition) pushState: /* @__PURE__ */ __name(function pushState(condition) { this.begin(condition); }, "pushState"), // return the number of states currently on the stack stateStackSize: /* @__PURE__ */ __name(function stateStackSize() { return this.conditionStack.length; }, "stateStackSize"), options: { "case-insensitive": true }, performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { var YYSTATE = YY_START; switch ($avoiding_name_collisions) { case 0: this.begin("open_directive"); return "open_directive"; break; case 1: this.begin("acc_title"); return 31; break; case 2: this.popState(); return "acc_title_value"; break; case 3: this.begin("acc_descr"); return 33; break; case 4: this.popState(); return "acc_descr_value"; break; case 5: this.begin("acc_descr_multiline"); break; case 6: this.popState(); break; case 7: return "acc_descr_multiline_value"; break; case 8: break; case 9: break; case 10: break; case 11: return 10; break; case 12: break; case 13: break; case 14: this.begin("href"); break; case 15: this.popState(); break; case 16: return 43; break; case 17: this.begin("callbackname"); break; case 18: this.popState(); break; case 19: this.popState(); this.begin("callbackargs"); break; case 20: return 41; break; case 21: this.popState(); break; case 22: return 42; break; case 23: this.begin("click"); break; case 24: this.popState(); break; case 25: return 40; break; case 26: return 4; break; case 27: return 22; break; case 28: return 23; break; case 29: return 24; break; case 30: return 25; break; case 31: return 26; break; case 32: return 28; break; case 33: return 27; break; case 34: return 29; break; case 35: return 12; break; case 36: return 13; break; case 37: return 14; break; case 38: return 15; break; case 39: return 16; break; case 40: return 17; break; case 41: return 18; break; case 42: return 20; break; case 43: return 21; break; case 44: return "date"; break; case 45: return 30; break; case 46: return "accDescription"; break; case 47: return 36; break; case 48: return 38; break; case 49: return 39; break; case 50: return ":"; break; case 51: return 6; break; case 52: return "INVALID"; break; } }, "anonymous"), rules: [/^(?:%%\{)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:%%(?!\{)*[^\n]*)/i, /^(?:[^\}]%%*[^\n]*)/i, /^(?:%%*[^\n]*[\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:%[^\n]*)/i, /^(?:href[\s]+["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:call[\s]+)/i, /^(?:\([\s]*\))/i, /^(?:\()/i, /^(?:[^(]*)/i, /^(?:\))/i, /^(?:[^)]*)/i, /^(?:click[\s]+)/i, /^(?:[\s\n])/i, /^(?:[^\s\n]*)/i, /^(?:gantt\b)/i, /^(?:dateFormat\s[^#\n;]+)/i, /^(?:inclusiveEndDates\b)/i, /^(?:topAxis\b)/i, /^(?:axisFormat\s[^#\n;]+)/i, /^(?:tickInterval\s[^#\n;]+)/i, /^(?:includes\s[^#\n;]+)/i, /^(?:excludes\s[^#\n;]+)/i, /^(?:todayMarker\s[^\n;]+)/i, /^(?:weekday\s+monday\b)/i, /^(?:weekday\s+tuesday\b)/i, /^(?:weekday\s+wednesday\b)/i, /^(?:weekday\s+thursday\b)/i, /^(?:weekday\s+friday\b)/i, /^(?:weekday\s+saturday\b)/i, /^(?:weekday\s+sunday\b)/i, /^(?:weekend\s+friday\b)/i, /^(?:weekend\s+saturday\b)/i, /^(?:\d\d\d\d-\d\d-\d\d\b)/i, /^(?:title\s[^\n]+)/i, /^(?:accDescription\s[^#\n;]+)/i, /^(?:section\s[^\n]+)/i, /^(?:[^:\n]+)/i, /^(?::[^#\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i], conditions: { "acc_descr_multiline": { "rules": [6, 7], "inclusive": false }, "acc_descr": { "rules": [4], "inclusive": false }, "acc_title": { "rules": [2], "inclusive": false }, "callbackargs": { "rules": [21, 22], "inclusive": false }, "callbackname": { "rules": [18, 19, 20], "inclusive": false }, "href": { "rules": [15, 16], "inclusive": false }, "click": { "rules": [24, 25], "inclusive": false }, "INITIAL": { "rules": [0, 1, 3, 5, 8, 9, 10, 11, 12, 13, 14, 17, 23, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52], "inclusive": true } } }; return lexer2; })(); parser24.lexer = lexer; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser24; parser24.Parser = Parser3; return new Parser3(); })(); parser5.parser = parser5; gantt_default = parser5; } }); // ../../node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/plugin/isoWeek.js var require_isoWeek = __commonJS({ "../../node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/plugin/isoWeek.js"(exports2, module2) { "use strict"; !(function(e3, t4) { "object" == typeof exports2 && "undefined" != typeof module2 ? module2.exports = t4() : "function" == typeof define && define.amd ? define(t4) : (e3 = "undefined" != typeof globalThis ? globalThis : e3 || self).dayjs_plugin_isoWeek = t4(); })(exports2, (function() { "use strict"; var e3 = "day"; return function(t4, i2, s2) { var a2 = /* @__PURE__ */ __name(function(t5) { return t5.add(4 - t5.isoWeekday(), e3); }, "a"), d3 = i2.prototype; d3.isoWeekYear = function() { return a2(this).year(); }, d3.isoWeek = function(t5) { if (!this.$utils().u(t5)) return this.add(7 * (t5 - this.isoWeek()), e3); var i3, d4, n3, o2, r2 = a2(this), u2 = (i3 = this.isoWeekYear(), d4 = this.$u, n3 = (d4 ? s2.utc : s2)().year(i3).startOf("year"), o2 = 4 - n3.isoWeekday(), n3.isoWeekday() > 4 && (o2 += 7), n3.add(o2, e3)); return r2.diff(u2, "week") + 1; }, d3.isoWeekday = function(e4) { return this.$utils().u(e4) ? this.day() || 7 : this.day(this.day() % 7 ? e4 : e4 - 7); }; var n2 = d3.startOf; d3.startOf = function(e4, t5) { var i3 = this.$utils(), s3 = !!i3.u(t5) || t5; return "isoweek" === i3.p(e4) ? s3 ? this.date(this.date() - (this.isoWeekday() - 1)).startOf("day") : this.date(this.date() - 1 - (this.isoWeekday() - 1) + 7).endOf("day") : n2.bind(this)(e4, t5); }; }; })); } }); // ../../node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/plugin/customParseFormat.js var require_customParseFormat = __commonJS({ "../../node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/plugin/customParseFormat.js"(exports2, module2) { "use strict"; !(function(e3, t4) { "object" == typeof exports2 && "undefined" != typeof module2 ? module2.exports = t4() : "function" == typeof define && define.amd ? define(t4) : (e3 = "undefined" != typeof globalThis ? globalThis : e3 || self).dayjs_plugin_customParseFormat = t4(); })(exports2, (function() { "use strict"; var e3 = { LTS: "h:mm:ss A", LT: "h:mm A", L: "MM/DD/YYYY", LL: "MMMM D, YYYY", LLL: "MMMM D, YYYY h:mm A", LLLL: "dddd, MMMM D, YYYY h:mm A" }, t4 = /(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g, n2 = /\d/, r2 = /\d\d/, i2 = /\d\d?/, o2 = /\d*[^-_:/,()\s\d]+/, s2 = {}, a2 = /* @__PURE__ */ __name(function(e4) { return (e4 = +e4) + (e4 > 68 ? 1900 : 2e3); }, "a"); var f2 = /* @__PURE__ */ __name(function(e4) { return function(t5) { this[e4] = +t5; }; }, "f"), h3 = [/[+-]\d\d:?(\d\d)?|Z/, function(e4) { (this.zone || (this.zone = {})).offset = (function(e6) { if (!e6) return 0; if ("Z" === e6) return 0; var t5 = e6.match(/([+-]|\d\d)/g), n3 = 60 * t5[1] + (+t5[2] || 0); return 0 === n3 ? 0 : "+" === t5[0] ? -n3 : n3; })(e4); }], u2 = /* @__PURE__ */ __name(function(e4) { var t5 = s2[e4]; return t5 && (t5.indexOf ? t5 : t5.s.concat(t5.f)); }, "u"), d3 = /* @__PURE__ */ __name(function(e4, t5) { var n3, r3 = s2.meridiem; if (r3) { for (var i3 = 1; i3 <= 24; i3 += 1) if (e4.indexOf(r3(i3, 0, t5)) > -1) { n3 = i3 > 12; break; } } else n3 = e4 === (t5 ? "pm" : "PM"); return n3; }, "d"), c3 = { A: [o2, function(e4) { this.afternoon = d3(e4, false); }], a: [o2, function(e4) { this.afternoon = d3(e4, true); }], Q: [n2, function(e4) { this.month = 3 * (e4 - 1) + 1; }], S: [n2, function(e4) { this.milliseconds = 100 * +e4; }], SS: [r2, function(e4) { this.milliseconds = 10 * +e4; }], SSS: [/\d{3}/, function(e4) { this.milliseconds = +e4; }], s: [i2, f2("seconds")], ss: [i2, f2("seconds")], m: [i2, f2("minutes")], mm: [i2, f2("minutes")], H: [i2, f2("hours")], h: [i2, f2("hours")], HH: [i2, f2("hours")], hh: [i2, f2("hours")], D: [i2, f2("day")], DD: [r2, f2("day")], Do: [o2, function(e4) { var t5 = s2.ordinal, n3 = e4.match(/\d+/); if (this.day = n3[0], t5) for (var r3 = 1; r3 <= 31; r3 += 1) t5(r3).replace(/\[|\]/g, "") === e4 && (this.day = r3); }], w: [i2, f2("week")], ww: [r2, f2("week")], M: [i2, f2("month")], MM: [r2, f2("month")], MMM: [o2, function(e4) { var t5 = u2("months"), n3 = (u2("monthsShort") || t5.map((function(e6) { return e6.slice(0, 3); }))).indexOf(e4) + 1; if (n3 < 1) throw new Error(); this.month = n3 % 12 || n3; }], MMMM: [o2, function(e4) { var t5 = u2("months").indexOf(e4) + 1; if (t5 < 1) throw new Error(); this.month = t5 % 12 || t5; }], Y: [/[+-]?\d+/, f2("year")], YY: [r2, function(e4) { this.year = a2(e4); }], YYYY: [/\d{4}/, f2("year")], Z: h3, ZZ: h3 }; function l4(n3) { var r3, i3; r3 = n3, i3 = s2 && s2.formats; for (var o3 = (n3 = r3.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g, (function(t5, n4, r4) { var o4 = r4 && r4.toUpperCase(); return n4 || i3[r4] || e3[r4] || i3[o4].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g, (function(e4, t6, n5) { return t6 || n5.slice(1); })); }))).match(t4), a3 = o3.length, f3 = 0; f3 < a3; f3 += 1) { var h4 = o3[f3], u3 = c3[h4], d4 = u3 && u3[0], l5 = u3 && u3[1]; o3[f3] = l5 ? { regex: d4, parser: l5 } : h4.replace(/^\[|\]$/g, ""); } return function(e4) { for (var t5 = {}, n4 = 0, r4 = 0; n4 < a3; n4 += 1) { var i4 = o3[n4]; if ("string" == typeof i4) r4 += i4.length; else { var s3 = i4.regex, f4 = i4.parser, h5 = e4.slice(r4), u4 = s3.exec(h5)[0]; f4.call(t5, u4), e4 = e4.replace(u4, ""); } } return (function(e6) { var t6 = e6.afternoon; if (void 0 !== t6) { var n5 = e6.hours; t6 ? n5 < 12 && (e6.hours += 12) : 12 === n5 && (e6.hours = 0), delete e6.afternoon; } })(t5), t5; }; } __name(l4, "l"); return function(e4, t5, n3) { n3.p.customParseFormat = true, e4 && e4.parseTwoDigitYear && (a2 = e4.parseTwoDigitYear); var r3 = t5.prototype, i3 = r3.parse; r3.parse = function(e6) { var t6 = e6.date, r4 = e6.utc, o3 = e6.args; this.$u = r4; var a3 = o3[1]; if ("string" == typeof a3) { var f3 = true === o3[2], h4 = true === o3[3], u3 = f3 || h4, d4 = o3[2]; h4 && (d4 = o3[2]), s2 = this.$locale(), !f3 && d4 && (s2 = n3.Ls[d4]), this.$d = (function(e7, t7, n4, r5) { try { if (["x", "X"].indexOf(t7) > -1) return new Date(("X" === t7 ? 1e3 : 1) * e7); var i4 = l4(t7)(e7), o4 = i4.year, s3 = i4.month, a4 = i4.day, f4 = i4.hours, h5 = i4.minutes, u4 = i4.seconds, d5 = i4.milliseconds, c5 = i4.zone, m4 = i4.week, M4 = /* @__PURE__ */ new Date(), Y3 = a4 || (o4 || s3 ? 1 : M4.getDate()), p3 = o4 || M4.getFullYear(), v3 = 0; o4 && !s3 || (v3 = s3 > 0 ? s3 - 1 : M4.getMonth()); var D4, w4 = f4 || 0, g2 = h5 || 0, y6 = u4 || 0, L3 = d5 || 0; return c5 ? new Date(Date.UTC(p3, v3, Y3, w4, g2, y6, L3 + 60 * c5.offset * 1e3)) : n4 ? new Date(Date.UTC(p3, v3, Y3, w4, g2, y6, L3)) : (D4 = new Date(p3, v3, Y3, w4, g2, y6, L3), m4 && (D4 = r5(D4).week(m4).toDate()), D4); } catch (e8) { return /* @__PURE__ */ new Date(""); } })(t6, a3, r4, n3), this.init(), d4 && true !== d4 && (this.$L = this.locale(d4).$L), u3 && t6 != this.format(a3) && (this.$d = /* @__PURE__ */ new Date("")), s2 = {}; } else if (a3 instanceof Array) for (var c4 = a3.length, m3 = 1; m3 <= c4; m3 += 1) { o3[1] = a3[m3 - 1]; var M3 = n3.apply(this, o3); if (M3.isValid()) { this.$d = M3.$d, this.$L = M3.$L, this.init(); break; } m3 === c4 && (this.$d = /* @__PURE__ */ new Date("")); } else i3.call(this, e6); }; }; })); } }); // ../../node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/plugin/advancedFormat.js var require_advancedFormat = __commonJS({ "../../node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/plugin/advancedFormat.js"(exports2, module2) { "use strict"; !(function(e3, t4) { "object" == typeof exports2 && "undefined" != typeof module2 ? module2.exports = t4() : "function" == typeof define && define.amd ? define(t4) : (e3 = "undefined" != typeof globalThis ? globalThis : e3 || self).dayjs_plugin_advancedFormat = t4(); })(exports2, (function() { "use strict"; return function(e3, t4) { var r2 = t4.prototype, n2 = r2.format; r2.format = function(e4) { var t5 = this, r3 = this.$locale(); if (!this.isValid()) return n2.bind(this)(e4); var s2 = this.$utils(), a2 = (e4 || "YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g, (function(e6) { switch (e6) { case "Q": return Math.ceil((t5.$M + 1) / 3); case "Do": return r3.ordinal(t5.$D); case "gggg": return t5.weekYear(); case "GGGG": return t5.isoWeekYear(); case "wo": return r3.ordinal(t5.week(), "W"); case "w": case "ww": return s2.s(t5.week(), "w" === e6 ? 1 : 2, "0"); case "W": case "WW": return s2.s(t5.isoWeek(), "W" === e6 ? 1 : 2, "0"); case "k": case "kk": return s2.s(String(0 === t5.$H ? 24 : t5.$H), "k" === e6 ? 1 : 2, "0"); case "X": return Math.floor(t5.$d.getTime() / 1e3); case "x": return t5.$d.getTime(); case "z": return "[" + t5.offsetName() + "]"; case "zzz": return "[" + t5.offsetName("long") + "]"; default: return e6; } })); return n2.bind(this)(a2); }; }; })); } }); // src/diagrams/gantt/ganttDb.js function getTaskTags(data5, task, tags2) { let matchFound = true; while (matchFound) { matchFound = false; tags2.forEach(function(t4) { const pattern = "^\\s*" + t4 + "\\s*$"; const regex2 = new RegExp(pattern); if (data5[0].match(regex2)) { task[t4] = true; data5.shift(1); matchFound = true; } }); } } var import_sanitize_url4, import_dayjs2, import_isoWeek, import_customParseFormat, import_advancedFormat, WEEKEND_START_DAY, dateFormat, axisFormat, tickInterval, todayMarker, includes2, excludes, links, sections, tasks, currentSection, displayMode, tags, funs, inclusiveEndDates, topAxis, weekday, weekend, lastOrder, clear9, setAxisFormat, getAxisFormat, setTickInterval, getTickInterval, setTodayMarker, getTodayMarker, setDateFormat, enableInclusiveEndDates, endDatesAreInclusive, enableTopAxis, topAxisEnabled, setDisplayMode, getDisplayMode, getDateFormat, setIncludes, getIncludes, setExcludes, getExcludes, getLinks, addSection, getSections, getTasks, isInvalidDate, setWeekday, getWeekday, setWeekend, checkTaskDates, fixTaskDates, getStartDate, parseDuration, getEndDate, taskCnt, parseId, compileData, parseData, lastTask, lastTaskID, rawTasks, taskDb, addTask, findTaskById, addTaskOrg, compileTasks, setLink, setClass, setClickFun, pushFun, setClickEvent, bindFunctions, ganttDb_default; var init_ganttDb = __esm({ "src/diagrams/gantt/ganttDb.js"() { "use strict"; import_sanitize_url4 = __toESM(require_dist(), 1); import_dayjs2 = __toESM(require_dayjs_min(), 1); import_isoWeek = __toESM(require_isoWeek(), 1); import_customParseFormat = __toESM(require_customParseFormat(), 1); import_advancedFormat = __toESM(require_advancedFormat(), 1); init_logger(); init_diagramAPI(); init_utils2(); init_commonDb(); import_dayjs2.default.extend(import_isoWeek.default); import_dayjs2.default.extend(import_customParseFormat.default); import_dayjs2.default.extend(import_advancedFormat.default); WEEKEND_START_DAY = { friday: 5, saturday: 6 }; dateFormat = ""; axisFormat = ""; tickInterval = void 0; todayMarker = ""; includes2 = []; excludes = []; links = /* @__PURE__ */ new Map(); sections = []; tasks = []; currentSection = ""; displayMode = ""; tags = ["active", "done", "crit", "milestone", "vert"]; funs = []; inclusiveEndDates = false; topAxis = false; weekday = "sunday"; weekend = "saturday"; lastOrder = 0; clear9 = /* @__PURE__ */ __name(function() { sections = []; tasks = []; currentSection = ""; funs = []; taskCnt = 0; lastTask = void 0; lastTaskID = void 0; rawTasks = []; dateFormat = ""; axisFormat = ""; displayMode = ""; tickInterval = void 0; todayMarker = ""; includes2 = []; excludes = []; inclusiveEndDates = false; topAxis = false; lastOrder = 0; links = /* @__PURE__ */ new Map(); clear(); weekday = "sunday"; weekend = "saturday"; }, "clear"); setAxisFormat = /* @__PURE__ */ __name(function(txt) { axisFormat = txt; }, "setAxisFormat"); getAxisFormat = /* @__PURE__ */ __name(function() { return axisFormat; }, "getAxisFormat"); setTickInterval = /* @__PURE__ */ __name(function(txt) { tickInterval = txt; }, "setTickInterval"); getTickInterval = /* @__PURE__ */ __name(function() { return tickInterval; }, "getTickInterval"); setTodayMarker = /* @__PURE__ */ __name(function(txt) { todayMarker = txt; }, "setTodayMarker"); getTodayMarker = /* @__PURE__ */ __name(function() { return todayMarker; }, "getTodayMarker"); setDateFormat = /* @__PURE__ */ __name(function(txt) { dateFormat = txt; }, "setDateFormat"); enableInclusiveEndDates = /* @__PURE__ */ __name(function() { inclusiveEndDates = true; }, "enableInclusiveEndDates"); endDatesAreInclusive = /* @__PURE__ */ __name(function() { return inclusiveEndDates; }, "endDatesAreInclusive"); enableTopAxis = /* @__PURE__ */ __name(function() { topAxis = true; }, "enableTopAxis"); topAxisEnabled = /* @__PURE__ */ __name(function() { return topAxis; }, "topAxisEnabled"); setDisplayMode = /* @__PURE__ */ __name(function(txt) { displayMode = txt; }, "setDisplayMode"); getDisplayMode = /* @__PURE__ */ __name(function() { return displayMode; }, "getDisplayMode"); getDateFormat = /* @__PURE__ */ __name(function() { return dateFormat; }, "getDateFormat"); setIncludes = /* @__PURE__ */ __name(function(txt) { includes2 = txt.toLowerCase().split(/[\s,]+/); }, "setIncludes"); getIncludes = /* @__PURE__ */ __name(function() { return includes2; }, "getIncludes"); setExcludes = /* @__PURE__ */ __name(function(txt) { excludes = txt.toLowerCase().split(/[\s,]+/); }, "setExcludes"); getExcludes = /* @__PURE__ */ __name(function() { return excludes; }, "getExcludes"); getLinks = /* @__PURE__ */ __name(function() { return links; }, "getLinks"); addSection = /* @__PURE__ */ __name(function(txt) { currentSection = txt; sections.push(txt); }, "addSection"); getSections = /* @__PURE__ */ __name(function() { return sections; }, "getSections"); getTasks = /* @__PURE__ */ __name(function() { let allItemsProcessed = compileTasks(); const maxDepth = 10; let iterationCount = 0; while (!allItemsProcessed && iterationCount < maxDepth) { allItemsProcessed = compileTasks(); iterationCount++; } tasks = rawTasks; return tasks; }, "getTasks"); isInvalidDate = /* @__PURE__ */ __name(function(date2, dateFormat2, excludes2, includes3) { const formattedDate = date2.format(dateFormat2.trim()); const dateOnly = date2.format("YYYY-MM-DD"); if (includes3.includes(formattedDate) || includes3.includes(dateOnly)) { return false; } if (excludes2.includes("weekends") && (date2.isoWeekday() === WEEKEND_START_DAY[weekend] || date2.isoWeekday() === WEEKEND_START_DAY[weekend] + 1)) { return true; } if (excludes2.includes(date2.format("dddd").toLowerCase())) { return true; } return excludes2.includes(formattedDate) || excludes2.includes(dateOnly); }, "isInvalidDate"); setWeekday = /* @__PURE__ */ __name(function(txt) { weekday = txt; }, "setWeekday"); getWeekday = /* @__PURE__ */ __name(function() { return weekday; }, "getWeekday"); setWeekend = /* @__PURE__ */ __name(function(startDay) { weekend = startDay; }, "setWeekend"); checkTaskDates = /* @__PURE__ */ __name(function(task, dateFormat2, excludes2, includes3) { if (!excludes2.length || task.manualEndTime) { return; } let startTime; if (task.startTime instanceof Date) { startTime = (0, import_dayjs2.default)(task.startTime); } else { startTime = (0, import_dayjs2.default)(task.startTime, dateFormat2, true); } startTime = startTime.add(1, "d"); let originalEndTime; if (task.endTime instanceof Date) { originalEndTime = (0, import_dayjs2.default)(task.endTime); } else { originalEndTime = (0, import_dayjs2.default)(task.endTime, dateFormat2, true); } const [fixedEndTime, renderEndTime] = fixTaskDates( startTime, originalEndTime, dateFormat2, excludes2, includes3 ); task.endTime = fixedEndTime.toDate(); task.renderEndTime = renderEndTime; }, "checkTaskDates"); fixTaskDates = /* @__PURE__ */ __name(function(startTime, endTime, dateFormat2, excludes2, includes3) { let invalid = false; let renderEndTime = null; while (startTime <= endTime) { if (!invalid) { renderEndTime = endTime.toDate(); } invalid = isInvalidDate(startTime, dateFormat2, excludes2, includes3); if (invalid) { endTime = endTime.add(1, "d"); } startTime = startTime.add(1, "d"); } return [endTime, renderEndTime]; }, "fixTaskDates"); getStartDate = /* @__PURE__ */ __name(function(prevTime, dateFormat2, str2) { str2 = str2.trim(); if ((dateFormat2.trim() === "x" || dateFormat2.trim() === "X") && /^\d+$/.test(str2)) { return new Date(Number(str2)); } const afterRePattern = /^after\s+(?[\d\w- ]+)/; const afterStatement = afterRePattern.exec(str2); if (afterStatement !== null) { let latestTask = null; for (const id30 of afterStatement.groups.ids.split(" ")) { let task = findTaskById(id30); if (task !== void 0 && (!latestTask || task.endTime > latestTask.endTime)) { latestTask = task; } } if (latestTask) { return latestTask.endTime; } const today = /* @__PURE__ */ new Date(); today.setHours(0, 0, 0, 0); return today; } let mDate = (0, import_dayjs2.default)(str2, dateFormat2.trim(), true); if (mDate.isValid()) { return mDate.toDate(); } else { log.debug("Invalid date:" + str2); log.debug("With date format:" + dateFormat2.trim()); const d3 = new Date(str2); if (d3 === void 0 || isNaN(d3.getTime()) || // WebKit browsers can mis-parse invalid dates to be ridiculously // huge numbers, e.g. new Date('202304') gets parsed as January 1, 202304. // This can cause virtually infinite loops while rendering, so for the // purposes of Gantt charts we'll just treat any date beyond 10,000 AD/BC as // invalid. d3.getFullYear() < -1e4 || d3.getFullYear() > 1e4) { throw new Error("Invalid date:" + str2); } return d3; } }, "getStartDate"); parseDuration = /* @__PURE__ */ __name(function(str2) { const statement = /^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(str2.trim()); if (statement !== null) { return [Number.parseFloat(statement[1]), statement[2]]; } return [NaN, "ms"]; }, "parseDuration"); getEndDate = /* @__PURE__ */ __name(function(prevTime, dateFormat2, str2, inclusive = false) { str2 = str2.trim(); const untilRePattern = /^until\s+(?[\d\w- ]+)/; const untilStatement = untilRePattern.exec(str2); if (untilStatement !== null) { let earliestTask = null; for (const id30 of untilStatement.groups.ids.split(" ")) { let task = findTaskById(id30); if (task !== void 0 && (!earliestTask || task.startTime < earliestTask.startTime)) { earliestTask = task; } } if (earliestTask) { return earliestTask.startTime; } const today = /* @__PURE__ */ new Date(); today.setHours(0, 0, 0, 0); return today; } let parsedDate = (0, import_dayjs2.default)(str2, dateFormat2.trim(), true); if (parsedDate.isValid()) { if (inclusive) { parsedDate = parsedDate.add(1, "d"); } return parsedDate.toDate(); } let endTime = (0, import_dayjs2.default)(prevTime); const [durationValue, durationUnit] = parseDuration(str2); if (!Number.isNaN(durationValue)) { const newEndTime = endTime.add(durationValue, durationUnit); if (newEndTime.isValid()) { endTime = newEndTime; } } return endTime.toDate(); }, "getEndDate"); taskCnt = 0; parseId = /* @__PURE__ */ __name(function(idStr) { if (idStr === void 0) { taskCnt = taskCnt + 1; return "task" + taskCnt; } return idStr; }, "parseId"); compileData = /* @__PURE__ */ __name(function(prevTask, dataStr) { let ds; if (dataStr.substr(0, 1) === ":") { ds = dataStr.substr(1, dataStr.length); } else { ds = dataStr; } const data5 = ds.split(","); const task = {}; getTaskTags(data5, task, tags); for (let i2 = 0; i2 < data5.length; i2++) { data5[i2] = data5[i2].trim(); } let endTimeData = ""; switch (data5.length) { case 1: task.id = parseId(); task.startTime = prevTask.endTime; endTimeData = data5[0]; break; case 2: task.id = parseId(); task.startTime = getStartDate(void 0, dateFormat, data5[0]); endTimeData = data5[1]; break; case 3: task.id = parseId(data5[0]); task.startTime = getStartDate(void 0, dateFormat, data5[1]); endTimeData = data5[2]; break; default: } if (endTimeData) { task.endTime = getEndDate(task.startTime, dateFormat, endTimeData, inclusiveEndDates); task.manualEndTime = (0, import_dayjs2.default)(endTimeData, "YYYY-MM-DD", true).isValid(); checkTaskDates(task, dateFormat, excludes, includes2); } return task; }, "compileData"); parseData = /* @__PURE__ */ __name(function(prevTaskId, dataStr) { let ds; if (dataStr.substr(0, 1) === ":") { ds = dataStr.substr(1, dataStr.length); } else { ds = dataStr; } const data5 = ds.split(","); const task = {}; getTaskTags(data5, task, tags); for (let i2 = 0; i2 < data5.length; i2++) { data5[i2] = data5[i2].trim(); } switch (data5.length) { case 1: task.id = parseId(); task.startTime = { type: "prevTaskEnd", id: prevTaskId }; task.endTime = { data: data5[0] }; break; case 2: task.id = parseId(); task.startTime = { type: "getStartDate", startData: data5[0] }; task.endTime = { data: data5[1] }; break; case 3: task.id = parseId(data5[0]); task.startTime = { type: "getStartDate", startData: data5[1] }; task.endTime = { data: data5[2] }; break; default: } return task; }, "parseData"); rawTasks = []; taskDb = {}; addTask = /* @__PURE__ */ __name(function(descr, data5) { const rawTask = { section: currentSection, type: currentSection, processed: false, manualEndTime: false, renderEndTime: null, raw: { data: data5 }, task: descr, classes: [] }; const taskInfo = parseData(lastTaskID, data5); rawTask.raw.startTime = taskInfo.startTime; rawTask.raw.endTime = taskInfo.endTime; rawTask.id = taskInfo.id; rawTask.prevTaskId = lastTaskID; rawTask.active = taskInfo.active; rawTask.done = taskInfo.done; rawTask.crit = taskInfo.crit; rawTask.milestone = taskInfo.milestone; rawTask.vert = taskInfo.vert; rawTask.order = lastOrder; lastOrder++; const pos = rawTasks.push(rawTask); lastTaskID = rawTask.id; taskDb[rawTask.id] = pos - 1; }, "addTask"); findTaskById = /* @__PURE__ */ __name(function(id30) { const pos = taskDb[id30]; return rawTasks[pos]; }, "findTaskById"); addTaskOrg = /* @__PURE__ */ __name(function(descr, data5) { const newTask = { section: currentSection, type: currentSection, description: descr, task: descr, classes: [] }; const taskInfo = compileData(lastTask, data5); newTask.startTime = taskInfo.startTime; newTask.endTime = taskInfo.endTime; newTask.id = taskInfo.id; newTask.active = taskInfo.active; newTask.done = taskInfo.done; newTask.crit = taskInfo.crit; newTask.milestone = taskInfo.milestone; newTask.vert = taskInfo.vert; lastTask = newTask; tasks.push(newTask); }, "addTaskOrg"); compileTasks = /* @__PURE__ */ __name(function() { const compileTask = /* @__PURE__ */ __name(function(pos) { const task = rawTasks[pos]; let startTime = ""; switch (rawTasks[pos].raw.startTime.type) { case "prevTaskEnd": { const prevTask = findTaskById(task.prevTaskId); task.startTime = prevTask.endTime; break; } case "getStartDate": startTime = getStartDate(void 0, dateFormat, rawTasks[pos].raw.startTime.startData); if (startTime) { rawTasks[pos].startTime = startTime; } break; } if (rawTasks[pos].startTime) { rawTasks[pos].endTime = getEndDate( rawTasks[pos].startTime, dateFormat, rawTasks[pos].raw.endTime.data, inclusiveEndDates ); if (rawTasks[pos].endTime) { rawTasks[pos].processed = true; rawTasks[pos].manualEndTime = (0, import_dayjs2.default)( rawTasks[pos].raw.endTime.data, "YYYY-MM-DD", true ).isValid(); checkTaskDates(rawTasks[pos], dateFormat, excludes, includes2); } } return rawTasks[pos].processed; }, "compileTask"); let allProcessed = true; for (const [i2, rawTask] of rawTasks.entries()) { compileTask(i2); allProcessed = allProcessed && rawTask.processed; } return allProcessed; }, "compileTasks"); setLink = /* @__PURE__ */ __name(function(ids, _linkStr) { let linkStr = _linkStr; if (getConfig2().securityLevel !== "loose") { linkStr = (0, import_sanitize_url4.sanitizeUrl)(_linkStr); } ids.split(",").forEach(function(id30) { let rawTask = findTaskById(id30); if (rawTask !== void 0) { pushFun(id30, () => { window.open(linkStr, "_self"); }); links.set(id30, linkStr); } }); setClass(ids, "clickable"); }, "setLink"); setClass = /* @__PURE__ */ __name(function(ids, className) { ids.split(",").forEach(function(id30) { let rawTask = findTaskById(id30); if (rawTask !== void 0) { rawTask.classes.push(className); } }); }, "setClass"); setClickFun = /* @__PURE__ */ __name(function(id30, functionName, functionArgs) { if (getConfig2().securityLevel !== "loose") { return; } if (functionName === void 0) { return; } let argList = []; if (typeof functionArgs === "string") { argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); for (let i2 = 0; i2 < argList.length; i2++) { let item = argList[i2].trim(); if (item.startsWith('"') && item.endsWith('"')) { item = item.substr(1, item.length - 2); } argList[i2] = item; } } if (argList.length === 0) { argList.push(id30); } let rawTask = findTaskById(id30); if (rawTask !== void 0) { pushFun(id30, () => { utils_default2.runFunc(functionName, ...argList); }); } }, "setClickFun"); pushFun = /* @__PURE__ */ __name(function(id30, callbackFunction) { funs.push( function() { const elem = document.querySelector(`[id="${id30}"]`); if (elem !== null) { elem.addEventListener("click", function() { callbackFunction(); }); } }, function() { const elem = document.querySelector(`[id="${id30}-text"]`); if (elem !== null) { elem.addEventListener("click", function() { callbackFunction(); }); } } ); }, "pushFun"); setClickEvent = /* @__PURE__ */ __name(function(ids, functionName, functionArgs) { ids.split(",").forEach(function(id30) { setClickFun(id30, functionName, functionArgs); }); setClass(ids, "clickable"); }, "setClickEvent"); bindFunctions = /* @__PURE__ */ __name(function(element3) { funs.forEach(function(fun) { fun(element3); }); }, "bindFunctions"); ganttDb_default = { getConfig: /* @__PURE__ */ __name(() => getConfig2().gantt, "getConfig"), clear: clear9, setDateFormat, getDateFormat, enableInclusiveEndDates, endDatesAreInclusive, enableTopAxis, topAxisEnabled, setAxisFormat, getAxisFormat, setTickInterval, getTickInterval, setTodayMarker, getTodayMarker, setAccTitle, getAccTitle, setDiagramTitle, getDiagramTitle, setDisplayMode, getDisplayMode, setAccDescription, getAccDescription, addSection, getSections, getTasks, addTask, findTaskById, addTaskOrg, setIncludes, getIncludes, setExcludes, getExcludes, setClickEvent, setLink, getLinks, bindFunctions, parseDuration, isInvalidDate, setWeekday, getWeekday, setWeekend }; __name(getTaskTags, "getTaskTags"); } }); // src/diagrams/gantt/ganttRenderer.js var import_dayjs3, setConf2, mapWeekdayToTimeFunction, getMaxIntersections, w3, draw5, ganttRenderer_default; var init_ganttRenderer = __esm({ "src/diagrams/gantt/ganttRenderer.js"() { "use strict"; import_dayjs3 = __toESM(require_dayjs_min(), 1); init_logger(); init_src32(); init_common(); init_diagramAPI(); init_setupGraphViewbox(); setConf2 = /* @__PURE__ */ __name(function() { log.debug("Something is calling, setConf, remove the call"); }, "setConf"); mapWeekdayToTimeFunction = { monday: timeMonday, tuesday: timeTuesday, wednesday: timeWednesday, thursday: timeThursday, friday: timeFriday, saturday: timeSaturday, sunday: timeSunday }; getMaxIntersections = /* @__PURE__ */ __name((tasks4, orderOffset) => { let timeline = [...tasks4].map(() => -Infinity); let sorted = [...tasks4].sort((a2, b3) => a2.startTime - b3.startTime || a2.order - b3.order); let maxIntersections = 0; for (const element3 of sorted) { for (let j3 = 0; j3 < timeline.length; j3++) { if (element3.startTime >= timeline[j3]) { timeline[j3] = element3.endTime; element3.order = j3 + orderOffset; if (j3 > maxIntersections) { maxIntersections = j3; } break; } } } return maxIntersections; }, "getMaxIntersections"); draw5 = /* @__PURE__ */ __name(function(text4, id30, version3, diagObj) { const conf5 = getConfig2().gantt; const securityLevel = getConfig2().securityLevel; let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = select_default2("#i" + id30); } const root3 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body"); const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; const elem = doc.getElementById(id30); w3 = elem.parentElement.offsetWidth; if (w3 === void 0) { w3 = 1200; } if (conf5.useWidth !== void 0) { w3 = conf5.useWidth; } const taskArray = diagObj.db.getTasks(); let categories = []; for (const element3 of taskArray) { categories.push(element3.type); } categories = checkUnique(categories); const categoryHeights = {}; let h3 = 2 * conf5.topPadding; if (diagObj.db.getDisplayMode() === "compact" || conf5.displayMode === "compact") { const categoryElements = {}; for (const element3 of taskArray) { if (categoryElements[element3.section] === void 0) { categoryElements[element3.section] = [element3]; } else { categoryElements[element3.section].push(element3); } } let intersections = 0; for (const category of Object.keys(categoryElements)) { const categoryHeight = getMaxIntersections(categoryElements[category], intersections) + 1; intersections += categoryHeight; h3 += categoryHeight * (conf5.barHeight + conf5.barGap); categoryHeights[category] = categoryHeight; } } else { h3 += taskArray.length * (conf5.barHeight + conf5.barGap); for (const category of categories) { categoryHeights[category] = taskArray.filter((task) => task.type === category).length; } } elem.setAttribute("viewBox", "0 0 " + w3 + " " + h3); const svg2 = root3.select(`[id="${id30}"]`); const timeScale = time().domain([ min(taskArray, function(d3) { return d3.startTime; }), max(taskArray, function(d3) { return d3.endTime; }) ]).rangeRound([0, w3 - conf5.leftPadding - conf5.rightPadding]); function taskCompare(a2, b3) { const taskA = a2.startTime; const taskB = b3.startTime; let result = 0; if (taskA > taskB) { result = 1; } else if (taskA < taskB) { result = -1; } return result; } __name(taskCompare, "taskCompare"); taskArray.sort(taskCompare); makeGantt(taskArray, w3, h3); configureSvgSize(svg2, h3, w3, conf5.useMaxWidth); svg2.append("text").text(diagObj.db.getDiagramTitle()).attr("x", w3 / 2).attr("y", conf5.titleTopMargin).attr("class", "titleText"); function makeGantt(tasks4, pageWidth, pageHeight) { const barHeight = conf5.barHeight; const gap = barHeight + conf5.barGap; const topPadding = conf5.topPadding; const leftPadding = conf5.leftPadding; const colorScale = linear2().domain([0, categories.length]).range(["#00B9FA", "#F95002"]).interpolate(hcl_default); drawExcludeDays( gap, topPadding, leftPadding, pageWidth, pageHeight, tasks4, diagObj.db.getExcludes(), diagObj.db.getIncludes() ); makeGrid(leftPadding, topPadding, pageWidth, pageHeight); drawRects(tasks4, gap, topPadding, leftPadding, barHeight, colorScale, pageWidth, pageHeight); vertLabels(gap, topPadding, leftPadding, barHeight, colorScale); drawToday(leftPadding, topPadding, pageWidth, pageHeight); } __name(makeGantt, "makeGantt"); function drawRects(theArray, theGap, theTopPad, theSidePad, theBarHeight, theColorScale, w4) { theArray.sort((a2, b3) => a2.vert === b3.vert ? 0 : a2.vert ? 1 : -1); const uniqueTaskOrderIds = [...new Set(theArray.map((item) => item.order))]; const uniqueTasks = uniqueTaskOrderIds.map((id31) => theArray.find((item) => item.order === id31)); svg2.append("g").selectAll("rect").data(uniqueTasks).enter().append("rect").attr("x", 0).attr("y", function(d3, i2) { i2 = d3.order; return i2 * theGap + theTopPad - 2; }).attr("width", function() { return w4 - conf5.rightPadding / 2; }).attr("height", theGap).attr("class", function(d3) { for (const [i2, category] of categories.entries()) { if (d3.type === category) { return "section section" + i2 % conf5.numberSectionStyles; } } return "section section0"; }).enter(); const rectangles = svg2.append("g").selectAll("rect").data(theArray).enter(); const links3 = diagObj.db.getLinks(); rectangles.append("rect").attr("id", function(d3) { return d3.id; }).attr("rx", 3).attr("ry", 3).attr("x", function(d3) { if (d3.milestone) { return timeScale(d3.startTime) + theSidePad + 0.5 * (timeScale(d3.endTime) - timeScale(d3.startTime)) - 0.5 * theBarHeight; } return timeScale(d3.startTime) + theSidePad; }).attr("y", function(d3, i2) { i2 = d3.order; if (d3.vert) { return conf5.gridLineStartPadding; } return i2 * theGap + theTopPad; }).attr("width", function(d3) { if (d3.milestone) { return theBarHeight; } if (d3.vert) { return 0.08 * theBarHeight; } return timeScale(d3.renderEndTime || d3.endTime) - timeScale(d3.startTime); }).attr("height", function(d3) { if (d3.vert) { return taskArray.length * (conf5.barHeight + conf5.barGap) + conf5.barHeight * 2; } return theBarHeight; }).attr("transform-origin", function(d3, i2) { i2 = d3.order; return (timeScale(d3.startTime) + theSidePad + 0.5 * (timeScale(d3.endTime) - timeScale(d3.startTime))).toString() + "px " + (i2 * theGap + theTopPad + 0.5 * theBarHeight).toString() + "px"; }).attr("class", function(d3) { const res = "task"; let classStr = ""; if (d3.classes.length > 0) { classStr = d3.classes.join(" "); } let secNum = 0; for (const [i2, category] of categories.entries()) { if (d3.type === category) { secNum = i2 % conf5.numberSectionStyles; } } let taskClass = ""; if (d3.active) { if (d3.crit) { taskClass += " activeCrit"; } else { taskClass = " active"; } } else if (d3.done) { if (d3.crit) { taskClass = " doneCrit"; } else { taskClass = " done"; } } else { if (d3.crit) { taskClass += " crit"; } } if (taskClass.length === 0) { taskClass = " task"; } if (d3.milestone) { taskClass = " milestone " + taskClass; } if (d3.vert) { taskClass = " vert " + taskClass; } taskClass += secNum; taskClass += " " + classStr; return res + taskClass; }); rectangles.append("text").attr("id", function(d3) { return d3.id + "-text"; }).text(function(d3) { return d3.task; }).attr("font-size", conf5.fontSize).attr("x", function(d3) { let startX2 = timeScale(d3.startTime); let endX = timeScale(d3.renderEndTime || d3.endTime); if (d3.milestone) { startX2 += 0.5 * (timeScale(d3.endTime) - timeScale(d3.startTime)) - 0.5 * theBarHeight; endX = startX2 + theBarHeight; } if (d3.vert) { return timeScale(d3.startTime) + theSidePad; } const textWidth = this.getBBox().width; if (textWidth > endX - startX2) { if (endX + textWidth + 1.5 * conf5.leftPadding > w4) { return startX2 + theSidePad - 5; } else { return endX + theSidePad + 5; } } else { return (endX - startX2) / 2 + startX2 + theSidePad; } }).attr("y", function(d3, i2) { if (d3.vert) { return conf5.gridLineStartPadding + taskArray.length * (conf5.barHeight + conf5.barGap) + 60; } i2 = d3.order; return i2 * theGap + conf5.barHeight / 2 + (conf5.fontSize / 2 - 2) + theTopPad; }).attr("text-height", theBarHeight).attr("class", function(d3) { const startX2 = timeScale(d3.startTime); let endX = timeScale(d3.endTime); if (d3.milestone) { endX = startX2 + theBarHeight; } const textWidth = this.getBBox().width; let classStr = ""; if (d3.classes.length > 0) { classStr = d3.classes.join(" "); } let secNum = 0; for (const [i2, category] of categories.entries()) { if (d3.type === category) { secNum = i2 % conf5.numberSectionStyles; } } let taskType = ""; if (d3.active) { if (d3.crit) { taskType = "activeCritText" + secNum; } else { taskType = "activeText" + secNum; } } if (d3.done) { if (d3.crit) { taskType = taskType + " doneCritText" + secNum; } else { taskType = taskType + " doneText" + secNum; } } else { if (d3.crit) { taskType = taskType + " critText" + secNum; } } if (d3.milestone) { taskType += " milestoneText"; } if (d3.vert) { taskType += " vertText"; } if (textWidth > endX - startX2) { if (endX + textWidth + 1.5 * conf5.leftPadding > w4) { return classStr + " taskTextOutsideLeft taskTextOutside" + secNum + " " + taskType; } else { return classStr + " taskTextOutsideRight taskTextOutside" + secNum + " " + taskType + " width-" + textWidth; } } else { return classStr + " taskText taskText" + secNum + " " + taskType + " width-" + textWidth; } }); const securityLevel2 = getConfig2().securityLevel; if (securityLevel2 === "sandbox") { let sandboxElement2; sandboxElement2 = select_default2("#i" + id30); const doc2 = sandboxElement2.nodes()[0].contentDocument; rectangles.filter(function(d3) { return links3.has(d3.id); }).each(function(o2) { var taskRect = doc2.querySelector("#" + o2.id); var taskText = doc2.querySelector("#" + o2.id + "-text"); const oldParent = taskRect.parentNode; var Link = doc2.createElement("a"); Link.setAttribute("xlink:href", links3.get(o2.id)); Link.setAttribute("target", "_top"); oldParent.appendChild(Link); Link.appendChild(taskRect); Link.appendChild(taskText); }); } } __name(drawRects, "drawRects"); function drawExcludeDays(theGap, theTopPad, theSidePad, w4, h4, tasks4, excludes2, includes3) { if (excludes2.length === 0 && includes3.length === 0) { return; } let minTime; let maxTime; for (const { startTime, endTime } of tasks4) { if (minTime === void 0 || startTime < minTime) { minTime = startTime; } if (maxTime === void 0 || endTime > maxTime) { maxTime = endTime; } } if (!minTime || !maxTime) { return; } if ((0, import_dayjs3.default)(maxTime).diff((0, import_dayjs3.default)(minTime), "year") > 5) { log.warn( "The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days." ); return; } const dateFormat2 = diagObj.db.getDateFormat(); const excludeRanges = []; let range3 = null; let d3 = (0, import_dayjs3.default)(minTime); while (d3.valueOf() <= maxTime) { if (diagObj.db.isInvalidDate(d3, dateFormat2, excludes2, includes3)) { if (!range3) { range3 = { start: d3, end: d3 }; } else { range3.end = d3; } } else { if (range3) { excludeRanges.push(range3); range3 = null; } } d3 = d3.add(1, "d"); } const rectangles = svg2.append("g").selectAll("rect").data(excludeRanges).enter(); rectangles.append("rect").attr("id", (d4) => "exclude-" + d4.start.format("YYYY-MM-DD")).attr("x", (d4) => timeScale(d4.start.startOf("day")) + theSidePad).attr("y", conf5.gridLineStartPadding).attr("width", (d4) => timeScale(d4.end.endOf("day")) - timeScale(d4.start.startOf("day"))).attr("height", h4 - theTopPad - conf5.gridLineStartPadding).attr("transform-origin", function(d4, i2) { return (timeScale(d4.start) + theSidePad + 0.5 * (timeScale(d4.end) - timeScale(d4.start))).toString() + "px " + (i2 * theGap + 0.5 * h4).toString() + "px"; }).attr("class", "exclude-range"); } __name(drawExcludeDays, "drawExcludeDays"); function makeGrid(theSidePad, theTopPad, w4, h4) { const dateFormat2 = diagObj.db.getDateFormat(); const userAxisFormat = diagObj.db.getAxisFormat(); let axisFormat2; if (userAxisFormat) { axisFormat2 = userAxisFormat; } else if (dateFormat2 === "D") { axisFormat2 = "%d"; } else { axisFormat2 = conf5.axisFormat ?? "%Y-%m-%d"; } let bottomXAxis = axisBottom(timeScale).tickSize(-h4 + theTopPad + conf5.gridLineStartPadding).tickFormat(timeFormat(axisFormat2)); const reTickInterval = /^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/; const resultTickInterval = reTickInterval.exec( diagObj.db.getTickInterval() || conf5.tickInterval ); if (resultTickInterval !== null) { const every3 = resultTickInterval[1]; const interval2 = resultTickInterval[2]; const weekday2 = diagObj.db.getWeekday() || conf5.weekday; switch (interval2) { case "millisecond": bottomXAxis.ticks(millisecond.every(every3)); break; case "second": bottomXAxis.ticks(second.every(every3)); break; case "minute": bottomXAxis.ticks(timeMinute.every(every3)); break; case "hour": bottomXAxis.ticks(timeHour.every(every3)); break; case "day": bottomXAxis.ticks(timeDay.every(every3)); break; case "week": bottomXAxis.ticks(mapWeekdayToTimeFunction[weekday2].every(every3)); break; case "month": bottomXAxis.ticks(timeMonth.every(every3)); break; } } svg2.append("g").attr("class", "grid").attr("transform", "translate(" + theSidePad + ", " + (h4 - 50) + ")").call(bottomXAxis).selectAll("text").style("text-anchor", "middle").attr("fill", "#000").attr("stroke", "none").attr("font-size", 10).attr("dy", "1em"); if (diagObj.db.topAxisEnabled() || conf5.topAxis) { let topXAxis = axisTop(timeScale).tickSize(-h4 + theTopPad + conf5.gridLineStartPadding).tickFormat(timeFormat(axisFormat2)); if (resultTickInterval !== null) { const every3 = resultTickInterval[1]; const interval2 = resultTickInterval[2]; const weekday2 = diagObj.db.getWeekday() || conf5.weekday; switch (interval2) { case "millisecond": topXAxis.ticks(millisecond.every(every3)); break; case "second": topXAxis.ticks(second.every(every3)); break; case "minute": topXAxis.ticks(timeMinute.every(every3)); break; case "hour": topXAxis.ticks(timeHour.every(every3)); break; case "day": topXAxis.ticks(timeDay.every(every3)); break; case "week": topXAxis.ticks(mapWeekdayToTimeFunction[weekday2].every(every3)); break; case "month": topXAxis.ticks(timeMonth.every(every3)); break; } } svg2.append("g").attr("class", "grid").attr("transform", "translate(" + theSidePad + ", " + theTopPad + ")").call(topXAxis).selectAll("text").style("text-anchor", "middle").attr("fill", "#000").attr("stroke", "none").attr("font-size", 10); } } __name(makeGrid, "makeGrid"); function vertLabels(theGap, theTopPad) { let prevGap = 0; const numOccurrences = Object.keys(categoryHeights).map((d3) => [d3, categoryHeights[d3]]); svg2.append("g").selectAll("text").data(numOccurrences).enter().append(function(d3) { const rows = d3[0].split(common_default.lineBreakRegex); const dy = -(rows.length - 1) / 2; const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text"); svgLabel.setAttribute("dy", dy + "em"); for (const [j3, row] of rows.entries()) { const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan"); tspan.setAttribute("alignment-baseline", "central"); tspan.setAttribute("x", "10"); if (j3 > 0) { tspan.setAttribute("dy", "1em"); } tspan.textContent = row; svgLabel.appendChild(tspan); } return svgLabel; }).attr("x", 10).attr("y", function(d3, i2) { if (i2 > 0) { for (let j3 = 0; j3 < i2; j3++) { prevGap += numOccurrences[i2 - 1][1]; return d3[1] * theGap / 2 + prevGap * theGap + theTopPad; } } else { return d3[1] * theGap / 2 + theTopPad; } }).attr("font-size", conf5.sectionFontSize).attr("class", function(d3) { for (const [i2, category] of categories.entries()) { if (d3[0] === category) { return "sectionTitle sectionTitle" + i2 % conf5.numberSectionStyles; } } return "sectionTitle"; }); } __name(vertLabels, "vertLabels"); function drawToday(theSidePad, theTopPad, w4, h4) { const todayMarker2 = diagObj.db.getTodayMarker(); if (todayMarker2 === "off") { return; } const todayG = svg2.append("g").attr("class", "today"); const today = /* @__PURE__ */ new Date(); const todayLine = todayG.append("line"); todayLine.attr("x1", timeScale(today) + theSidePad).attr("x2", timeScale(today) + theSidePad).attr("y1", conf5.titleTopMargin).attr("y2", h4 - conf5.titleTopMargin).attr("class", "today"); if (todayMarker2 !== "") { todayLine.attr("style", todayMarker2.replace(/,/g, ";")); } } __name(drawToday, "drawToday"); function checkUnique(arr) { const hash = {}; const result = []; for (let i2 = 0, l4 = arr.length; i2 < l4; ++i2) { if (!Object.prototype.hasOwnProperty.call(hash, arr[i2])) { hash[arr[i2]] = true; result.push(arr[i2]); } } return result; } __name(checkUnique, "checkUnique"); }, "draw"); ganttRenderer_default = { setConf: setConf2, draw: draw5 }; } }); // src/diagrams/gantt/styles.js var getStyles6, styles_default6; var init_styles6 = __esm({ "src/diagrams/gantt/styles.js"() { "use strict"; getStyles6 = /* @__PURE__ */ __name((options2) => ` .mermaid-main-font { font-family: ${options2.fontFamily}; } .exclude-range { fill: ${options2.excludeBkgColor}; } .section { stroke: none; opacity: 0.2; } .section0 { fill: ${options2.sectionBkgColor}; } .section2 { fill: ${options2.sectionBkgColor2}; } .section1, .section3 { fill: ${options2.altSectionBkgColor}; opacity: 0.2; } .sectionTitle0 { fill: ${options2.titleColor}; } .sectionTitle1 { fill: ${options2.titleColor}; } .sectionTitle2 { fill: ${options2.titleColor}; } .sectionTitle3 { fill: ${options2.titleColor}; } .sectionTitle { text-anchor: start; font-family: ${options2.fontFamily}; } /* Grid and axis */ .grid .tick { stroke: ${options2.gridColor}; opacity: 0.8; shape-rendering: crispEdges; } .grid .tick text { font-family: ${options2.fontFamily}; fill: ${options2.textColor}; } .grid path { stroke-width: 0; } /* Today line */ .today { fill: none; stroke: ${options2.todayLineColor}; stroke-width: 2px; } /* Task styling */ /* Default task */ .task { stroke-width: 2; } .taskText { text-anchor: middle; font-family: ${options2.fontFamily}; } .taskTextOutsideRight { fill: ${options2.taskTextDarkColor}; text-anchor: start; font-family: ${options2.fontFamily}; } .taskTextOutsideLeft { fill: ${options2.taskTextDarkColor}; text-anchor: end; } /* Special case clickable */ .task.clickable { cursor: pointer; } .taskText.clickable { cursor: pointer; fill: ${options2.taskTextClickableColor} !important; font-weight: bold; } .taskTextOutsideLeft.clickable { cursor: pointer; fill: ${options2.taskTextClickableColor} !important; font-weight: bold; } .taskTextOutsideRight.clickable { cursor: pointer; fill: ${options2.taskTextClickableColor} !important; font-weight: bold; } /* Specific task settings for the sections*/ .taskText0, .taskText1, .taskText2, .taskText3 { fill: ${options2.taskTextColor}; } .task0, .task1, .task2, .task3 { fill: ${options2.taskBkgColor}; stroke: ${options2.taskBorderColor}; } .taskTextOutside0, .taskTextOutside2 { fill: ${options2.taskTextOutsideColor}; } .taskTextOutside1, .taskTextOutside3 { fill: ${options2.taskTextOutsideColor}; } /* Active task */ .active0, .active1, .active2, .active3 { fill: ${options2.activeTaskBkgColor}; stroke: ${options2.activeTaskBorderColor}; } .activeText0, .activeText1, .activeText2, .activeText3 { fill: ${options2.taskTextDarkColor} !important; } /* Completed task */ .done0, .done1, .done2, .done3 { stroke: ${options2.doneTaskBorderColor}; fill: ${options2.doneTaskBkgColor}; stroke-width: 2; } .doneText0, .doneText1, .doneText2, .doneText3 { fill: ${options2.taskTextDarkColor} !important; } /* Tasks on the critical line */ .crit0, .crit1, .crit2, .crit3 { stroke: ${options2.critBorderColor}; fill: ${options2.critBkgColor}; stroke-width: 2; } .activeCrit0, .activeCrit1, .activeCrit2, .activeCrit3 { stroke: ${options2.critBorderColor}; fill: ${options2.activeTaskBkgColor}; stroke-width: 2; } .doneCrit0, .doneCrit1, .doneCrit2, .doneCrit3 { stroke: ${options2.critBorderColor}; fill: ${options2.doneTaskBkgColor}; stroke-width: 2; cursor: pointer; shape-rendering: crispEdges; } .milestone { transform: rotate(45deg) scale(0.8,0.8); } .milestoneText { font-style: italic; } .doneCritText0, .doneCritText1, .doneCritText2, .doneCritText3 { fill: ${options2.taskTextDarkColor} !important; } .vert { stroke: ${options2.vertLineColor}; } .vertText { font-size: 15px; text-anchor: middle; fill: ${options2.vertLineColor} !important; } .activeCritText0, .activeCritText1, .activeCritText2, .activeCritText3 { fill: ${options2.taskTextDarkColor} !important; } .titleText { text-anchor: middle; font-size: 18px; fill: ${options2.titleColor || options2.textColor}; font-family: ${options2.fontFamily}; } `, "getStyles"); styles_default6 = getStyles6; } }); // src/diagrams/gantt/ganttDiagram.ts var ganttDiagram_exports = {}; __export(ganttDiagram_exports, { diagram: () => diagram5 }); var diagram5; var init_ganttDiagram = __esm({ "src/diagrams/gantt/ganttDiagram.ts"() { "use strict"; init_gantt(); init_ganttDb(); init_ganttRenderer(); init_styles6(); diagram5 = { parser: gantt_default, db: ganttDb_default, renderer: ganttRenderer_default, styles: styles_default6 }; } }); // src/diagrams/info/infoParser.ts var parser6; var init_infoParser = __esm({ "src/diagrams/info/infoParser.ts"() { "use strict"; init_mermaid_parser_core(); init_logger(); parser6 = { parse: /* @__PURE__ */ __name(async (input) => { const ast = await parse3("info", input); log.debug(ast); }, "parse") }; } }); // package.json var package_default; var init_package = __esm({ "package.json"() { package_default = { name: "mermaid", version: "11.12.0", description: "Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.", type: "module", module: "./dist/mermaid.core.mjs", types: "./dist/mermaid.d.ts", exports: { ".": { types: "./dist/mermaid.d.ts", import: "./dist/mermaid.core.mjs", default: "./dist/mermaid.core.mjs" }, "./*": "./*" }, keywords: [ "diagram", "markdown", "flowchart", "sequence diagram", "gantt", "class diagram", "git graph", "mindmap", "packet diagram", "c4 diagram", "er diagram", "pie chart", "pie diagram", "quadrant chart", "requirement diagram", "graph" ], scripts: { clean: "rimraf dist", dev: "pnpm -w dev", "docs:code": "typedoc src/defaultConfig.ts src/config.ts src/mermaid.ts && prettier --write ./src/docs/config/setup", "docs:build": "rimraf ../../docs && pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts", "docs:verify": "pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts --verify", "docs:pre:vitepress": "pnpm --filter ./src/docs prefetch && rimraf src/vitepress && pnpm docs:code && tsx scripts/docs.cli.mts --vitepress && pnpm --filter ./src/vitepress install --no-frozen-lockfile --ignore-scripts", "docs:build:vitepress": "pnpm docs:pre:vitepress && (cd src/vitepress && pnpm run build) && cpy --flat src/docs/landing/ ./src/vitepress/.vitepress/dist/landing", "docs:dev": 'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev" "tsx scripts/docs.cli.mts --watch --vitepress"', "docs:dev:docker": 'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev:docker" "tsx scripts/docs.cli.mts --watch --vitepress"', "docs:serve": "pnpm docs:build:vitepress && vitepress serve src/vitepress", "docs:spellcheck": 'cspell "src/docs/**/*.md"', "docs:release-version": "tsx scripts/update-release-version.mts", "docs:verify-version": "tsx scripts/update-release-version.mts --verify", "types:build-config": "tsx scripts/create-types-from-json-schema.mts", "types:verify-config": "tsx scripts/create-types-from-json-schema.mts --verify", checkCircle: "npx madge --circular ./src", prepublishOnly: "pnpm docs:verify-version" }, repository: { type: "git", url: "https://github.com/mermaid-js/mermaid" }, author: "Knut Sveidqvist", license: "MIT", standard: { ignore: [ "**/parser/*.js", "dist/**/*.js", "cypress/**/*.js" ], globals: [ "page" ] }, dependencies: { "@braintree/sanitize-url": "^7.1.1", "@iconify/utils": "^3.0.1", "@mermaid-js/parser": "workspace:^", "@types/d3": "^7.4.3", cytoscape: "^3.29.3", "cytoscape-cose-bilkent": "^4.1.0", "cytoscape-fcose": "^2.2.0", d3: "^7.9.0", "d3-sankey": "^0.12.3", "dagre-d3-es": "7.0.11", dayjs: "^1.11.18", dompurify: "^3.2.5", katex: "^0.16.22", khroma: "^2.1.0", "lodash-es": "^4.17.21", marked: "^16.2.1", roughjs: "^4.6.6", stylis: "^4.3.6", "ts-dedent": "^2.2.0", uuid: "^11.1.0" }, devDependencies: { "@adobe/jsonschema2md": "^8.0.5", "@iconify/types": "^2.0.0", "@types/cytoscape": "^3.21.9", "@types/cytoscape-fcose": "^2.2.4", "@types/d3-sankey": "^0.12.4", "@types/d3-scale": "^4.0.9", "@types/d3-scale-chromatic": "^3.1.0", "@types/d3-selection": "^3.0.11", "@types/d3-shape": "^3.1.7", "@types/jsdom": "^21.1.7", "@types/katex": "^0.16.7", "@types/lodash-es": "^4.17.12", "@types/micromatch": "^4.0.9", "@types/stylis": "^4.2.7", "@types/uuid": "^10.0.0", ajv: "^8.17.1", canvas: "^3.1.2", chokidar: "3.6.0", concurrently: "^9.1.2", "csstree-validator": "^4.0.1", globby: "^14.1.0", jison: "^0.4.18", "js-base64": "^3.7.8", jsdom: "^26.1.0", "json-schema-to-typescript": "^15.0.4", micromatch: "^4.0.8", "path-browserify": "^1.0.1", prettier: "^3.5.3", remark: "^15.0.1", "remark-frontmatter": "^5.0.0", "remark-gfm": "^4.0.1", rimraf: "^6.0.1", "start-server-and-test": "^2.0.13", "type-fest": "^4.35.0", typedoc: "^0.28.12", "typedoc-plugin-markdown": "^4.8.1", typescript: "~5.7.3", "unist-util-flatmap": "^1.0.0", "unist-util-visit": "^5.0.0", vitepress: "^1.6.4", "vitepress-plugin-search": "1.0.4-alpha.22" }, files: [ "dist/", "README.md" ], publishConfig: { access: "public" } }; } }); // src/diagrams/info/infoDb.ts var DEFAULT_INFO_DB, getVersion, db2; var init_infoDb = __esm({ "src/diagrams/info/infoDb.ts"() { "use strict"; init_package(); DEFAULT_INFO_DB = { version: package_default.version + (true ? "" : "-tiny") }; getVersion = /* @__PURE__ */ __name(() => DEFAULT_INFO_DB.version, "getVersion"); db2 = { getVersion }; } }); // src/rendering-util/selectSvgElement.ts var selectSvgElement; var init_selectSvgElement = __esm({ "src/rendering-util/selectSvgElement.ts"() { "use strict"; init_src32(); init_diagramAPI(); selectSvgElement = /* @__PURE__ */ __name((id30) => { const { securityLevel } = getConfig2(); let root3 = select_default2("body"); if (securityLevel === "sandbox") { const sandboxElement = select_default2(`#i${id30}`); const doc = sandboxElement.node()?.contentDocument ?? document; root3 = select_default2(doc.body); } const svg2 = root3.select(`#${id30}`); return svg2; }, "selectSvgElement"); } }); // src/diagrams/info/infoRenderer.ts var draw6, renderer3; var init_infoRenderer = __esm({ "src/diagrams/info/infoRenderer.ts"() { "use strict"; init_logger(); init_selectSvgElement(); init_setupGraphViewbox(); draw6 = /* @__PURE__ */ __name((text4, id30, version3) => { log.debug("rendering info diagram\n" + text4); const svg2 = selectSvgElement(id30); configureSvgSize(svg2, 100, 400, true); const group2 = svg2.append("g"); group2.append("text").attr("x", 100).attr("y", 40).attr("class", "version").attr("font-size", 32).style("text-anchor", "middle").text(`v${version3}`); }, "draw"); renderer3 = { draw: draw6 }; } }); // src/diagrams/info/infoDiagram.ts var infoDiagram_exports = {}; __export(infoDiagram_exports, { diagram: () => diagram6 }); var diagram6; var init_infoDiagram = __esm({ "src/diagrams/info/infoDiagram.ts"() { "use strict"; init_infoParser(); init_infoDb(); init_infoRenderer(); diagram6 = { parser: parser6, db: db2, renderer: renderer3 }; } }); // src/diagrams/pie/pieDb.ts var DEFAULT_PIE_CONFIG, DEFAULT_PIE_DB, sections2, showData, config2, getConfig4, clear10, addSection2, getSections2, setShowData, getShowData, db3; var init_pieDb = __esm({ "src/diagrams/pie/pieDb.ts"() { "use strict"; init_logger(); init_commonDb(); init_defaultConfig(); DEFAULT_PIE_CONFIG = defaultConfig_default.pie; DEFAULT_PIE_DB = { sections: /* @__PURE__ */ new Map(), showData: false, config: DEFAULT_PIE_CONFIG }; sections2 = DEFAULT_PIE_DB.sections; showData = DEFAULT_PIE_DB.showData; config2 = structuredClone(DEFAULT_PIE_CONFIG); getConfig4 = /* @__PURE__ */ __name(() => structuredClone(config2), "getConfig"); clear10 = /* @__PURE__ */ __name(() => { sections2 = /* @__PURE__ */ new Map(); showData = DEFAULT_PIE_DB.showData; clear(); }, "clear"); addSection2 = /* @__PURE__ */ __name(({ label, value: value2 }) => { if (value2 < 0) { throw new Error( `"${label}" has invalid value: ${value2}. Negative values are not allowed in pie charts. All slice values must be >= 0.` ); } if (!sections2.has(label)) { sections2.set(label, value2); log.debug(`added new section: ${label}, with value: ${value2}`); } }, "addSection"); getSections2 = /* @__PURE__ */ __name(() => sections2, "getSections"); setShowData = /* @__PURE__ */ __name((toggle) => { showData = toggle; }, "setShowData"); getShowData = /* @__PURE__ */ __name(() => showData, "getShowData"); db3 = { getConfig: getConfig4, clear: clear10, setDiagramTitle, getDiagramTitle, setAccTitle, getAccTitle, setAccDescription, getAccDescription, addSection: addSection2, getSections: getSections2, setShowData, getShowData }; } }); // src/diagrams/pie/pieParser.ts var populateDb, parser7; var init_pieParser = __esm({ "src/diagrams/pie/pieParser.ts"() { "use strict"; init_mermaid_parser_core(); init_logger(); init_populateCommonDb(); init_pieDb(); populateDb = /* @__PURE__ */ __name((ast, db7) => { populateCommonDb(ast, db7); db7.setShowData(ast.showData); ast.sections.map(db7.addSection); }, "populateDb"); parser7 = { parse: /* @__PURE__ */ __name(async (input) => { const ast = await parse3("pie", input); log.debug(ast); populateDb(ast, db3); }, "parse") }; } }); // src/diagrams/pie/pieStyles.ts var getStyles7, pieStyles_default; var init_pieStyles = __esm({ "src/diagrams/pie/pieStyles.ts"() { "use strict"; getStyles7 = /* @__PURE__ */ __name((options2) => ` .pieCircle{ stroke: ${options2.pieStrokeColor}; stroke-width : ${options2.pieStrokeWidth}; opacity : ${options2.pieOpacity}; } .pieOuterCircle{ stroke: ${options2.pieOuterStrokeColor}; stroke-width: ${options2.pieOuterStrokeWidth}; fill: none; } .pieTitleText { text-anchor: middle; font-size: ${options2.pieTitleTextSize}; fill: ${options2.pieTitleTextColor}; font-family: ${options2.fontFamily}; } .slice { font-family: ${options2.fontFamily}; fill: ${options2.pieSectionTextColor}; font-size:${options2.pieSectionTextSize}; // fill: white; } .legend text { fill: ${options2.pieLegendTextColor}; font-family: ${options2.fontFamily}; font-size: ${options2.pieLegendTextSize}; } `, "getStyles"); pieStyles_default = getStyles7; } }); // src/diagrams/pie/pieRenderer.ts var createPieArcs, draw7, renderer4; var init_pieRenderer = __esm({ "src/diagrams/pie/pieRenderer.ts"() { "use strict"; init_src32(); init_diagramAPI(); init_logger(); init_selectSvgElement(); init_setupGraphViewbox(); init_utils2(); createPieArcs = /* @__PURE__ */ __name((sections6) => { const sum2 = [...sections6.values()].reduce((acc, val) => acc + val, 0); const pieData = [...sections6.entries()].map(([label, value2]) => ({ label, value: value2 })).filter((d3) => d3.value / sum2 * 100 >= 1).sort((a2, b3) => b3.value - a2.value); const pie2 = pie_default().value((d3) => d3.value); return pie2(pieData); }, "createPieArcs"); draw7 = /* @__PURE__ */ __name((text4, id30, _version, diagObj) => { log.debug("rendering pie chart\n" + text4); const db7 = diagObj.db; const globalConfig = getConfig2(); const pieConfig = cleanAndMerge(db7.getConfig(), globalConfig.pie); const MARGIN = 40; const LEGEND_RECT_SIZE = 18; const LEGEND_SPACING = 4; const height2 = 450; const pieWidth = height2; const svg2 = selectSvgElement(id30); const group2 = svg2.append("g"); group2.attr("transform", "translate(" + pieWidth / 2 + "," + height2 / 2 + ")"); const { themeVariables } = globalConfig; let [outerStrokeWidth] = parseFontSize(themeVariables.pieOuterStrokeWidth); outerStrokeWidth ??= 2; const textPosition = pieConfig.textPosition; const radius2 = Math.min(pieWidth, height2) / 2 - MARGIN; const arcGenerator = arc_default().innerRadius(0).outerRadius(radius2); const labelArcGenerator = arc_default().innerRadius(radius2 * textPosition).outerRadius(radius2 * textPosition); group2.append("circle").attr("cx", 0).attr("cy", 0).attr("r", radius2 + outerStrokeWidth / 2).attr("class", "pieOuterCircle"); const sections6 = db7.getSections(); const arcs = createPieArcs(sections6); const myGeneratedColors = [ themeVariables.pie1, themeVariables.pie2, themeVariables.pie3, themeVariables.pie4, themeVariables.pie5, themeVariables.pie6, themeVariables.pie7, themeVariables.pie8, themeVariables.pie9, themeVariables.pie10, themeVariables.pie11, themeVariables.pie12 ]; let sum2 = 0; sections6.forEach((section) => { sum2 += section; }); const filteredArcs = arcs.filter((datum2) => (datum2.data.value / sum2 * 100).toFixed(0) !== "0"); const color2 = ordinal(myGeneratedColors); group2.selectAll("mySlices").data(filteredArcs).enter().append("path").attr("d", arcGenerator).attr("fill", (datum2) => { return color2(datum2.data.label); }).attr("class", "pieCircle"); group2.selectAll("mySlices").data(filteredArcs).enter().append("text").text((datum2) => { return (datum2.data.value / sum2 * 100).toFixed(0) + "%"; }).attr("transform", (datum2) => { return "translate(" + labelArcGenerator.centroid(datum2) + ")"; }).style("text-anchor", "middle").attr("class", "slice"); group2.append("text").text(db7.getDiagramTitle()).attr("x", 0).attr("y", -(height2 - 50) / 2).attr("class", "pieTitleText"); const allSectionData = [...sections6.entries()].map(([label, value2]) => ({ label, value: value2 })); const legend = group2.selectAll(".legend").data(allSectionData).enter().append("g").attr("class", "legend").attr("transform", (_datum, index) => { const height3 = LEGEND_RECT_SIZE + LEGEND_SPACING; const offset = height3 * allSectionData.length / 2; const horizontal = 12 * LEGEND_RECT_SIZE; const vertical = index * height3 - offset; return "translate(" + horizontal + "," + vertical + ")"; }); legend.append("rect").attr("width", LEGEND_RECT_SIZE).attr("height", LEGEND_RECT_SIZE).style("fill", (d3) => color2(d3.label)).style("stroke", (d3) => color2(d3.label)); legend.append("text").attr("x", LEGEND_RECT_SIZE + LEGEND_SPACING).attr("y", LEGEND_RECT_SIZE - LEGEND_SPACING).text((d3) => { if (db7.getShowData()) { return `${d3.label} [${d3.value}]`; } return d3.label; }); const longestTextWidth = Math.max( ...legend.selectAll("text").nodes().map((node2) => node2?.getBoundingClientRect().width ?? 0) ); const totalWidth = pieWidth + MARGIN + LEGEND_RECT_SIZE + LEGEND_SPACING + longestTextWidth; svg2.attr("viewBox", `0 0 ${totalWidth} ${height2}`); configureSvgSize(svg2, height2, totalWidth, pieConfig.useMaxWidth); }, "draw"); renderer4 = { draw: draw7 }; } }); // src/diagrams/pie/pieDiagram.ts var pieDiagram_exports = {}; __export(pieDiagram_exports, { diagram: () => diagram7 }); var diagram7; var init_pieDiagram = __esm({ "src/diagrams/pie/pieDiagram.ts"() { "use strict"; init_pieParser(); init_pieDb(); init_pieStyles(); init_pieRenderer(); diagram7 = { parser: parser7, db: db3, renderer: renderer4, styles: pieStyles_default }; } }); // src/diagrams/quadrant-chart/parser/quadrant.jison var parser8, quadrant_default; var init_quadrant = __esm({ "src/diagrams/quadrant-chart/parser/quadrant.jison"() { "use strict"; parser8 = (function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) { for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ; return o3; }, "o"), $V0 = [1, 3], $V1 = [1, 4], $V2 = [1, 5], $V3 = [1, 6], $V4 = [1, 7], $V5 = [1, 4, 5, 10, 12, 13, 14, 18, 25, 35, 37, 39, 41, 42, 48, 50, 51, 52, 53, 54, 55, 56, 57, 60, 61, 63, 64, 65, 66, 67], $V6 = [1, 4, 5, 10, 12, 13, 14, 18, 25, 28, 35, 37, 39, 41, 42, 48, 50, 51, 52, 53, 54, 55, 56, 57, 60, 61, 63, 64, 65, 66, 67], $V7 = [55, 56, 57], $V8 = [2, 36], $V9 = [1, 37], $Va = [1, 36], $Vb = [1, 38], $Vc = [1, 35], $Vd = [1, 43], $Ve = [1, 41], $Vf = [1, 14], $Vg = [1, 23], $Vh = [1, 18], $Vi = [1, 19], $Vj = [1, 20], $Vk = [1, 21], $Vl = [1, 22], $Vm = [1, 24], $Vn = [1, 25], $Vo = [1, 26], $Vp = [1, 27], $Vq = [1, 28], $Vr = [1, 29], $Vs = [1, 32], $Vt = [1, 33], $Vu = [1, 34], $Vv = [1, 39], $Vw = [1, 40], $Vx = [1, 42], $Vy = [1, 44], $Vz = [1, 62], $VA = [1, 61], $VB = [4, 5, 8, 10, 12, 13, 14, 18, 44, 47, 49, 55, 56, 57, 63, 64, 65, 66, 67], $VC = [1, 65], $VD = [1, 66], $VE = [1, 67], $VF = [1, 68], $VG = [1, 69], $VH = [1, 70], $VI = [1, 71], $VJ = [1, 72], $VK = [1, 73], $VL = [1, 74], $VM = [1, 75], $VN = [1, 76], $VO = [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18], $VP = [1, 90], $VQ = [1, 91], $VR = [1, 92], $VS = [1, 99], $VT = [1, 93], $VU = [1, 96], $VV = [1, 94], $VW = [1, 95], $VX = [1, 97], $VY = [1, 98], $VZ = [1, 102], $V_ = [10, 55, 56, 57], $V$ = [4, 5, 6, 8, 10, 11, 13, 17, 18, 19, 20, 55, 56, 57]; var parser24 = { trace: /* @__PURE__ */ __name(function trace() { }, "trace"), yy: {}, symbols_: { "error": 2, "idStringToken": 3, "ALPHA": 4, "NUM": 5, "NODE_STRING": 6, "DOWN": 7, "MINUS": 8, "DEFAULT": 9, "COMMA": 10, "COLON": 11, "AMP": 12, "BRKT": 13, "MULT": 14, "UNICODE_TEXT": 15, "styleComponent": 16, "UNIT": 17, "SPACE": 18, "STYLE": 19, "PCT": 20, "idString": 21, "style": 22, "stylesOpt": 23, "classDefStatement": 24, "CLASSDEF": 25, "start": 26, "eol": 27, "QUADRANT": 28, "document": 29, "line": 30, "statement": 31, "axisDetails": 32, "quadrantDetails": 33, "points": 34, "title": 35, "title_value": 36, "acc_title": 37, "acc_title_value": 38, "acc_descr": 39, "acc_descr_value": 40, "acc_descr_multiline_value": 41, "section": 42, "text": 43, "point_start": 44, "point_x": 45, "point_y": 46, "class_name": 47, "X-AXIS": 48, "AXIS-TEXT-DELIMITER": 49, "Y-AXIS": 50, "QUADRANT_1": 51, "QUADRANT_2": 52, "QUADRANT_3": 53, "QUADRANT_4": 54, "NEWLINE": 55, "SEMI": 56, "EOF": 57, "alphaNumToken": 58, "textNoTagsToken": 59, "STR": 60, "MD_STR": 61, "alphaNum": 62, "PUNCTUATION": 63, "PLUS": 64, "EQUALS": 65, "DOT": 66, "UNDERSCORE": 67, "$accept": 0, "$end": 1 }, terminals_: { 2: "error", 4: "ALPHA", 5: "NUM", 6: "NODE_STRING", 7: "DOWN", 8: "MINUS", 9: "DEFAULT", 10: "COMMA", 11: "COLON", 12: "AMP", 13: "BRKT", 14: "MULT", 15: "UNICODE_TEXT", 17: "UNIT", 18: "SPACE", 19: "STYLE", 20: "PCT", 25: "CLASSDEF", 28: "QUADRANT", 35: "title", 36: "title_value", 37: "acc_title", 38: "acc_title_value", 39: "acc_descr", 40: "acc_descr_value", 41: "acc_descr_multiline_value", 42: "section", 44: "point_start", 45: "point_x", 46: "point_y", 47: "class_name", 48: "X-AXIS", 49: "AXIS-TEXT-DELIMITER", 50: "Y-AXIS", 51: "QUADRANT_1", 52: "QUADRANT_2", 53: "QUADRANT_3", 54: "QUADRANT_4", 55: "NEWLINE", 56: "SEMI", 57: "EOF", 60: "STR", 61: "MD_STR", 63: "PUNCTUATION", 64: "PLUS", 65: "EQUALS", 66: "DOT", 67: "UNDERSCORE" }, productions_: [0, [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [16, 1], [16, 1], [16, 1], [16, 1], [16, 1], [16, 1], [16, 1], [16, 1], [16, 1], [16, 1], [21, 1], [21, 2], [22, 1], [22, 2], [23, 1], [23, 3], [24, 5], [26, 2], [26, 2], [26, 2], [29, 0], [29, 2], [30, 2], [31, 0], [31, 1], [31, 2], [31, 1], [31, 1], [31, 1], [31, 2], [31, 2], [31, 2], [31, 1], [31, 1], [34, 4], [34, 5], [34, 5], [34, 6], [32, 4], [32, 3], [32, 2], [32, 4], [32, 3], [32, 2], [33, 2], [33, 2], [33, 2], [33, 2], [27, 1], [27, 1], [27, 1], [43, 1], [43, 2], [43, 1], [43, 1], [62, 1], [62, 2], [58, 1], [58, 1], [58, 1], [58, 1], [58, 1], [58, 1], [58, 1], [58, 1], [58, 1], [58, 1], [58, 1], [59, 1], [59, 1], [59, 1]], performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { var $0 = $$.length - 1; switch (yystate) { case 23: this.$ = $$[$0]; break; case 24: this.$ = $$[$0 - 1] + "" + $$[$0]; break; case 26: this.$ = $$[$0 - 1] + $$[$0]; break; case 27: this.$ = [$$[$0].trim()]; break; case 28: $$[$0 - 2].push($$[$0].trim()); this.$ = $$[$0 - 2]; break; case 29: this.$ = $$[$0 - 4]; yy.addClass($$[$0 - 2], $$[$0]); break; case 37: this.$ = []; break; case 42: this.$ = $$[$0].trim(); yy.setDiagramTitle(this.$); break; case 43: this.$ = $$[$0].trim(); yy.setAccTitle(this.$); break; case 44: case 45: this.$ = $$[$0].trim(); yy.setAccDescription(this.$); break; case 46: yy.addSection($$[$0].substr(8)); this.$ = $$[$0].substr(8); break; case 47: yy.addPoint($$[$0 - 3], "", $$[$0 - 1], $$[$0], []); break; case 48: yy.addPoint($$[$0 - 4], $$[$0 - 3], $$[$0 - 1], $$[$0], []); break; case 49: yy.addPoint($$[$0 - 4], "", $$[$0 - 2], $$[$0 - 1], $$[$0]); break; case 50: yy.addPoint($$[$0 - 5], $$[$0 - 4], $$[$0 - 2], $$[$0 - 1], $$[$0]); break; case 51: yy.setXAxisLeftText($$[$0 - 2]); yy.setXAxisRightText($$[$0]); break; case 52: $$[$0 - 1].text += " \u27F6 "; yy.setXAxisLeftText($$[$0 - 1]); break; case 53: yy.setXAxisLeftText($$[$0]); break; case 54: yy.setYAxisBottomText($$[$0 - 2]); yy.setYAxisTopText($$[$0]); break; case 55: $$[$0 - 1].text += " \u27F6 "; yy.setYAxisBottomText($$[$0 - 1]); break; case 56: yy.setYAxisBottomText($$[$0]); break; case 57: yy.setQuadrant1Text($$[$0]); break; case 58: yy.setQuadrant2Text($$[$0]); break; case 59: yy.setQuadrant3Text($$[$0]); break; case 60: yy.setQuadrant4Text($$[$0]); break; case 64: this.$ = { text: $$[$0], type: "text" }; break; case 65: this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; break; case 66: this.$ = { text: $$[$0], type: "text" }; break; case 67: this.$ = { text: $$[$0], type: "markdown" }; break; case 68: this.$ = $$[$0]; break; case 69: this.$ = $$[$0 - 1] + "" + $$[$0]; break; } }, "anonymous"), table: [{ 18: $V0, 26: 1, 27: 2, 28: $V1, 55: $V2, 56: $V3, 57: $V4 }, { 1: [3] }, { 18: $V0, 26: 8, 27: 2, 28: $V1, 55: $V2, 56: $V3, 57: $V4 }, { 18: $V0, 26: 9, 27: 2, 28: $V1, 55: $V2, 56: $V3, 57: $V4 }, o2($V5, [2, 33], { 29: 10 }), o2($V6, [2, 61]), o2($V6, [2, 62]), o2($V6, [2, 63]), { 1: [2, 30] }, { 1: [2, 31] }, o2($V7, $V8, { 30: 11, 31: 12, 24: 13, 32: 15, 33: 16, 34: 17, 43: 30, 58: 31, 1: [2, 32], 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 18: $Vf, 25: $Vg, 35: $Vh, 37: $Vi, 39: $Vj, 41: $Vk, 42: $Vl, 48: $Vm, 50: $Vn, 51: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 60: $Vs, 61: $Vt, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), o2($V5, [2, 34]), { 27: 45, 55: $V2, 56: $V3, 57: $V4 }, o2($V7, [2, 37]), o2($V7, $V8, { 24: 13, 32: 15, 33: 16, 34: 17, 43: 30, 58: 31, 31: 46, 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 18: $Vf, 25: $Vg, 35: $Vh, 37: $Vi, 39: $Vj, 41: $Vk, 42: $Vl, 48: $Vm, 50: $Vn, 51: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 60: $Vs, 61: $Vt, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), o2($V7, [2, 39]), o2($V7, [2, 40]), o2($V7, [2, 41]), { 36: [1, 47] }, { 38: [1, 48] }, { 40: [1, 49] }, o2($V7, [2, 45]), o2($V7, [2, 46]), { 18: [1, 50] }, { 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 43: 51, 58: 31, 60: $Vs, 61: $Vt, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }, { 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 43: 52, 58: 31, 60: $Vs, 61: $Vt, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }, { 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 43: 53, 58: 31, 60: $Vs, 61: $Vt, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }, { 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 43: 54, 58: 31, 60: $Vs, 61: $Vt, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }, { 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 43: 55, 58: 31, 60: $Vs, 61: $Vt, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }, { 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 43: 56, 58: 31, 60: $Vs, 61: $Vt, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }, { 4: $V9, 5: $Va, 8: $Vz, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 18: $VA, 44: [1, 57], 47: [1, 58], 58: 60, 59: 59, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }, o2($VB, [2, 64]), o2($VB, [2, 66]), o2($VB, [2, 67]), o2($VB, [2, 70]), o2($VB, [2, 71]), o2($VB, [2, 72]), o2($VB, [2, 73]), o2($VB, [2, 74]), o2($VB, [2, 75]), o2($VB, [2, 76]), o2($VB, [2, 77]), o2($VB, [2, 78]), o2($VB, [2, 79]), o2($VB, [2, 80]), o2($V5, [2, 35]), o2($V7, [2, 38]), o2($V7, [2, 42]), o2($V7, [2, 43]), o2($V7, [2, 44]), { 3: 64, 4: $VC, 5: $VD, 6: $VE, 7: $VF, 8: $VG, 9: $VH, 10: $VI, 11: $VJ, 12: $VK, 13: $VL, 14: $VM, 15: $VN, 21: 63 }, o2($V7, [2, 53], { 59: 59, 58: 60, 4: $V9, 5: $Va, 8: $Vz, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 18: $VA, 49: [1, 77], 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), o2($V7, [2, 56], { 59: 59, 58: 60, 4: $V9, 5: $Va, 8: $Vz, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 18: $VA, 49: [1, 78], 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), o2($V7, [2, 57], { 59: 59, 58: 60, 4: $V9, 5: $Va, 8: $Vz, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 18: $VA, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), o2($V7, [2, 58], { 59: 59, 58: 60, 4: $V9, 5: $Va, 8: $Vz, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 18: $VA, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), o2($V7, [2, 59], { 59: 59, 58: 60, 4: $V9, 5: $Va, 8: $Vz, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 18: $VA, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), o2($V7, [2, 60], { 59: 59, 58: 60, 4: $V9, 5: $Va, 8: $Vz, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 18: $VA, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), { 45: [1, 79] }, { 44: [1, 80] }, o2($VB, [2, 65]), o2($VB, [2, 81]), o2($VB, [2, 82]), o2($VB, [2, 83]), { 3: 82, 4: $VC, 5: $VD, 6: $VE, 7: $VF, 8: $VG, 9: $VH, 10: $VI, 11: $VJ, 12: $VK, 13: $VL, 14: $VM, 15: $VN, 18: [1, 81] }, o2($VO, [2, 23]), o2($VO, [2, 1]), o2($VO, [2, 2]), o2($VO, [2, 3]), o2($VO, [2, 4]), o2($VO, [2, 5]), o2($VO, [2, 6]), o2($VO, [2, 7]), o2($VO, [2, 8]), o2($VO, [2, 9]), o2($VO, [2, 10]), o2($VO, [2, 11]), o2($VO, [2, 12]), o2($V7, [2, 52], { 58: 31, 43: 83, 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 60: $Vs, 61: $Vt, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), o2($V7, [2, 55], { 58: 31, 43: 84, 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 60: $Vs, 61: $Vt, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), { 46: [1, 85] }, { 45: [1, 86] }, { 4: $VP, 5: $VQ, 6: $VR, 8: $VS, 11: $VT, 13: $VU, 16: 89, 17: $VV, 18: $VW, 19: $VX, 20: $VY, 22: 88, 23: 87 }, o2($VO, [2, 24]), o2($V7, [2, 51], { 59: 59, 58: 60, 4: $V9, 5: $Va, 8: $Vz, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 18: $VA, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), o2($V7, [2, 54], { 59: 59, 58: 60, 4: $V9, 5: $Va, 8: $Vz, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 18: $VA, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), o2($V7, [2, 47], { 22: 88, 16: 89, 23: 100, 4: $VP, 5: $VQ, 6: $VR, 8: $VS, 11: $VT, 13: $VU, 17: $VV, 18: $VW, 19: $VX, 20: $VY }), { 46: [1, 101] }, o2($V7, [2, 29], { 10: $VZ }), o2($V_, [2, 27], { 16: 103, 4: $VP, 5: $VQ, 6: $VR, 8: $VS, 11: $VT, 13: $VU, 17: $VV, 18: $VW, 19: $VX, 20: $VY }), o2($V$, [2, 25]), o2($V$, [2, 13]), o2($V$, [2, 14]), o2($V$, [2, 15]), o2($V$, [2, 16]), o2($V$, [2, 17]), o2($V$, [2, 18]), o2($V$, [2, 19]), o2($V$, [2, 20]), o2($V$, [2, 21]), o2($V$, [2, 22]), o2($V7, [2, 49], { 10: $VZ }), o2($V7, [2, 48], { 22: 88, 16: 89, 23: 104, 4: $VP, 5: $VQ, 6: $VR, 8: $VS, 11: $VT, 13: $VU, 17: $VV, 18: $VW, 19: $VX, 20: $VY }), { 4: $VP, 5: $VQ, 6: $VR, 8: $VS, 11: $VT, 13: $VU, 16: 89, 17: $VV, 18: $VW, 19: $VX, 20: $VY, 22: 105 }, o2($V$, [2, 26]), o2($V7, [2, 50], { 10: $VZ }), o2($V_, [2, 28], { 16: 103, 4: $VP, 5: $VQ, 6: $VR, 8: $VS, 11: $VT, 13: $VU, 17: $VV, 18: $VW, 19: $VX, 20: $VY })], defaultActions: { 8: [2, 30], 9: [2, 31] }, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (hash.recoverable) { this.trace(str2); } else { var error3 = new Error(str2); error3.hash = hash; throw error3; } }, "parseError"), parse: /* @__PURE__ */ __name(function parse7(input) { var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1; var args = lstack.slice.call(arguments, 1); var lexer2 = Object.create(this.lexer); var sharedState = { yy: {} }; for (var k2 in this.yy) { if (Object.prototype.hasOwnProperty.call(this.yy, k2)) { sharedState.yy[k2] = this.yy[k2]; } } lexer2.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer2; sharedState.yy.parser = this; if (typeof lexer2.yylloc == "undefined") { lexer2.yylloc = {}; } var yyloc = lexer2.yylloc; lstack.push(yyloc); var ranges = lexer2.options && lexer2.options.ranges; if (typeof sharedState.yy.parseError === "function") { this.parseError = sharedState.yy.parseError; } else { this.parseError = Object.getPrototypeOf(this).parseError; } function popStack(n2) { stack.length = stack.length - 2 * n2; vstack.length = vstack.length - n2; lstack.length = lstack.length - n2; } __name(popStack, "popStack"); function lex() { var token2; token2 = tstack.pop() || lexer2.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex, "lex"); var symbol, preErrorSymbol, state3, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state3 = stack[stack.length - 1]; if (this.defaultActions[state3]) { action = this.defaultActions[state3]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex(); } action = table[state3] && table[state3][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state3]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer2.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; } else { errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); } this.parseError(errStr, { text: lexer2.match, token: this.terminals_[symbol] || symbol, line: lexer2.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state3 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer2.yytext); lstack.push(lexer2.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer2.yyleng; yytext = lexer2.yytext; yylineno = lexer2.yylineno; yyloc = lexer2.yylloc; if (recovering > 0) { recovering--; } } else { symbol = preErrorSymbol; preErrorSymbol = null; } break; case 2: len = this.productions_[action[1]][1]; yyval.$ = vstack[vstack.length - len]; yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; if (ranges) { yyval._$.range = [ lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1] ]; } r2 = this.performAction.apply(yyval, [ yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack ].concat(args)); if (typeof r2 !== "undefined") { return r2; } if (len) { stack = stack.slice(0, -1 * len * 2); vstack = vstack.slice(0, -1 * len); lstack = lstack.slice(0, -1 * len); } stack.push(this.productions_[action[1]][0]); vstack.push(yyval.$); lstack.push(yyval._$); newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]]; stack.push(newState2); break; case 3: return true; } } return true; }, "parse") }; var lexer = /* @__PURE__ */ (function() { var lexer2 = { EOF: 1, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (this.yy.parser) { this.yy.parser.parseError(str2, hash); } else { throw new Error(str2); } }, "parseError"), // resets the lexer, sets new input setInput: /* @__PURE__ */ __name(function(input, yy) { this.yy = yy || this.yy || {}; this._input = input; this._more = this._backtrack = this.done = false; 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 }; if (this.options.ranges) { this.yylloc.range = [0, 0]; } this.offset = 0; return this; }, "setInput"), // consumes and returns one char from the input input: /* @__PURE__ */ __name(function() { var ch = this._input[0]; this.yytext += ch; this.yyleng++; this.offset++; this.match += ch; this.matched += ch; var lines = ch.match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno++; this.yylloc.last_line++; } else { this.yylloc.last_column++; } if (this.options.ranges) { this.yylloc.range[1]++; } this._input = this._input.slice(1); return ch; }, "input"), // unshifts one char (or a string) into the input unput: /* @__PURE__ */ __name(function(ch) { var len = ch.length; var lines = ch.split(/(?:\r\n?|\n)/g); this._input = ch + this._input; this.yytext = this.yytext.substr(0, this.yytext.length - len); this.offset -= len; var oldLines = 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); if (lines.length - 1) { this.yylineno -= lines.length - 1; } var r2 = this.yylloc.range; this.yylloc = { first_line: this.yylloc.first_line, last_line: this.yylineno + 1, first_column: this.yylloc.first_column, last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len }; if (this.options.ranges) { this.yylloc.range = [r2[0], r2[0] + this.yyleng - len]; } this.yyleng = this.yytext.length; return this; }, "unput"), // When called from action, caches matched text and appends it on next action more: /* @__PURE__ */ __name(function() { this._more = true; return this; }, "more"), // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. reject: /* @__PURE__ */ __name(function() { if (this.options.backtrack_lexer) { this._backtrack = true; } 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"), // retain first n characters of the match less: /* @__PURE__ */ __name(function(n2) { this.unput(this.match.slice(n2)); }, "less"), // displays already matched input, i.e. for error messages pastInput: /* @__PURE__ */ __name(function() { var past = this.matched.substr(0, this.matched.length - this.match.length); return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); }, "pastInput"), // displays upcoming input, i.e. for error messages upcomingInput: /* @__PURE__ */ __name(function() { var next3 = this.match; if (next3.length < 20) { next3 += this._input.substr(0, 20 - next3.length); } return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, ""); }, "upcomingInput"), // displays the character position where the lexing error occurred, i.e. for error messages showPosition: /* @__PURE__ */ __name(function() { var pre = this.pastInput(); var c3 = new Array(pre.length + 1).join("-"); return pre + this.upcomingInput() + "\n" + c3 + "^"; }, "showPosition"), // test the lexed token: return FALSE when not a match, otherwise return token test_match: /* @__PURE__ */ __name(function(match2, indexed_rule) { var token2, lines, backup; if (this.options.backtrack_lexer) { backup = { 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 }; if (this.options.ranges) { backup.yylloc.range = this.yylloc.range.slice(0); } } lines = match2[0].match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno += lines.length; } this.yylloc = { first_line: this.yylloc.last_line, last_line: this.yylineno + 1, first_column: this.yylloc.last_column, last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; this.yyleng = this.yytext.length; if (this.options.ranges) { this.yylloc.range = [this.offset, this.offset += this.yyleng]; } this._more = false; this._backtrack = false; this._input = this._input.slice(match2[0].length); this.matched += match2[0]; token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); if (this.done && this._input) { this.done = false; } if (token2) { return token2; } else if (this._backtrack) { for (var k2 in backup) { this[k2] = backup[k2]; } return false; } return false; }, "test_match"), // return next match in input next: /* @__PURE__ */ __name(function() { if (this.done) { return this.EOF; } if (!this._input) { this.done = true; } var token2, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[index]); if (token2 !== false) { return token2; } return false; } if (this._input === "") { return this.EOF; } else { return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { text: "", token: null, line: this.yylineno }); } }, "next"), // return next match that has a token lex: /* @__PURE__ */ __name(function lex() { var r2 = this.next(); if (r2) { return r2; } else { return this.lex(); } }, "lex"), // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) begin: /* @__PURE__ */ __name(function begin(condition) { this.conditionStack.push(condition); }, "begin"), // pop the previously active lexer condition state off the condition stack popState: /* @__PURE__ */ __name(function popState() { var n2 = this.conditionStack.length - 1; if (n2 > 0) { return this.conditionStack.pop(); } else { return this.conditionStack[0]; } }, "popState"), // produce the lexer rule set which is active for the currently active lexer condition state _currentRules: /* @__PURE__ */ __name(function _currentRules() { if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; } else { return this.conditions["INITIAL"].rules; } }, "_currentRules"), // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available topState: /* @__PURE__ */ __name(function topState(n2) { n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0); if (n2 >= 0) { return this.conditionStack[n2]; } else { return "INITIAL"; } }, "topState"), // alias for begin(condition) pushState: /* @__PURE__ */ __name(function pushState(condition) { this.begin(condition); }, "pushState"), // return the number of states currently on the stack stateStackSize: /* @__PURE__ */ __name(function stateStackSize() { return this.conditionStack.length; }, "stateStackSize"), options: { "case-insensitive": true }, performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { var YYSTATE = YY_START; switch ($avoiding_name_collisions) { case 0: break; case 1: break; case 2: return 55; break; case 3: break; case 4: this.begin("title"); return 35; break; case 5: this.popState(); return "title_value"; break; case 6: this.begin("acc_title"); return 37; break; case 7: this.popState(); return "acc_title_value"; break; case 8: this.begin("acc_descr"); return 39; break; case 9: this.popState(); return "acc_descr_value"; break; case 10: this.begin("acc_descr_multiline"); break; case 11: this.popState(); break; case 12: return "acc_descr_multiline_value"; break; case 13: return 48; break; case 14: return 50; break; case 15: return 49; break; case 16: return 51; break; case 17: return 52; break; case 18: return 53; break; case 19: return 54; break; case 20: return 25; break; case 21: this.begin("md_string"); break; case 22: return "MD_STR"; break; case 23: this.popState(); break; case 24: this.begin("string"); break; case 25: this.popState(); break; case 26: return "STR"; break; case 27: this.begin("class_name"); break; case 28: this.popState(); return 47; break; case 29: this.begin("point_start"); return 44; break; case 30: this.begin("point_x"); return 45; break; case 31: this.popState(); break; case 32: this.popState(); this.begin("point_y"); break; case 33: this.popState(); return 46; break; case 34: return 28; break; case 35: return 4; break; case 36: return 11; break; case 37: return 64; break; case 38: return 10; break; case 39: return 65; break; case 40: return 65; break; case 41: return 14; break; case 42: return 13; break; case 43: return 67; break; case 44: return 66; break; case 45: return 12; break; case 46: return 8; break; case 47: return 5; break; case 48: return 18; break; case 49: return 56; break; case 50: return 63; break; case 51: return 57; break; } }, "anonymous"), rules: [/^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n\r]+)/i, /^(?:%%[^\n]*)/i, /^(?:title\b)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?: *x-axis *)/i, /^(?: *y-axis *)/i, /^(?: *--+> *)/i, /^(?: *quadrant-1 *)/i, /^(?: *quadrant-2 *)/i, /^(?: *quadrant-3 *)/i, /^(?: *quadrant-4 *)/i, /^(?:classDef\b)/i, /^(?:["][`])/i, /^(?:[^`"]+)/i, /^(?:[`]["])/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?::::)/i, /^(?:^\w+)/i, /^(?:\s*:\s*\[\s*)/i, /^(?:(1)|(0(.\d+)?))/i, /^(?:\s*\] *)/i, /^(?:\s*,\s*)/i, /^(?:(1)|(0(.\d+)?))/i, /^(?: *quadrantChart *)/i, /^(?:[A-Za-z]+)/i, /^(?::)/i, /^(?:\+)/i, /^(?:,)/i, /^(?:=)/i, /^(?:=)/i, /^(?:\*)/i, /^(?:#)/i, /^(?:[\_])/i, /^(?:\.)/i, /^(?:&)/i, /^(?:-)/i, /^(?:[0-9]+)/i, /^(?:\s)/i, /^(?:;)/i, /^(?:[!"#$%&'*+,-.`?\\_/])/i, /^(?:$)/i], conditions: { "class_name": { "rules": [28], "inclusive": false }, "point_y": { "rules": [33], "inclusive": false }, "point_x": { "rules": [32], "inclusive": false }, "point_start": { "rules": [30, 31], "inclusive": false }, "acc_descr_multiline": { "rules": [11, 12], "inclusive": false }, "acc_descr": { "rules": [9], "inclusive": false }, "acc_title": { "rules": [7], "inclusive": false }, "title": { "rules": [5], "inclusive": false }, "md_string": { "rules": [22, 23], "inclusive": false }, "string": { "rules": [25, 26], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 6, 8, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24, 27, 29, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "inclusive": true } } }; return lexer2; })(); parser24.lexer = lexer; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser24; parser24.Parser = Parser3; return new Parser3(); })(); parser8.parser = parser8; quadrant_default = parser8; } }); // src/diagrams/quadrant-chart/quadrantBuilder.ts var defaultThemeVariables, QuadrantBuilder; var init_quadrantBuilder = __esm({ "src/diagrams/quadrant-chart/quadrantBuilder.ts"() { "use strict"; init_src32(); init_defaultConfig(); init_logger(); init_theme_default(); defaultThemeVariables = getThemeVariables3(); QuadrantBuilder = class { constructor() { this.classes = /* @__PURE__ */ new Map(); this.config = this.getDefaultConfig(); this.themeConfig = this.getDefaultThemeConfig(); this.data = this.getDefaultData(); } static { __name(this, "QuadrantBuilder"); } getDefaultData() { return { titleText: "", quadrant1Text: "", quadrant2Text: "", quadrant3Text: "", quadrant4Text: "", xAxisLeftText: "", xAxisRightText: "", yAxisBottomText: "", yAxisTopText: "", points: [] }; } getDefaultConfig() { return { showXAxis: true, showYAxis: true, showTitle: true, chartHeight: defaultConfig_default.quadrantChart?.chartWidth || 500, chartWidth: defaultConfig_default.quadrantChart?.chartHeight || 500, titlePadding: defaultConfig_default.quadrantChart?.titlePadding || 10, titleFontSize: defaultConfig_default.quadrantChart?.titleFontSize || 20, quadrantPadding: defaultConfig_default.quadrantChart?.quadrantPadding || 5, xAxisLabelPadding: defaultConfig_default.quadrantChart?.xAxisLabelPadding || 5, yAxisLabelPadding: defaultConfig_default.quadrantChart?.yAxisLabelPadding || 5, xAxisLabelFontSize: defaultConfig_default.quadrantChart?.xAxisLabelFontSize || 16, yAxisLabelFontSize: defaultConfig_default.quadrantChart?.yAxisLabelFontSize || 16, quadrantLabelFontSize: defaultConfig_default.quadrantChart?.quadrantLabelFontSize || 16, quadrantTextTopPadding: defaultConfig_default.quadrantChart?.quadrantTextTopPadding || 5, pointTextPadding: defaultConfig_default.quadrantChart?.pointTextPadding || 5, pointLabelFontSize: defaultConfig_default.quadrantChart?.pointLabelFontSize || 12, pointRadius: defaultConfig_default.quadrantChart?.pointRadius || 5, xAxisPosition: defaultConfig_default.quadrantChart?.xAxisPosition || "top", yAxisPosition: defaultConfig_default.quadrantChart?.yAxisPosition || "left", quadrantInternalBorderStrokeWidth: defaultConfig_default.quadrantChart?.quadrantInternalBorderStrokeWidth || 1, quadrantExternalBorderStrokeWidth: defaultConfig_default.quadrantChart?.quadrantExternalBorderStrokeWidth || 2 }; } getDefaultThemeConfig() { return { quadrant1Fill: defaultThemeVariables.quadrant1Fill, quadrant2Fill: defaultThemeVariables.quadrant2Fill, quadrant3Fill: defaultThemeVariables.quadrant3Fill, quadrant4Fill: defaultThemeVariables.quadrant4Fill, quadrant1TextFill: defaultThemeVariables.quadrant1TextFill, quadrant2TextFill: defaultThemeVariables.quadrant2TextFill, quadrant3TextFill: defaultThemeVariables.quadrant3TextFill, quadrant4TextFill: defaultThemeVariables.quadrant4TextFill, quadrantPointFill: defaultThemeVariables.quadrantPointFill, quadrantPointTextFill: defaultThemeVariables.quadrantPointTextFill, quadrantXAxisTextFill: defaultThemeVariables.quadrantXAxisTextFill, quadrantYAxisTextFill: defaultThemeVariables.quadrantYAxisTextFill, quadrantTitleFill: defaultThemeVariables.quadrantTitleFill, quadrantInternalBorderStrokeFill: defaultThemeVariables.quadrantInternalBorderStrokeFill, quadrantExternalBorderStrokeFill: defaultThemeVariables.quadrantExternalBorderStrokeFill }; } clear() { this.config = this.getDefaultConfig(); this.themeConfig = this.getDefaultThemeConfig(); this.data = this.getDefaultData(); this.classes = /* @__PURE__ */ new Map(); log.info("clear called"); } setData(data5) { this.data = { ...this.data, ...data5 }; } addPoints(points) { this.data.points = [...points, ...this.data.points]; } addClass(className, styles4) { this.classes.set(className, styles4); } setConfig(config5) { log.trace("setConfig called with: ", config5); this.config = { ...this.config, ...config5 }; } setThemeConfig(themeConfig) { log.trace("setThemeConfig called with: ", themeConfig); this.themeConfig = { ...this.themeConfig, ...themeConfig }; } calculateSpace(xAxisPosition, showXAxis, showYAxis, showTitle) { const xAxisSpaceCalculation = this.config.xAxisLabelPadding * 2 + this.config.xAxisLabelFontSize; const xAxisSpace = { top: xAxisPosition === "top" && showXAxis ? xAxisSpaceCalculation : 0, bottom: xAxisPosition === "bottom" && showXAxis ? xAxisSpaceCalculation : 0 }; const yAxisSpaceCalculation = this.config.yAxisLabelPadding * 2 + this.config.yAxisLabelFontSize; const yAxisSpace = { left: this.config.yAxisPosition === "left" && showYAxis ? yAxisSpaceCalculation : 0, right: this.config.yAxisPosition === "right" && showYAxis ? yAxisSpaceCalculation : 0 }; const titleSpaceCalculation = this.config.titleFontSize + this.config.titlePadding * 2; const titleSpace = { top: showTitle ? titleSpaceCalculation : 0 }; const quadrantLeft = this.config.quadrantPadding + yAxisSpace.left; const quadrantTop = this.config.quadrantPadding + xAxisSpace.top + titleSpace.top; const quadrantWidth = this.config.chartWidth - this.config.quadrantPadding * 2 - yAxisSpace.left - yAxisSpace.right; const quadrantHeight = this.config.chartHeight - this.config.quadrantPadding * 2 - xAxisSpace.top - xAxisSpace.bottom - titleSpace.top; const quadrantHalfWidth = quadrantWidth / 2; const quadrantHalfHeight = quadrantHeight / 2; const quadrantSpace = { quadrantLeft, quadrantTop, quadrantWidth, quadrantHalfWidth, quadrantHeight, quadrantHalfHeight }; return { xAxisSpace, yAxisSpace, titleSpace, quadrantSpace }; } getAxisLabels(xAxisPosition, showXAxis, showYAxis, spaceData) { const { quadrantSpace, titleSpace } = spaceData; const { quadrantHalfHeight, quadrantHeight, quadrantLeft, quadrantHalfWidth, quadrantTop, quadrantWidth } = quadrantSpace; const drawXAxisLabelsInMiddle = Boolean(this.data.xAxisRightText); const drawYAxisLabelsInMiddle = Boolean(this.data.yAxisTopText); const axisLabels = []; if (this.data.xAxisLeftText && showXAxis) { axisLabels.push({ text: this.data.xAxisLeftText, fill: this.themeConfig.quadrantXAxisTextFill, x: quadrantLeft + (drawXAxisLabelsInMiddle ? quadrantHalfWidth / 2 : 0), y: xAxisPosition === "top" ? this.config.xAxisLabelPadding + titleSpace.top : this.config.xAxisLabelPadding + quadrantTop + quadrantHeight + this.config.quadrantPadding, fontSize: this.config.xAxisLabelFontSize, verticalPos: drawXAxisLabelsInMiddle ? "center" : "left", horizontalPos: "top", rotation: 0 }); } if (this.data.xAxisRightText && showXAxis) { axisLabels.push({ text: this.data.xAxisRightText, fill: this.themeConfig.quadrantXAxisTextFill, x: quadrantLeft + quadrantHalfWidth + (drawXAxisLabelsInMiddle ? quadrantHalfWidth / 2 : 0), y: xAxisPosition === "top" ? this.config.xAxisLabelPadding + titleSpace.top : this.config.xAxisLabelPadding + quadrantTop + quadrantHeight + this.config.quadrantPadding, fontSize: this.config.xAxisLabelFontSize, verticalPos: drawXAxisLabelsInMiddle ? "center" : "left", horizontalPos: "top", rotation: 0 }); } if (this.data.yAxisBottomText && showYAxis) { axisLabels.push({ text: this.data.yAxisBottomText, fill: this.themeConfig.quadrantYAxisTextFill, x: this.config.yAxisPosition === "left" ? this.config.yAxisLabelPadding : this.config.yAxisLabelPadding + quadrantLeft + quadrantWidth + this.config.quadrantPadding, y: quadrantTop + quadrantHeight - (drawYAxisLabelsInMiddle ? quadrantHalfHeight / 2 : 0), fontSize: this.config.yAxisLabelFontSize, verticalPos: drawYAxisLabelsInMiddle ? "center" : "left", horizontalPos: "top", rotation: -90 }); } if (this.data.yAxisTopText && showYAxis) { axisLabels.push({ text: this.data.yAxisTopText, fill: this.themeConfig.quadrantYAxisTextFill, x: this.config.yAxisPosition === "left" ? this.config.yAxisLabelPadding : this.config.yAxisLabelPadding + quadrantLeft + quadrantWidth + this.config.quadrantPadding, y: quadrantTop + quadrantHalfHeight - (drawYAxisLabelsInMiddle ? quadrantHalfHeight / 2 : 0), fontSize: this.config.yAxisLabelFontSize, verticalPos: drawYAxisLabelsInMiddle ? "center" : "left", horizontalPos: "top", rotation: -90 }); } return axisLabels; } getQuadrants(spaceData) { const { quadrantSpace } = spaceData; const { quadrantHalfHeight, quadrantLeft, quadrantHalfWidth, quadrantTop } = quadrantSpace; const quadrants = [ { text: { text: this.data.quadrant1Text, fill: this.themeConfig.quadrant1TextFill, x: 0, y: 0, fontSize: this.config.quadrantLabelFontSize, verticalPos: "center", horizontalPos: "middle", rotation: 0 }, x: quadrantLeft + quadrantHalfWidth, y: quadrantTop, width: quadrantHalfWidth, height: quadrantHalfHeight, fill: this.themeConfig.quadrant1Fill }, { text: { text: this.data.quadrant2Text, fill: this.themeConfig.quadrant2TextFill, x: 0, y: 0, fontSize: this.config.quadrantLabelFontSize, verticalPos: "center", horizontalPos: "middle", rotation: 0 }, x: quadrantLeft, y: quadrantTop, width: quadrantHalfWidth, height: quadrantHalfHeight, fill: this.themeConfig.quadrant2Fill }, { text: { text: this.data.quadrant3Text, fill: this.themeConfig.quadrant3TextFill, x: 0, y: 0, fontSize: this.config.quadrantLabelFontSize, verticalPos: "center", horizontalPos: "middle", rotation: 0 }, x: quadrantLeft, y: quadrantTop + quadrantHalfHeight, width: quadrantHalfWidth, height: quadrantHalfHeight, fill: this.themeConfig.quadrant3Fill }, { text: { text: this.data.quadrant4Text, fill: this.themeConfig.quadrant4TextFill, x: 0, y: 0, fontSize: this.config.quadrantLabelFontSize, verticalPos: "center", horizontalPos: "middle", rotation: 0 }, x: quadrantLeft + quadrantHalfWidth, y: quadrantTop + quadrantHalfHeight, width: quadrantHalfWidth, height: quadrantHalfHeight, fill: this.themeConfig.quadrant4Fill } ]; for (const quadrant of quadrants) { quadrant.text.x = quadrant.x + quadrant.width / 2; if (this.data.points.length === 0) { quadrant.text.y = quadrant.y + quadrant.height / 2; quadrant.text.horizontalPos = "middle"; } else { quadrant.text.y = quadrant.y + this.config.quadrantTextTopPadding; quadrant.text.horizontalPos = "top"; } } return quadrants; } getQuadrantPoints(spaceData) { const { quadrantSpace } = spaceData; const { quadrantHeight, quadrantLeft, quadrantTop, quadrantWidth } = quadrantSpace; const xAxis = linear2().domain([0, 1]).range([quadrantLeft, quadrantWidth + quadrantLeft]); const yAxis = linear2().domain([0, 1]).range([quadrantHeight + quadrantTop, quadrantTop]); const points = this.data.points.map((point8) => { const classStyles = this.classes.get(point8.className); if (classStyles) { point8 = { ...classStyles, ...point8 }; } const props = { x: xAxis(point8.x), y: yAxis(point8.y), fill: point8.color ?? this.themeConfig.quadrantPointFill, radius: point8.radius ?? this.config.pointRadius, text: { text: point8.text, fill: this.themeConfig.quadrantPointTextFill, x: xAxis(point8.x), y: yAxis(point8.y) + this.config.pointTextPadding, verticalPos: "center", horizontalPos: "top", fontSize: this.config.pointLabelFontSize, rotation: 0 }, strokeColor: point8.strokeColor ?? this.themeConfig.quadrantPointFill, strokeWidth: point8.strokeWidth ?? "0px" }; return props; }); return points; } getBorders(spaceData) { const halfExternalBorderWidth = this.config.quadrantExternalBorderStrokeWidth / 2; const { quadrantSpace } = spaceData; const { quadrantHalfHeight, quadrantHeight, quadrantLeft, quadrantHalfWidth, quadrantTop, quadrantWidth } = quadrantSpace; const borderLines = [ // top border { strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill, strokeWidth: this.config.quadrantExternalBorderStrokeWidth, x1: quadrantLeft - halfExternalBorderWidth, y1: quadrantTop, x2: quadrantLeft + quadrantWidth + halfExternalBorderWidth, y2: quadrantTop }, // right border { strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill, strokeWidth: this.config.quadrantExternalBorderStrokeWidth, x1: quadrantLeft + quadrantWidth, y1: quadrantTop + halfExternalBorderWidth, x2: quadrantLeft + quadrantWidth, y2: quadrantTop + quadrantHeight - halfExternalBorderWidth }, // bottom border { strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill, strokeWidth: this.config.quadrantExternalBorderStrokeWidth, x1: quadrantLeft - halfExternalBorderWidth, y1: quadrantTop + quadrantHeight, x2: quadrantLeft + quadrantWidth + halfExternalBorderWidth, y2: quadrantTop + quadrantHeight }, // left border { strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill, strokeWidth: this.config.quadrantExternalBorderStrokeWidth, x1: quadrantLeft, y1: quadrantTop + halfExternalBorderWidth, x2: quadrantLeft, y2: quadrantTop + quadrantHeight - halfExternalBorderWidth }, // vertical inner border { strokeFill: this.themeConfig.quadrantInternalBorderStrokeFill, strokeWidth: this.config.quadrantInternalBorderStrokeWidth, x1: quadrantLeft + quadrantHalfWidth, y1: quadrantTop + halfExternalBorderWidth, x2: quadrantLeft + quadrantHalfWidth, y2: quadrantTop + quadrantHeight - halfExternalBorderWidth }, // horizontal inner border { strokeFill: this.themeConfig.quadrantInternalBorderStrokeFill, strokeWidth: this.config.quadrantInternalBorderStrokeWidth, x1: quadrantLeft + halfExternalBorderWidth, y1: quadrantTop + quadrantHalfHeight, x2: quadrantLeft + quadrantWidth - halfExternalBorderWidth, y2: quadrantTop + quadrantHalfHeight } ]; return borderLines; } getTitle(showTitle) { if (showTitle) { return { text: this.data.titleText, fill: this.themeConfig.quadrantTitleFill, fontSize: this.config.titleFontSize, horizontalPos: "top", verticalPos: "center", rotation: 0, y: this.config.titlePadding, x: this.config.chartWidth / 2 }; } return; } build() { const showXAxis = this.config.showXAxis && !!(this.data.xAxisLeftText || this.data.xAxisRightText); const showYAxis = this.config.showYAxis && !!(this.data.yAxisTopText || this.data.yAxisBottomText); const showTitle = this.config.showTitle && !!this.data.titleText; const xAxisPosition = this.data.points.length > 0 ? "bottom" : this.config.xAxisPosition; const calculatedSpace = this.calculateSpace(xAxisPosition, showXAxis, showYAxis, showTitle); return { points: this.getQuadrantPoints(calculatedSpace), quadrants: this.getQuadrants(calculatedSpace), axisLabels: this.getAxisLabels(xAxisPosition, showXAxis, showYAxis, calculatedSpace), borderLines: this.getBorders(calculatedSpace), title: this.getTitle(showTitle) }; } }; } }); // src/diagrams/quadrant-chart/utils.ts function validateHexCode(value2) { return !/^#?([\dA-Fa-f]{6}|[\dA-Fa-f]{3})$/.test(value2); } function validateNumber(value2) { return !/^\d+$/.test(value2); } function validateSizeInPixels(value2) { return !/^\d+px$/.test(value2); } var InvalidStyleError; var init_utils5 = __esm({ "src/diagrams/quadrant-chart/utils.ts"() { "use strict"; InvalidStyleError = class extends Error { static { __name(this, "InvalidStyleError"); } constructor(style3, value2, type3) { super(`value for ${style3} ${value2} is invalid, please use a valid ${type3}`); this.name = "InvalidStyleError"; } }; __name(validateHexCode, "validateHexCode"); __name(validateNumber, "validateNumber"); __name(validateSizeInPixels, "validateSizeInPixels"); } }); // src/diagrams/quadrant-chart/quadrantDb.ts function textSanitizer(text4) { return sanitizeText(text4.trim(), config3); } function setQuadrant1Text(textObj) { quadrantBuilder.setData({ quadrant1Text: textSanitizer(textObj.text) }); } function setQuadrant2Text(textObj) { quadrantBuilder.setData({ quadrant2Text: textSanitizer(textObj.text) }); } function setQuadrant3Text(textObj) { quadrantBuilder.setData({ quadrant3Text: textSanitizer(textObj.text) }); } function setQuadrant4Text(textObj) { quadrantBuilder.setData({ quadrant4Text: textSanitizer(textObj.text) }); } function setXAxisLeftText(textObj) { quadrantBuilder.setData({ xAxisLeftText: textSanitizer(textObj.text) }); } function setXAxisRightText(textObj) { quadrantBuilder.setData({ xAxisRightText: textSanitizer(textObj.text) }); } function setYAxisTopText(textObj) { quadrantBuilder.setData({ yAxisTopText: textSanitizer(textObj.text) }); } function setYAxisBottomText(textObj) { quadrantBuilder.setData({ yAxisBottomText: textSanitizer(textObj.text) }); } function parseStyles(styles4) { const stylesObject = {}; for (const style3 of styles4) { const [key, value2] = style3.trim().split(/\s*:\s*/); if (key === "radius") { if (validateNumber(value2)) { throw new InvalidStyleError(key, value2, "number"); } stylesObject.radius = parseInt(value2); } else if (key === "color") { if (validateHexCode(value2)) { throw new InvalidStyleError(key, value2, "hex code"); } stylesObject.color = value2; } else if (key === "stroke-color") { if (validateHexCode(value2)) { throw new InvalidStyleError(key, value2, "hex code"); } stylesObject.strokeColor = value2; } else if (key === "stroke-width") { if (validateSizeInPixels(value2)) { throw new InvalidStyleError(key, value2, "number of pixels (eg. 10px)"); } stylesObject.strokeWidth = value2; } else { throw new Error(`style named ${key} is not supported.`); } } return stylesObject; } function addPoint(textObj, className, x5, y6, styles4) { const stylesObject = parseStyles(styles4); quadrantBuilder.addPoints([ { x: x5, y: y6, text: textSanitizer(textObj.text), className, ...stylesObject } ]); } function addClass2(className, styles4) { quadrantBuilder.addClass(className, parseStyles(styles4)); } function setWidth(width3) { quadrantBuilder.setConfig({ chartWidth: width3 }); } function setHeight(height2) { quadrantBuilder.setConfig({ chartHeight: height2 }); } function getQuadrantData() { const config5 = getConfig2(); const { themeVariables, quadrantChart: quadrantChartConfig } = config5; if (quadrantChartConfig) { quadrantBuilder.setConfig(quadrantChartConfig); } quadrantBuilder.setThemeConfig({ quadrant1Fill: themeVariables.quadrant1Fill, quadrant2Fill: themeVariables.quadrant2Fill, quadrant3Fill: themeVariables.quadrant3Fill, quadrant4Fill: themeVariables.quadrant4Fill, quadrant1TextFill: themeVariables.quadrant1TextFill, quadrant2TextFill: themeVariables.quadrant2TextFill, quadrant3TextFill: themeVariables.quadrant3TextFill, quadrant4TextFill: themeVariables.quadrant4TextFill, quadrantPointFill: themeVariables.quadrantPointFill, quadrantPointTextFill: themeVariables.quadrantPointTextFill, quadrantXAxisTextFill: themeVariables.quadrantXAxisTextFill, quadrantYAxisTextFill: themeVariables.quadrantYAxisTextFill, quadrantExternalBorderStrokeFill: themeVariables.quadrantExternalBorderStrokeFill, quadrantInternalBorderStrokeFill: themeVariables.quadrantInternalBorderStrokeFill, quadrantTitleFill: themeVariables.quadrantTitleFill }); quadrantBuilder.setData({ titleText: getDiagramTitle() }); return quadrantBuilder.build(); } var config3, quadrantBuilder, clear11, quadrantDb_default; var init_quadrantDb = __esm({ "src/diagrams/quadrant-chart/quadrantDb.ts"() { "use strict"; init_diagramAPI(); init_common(); init_commonDb(); init_quadrantBuilder(); init_utils5(); config3 = getConfig2(); __name(textSanitizer, "textSanitizer"); quadrantBuilder = new QuadrantBuilder(); __name(setQuadrant1Text, "setQuadrant1Text"); __name(setQuadrant2Text, "setQuadrant2Text"); __name(setQuadrant3Text, "setQuadrant3Text"); __name(setQuadrant4Text, "setQuadrant4Text"); __name(setXAxisLeftText, "setXAxisLeftText"); __name(setXAxisRightText, "setXAxisRightText"); __name(setYAxisTopText, "setYAxisTopText"); __name(setYAxisBottomText, "setYAxisBottomText"); __name(parseStyles, "parseStyles"); __name(addPoint, "addPoint"); __name(addClass2, "addClass"); __name(setWidth, "setWidth"); __name(setHeight, "setHeight"); __name(getQuadrantData, "getQuadrantData"); clear11 = /* @__PURE__ */ __name(function() { quadrantBuilder.clear(); clear(); }, "clear"); quadrantDb_default = { setWidth, setHeight, setQuadrant1Text, setQuadrant2Text, setQuadrant3Text, setQuadrant4Text, setXAxisLeftText, setXAxisRightText, setYAxisTopText, setYAxisBottomText, parseStyles, addPoint, addClass: addClass2, getQuadrantData, clear: clear11, setAccTitle, getAccTitle, setDiagramTitle, getDiagramTitle, getAccDescription, setAccDescription }; } }); // src/diagrams/quadrant-chart/quadrantRenderer.ts var draw8, quadrantRenderer_default; var init_quadrantRenderer = __esm({ "src/diagrams/quadrant-chart/quadrantRenderer.ts"() { "use strict"; init_src32(); init_diagramAPI(); init_logger(); init_setupGraphViewbox(); draw8 = /* @__PURE__ */ __name((txt, id30, _version, diagObj) => { function getDominantBaseLine(horizontalPos) { return horizontalPos === "top" ? "hanging" : "middle"; } __name(getDominantBaseLine, "getDominantBaseLine"); function getTextAnchor(verticalPos) { return verticalPos === "left" ? "start" : "middle"; } __name(getTextAnchor, "getTextAnchor"); function getTransformation(data5) { return `translate(${data5.x}, ${data5.y}) rotate(${data5.rotation || 0})`; } __name(getTransformation, "getTransformation"); const conf5 = getConfig2(); log.debug("Rendering quadrant chart\n" + txt); const securityLevel = conf5.securityLevel; let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = select_default2("#i" + id30); } const root3 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body"); const svg2 = root3.select(`[id="${id30}"]`); const group2 = svg2.append("g").attr("class", "main"); const width3 = conf5.quadrantChart?.chartWidth ?? 500; const height2 = conf5.quadrantChart?.chartHeight ?? 500; configureSvgSize(svg2, height2, width3, conf5.quadrantChart?.useMaxWidth ?? true); svg2.attr("viewBox", "0 0 " + width3 + " " + height2); diagObj.db.setHeight(height2); diagObj.db.setWidth(width3); const quadrantData = diagObj.db.getQuadrantData(); const quadrantsGroup = group2.append("g").attr("class", "quadrants"); const borderGroup = group2.append("g").attr("class", "border"); const dataPointGroup = group2.append("g").attr("class", "data-points"); const labelGroup = group2.append("g").attr("class", "labels"); const titleGroup = group2.append("g").attr("class", "title"); if (quadrantData.title) { titleGroup.append("text").attr("x", 0).attr("y", 0).attr("fill", quadrantData.title.fill).attr("font-size", quadrantData.title.fontSize).attr("dominant-baseline", getDominantBaseLine(quadrantData.title.horizontalPos)).attr("text-anchor", getTextAnchor(quadrantData.title.verticalPos)).attr("transform", getTransformation(quadrantData.title)).text(quadrantData.title.text); } if (quadrantData.borderLines) { borderGroup.selectAll("line").data(quadrantData.borderLines).enter().append("line").attr("x1", (data5) => data5.x1).attr("y1", (data5) => data5.y1).attr("x2", (data5) => data5.x2).attr("y2", (data5) => data5.y2).style("stroke", (data5) => data5.strokeFill).style("stroke-width", (data5) => data5.strokeWidth); } const quadrants = quadrantsGroup.selectAll("g.quadrant").data(quadrantData.quadrants).enter().append("g").attr("class", "quadrant"); quadrants.append("rect").attr("x", (data5) => data5.x).attr("y", (data5) => data5.y).attr("width", (data5) => data5.width).attr("height", (data5) => data5.height).attr("fill", (data5) => data5.fill); quadrants.append("text").attr("x", 0).attr("y", 0).attr("fill", (data5) => data5.text.fill).attr("font-size", (data5) => data5.text.fontSize).attr( "dominant-baseline", (data5) => getDominantBaseLine(data5.text.horizontalPos) ).attr("text-anchor", (data5) => getTextAnchor(data5.text.verticalPos)).attr("transform", (data5) => getTransformation(data5.text)).text((data5) => data5.text.text); const labels = labelGroup.selectAll("g.label").data(quadrantData.axisLabels).enter().append("g").attr("class", "label"); labels.append("text").attr("x", 0).attr("y", 0).text((data5) => data5.text).attr("fill", (data5) => data5.fill).attr("font-size", (data5) => data5.fontSize).attr("dominant-baseline", (data5) => getDominantBaseLine(data5.horizontalPos)).attr("text-anchor", (data5) => getTextAnchor(data5.verticalPos)).attr("transform", (data5) => getTransformation(data5)); const dataPoints = dataPointGroup.selectAll("g.data-point").data(quadrantData.points).enter().append("g").attr("class", "data-point"); dataPoints.append("circle").attr("cx", (data5) => data5.x).attr("cy", (data5) => data5.y).attr("r", (data5) => data5.radius).attr("fill", (data5) => data5.fill).attr("stroke", (data5) => data5.strokeColor).attr("stroke-width", (data5) => data5.strokeWidth); dataPoints.append("text").attr("x", 0).attr("y", 0).text((data5) => data5.text.text).attr("fill", (data5) => data5.text.fill).attr("font-size", (data5) => data5.text.fontSize).attr( "dominant-baseline", (data5) => getDominantBaseLine(data5.text.horizontalPos) ).attr("text-anchor", (data5) => getTextAnchor(data5.text.verticalPos)).attr("transform", (data5) => getTransformation(data5.text)); }, "draw"); quadrantRenderer_default = { draw: draw8 }; } }); // src/diagrams/quadrant-chart/quadrantDiagram.ts var quadrantDiagram_exports = {}; __export(quadrantDiagram_exports, { diagram: () => diagram8 }); var diagram8; var init_quadrantDiagram = __esm({ "src/diagrams/quadrant-chart/quadrantDiagram.ts"() { "use strict"; init_quadrant(); init_quadrantDb(); init_quadrantRenderer(); diagram8 = { parser: quadrant_default, db: quadrantDb_default, renderer: quadrantRenderer_default, styles: /* @__PURE__ */ __name(() => "", "styles") }; } }); // src/diagrams/xychart/parser/xychart.jison var parser9, xychart_default; var init_xychart = __esm({ "src/diagrams/xychart/parser/xychart.jison"() { "use strict"; parser9 = (function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) { for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ; return o3; }, "o"), $V0 = [1, 10, 12, 14, 16, 18, 19, 21, 23], $V1 = [2, 6], $V2 = [1, 3], $V3 = [1, 5], $V4 = [1, 6], $V5 = [1, 7], $V6 = [1, 5, 10, 12, 14, 16, 18, 19, 21, 23, 34, 35, 36], $V7 = [1, 25], $V8 = [1, 26], $V9 = [1, 28], $Va = [1, 29], $Vb = [1, 30], $Vc = [1, 31], $Vd = [1, 32], $Ve = [1, 33], $Vf = [1, 34], $Vg = [1, 35], $Vh = [1, 36], $Vi = [1, 37], $Vj = [1, 43], $Vk = [1, 42], $Vl = [1, 47], $Vm = [1, 50], $Vn = [1, 10, 12, 14, 16, 18, 19, 21, 23, 34, 35, 36], $Vo = [1, 10, 12, 14, 16, 18, 19, 21, 23, 24, 26, 27, 28, 34, 35, 36], $Vp = [1, 10, 12, 14, 16, 18, 19, 21, 23, 24, 26, 27, 28, 34, 35, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50], $Vq = [1, 64]; var parser24 = { trace: /* @__PURE__ */ __name(function trace() { }, "trace"), yy: {}, symbols_: { "error": 2, "start": 3, "eol": 4, "XYCHART": 5, "chartConfig": 6, "document": 7, "CHART_ORIENTATION": 8, "statement": 9, "title": 10, "text": 11, "X_AXIS": 12, "parseXAxis": 13, "Y_AXIS": 14, "parseYAxis": 15, "LINE": 16, "plotData": 17, "BAR": 18, "acc_title": 19, "acc_title_value": 20, "acc_descr": 21, "acc_descr_value": 22, "acc_descr_multiline_value": 23, "SQUARE_BRACES_START": 24, "commaSeparatedNumbers": 25, "SQUARE_BRACES_END": 26, "NUMBER_WITH_DECIMAL": 27, "COMMA": 28, "xAxisData": 29, "bandData": 30, "ARROW_DELIMITER": 31, "commaSeparatedTexts": 32, "yAxisData": 33, "NEWLINE": 34, "SEMI": 35, "EOF": 36, "alphaNum": 37, "STR": 38, "MD_STR": 39, "alphaNumToken": 40, "AMP": 41, "NUM": 42, "ALPHA": 43, "PLUS": 44, "EQUALS": 45, "MULT": 46, "DOT": 47, "BRKT": 48, "MINUS": 49, "UNDERSCORE": 50, "$accept": 0, "$end": 1 }, terminals_: { 2: "error", 5: "XYCHART", 8: "CHART_ORIENTATION", 10: "title", 12: "X_AXIS", 14: "Y_AXIS", 16: "LINE", 18: "BAR", 19: "acc_title", 20: "acc_title_value", 21: "acc_descr", 22: "acc_descr_value", 23: "acc_descr_multiline_value", 24: "SQUARE_BRACES_START", 26: "SQUARE_BRACES_END", 27: "NUMBER_WITH_DECIMAL", 28: "COMMA", 31: "ARROW_DELIMITER", 34: "NEWLINE", 35: "SEMI", 36: "EOF", 38: "STR", 39: "MD_STR", 41: "AMP", 42: "NUM", 43: "ALPHA", 44: "PLUS", 45: "EQUALS", 46: "MULT", 47: "DOT", 48: "BRKT", 49: "MINUS", 50: "UNDERSCORE" }, productions_: [0, [3, 2], [3, 3], [3, 2], [3, 1], [6, 1], [7, 0], [7, 2], [9, 2], [9, 2], [9, 2], [9, 2], [9, 2], [9, 3], [9, 2], [9, 3], [9, 2], [9, 2], [9, 1], [17, 3], [25, 3], [25, 1], [13, 1], [13, 2], [13, 1], [29, 1], [29, 3], [30, 3], [32, 3], [32, 1], [15, 1], [15, 2], [15, 1], [33, 3], [4, 1], [4, 1], [4, 1], [11, 1], [11, 1], [11, 1], [37, 1], [37, 2], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1]], performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { var $0 = $$.length - 1; switch (yystate) { case 5: yy.setOrientation($$[$0]); break; case 9: yy.setDiagramTitle($$[$0].text.trim()); break; case 12: yy.setLineData({ text: "", type: "text" }, $$[$0]); break; case 13: yy.setLineData($$[$0 - 1], $$[$0]); break; case 14: yy.setBarData({ text: "", type: "text" }, $$[$0]); break; case 15: yy.setBarData($$[$0 - 1], $$[$0]); break; case 16: this.$ = $$[$0].trim(); yy.setAccTitle(this.$); break; case 17: case 18: this.$ = $$[$0].trim(); yy.setAccDescription(this.$); break; case 19: this.$ = $$[$0 - 1]; break; case 20: this.$ = [Number($$[$0 - 2]), ...$$[$0]]; break; case 21: this.$ = [Number($$[$0])]; break; case 22: yy.setXAxisTitle($$[$0]); break; case 23: yy.setXAxisTitle($$[$0 - 1]); break; case 24: yy.setXAxisTitle({ type: "text", text: "" }); break; case 25: yy.setXAxisBand($$[$0]); break; case 26: yy.setXAxisRangeData(Number($$[$0 - 2]), Number($$[$0])); break; case 27: this.$ = $$[$0 - 1]; break; case 28: this.$ = [$$[$0 - 2], ...$$[$0]]; break; case 29: this.$ = [$$[$0]]; break; case 30: yy.setYAxisTitle($$[$0]); break; case 31: yy.setYAxisTitle($$[$0 - 1]); break; case 32: yy.setYAxisTitle({ type: "text", text: "" }); break; case 33: yy.setYAxisRangeData(Number($$[$0 - 2]), Number($$[$0])); break; case 37: this.$ = { text: $$[$0], type: "text" }; break; case 38: this.$ = { text: $$[$0], type: "text" }; break; case 39: this.$ = { text: $$[$0], type: "markdown" }; break; case 40: this.$ = $$[$0]; break; case 41: this.$ = $$[$0 - 1] + "" + $$[$0]; break; } }, "anonymous"), table: [o2($V0, $V1, { 3: 1, 4: 2, 7: 4, 5: $V2, 34: $V3, 35: $V4, 36: $V5 }), { 1: [3] }, o2($V0, $V1, { 4: 2, 7: 4, 3: 8, 5: $V2, 34: $V3, 35: $V4, 36: $V5 }), o2($V0, $V1, { 4: 2, 7: 4, 6: 9, 3: 10, 5: $V2, 8: [1, 11], 34: $V3, 35: $V4, 36: $V5 }), { 1: [2, 4], 9: 12, 10: [1, 13], 12: [1, 14], 14: [1, 15], 16: [1, 16], 18: [1, 17], 19: [1, 18], 21: [1, 19], 23: [1, 20] }, o2($V6, [2, 34]), o2($V6, [2, 35]), o2($V6, [2, 36]), { 1: [2, 1] }, o2($V0, $V1, { 4: 2, 7: 4, 3: 21, 5: $V2, 34: $V3, 35: $V4, 36: $V5 }), { 1: [2, 3] }, o2($V6, [2, 5]), o2($V0, [2, 7], { 4: 22, 34: $V3, 35: $V4, 36: $V5 }), { 11: 23, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 11: 39, 13: 38, 24: $Vj, 27: $Vk, 29: 40, 30: 41, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 11: 45, 15: 44, 27: $Vl, 33: 46, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 11: 49, 17: 48, 24: $Vm, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 11: 52, 17: 51, 24: $Vm, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 20: [1, 53] }, { 22: [1, 54] }, o2($Vn, [2, 18]), { 1: [2, 2] }, o2($Vn, [2, 8]), o2($Vn, [2, 9]), o2($Vo, [2, 37], { 40: 55, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }), o2($Vo, [2, 38]), o2($Vo, [2, 39]), o2($Vp, [2, 40]), o2($Vp, [2, 42]), o2($Vp, [2, 43]), o2($Vp, [2, 44]), o2($Vp, [2, 45]), o2($Vp, [2, 46]), o2($Vp, [2, 47]), o2($Vp, [2, 48]), o2($Vp, [2, 49]), o2($Vp, [2, 50]), o2($Vp, [2, 51]), o2($Vn, [2, 10]), o2($Vn, [2, 22], { 30: 41, 29: 56, 24: $Vj, 27: $Vk }), o2($Vn, [2, 24]), o2($Vn, [2, 25]), { 31: [1, 57] }, { 11: 59, 32: 58, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, o2($Vn, [2, 11]), o2($Vn, [2, 30], { 33: 60, 27: $Vl }), o2($Vn, [2, 32]), { 31: [1, 61] }, o2($Vn, [2, 12]), { 17: 62, 24: $Vm }, { 25: 63, 27: $Vq }, o2($Vn, [2, 14]), { 17: 65, 24: $Vm }, o2($Vn, [2, 16]), o2($Vn, [2, 17]), o2($Vp, [2, 41]), o2($Vn, [2, 23]), { 27: [1, 66] }, { 26: [1, 67] }, { 26: [2, 29], 28: [1, 68] }, o2($Vn, [2, 31]), { 27: [1, 69] }, o2($Vn, [2, 13]), { 26: [1, 70] }, { 26: [2, 21], 28: [1, 71] }, o2($Vn, [2, 15]), o2($Vn, [2, 26]), o2($Vn, [2, 27]), { 11: 59, 32: 72, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, o2($Vn, [2, 33]), o2($Vn, [2, 19]), { 25: 73, 27: $Vq }, { 26: [2, 28] }, { 26: [2, 20] }], defaultActions: { 8: [2, 1], 10: [2, 3], 21: [2, 2], 72: [2, 28], 73: [2, 20] }, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (hash.recoverable) { this.trace(str2); } else { var error3 = new Error(str2); error3.hash = hash; throw error3; } }, "parseError"), parse: /* @__PURE__ */ __name(function parse7(input) { var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1; var args = lstack.slice.call(arguments, 1); var lexer2 = Object.create(this.lexer); var sharedState = { yy: {} }; for (var k2 in this.yy) { if (Object.prototype.hasOwnProperty.call(this.yy, k2)) { sharedState.yy[k2] = this.yy[k2]; } } lexer2.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer2; sharedState.yy.parser = this; if (typeof lexer2.yylloc == "undefined") { lexer2.yylloc = {}; } var yyloc = lexer2.yylloc; lstack.push(yyloc); var ranges = lexer2.options && lexer2.options.ranges; if (typeof sharedState.yy.parseError === "function") { this.parseError = sharedState.yy.parseError; } else { this.parseError = Object.getPrototypeOf(this).parseError; } function popStack(n2) { stack.length = stack.length - 2 * n2; vstack.length = vstack.length - n2; lstack.length = lstack.length - n2; } __name(popStack, "popStack"); function lex() { var token2; token2 = tstack.pop() || lexer2.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex, "lex"); var symbol, preErrorSymbol, state3, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state3 = stack[stack.length - 1]; if (this.defaultActions[state3]) { action = this.defaultActions[state3]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex(); } action = table[state3] && table[state3][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state3]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer2.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; } else { errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); } this.parseError(errStr, { text: lexer2.match, token: this.terminals_[symbol] || symbol, line: lexer2.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state3 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer2.yytext); lstack.push(lexer2.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer2.yyleng; yytext = lexer2.yytext; yylineno = lexer2.yylineno; yyloc = lexer2.yylloc; if (recovering > 0) { recovering--; } } else { symbol = preErrorSymbol; preErrorSymbol = null; } break; case 2: len = this.productions_[action[1]][1]; yyval.$ = vstack[vstack.length - len]; yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; if (ranges) { yyval._$.range = [ lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1] ]; } r2 = this.performAction.apply(yyval, [ yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack ].concat(args)); if (typeof r2 !== "undefined") { return r2; } if (len) { stack = stack.slice(0, -1 * len * 2); vstack = vstack.slice(0, -1 * len); lstack = lstack.slice(0, -1 * len); } stack.push(this.productions_[action[1]][0]); vstack.push(yyval.$); lstack.push(yyval._$); newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]]; stack.push(newState2); break; case 3: return true; } } return true; }, "parse") }; var lexer = /* @__PURE__ */ (function() { var lexer2 = { EOF: 1, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (this.yy.parser) { this.yy.parser.parseError(str2, hash); } else { throw new Error(str2); } }, "parseError"), // resets the lexer, sets new input setInput: /* @__PURE__ */ __name(function(input, yy) { this.yy = yy || this.yy || {}; this._input = input; this._more = this._backtrack = this.done = false; 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 }; if (this.options.ranges) { this.yylloc.range = [0, 0]; } this.offset = 0; return this; }, "setInput"), // consumes and returns one char from the input input: /* @__PURE__ */ __name(function() { var ch = this._input[0]; this.yytext += ch; this.yyleng++; this.offset++; this.match += ch; this.matched += ch; var lines = ch.match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno++; this.yylloc.last_line++; } else { this.yylloc.last_column++; } if (this.options.ranges) { this.yylloc.range[1]++; } this._input = this._input.slice(1); return ch; }, "input"), // unshifts one char (or a string) into the input unput: /* @__PURE__ */ __name(function(ch) { var len = ch.length; var lines = ch.split(/(?:\r\n?|\n)/g); this._input = ch + this._input; this.yytext = this.yytext.substr(0, this.yytext.length - len); this.offset -= len; var oldLines = 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); if (lines.length - 1) { this.yylineno -= lines.length - 1; } var r2 = this.yylloc.range; this.yylloc = { first_line: this.yylloc.first_line, last_line: this.yylineno + 1, first_column: this.yylloc.first_column, last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len }; if (this.options.ranges) { this.yylloc.range = [r2[0], r2[0] + this.yyleng - len]; } this.yyleng = this.yytext.length; return this; }, "unput"), // When called from action, caches matched text and appends it on next action more: /* @__PURE__ */ __name(function() { this._more = true; return this; }, "more"), // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. reject: /* @__PURE__ */ __name(function() { if (this.options.backtrack_lexer) { this._backtrack = true; } 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"), // retain first n characters of the match less: /* @__PURE__ */ __name(function(n2) { this.unput(this.match.slice(n2)); }, "less"), // displays already matched input, i.e. for error messages pastInput: /* @__PURE__ */ __name(function() { var past = this.matched.substr(0, this.matched.length - this.match.length); return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); }, "pastInput"), // displays upcoming input, i.e. for error messages upcomingInput: /* @__PURE__ */ __name(function() { var next3 = this.match; if (next3.length < 20) { next3 += this._input.substr(0, 20 - next3.length); } return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, ""); }, "upcomingInput"), // displays the character position where the lexing error occurred, i.e. for error messages showPosition: /* @__PURE__ */ __name(function() { var pre = this.pastInput(); var c3 = new Array(pre.length + 1).join("-"); return pre + this.upcomingInput() + "\n" + c3 + "^"; }, "showPosition"), // test the lexed token: return FALSE when not a match, otherwise return token test_match: /* @__PURE__ */ __name(function(match2, indexed_rule) { var token2, lines, backup; if (this.options.backtrack_lexer) { backup = { 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 }; if (this.options.ranges) { backup.yylloc.range = this.yylloc.range.slice(0); } } lines = match2[0].match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno += lines.length; } this.yylloc = { first_line: this.yylloc.last_line, last_line: this.yylineno + 1, first_column: this.yylloc.last_column, last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; this.yyleng = this.yytext.length; if (this.options.ranges) { this.yylloc.range = [this.offset, this.offset += this.yyleng]; } this._more = false; this._backtrack = false; this._input = this._input.slice(match2[0].length); this.matched += match2[0]; token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); if (this.done && this._input) { this.done = false; } if (token2) { return token2; } else if (this._backtrack) { for (var k2 in backup) { this[k2] = backup[k2]; } return false; } return false; }, "test_match"), // return next match in input next: /* @__PURE__ */ __name(function() { if (this.done) { return this.EOF; } if (!this._input) { this.done = true; } var token2, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[index]); if (token2 !== false) { return token2; } return false; } if (this._input === "") { return this.EOF; } else { return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { text: "", token: null, line: this.yylineno }); } }, "next"), // return next match that has a token lex: /* @__PURE__ */ __name(function lex() { var r2 = this.next(); if (r2) { return r2; } else { return this.lex(); } }, "lex"), // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) begin: /* @__PURE__ */ __name(function begin(condition) { this.conditionStack.push(condition); }, "begin"), // pop the previously active lexer condition state off the condition stack popState: /* @__PURE__ */ __name(function popState() { var n2 = this.conditionStack.length - 1; if (n2 > 0) { return this.conditionStack.pop(); } else { return this.conditionStack[0]; } }, "popState"), // produce the lexer rule set which is active for the currently active lexer condition state _currentRules: /* @__PURE__ */ __name(function _currentRules() { if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; } else { return this.conditions["INITIAL"].rules; } }, "_currentRules"), // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available topState: /* @__PURE__ */ __name(function topState(n2) { n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0); if (n2 >= 0) { return this.conditionStack[n2]; } else { return "INITIAL"; } }, "topState"), // alias for begin(condition) pushState: /* @__PURE__ */ __name(function pushState(condition) { this.begin(condition); }, "pushState"), // return the number of states currently on the stack stateStackSize: /* @__PURE__ */ __name(function stateStackSize() { return this.conditionStack.length; }, "stateStackSize"), options: { "case-insensitive": true }, performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { var YYSTATE = YY_START; switch ($avoiding_name_collisions) { case 0: break; case 1: break; case 2: this.popState(); return 34; break; case 3: this.popState(); return 34; break; case 4: return 34; break; case 5: break; case 6: return 10; break; case 7: this.pushState("acc_title"); return 19; break; case 8: this.popState(); return "acc_title_value"; break; case 9: this.pushState("acc_descr"); return 21; break; case 10: this.popState(); return "acc_descr_value"; break; case 11: this.pushState("acc_descr_multiline"); break; case 12: this.popState(); break; case 13: return "acc_descr_multiline_value"; break; case 14: return 5; break; case 15: return 5; break; case 16: return 8; break; case 17: this.pushState("axis_data"); return "X_AXIS"; break; case 18: this.pushState("axis_data"); return "Y_AXIS"; break; case 19: this.pushState("axis_band_data"); return 24; break; case 20: return 31; break; case 21: this.pushState("data"); return 16; break; case 22: this.pushState("data"); return 18; break; case 23: this.pushState("data_inner"); return 24; break; case 24: return 27; break; case 25: this.popState(); return 26; break; case 26: this.popState(); break; case 27: this.pushState("string"); break; case 28: this.popState(); break; case 29: return "STR"; break; case 30: return 24; break; case 31: return 26; break; case 32: return 43; break; case 33: return "COLON"; break; case 34: return 44; break; case 35: return 28; break; case 36: return 45; break; case 37: return 46; break; case 38: return 48; break; case 39: return 50; break; case 40: return 47; break; case 41: return 41; break; case 42: return 49; break; case 43: return 42; break; case 44: break; case 45: return 35; break; case 46: return 36; break; } }, "anonymous"), rules: [/^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:(\r?\n))/i, /^(?:(\r?\n))/i, /^(?:[\n\r]+)/i, /^(?:%%[^\n]*)/i, /^(?:title\b)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:\{)/i, /^(?:[^\}]*)/i, /^(?:xychart-beta\b)/i, /^(?:xychart\b)/i, /^(?:(?:vertical|horizontal))/i, /^(?:x-axis\b)/i, /^(?:y-axis\b)/i, /^(?:\[)/i, /^(?:-->)/i, /^(?:line\b)/i, /^(?:bar\b)/i, /^(?:\[)/i, /^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i, /^(?:\])/i, /^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n\(\?:`))/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:\[)/i, /^(?:\])/i, /^(?:[A-Za-z]+)/i, /^(?::)/i, /^(?:\+)/i, /^(?:,)/i, /^(?:=)/i, /^(?:\*)/i, /^(?:#)/i, /^(?:[\_])/i, /^(?:\.)/i, /^(?:&)/i, /^(?:-)/i, /^(?:[0-9]+)/i, /^(?:\s+)/i, /^(?:;)/i, /^(?:$)/i], conditions: { "data_inner": { "rules": [0, 1, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18, 21, 22, 24, 25, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46], "inclusive": true }, "data": { "rules": [0, 1, 3, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18, 21, 22, 23, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46], "inclusive": true }, "axis_band_data": { "rules": [0, 1, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18, 21, 22, 25, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46], "inclusive": true }, "axis_data": { "rules": [0, 1, 2, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46], "inclusive": true }, "acc_descr_multiline": { "rules": [12, 13], "inclusive": false }, "acc_descr": { "rules": [10], "inclusive": false }, "acc_title": { "rules": [8], "inclusive": false }, "title": { "rules": [], "inclusive": false }, "md_string": { "rules": [], "inclusive": false }, "string": { "rules": [28, 29], "inclusive": false }, "INITIAL": { "rules": [0, 1, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18, 21, 22, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46], "inclusive": true } } }; return lexer2; })(); parser24.lexer = lexer; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser24; parser24.Parser = Parser3; return new Parser3(); })(); parser9.parser = parser9; xychart_default = parser9; } }); // src/diagrams/xychart/chartBuilder/interfaces.ts function isBarPlot(data5) { return data5.type === "bar"; } function isBandAxisData(data5) { return data5.type === "band"; } function isLinearAxisData(data5) { return data5.type === "linear"; } var init_interfaces = __esm({ "src/diagrams/xychart/chartBuilder/interfaces.ts"() { "use strict"; __name(isBarPlot, "isBarPlot"); __name(isBandAxisData, "isBandAxisData"); __name(isLinearAxisData, "isLinearAxisData"); } }); // src/diagrams/xychart/chartBuilder/textDimensionCalculator.ts var TextDimensionCalculatorWithFont; var init_textDimensionCalculator = __esm({ "src/diagrams/xychart/chartBuilder/textDimensionCalculator.ts"() { "use strict"; init_createText(); TextDimensionCalculatorWithFont = class { constructor(parentGroup) { this.parentGroup = parentGroup; } static { __name(this, "TextDimensionCalculatorWithFont"); } getMaxDimension(texts, fontSize) { if (!this.parentGroup) { return { width: texts.reduce((acc, cur) => Math.max(cur.length, acc), 0) * fontSize, height: fontSize }; } const dimension = { width: 0, height: 0 }; const elem = this.parentGroup.append("g").attr("visibility", "hidden").attr("font-size", fontSize); for (const t4 of texts) { const bbox = computeDimensionOfText(elem, 1, t4); const width3 = bbox ? bbox.width : t4.length * fontSize; const height2 = bbox ? bbox.height : fontSize; dimension.width = Math.max(dimension.width, width3); dimension.height = Math.max(dimension.height, height2); } elem.remove(); return dimension; } }; } }); // src/diagrams/xychart/chartBuilder/components/axis/baseAxis.ts var BAR_WIDTH_TO_TICK_WIDTH_RATIO, MAX_OUTER_PADDING_PERCENT_FOR_WRT_LABEL, BaseAxis; var init_baseAxis = __esm({ "src/diagrams/xychart/chartBuilder/components/axis/baseAxis.ts"() { "use strict"; BAR_WIDTH_TO_TICK_WIDTH_RATIO = 0.7; MAX_OUTER_PADDING_PERCENT_FOR_WRT_LABEL = 0.2; BaseAxis = class { constructor(axisConfig, title2, textDimensionCalculator, axisThemeConfig) { this.axisConfig = axisConfig; this.title = title2; this.textDimensionCalculator = textDimensionCalculator; this.axisThemeConfig = axisThemeConfig; this.boundingRect = { x: 0, y: 0, width: 0, height: 0 }; this.axisPosition = "left"; this.showTitle = false; this.showLabel = false; this.showTick = false; this.showAxisLine = false; this.outerPadding = 0; this.titleTextHeight = 0; this.labelTextHeight = 0; this.range = [0, 10]; this.boundingRect = { x: 0, y: 0, width: 0, height: 0 }; this.axisPosition = "left"; } static { __name(this, "BaseAxis"); } setRange(range3) { this.range = range3; if (this.axisPosition === "left" || this.axisPosition === "right") { this.boundingRect.height = range3[1] - range3[0]; } else { this.boundingRect.width = range3[1] - range3[0]; } this.recalculateScale(); } getRange() { return [this.range[0] + this.outerPadding, this.range[1] - this.outerPadding]; } setAxisPosition(axisPosition) { this.axisPosition = axisPosition; this.setRange(this.range); } getTickDistance() { const range3 = this.getRange(); return Math.abs(range3[0] - range3[1]) / this.getTickValues().length; } getAxisOuterPadding() { return this.outerPadding; } getLabelDimension() { return this.textDimensionCalculator.getMaxDimension( this.getTickValues().map((tick) => tick.toString()), this.axisConfig.labelFontSize ); } recalculateOuterPaddingToDrawBar() { if (BAR_WIDTH_TO_TICK_WIDTH_RATIO * this.getTickDistance() > this.outerPadding * 2) { this.outerPadding = Math.floor(BAR_WIDTH_TO_TICK_WIDTH_RATIO * this.getTickDistance() / 2); } this.recalculateScale(); } calculateSpaceIfDrawnHorizontally(availableSpace) { let availableHeight = availableSpace.height; if (this.axisConfig.showAxisLine && availableHeight > this.axisConfig.axisLineWidth) { availableHeight -= this.axisConfig.axisLineWidth; this.showAxisLine = true; } if (this.axisConfig.showLabel) { const spaceRequired = this.getLabelDimension(); const maxPadding = MAX_OUTER_PADDING_PERCENT_FOR_WRT_LABEL * availableSpace.width; this.outerPadding = Math.min(spaceRequired.width / 2, maxPadding); const heightRequired = spaceRequired.height + this.axisConfig.labelPadding * 2; this.labelTextHeight = spaceRequired.height; if (heightRequired <= availableHeight) { availableHeight -= heightRequired; this.showLabel = true; } } if (this.axisConfig.showTick && availableHeight >= this.axisConfig.tickLength) { this.showTick = true; availableHeight -= this.axisConfig.tickLength; } if (this.axisConfig.showTitle && this.title) { const spaceRequired = this.textDimensionCalculator.getMaxDimension( [this.title], this.axisConfig.titleFontSize ); const heightRequired = spaceRequired.height + this.axisConfig.titlePadding * 2; this.titleTextHeight = spaceRequired.height; if (heightRequired <= availableHeight) { availableHeight -= heightRequired; this.showTitle = true; } } this.boundingRect.width = availableSpace.width; this.boundingRect.height = availableSpace.height - availableHeight; } calculateSpaceIfDrawnVertical(availableSpace) { let availableWidth = availableSpace.width; if (this.axisConfig.showAxisLine && availableWidth > this.axisConfig.axisLineWidth) { availableWidth -= this.axisConfig.axisLineWidth; this.showAxisLine = true; } if (this.axisConfig.showLabel) { const spaceRequired = this.getLabelDimension(); const maxPadding = MAX_OUTER_PADDING_PERCENT_FOR_WRT_LABEL * availableSpace.height; this.outerPadding = Math.min(spaceRequired.height / 2, maxPadding); const widthRequired = spaceRequired.width + this.axisConfig.labelPadding * 2; if (widthRequired <= availableWidth) { availableWidth -= widthRequired; this.showLabel = true; } } if (this.axisConfig.showTick && availableWidth >= this.axisConfig.tickLength) { this.showTick = true; availableWidth -= this.axisConfig.tickLength; } if (this.axisConfig.showTitle && this.title) { const spaceRequired = this.textDimensionCalculator.getMaxDimension( [this.title], this.axisConfig.titleFontSize ); const widthRequired = spaceRequired.height + this.axisConfig.titlePadding * 2; this.titleTextHeight = spaceRequired.height; if (widthRequired <= availableWidth) { availableWidth -= widthRequired; this.showTitle = true; } } this.boundingRect.width = availableSpace.width - availableWidth; this.boundingRect.height = availableSpace.height; } calculateSpace(availableSpace) { if (this.axisPosition === "left" || this.axisPosition === "right") { this.calculateSpaceIfDrawnVertical(availableSpace); } else { this.calculateSpaceIfDrawnHorizontally(availableSpace); } this.recalculateScale(); return { width: this.boundingRect.width, height: this.boundingRect.height }; } setBoundingBoxXY(point8) { this.boundingRect.x = point8.x; this.boundingRect.y = point8.y; } getDrawableElementsForLeftAxis() { const drawableElement = []; if (this.showAxisLine) { const x5 = this.boundingRect.x + this.boundingRect.width - this.axisConfig.axisLineWidth / 2; drawableElement.push({ type: "path", groupTexts: ["left-axis", "axisl-line"], data: [ { path: `M ${x5},${this.boundingRect.y} L ${x5},${this.boundingRect.y + this.boundingRect.height} `, strokeFill: this.axisThemeConfig.axisLineColor, strokeWidth: this.axisConfig.axisLineWidth } ] }); } if (this.showLabel) { drawableElement.push({ type: "text", groupTexts: ["left-axis", "label"], data: this.getTickValues().map((tick) => ({ text: tick.toString(), x: this.boundingRect.x + this.boundingRect.width - (this.showLabel ? this.axisConfig.labelPadding : 0) - (this.showTick ? this.axisConfig.tickLength : 0) - (this.showAxisLine ? this.axisConfig.axisLineWidth : 0), y: this.getScaleValue(tick), fill: this.axisThemeConfig.labelColor, fontSize: this.axisConfig.labelFontSize, rotation: 0, verticalPos: "middle", horizontalPos: "right" })) }); } if (this.showTick) { const x5 = this.boundingRect.x + this.boundingRect.width - (this.showAxisLine ? this.axisConfig.axisLineWidth : 0); drawableElement.push({ type: "path", groupTexts: ["left-axis", "ticks"], data: this.getTickValues().map((tick) => ({ path: `M ${x5},${this.getScaleValue(tick)} L ${x5 - this.axisConfig.tickLength},${this.getScaleValue(tick)}`, strokeFill: this.axisThemeConfig.tickColor, strokeWidth: this.axisConfig.tickWidth })) }); } if (this.showTitle) { drawableElement.push({ type: "text", groupTexts: ["left-axis", "title"], data: [ { text: this.title, x: this.boundingRect.x + this.axisConfig.titlePadding, y: this.boundingRect.y + this.boundingRect.height / 2, fill: this.axisThemeConfig.titleColor, fontSize: this.axisConfig.titleFontSize, rotation: 270, verticalPos: "top", horizontalPos: "center" } ] }); } return drawableElement; } getDrawableElementsForBottomAxis() { const drawableElement = []; if (this.showAxisLine) { const y6 = this.boundingRect.y + this.axisConfig.axisLineWidth / 2; drawableElement.push({ type: "path", groupTexts: ["bottom-axis", "axis-line"], data: [ { path: `M ${this.boundingRect.x},${y6} L ${this.boundingRect.x + this.boundingRect.width},${y6}`, strokeFill: this.axisThemeConfig.axisLineColor, strokeWidth: this.axisConfig.axisLineWidth } ] }); } if (this.showLabel) { drawableElement.push({ type: "text", groupTexts: ["bottom-axis", "label"], data: this.getTickValues().map((tick) => ({ text: tick.toString(), x: this.getScaleValue(tick), y: this.boundingRect.y + this.axisConfig.labelPadding + (this.showTick ? this.axisConfig.tickLength : 0) + (this.showAxisLine ? this.axisConfig.axisLineWidth : 0), fill: this.axisThemeConfig.labelColor, fontSize: this.axisConfig.labelFontSize, rotation: 0, verticalPos: "top", horizontalPos: "center" })) }); } if (this.showTick) { const y6 = this.boundingRect.y + (this.showAxisLine ? this.axisConfig.axisLineWidth : 0); drawableElement.push({ type: "path", groupTexts: ["bottom-axis", "ticks"], data: this.getTickValues().map((tick) => ({ path: `M ${this.getScaleValue(tick)},${y6} L ${this.getScaleValue(tick)},${y6 + this.axisConfig.tickLength}`, strokeFill: this.axisThemeConfig.tickColor, strokeWidth: this.axisConfig.tickWidth })) }); } if (this.showTitle) { drawableElement.push({ type: "text", groupTexts: ["bottom-axis", "title"], data: [ { text: this.title, x: this.range[0] + (this.range[1] - this.range[0]) / 2, y: this.boundingRect.y + this.boundingRect.height - this.axisConfig.titlePadding - this.titleTextHeight, fill: this.axisThemeConfig.titleColor, fontSize: this.axisConfig.titleFontSize, rotation: 0, verticalPos: "top", horizontalPos: "center" } ] }); } return drawableElement; } getDrawableElementsForTopAxis() { const drawableElement = []; if (this.showAxisLine) { const y6 = this.boundingRect.y + this.boundingRect.height - this.axisConfig.axisLineWidth / 2; drawableElement.push({ type: "path", groupTexts: ["top-axis", "axis-line"], data: [ { path: `M ${this.boundingRect.x},${y6} L ${this.boundingRect.x + this.boundingRect.width},${y6}`, strokeFill: this.axisThemeConfig.axisLineColor, strokeWidth: this.axisConfig.axisLineWidth } ] }); } if (this.showLabel) { drawableElement.push({ type: "text", groupTexts: ["top-axis", "label"], data: this.getTickValues().map((tick) => ({ text: tick.toString(), x: this.getScaleValue(tick), y: this.boundingRect.y + (this.showTitle ? this.titleTextHeight + this.axisConfig.titlePadding * 2 : 0) + this.axisConfig.labelPadding, fill: this.axisThemeConfig.labelColor, fontSize: this.axisConfig.labelFontSize, rotation: 0, verticalPos: "top", horizontalPos: "center" })) }); } if (this.showTick) { const y6 = this.boundingRect.y; drawableElement.push({ type: "path", groupTexts: ["top-axis", "ticks"], data: this.getTickValues().map((tick) => ({ path: `M ${this.getScaleValue(tick)},${y6 + this.boundingRect.height - (this.showAxisLine ? this.axisConfig.axisLineWidth : 0)} L ${this.getScaleValue(tick)},${y6 + this.boundingRect.height - this.axisConfig.tickLength - (this.showAxisLine ? this.axisConfig.axisLineWidth : 0)}`, strokeFill: this.axisThemeConfig.tickColor, strokeWidth: this.axisConfig.tickWidth })) }); } if (this.showTitle) { drawableElement.push({ type: "text", groupTexts: ["top-axis", "title"], data: [ { text: this.title, x: this.boundingRect.x + this.boundingRect.width / 2, y: this.boundingRect.y + this.axisConfig.titlePadding, fill: this.axisThemeConfig.titleColor, fontSize: this.axisConfig.titleFontSize, rotation: 0, verticalPos: "top", horizontalPos: "center" } ] }); } return drawableElement; } getDrawableElements() { if (this.axisPosition === "left") { return this.getDrawableElementsForLeftAxis(); } if (this.axisPosition === "right") { throw Error("Drawing of right axis is not implemented"); } if (this.axisPosition === "bottom") { return this.getDrawableElementsForBottomAxis(); } if (this.axisPosition === "top") { return this.getDrawableElementsForTopAxis(); } return []; } }; } }); // src/diagrams/xychart/chartBuilder/components/axis/bandAxis.ts var BandAxis; var init_bandAxis = __esm({ "src/diagrams/xychart/chartBuilder/components/axis/bandAxis.ts"() { "use strict"; init_src32(); init_logger(); init_baseAxis(); BandAxis = class extends BaseAxis { static { __name(this, "BandAxis"); } constructor(axisConfig, axisThemeConfig, categories, title2, textDimensionCalculator) { super(axisConfig, title2, textDimensionCalculator, axisThemeConfig); this.categories = categories; this.scale = band().domain(this.categories).range(this.getRange()); } setRange(range3) { super.setRange(range3); } recalculateScale() { this.scale = band().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(0.5); log.trace("BandAxis axis final categories, range: ", this.categories, this.getRange()); } getTickValues() { return this.categories; } getScaleValue(value2) { return this.scale(value2) ?? this.getRange()[0]; } }; } }); // src/diagrams/xychart/chartBuilder/components/axis/linearAxis.ts var LinearAxis; var init_linearAxis = __esm({ "src/diagrams/xychart/chartBuilder/components/axis/linearAxis.ts"() { "use strict"; init_src32(); init_baseAxis(); LinearAxis = class extends BaseAxis { static { __name(this, "LinearAxis"); } constructor(axisConfig, axisThemeConfig, domain, title2, textDimensionCalculator) { super(axisConfig, title2, textDimensionCalculator, axisThemeConfig); this.domain = domain; this.scale = linear2().domain(this.domain).range(this.getRange()); } getTickValues() { return this.scale.ticks(); } recalculateScale() { const domain = [...this.domain]; if (this.axisPosition === "left") { domain.reverse(); } this.scale = linear2().domain(domain).range(this.getRange()); } getScaleValue(value2) { return this.scale(value2); } }; } }); // src/diagrams/xychart/chartBuilder/components/axis/index.ts function getAxis(data5, axisConfig, axisThemeConfig, tmpSVGGroup2) { const textDimensionCalculator = new TextDimensionCalculatorWithFont(tmpSVGGroup2); if (isBandAxisData(data5)) { return new BandAxis( axisConfig, axisThemeConfig, data5.categories, data5.title, textDimensionCalculator ); } return new LinearAxis( axisConfig, axisThemeConfig, [data5.min, data5.max], data5.title, textDimensionCalculator ); } var init_axis2 = __esm({ "src/diagrams/xychart/chartBuilder/components/axis/index.ts"() { "use strict"; init_interfaces(); init_textDimensionCalculator(); init_bandAxis(); init_linearAxis(); __name(getAxis, "getAxis"); } }); // src/diagrams/xychart/chartBuilder/components/chartTitle.ts function getChartTitleComponent(chartConfig, chartData, chartThemeConfig, tmpSVGGroup2) { const textDimensionCalculator = new TextDimensionCalculatorWithFont(tmpSVGGroup2); return new ChartTitle(textDimensionCalculator, chartConfig, chartData, chartThemeConfig); } var ChartTitle; var init_chartTitle = __esm({ "src/diagrams/xychart/chartBuilder/components/chartTitle.ts"() { "use strict"; init_textDimensionCalculator(); ChartTitle = class { constructor(textDimensionCalculator, chartConfig, chartData, chartThemeConfig) { this.textDimensionCalculator = textDimensionCalculator; this.chartConfig = chartConfig; this.chartData = chartData; this.chartThemeConfig = chartThemeConfig; this.boundingRect = { x: 0, y: 0, width: 0, height: 0 }; this.showChartTitle = false; } static { __name(this, "ChartTitle"); } setBoundingBoxXY(point8) { this.boundingRect.x = point8.x; this.boundingRect.y = point8.y; } calculateSpace(availableSpace) { const titleDimension = this.textDimensionCalculator.getMaxDimension( [this.chartData.title], this.chartConfig.titleFontSize ); const widthRequired = Math.max(titleDimension.width, availableSpace.width); const heightRequired = titleDimension.height + 2 * this.chartConfig.titlePadding; if (titleDimension.width <= widthRequired && titleDimension.height <= heightRequired && this.chartConfig.showTitle && this.chartData.title) { this.boundingRect.width = widthRequired; this.boundingRect.height = heightRequired; this.showChartTitle = true; } return { width: this.boundingRect.width, height: this.boundingRect.height }; } getDrawableElements() { const drawableElem = []; if (this.showChartTitle) { drawableElem.push({ groupTexts: ["chart-title"], type: "text", data: [ { fontSize: this.chartConfig.titleFontSize, text: this.chartData.title, verticalPos: "middle", horizontalPos: "center", x: this.boundingRect.x + this.boundingRect.width / 2, y: this.boundingRect.y + this.boundingRect.height / 2, fill: this.chartThemeConfig.titleColor, rotation: 0 } ] }); } return drawableElem; } }; __name(getChartTitleComponent, "getChartTitleComponent"); } }); // src/diagrams/xychart/chartBuilder/components/plot/linePlot.ts var LinePlot; var init_linePlot = __esm({ "src/diagrams/xychart/chartBuilder/components/plot/linePlot.ts"() { "use strict"; init_src32(); LinePlot = class { constructor(plotData, xAxis, yAxis, orientation, plotIndex2) { this.plotData = plotData; this.xAxis = xAxis; this.yAxis = yAxis; this.orientation = orientation; this.plotIndex = plotIndex2; } static { __name(this, "LinePlot"); } getDrawableElement() { const finalData = this.plotData.data.map((d3) => [ this.xAxis.getScaleValue(d3[0]), this.yAxis.getScaleValue(d3[1]) ]); let path4; if (this.orientation === "horizontal") { path4 = line_default().y((d3) => d3[0]).x((d3) => d3[1])(finalData); } else { path4 = line_default().x((d3) => d3[0]).y((d3) => d3[1])(finalData); } if (!path4) { return []; } return [ { groupTexts: ["plot", `line-plot-${this.plotIndex}`], type: "path", data: [ { path: path4, strokeFill: this.plotData.strokeFill, strokeWidth: this.plotData.strokeWidth } ] } ]; } }; } }); // src/diagrams/xychart/chartBuilder/components/plot/barPlot.ts var BarPlot; var init_barPlot = __esm({ "src/diagrams/xychart/chartBuilder/components/plot/barPlot.ts"() { "use strict"; BarPlot = class { constructor(barData, boundingRect, xAxis, yAxis, orientation, plotIndex2) { this.barData = barData; this.boundingRect = boundingRect; this.xAxis = xAxis; this.yAxis = yAxis; this.orientation = orientation; this.plotIndex = plotIndex2; } static { __name(this, "BarPlot"); } getDrawableElement() { const finalData = this.barData.data.map((d3) => [ this.xAxis.getScaleValue(d3[0]), this.yAxis.getScaleValue(d3[1]) ]); const barPaddingPercent = 0.05; const barWidth = Math.min(this.xAxis.getAxisOuterPadding() * 2, this.xAxis.getTickDistance()) * (1 - barPaddingPercent); const barWidthHalf = barWidth / 2; if (this.orientation === "horizontal") { return [ { groupTexts: ["plot", `bar-plot-${this.plotIndex}`], type: "rect", data: finalData.map((data5) => ({ x: this.boundingRect.x, y: data5[0] - barWidthHalf, height: barWidth, width: data5[1] - this.boundingRect.x, fill: this.barData.fill, strokeWidth: 0, strokeFill: this.barData.fill })) } ]; } return [ { groupTexts: ["plot", `bar-plot-${this.plotIndex}`], type: "rect", data: finalData.map((data5) => ({ x: data5[0] - barWidthHalf, y: data5[1], width: barWidth, height: this.boundingRect.y + this.boundingRect.height - data5[1], fill: this.barData.fill, strokeWidth: 0, strokeFill: this.barData.fill })) } ]; } }; } }); // src/diagrams/xychart/chartBuilder/components/plot/index.ts function getPlotComponent(chartConfig, chartData, chartThemeConfig) { return new BasePlot(chartConfig, chartData, chartThemeConfig); } var BasePlot; var init_plot = __esm({ "src/diagrams/xychart/chartBuilder/components/plot/index.ts"() { "use strict"; init_linePlot(); init_barPlot(); BasePlot = class { constructor(chartConfig, chartData, chartThemeConfig) { this.chartConfig = chartConfig; this.chartData = chartData; this.chartThemeConfig = chartThemeConfig; this.boundingRect = { x: 0, y: 0, width: 0, height: 0 }; } static { __name(this, "BasePlot"); } setAxes(xAxis, yAxis) { this.xAxis = xAxis; this.yAxis = yAxis; } setBoundingBoxXY(point8) { this.boundingRect.x = point8.x; this.boundingRect.y = point8.y; } calculateSpace(availableSpace) { this.boundingRect.width = availableSpace.width; this.boundingRect.height = availableSpace.height; return { width: this.boundingRect.width, height: this.boundingRect.height }; } getDrawableElements() { if (!(this.xAxis && this.yAxis)) { throw Error("Axes must be passed to render Plots"); } const drawableElem = []; for (const [i2, plot] of this.chartData.plots.entries()) { switch (plot.type) { case "line": { const linePlot = new LinePlot( plot, this.xAxis, this.yAxis, this.chartConfig.chartOrientation, i2 ); drawableElem.push(...linePlot.getDrawableElement()); } break; case "bar": { const barPlot = new BarPlot( plot, this.boundingRect, this.xAxis, this.yAxis, this.chartConfig.chartOrientation, i2 ); drawableElem.push(...barPlot.getDrawableElement()); } break; } } return drawableElem; } }; __name(getPlotComponent, "getPlotComponent"); } }); // src/diagrams/xychart/chartBuilder/orchestrator.ts var Orchestrator; var init_orchestrator = __esm({ "src/diagrams/xychart/chartBuilder/orchestrator.ts"() { "use strict"; init_axis2(); init_chartTitle(); init_plot(); init_interfaces(); Orchestrator = class { constructor(chartConfig, chartData, chartThemeConfig, tmpSVGGroup2) { this.chartConfig = chartConfig; this.chartData = chartData; this.componentStore = { title: getChartTitleComponent(chartConfig, chartData, chartThemeConfig, tmpSVGGroup2), plot: getPlotComponent(chartConfig, chartData, chartThemeConfig), xAxis: getAxis( chartData.xAxis, chartConfig.xAxis, { titleColor: chartThemeConfig.xAxisTitleColor, labelColor: chartThemeConfig.xAxisLabelColor, tickColor: chartThemeConfig.xAxisTickColor, axisLineColor: chartThemeConfig.xAxisLineColor }, tmpSVGGroup2 ), yAxis: getAxis( chartData.yAxis, chartConfig.yAxis, { titleColor: chartThemeConfig.yAxisTitleColor, labelColor: chartThemeConfig.yAxisLabelColor, tickColor: chartThemeConfig.yAxisTickColor, axisLineColor: chartThemeConfig.yAxisLineColor }, tmpSVGGroup2 ) }; } static { __name(this, "Orchestrator"); } calculateVerticalSpace() { let availableWidth = this.chartConfig.width; let availableHeight = this.chartConfig.height; let plotX = 0; let plotY = 0; let chartWidth = Math.floor(availableWidth * this.chartConfig.plotReservedSpacePercent / 100); let chartHeight = Math.floor( availableHeight * this.chartConfig.plotReservedSpacePercent / 100 ); let spaceUsed = this.componentStore.plot.calculateSpace({ width: chartWidth, height: chartHeight }); availableWidth -= spaceUsed.width; availableHeight -= spaceUsed.height; spaceUsed = this.componentStore.title.calculateSpace({ width: this.chartConfig.width, height: availableHeight }); plotY = spaceUsed.height; availableHeight -= spaceUsed.height; this.componentStore.xAxis.setAxisPosition("bottom"); spaceUsed = this.componentStore.xAxis.calculateSpace({ width: availableWidth, height: availableHeight }); availableHeight -= spaceUsed.height; this.componentStore.yAxis.setAxisPosition("left"); spaceUsed = this.componentStore.yAxis.calculateSpace({ width: availableWidth, height: availableHeight }); plotX = spaceUsed.width; availableWidth -= spaceUsed.width; if (availableWidth > 0) { chartWidth += availableWidth; availableWidth = 0; } if (availableHeight > 0) { chartHeight += availableHeight; availableHeight = 0; } this.componentStore.plot.calculateSpace({ width: chartWidth, height: chartHeight }); this.componentStore.plot.setBoundingBoxXY({ x: plotX, y: plotY }); this.componentStore.xAxis.setRange([plotX, plotX + chartWidth]); this.componentStore.xAxis.setBoundingBoxXY({ x: plotX, y: plotY + chartHeight }); this.componentStore.yAxis.setRange([plotY, plotY + chartHeight]); this.componentStore.yAxis.setBoundingBoxXY({ x: 0, y: plotY }); if (this.chartData.plots.some((p3) => isBarPlot(p3))) { this.componentStore.xAxis.recalculateOuterPaddingToDrawBar(); } } calculateHorizontalSpace() { let availableWidth = this.chartConfig.width; let availableHeight = this.chartConfig.height; let titleYEnd = 0; let plotX = 0; let plotY = 0; let chartWidth = Math.floor(availableWidth * this.chartConfig.plotReservedSpacePercent / 100); let chartHeight = Math.floor( availableHeight * this.chartConfig.plotReservedSpacePercent / 100 ); let spaceUsed = this.componentStore.plot.calculateSpace({ width: chartWidth, height: chartHeight }); availableWidth -= spaceUsed.width; availableHeight -= spaceUsed.height; spaceUsed = this.componentStore.title.calculateSpace({ width: this.chartConfig.width, height: availableHeight }); titleYEnd = spaceUsed.height; availableHeight -= spaceUsed.height; this.componentStore.xAxis.setAxisPosition("left"); spaceUsed = this.componentStore.xAxis.calculateSpace({ width: availableWidth, height: availableHeight }); availableWidth -= spaceUsed.width; plotX = spaceUsed.width; this.componentStore.yAxis.setAxisPosition("top"); spaceUsed = this.componentStore.yAxis.calculateSpace({ width: availableWidth, height: availableHeight }); availableHeight -= spaceUsed.height; plotY = titleYEnd + spaceUsed.height; if (availableWidth > 0) { chartWidth += availableWidth; availableWidth = 0; } if (availableHeight > 0) { chartHeight += availableHeight; availableHeight = 0; } this.componentStore.plot.calculateSpace({ width: chartWidth, height: chartHeight }); this.componentStore.plot.setBoundingBoxXY({ x: plotX, y: plotY }); this.componentStore.yAxis.setRange([plotX, plotX + chartWidth]); this.componentStore.yAxis.setBoundingBoxXY({ x: plotX, y: titleYEnd }); this.componentStore.xAxis.setRange([plotY, plotY + chartHeight]); this.componentStore.xAxis.setBoundingBoxXY({ x: 0, y: plotY }); if (this.chartData.plots.some((p3) => isBarPlot(p3))) { this.componentStore.xAxis.recalculateOuterPaddingToDrawBar(); } } calculateSpace() { if (this.chartConfig.chartOrientation === "horizontal") { this.calculateHorizontalSpace(); } else { this.calculateVerticalSpace(); } } getDrawableElement() { this.calculateSpace(); const drawableElem = []; this.componentStore.plot.setAxes(this.componentStore.xAxis, this.componentStore.yAxis); for (const component2 of Object.values(this.componentStore)) { drawableElem.push(...component2.getDrawableElements()); } return drawableElem; } }; } }); // src/diagrams/xychart/chartBuilder/index.ts var XYChartBuilder; var init_chartBuilder = __esm({ "src/diagrams/xychart/chartBuilder/index.ts"() { "use strict"; init_orchestrator(); XYChartBuilder = class { static { __name(this, "XYChartBuilder"); } static build(config5, chartData, chartThemeConfig, tmpSVGGroup2) { const orchestrator = new Orchestrator(config5, chartData, chartThemeConfig, tmpSVGGroup2); return orchestrator.getDrawableElement(); } }; } }); // src/diagrams/xychart/xychartDb.ts function getChartDefaultThemeConfig() { const defaultThemeVariables2 = getThemeVariables3(); const config5 = getConfig(); return cleanAndMerge(defaultThemeVariables2.xyChart, config5.themeVariables.xyChart); } function getChartDefaultConfig() { const config5 = getConfig(); return cleanAndMerge( defaultConfig_default.xyChart, config5.xyChart ); } function getChartDefaultData() { return { yAxis: { type: "linear", title: "", min: Infinity, max: -Infinity }, xAxis: { type: "band", title: "", categories: [] }, title: "", plots: [] }; } function textSanitizer2(text4) { const config5 = getConfig(); return sanitizeText(text4.trim(), config5); } function setTmpSVGG(SVGG) { tmpSVGGroup = SVGG; } function setOrientation(orientation) { if (orientation === "horizontal") { xyChartConfig.chartOrientation = "horizontal"; } else { xyChartConfig.chartOrientation = "vertical"; } } function setXAxisTitle(title2) { xyChartData.xAxis.title = textSanitizer2(title2.text); } function setXAxisRangeData(min9, max10) { xyChartData.xAxis = { type: "linear", title: xyChartData.xAxis.title, min: min9, max: max10 }; hasSetXAxis = true; } function setXAxisBand(categories) { xyChartData.xAxis = { type: "band", title: xyChartData.xAxis.title, categories: categories.map((c3) => textSanitizer2(c3.text)) }; hasSetXAxis = true; } function setYAxisTitle(title2) { xyChartData.yAxis.title = textSanitizer2(title2.text); } function setYAxisRangeData(min9, max10) { xyChartData.yAxis = { type: "linear", title: xyChartData.yAxis.title, min: min9, max: max10 }; hasSetYAxis = true; } function setYAxisRangeFromPlotData(data5) { const minValue = Math.min(...data5); const maxValue = Math.max(...data5); const prevMinValue = isLinearAxisData(xyChartData.yAxis) ? xyChartData.yAxis.min : Infinity; const prevMaxValue = isLinearAxisData(xyChartData.yAxis) ? xyChartData.yAxis.max : -Infinity; xyChartData.yAxis = { type: "linear", title: xyChartData.yAxis.title, min: Math.min(prevMinValue, minValue), max: Math.max(prevMaxValue, maxValue) }; } function transformDataWithoutCategory(data5) { let retData = []; if (data5.length === 0) { return retData; } if (!hasSetXAxis) { const prevMinValue = isLinearAxisData(xyChartData.xAxis) ? xyChartData.xAxis.min : Infinity; const prevMaxValue = isLinearAxisData(xyChartData.xAxis) ? xyChartData.xAxis.max : -Infinity; setXAxisRangeData(Math.min(prevMinValue, 1), Math.max(prevMaxValue, data5.length)); } if (!hasSetYAxis) { setYAxisRangeFromPlotData(data5); } if (isBandAxisData(xyChartData.xAxis)) { retData = xyChartData.xAxis.categories.map((c3, i2) => [c3, data5[i2]]); } if (isLinearAxisData(xyChartData.xAxis)) { const min9 = xyChartData.xAxis.min; const max10 = xyChartData.xAxis.max; const step3 = (max10 - min9) / (data5.length - 1); const categories = []; for (let i2 = min9; i2 <= max10; i2 += step3) { categories.push(`${i2}`); } retData = categories.map((c3, i2) => [c3, data5[i2]]); } return retData; } function getPlotColorFromPalette(plotIndex2) { return plotColorPalette[plotIndex2 === 0 ? 0 : plotIndex2 % plotColorPalette.length]; } function setLineData(title2, data5) { const plotData = transformDataWithoutCategory(data5); xyChartData.plots.push({ type: "line", strokeFill: getPlotColorFromPalette(plotIndex), strokeWidth: 2, data: plotData }); plotIndex++; } function setBarData(title2, data5) { const plotData = transformDataWithoutCategory(data5); xyChartData.plots.push({ type: "bar", fill: getPlotColorFromPalette(plotIndex), data: plotData }); plotIndex++; } function getDrawableElem() { if (xyChartData.plots.length === 0) { throw Error("No Plot to render, please provide a plot with some data"); } xyChartData.title = getDiagramTitle(); return XYChartBuilder.build(xyChartConfig, xyChartData, xyChartThemeConfig, tmpSVGGroup); } function getChartThemeConfig() { return xyChartThemeConfig; } function getChartConfig() { return xyChartConfig; } function getXYChartData() { return xyChartData; } var plotIndex, tmpSVGGroup, xyChartConfig, xyChartThemeConfig, xyChartData, plotColorPalette, hasSetXAxis, hasSetYAxis, clear12, xychartDb_default; var init_xychartDb = __esm({ "src/diagrams/xychart/xychartDb.ts"() { "use strict"; init_config(); init_defaultConfig(); init_theme_default(); init_utils2(); init_common(); init_commonDb(); init_chartBuilder(); init_interfaces(); plotIndex = 0; xyChartConfig = getChartDefaultConfig(); xyChartThemeConfig = getChartDefaultThemeConfig(); xyChartData = getChartDefaultData(); plotColorPalette = xyChartThemeConfig.plotColorPalette.split(",").map((color2) => color2.trim()); hasSetXAxis = false; hasSetYAxis = false; __name(getChartDefaultThemeConfig, "getChartDefaultThemeConfig"); __name(getChartDefaultConfig, "getChartDefaultConfig"); __name(getChartDefaultData, "getChartDefaultData"); __name(textSanitizer2, "textSanitizer"); __name(setTmpSVGG, "setTmpSVGG"); __name(setOrientation, "setOrientation"); __name(setXAxisTitle, "setXAxisTitle"); __name(setXAxisRangeData, "setXAxisRangeData"); __name(setXAxisBand, "setXAxisBand"); __name(setYAxisTitle, "setYAxisTitle"); __name(setYAxisRangeData, "setYAxisRangeData"); __name(setYAxisRangeFromPlotData, "setYAxisRangeFromPlotData"); __name(transformDataWithoutCategory, "transformDataWithoutCategory"); __name(getPlotColorFromPalette, "getPlotColorFromPalette"); __name(setLineData, "setLineData"); __name(setBarData, "setBarData"); __name(getDrawableElem, "getDrawableElem"); __name(getChartThemeConfig, "getChartThemeConfig"); __name(getChartConfig, "getChartConfig"); __name(getXYChartData, "getXYChartData"); clear12 = /* @__PURE__ */ __name(function() { clear(); plotIndex = 0; xyChartConfig = getChartDefaultConfig(); xyChartData = getChartDefaultData(); xyChartThemeConfig = getChartDefaultThemeConfig(); plotColorPalette = xyChartThemeConfig.plotColorPalette.split(",").map((color2) => color2.trim()); hasSetXAxis = false; hasSetYAxis = false; }, "clear"); xychartDb_default = { getDrawableElem, clear: clear12, setAccTitle, getAccTitle, setDiagramTitle, getDiagramTitle, getAccDescription, setAccDescription, setOrientation, setXAxisTitle, setXAxisRangeData, setXAxisBand, setYAxisTitle, setYAxisRangeData, setLineData, setBarData, setTmpSVGG, getChartThemeConfig, getChartConfig, getXYChartData }; } }); // src/diagrams/xychart/xychartRenderer.ts var draw9, xychartRenderer_default; var init_xychartRenderer = __esm({ "src/diagrams/xychart/xychartRenderer.ts"() { "use strict"; init_logger(); init_selectSvgElement(); init_setupGraphViewbox(); draw9 = /* @__PURE__ */ __name((txt, id30, _version, diagObj) => { const db7 = diagObj.db; const themeConfig = db7.getChartThemeConfig(); const chartConfig = db7.getChartConfig(); const labelData = db7.getXYChartData().plots[0].data.map((data5) => data5[1]); function getDominantBaseLine(horizontalPos) { return horizontalPos === "top" ? "text-before-edge" : "middle"; } __name(getDominantBaseLine, "getDominantBaseLine"); function getTextAnchor(verticalPos) { return verticalPos === "left" ? "start" : verticalPos === "right" ? "end" : "middle"; } __name(getTextAnchor, "getTextAnchor"); function getTextTransformation(data5) { return `translate(${data5.x}, ${data5.y}) rotate(${data5.rotation || 0})`; } __name(getTextTransformation, "getTextTransformation"); log.debug("Rendering xychart chart\n" + txt); const svg2 = selectSvgElement(id30); const group2 = svg2.append("g").attr("class", "main"); const background = group2.append("rect").attr("width", chartConfig.width).attr("height", chartConfig.height).attr("class", "background"); configureSvgSize(svg2, chartConfig.height, chartConfig.width, true); svg2.attr("viewBox", `0 0 ${chartConfig.width} ${chartConfig.height}`); background.attr("fill", themeConfig.backgroundColor); db7.setTmpSVGG(svg2.append("g").attr("class", "mermaid-tmp-group")); const shapes4 = db7.getDrawableElem(); const groups = {}; function getGroup(gList) { let elem = group2; let prefix = ""; for (const [i2] of gList.entries()) { let parent4 = group2; if (i2 > 0 && groups[prefix]) { parent4 = groups[prefix]; } prefix += gList[i2]; elem = groups[prefix]; if (!elem) { elem = groups[prefix] = parent4.append("g").attr("class", gList[i2]); } } return elem; } __name(getGroup, "getGroup"); for (const shape of shapes4) { if (shape.data.length === 0) { continue; } const shapeGroup = getGroup(shape.groupTexts); switch (shape.type) { case "rect": shapeGroup.selectAll("rect").data(shape.data).enter().append("rect").attr("x", (data5) => data5.x).attr("y", (data5) => data5.y).attr("width", (data5) => data5.width).attr("height", (data5) => data5.height).attr("fill", (data5) => data5.fill).attr("stroke", (data5) => data5.strokeFill).attr("stroke-width", (data5) => data5.strokeWidth); if (chartConfig.showDataLabel) { if (chartConfig.chartOrientation === "horizontal") { let fitsHorizontally2 = function(item, fontSize) { const { data: data5, label } = item; const textWidth = fontSize * label.length * charWidthFactor; return textWidth <= data5.width - 10; }; var fitsHorizontally = fitsHorizontally2; __name(fitsHorizontally2, "fitsHorizontally"); const charWidthFactor = 0.7; const validItems = shape.data.map((d3, i2) => ({ data: d3, label: labelData[i2].toString() })).filter((item) => item.data.width > 0 && item.data.height > 0); const candidateFontSizes = validItems.map((item) => { const { data: data5 } = item; let fontSize = data5.height * 0.7; while (!fitsHorizontally2(item, fontSize) && fontSize > 0) { fontSize -= 1; } return fontSize; }); const uniformFontSize = Math.floor(Math.min(...candidateFontSizes)); shapeGroup.selectAll("text").data(validItems).enter().append("text").attr("x", (item) => item.data.x + item.data.width - 10).attr("y", (item) => item.data.y + item.data.height / 2).attr("text-anchor", "end").attr("dominant-baseline", "middle").attr("fill", "black").attr("font-size", `${uniformFontSize}px`).text((item) => item.label); } else { let fitsInBar2 = function(item, fontSize, yOffset2) { const { data: data5, label } = item; const charWidthFactor = 0.7; const textWidth = fontSize * label.length * charWidthFactor; const centerX = data5.x + data5.width / 2; const leftEdge = centerX - textWidth / 2; const rightEdge = centerX + textWidth / 2; const horizontalFits = leftEdge >= data5.x && rightEdge <= data5.x + data5.width; const verticalFits = data5.y + yOffset2 + fontSize <= data5.y + data5.height; return horizontalFits && verticalFits; }; var fitsInBar = fitsInBar2; __name(fitsInBar2, "fitsInBar"); const yOffset = 10; const validItems = shape.data.map((d3, i2) => ({ data: d3, label: labelData[i2].toString() })).filter((item) => item.data.width > 0 && item.data.height > 0); const candidateFontSizes = validItems.map((item) => { const { data: data5, label } = item; let fontSize = data5.width / (label.length * 0.7); while (!fitsInBar2(item, fontSize, yOffset) && fontSize > 0) { fontSize -= 1; } return fontSize; }); const uniformFontSize = Math.floor(Math.min(...candidateFontSizes)); shapeGroup.selectAll("text").data(validItems).enter().append("text").attr("x", (item) => item.data.x + item.data.width / 2).attr("y", (item) => item.data.y + yOffset).attr("text-anchor", "middle").attr("dominant-baseline", "hanging").attr("fill", "black").attr("font-size", `${uniformFontSize}px`).text((item) => item.label); } } break; case "text": shapeGroup.selectAll("text").data(shape.data).enter().append("text").attr("x", 0).attr("y", 0).attr("fill", (data5) => data5.fill).attr("font-size", (data5) => data5.fontSize).attr("dominant-baseline", (data5) => getDominantBaseLine(data5.verticalPos)).attr("text-anchor", (data5) => getTextAnchor(data5.horizontalPos)).attr("transform", (data5) => getTextTransformation(data5)).text((data5) => data5.text); break; case "path": shapeGroup.selectAll("path").data(shape.data).enter().append("path").attr("d", (data5) => data5.path).attr("fill", (data5) => data5.fill ? data5.fill : "none").attr("stroke", (data5) => data5.strokeFill).attr("stroke-width", (data5) => data5.strokeWidth); break; } } }, "draw"); xychartRenderer_default = { draw: draw9 }; } }); // src/diagrams/xychart/xychartDiagram.ts var xychartDiagram_exports = {}; __export(xychartDiagram_exports, { diagram: () => diagram9 }); var diagram9; var init_xychartDiagram = __esm({ "src/diagrams/xychart/xychartDiagram.ts"() { "use strict"; init_xychart(); init_xychartDb(); init_xychartRenderer(); diagram9 = { parser: xychart_default, db: xychartDb_default, renderer: xychartRenderer_default }; } }); // src/diagrams/requirement/parser/requirementDiagram.jison var parser10, requirementDiagram_default; var init_requirementDiagram = __esm({ "src/diagrams/requirement/parser/requirementDiagram.jison"() { "use strict"; parser10 = (function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) { for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ; return o3; }, "o"), $V0 = [1, 3], $V1 = [1, 4], $V2 = [1, 5], $V3 = [1, 6], $V4 = [5, 6, 8, 9, 11, 13, 21, 22, 23, 24, 41, 42, 43, 44, 45, 46, 54, 72, 74, 77, 89, 90], $V5 = [1, 22], $V6 = [2, 7], $V7 = [1, 26], $V8 = [1, 27], $V9 = [1, 28], $Va = [1, 29], $Vb = [1, 33], $Vc = [1, 34], $Vd = [1, 35], $Ve = [1, 36], $Vf = [1, 37], $Vg = [1, 38], $Vh = [1, 24], $Vi = [1, 31], $Vj = [1, 32], $Vk = [1, 30], $Vl = [1, 39], $Vm = [1, 40], $Vn = [5, 8, 9, 11, 13, 21, 22, 23, 24, 41, 42, 43, 44, 45, 46, 54, 72, 74, 77, 89, 90], $Vo = [1, 61], $Vp = [89, 90], $Vq = [5, 8, 9, 11, 13, 21, 22, 23, 24, 27, 29, 41, 42, 43, 44, 45, 46, 54, 61, 63, 72, 74, 75, 76, 77, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90], $Vr = [27, 29], $Vs = [1, 70], $Vt = [1, 71], $Vu = [1, 72], $Vv = [1, 73], $Vw = [1, 74], $Vx = [1, 75], $Vy = [1, 76], $Vz = [1, 83], $VA = [1, 80], $VB = [1, 84], $VC = [1, 85], $VD = [1, 86], $VE = [1, 87], $VF = [1, 88], $VG = [1, 89], $VH = [1, 90], $VI = [1, 91], $VJ = [1, 92], $VK = [5, 8, 9, 11, 13, 21, 22, 23, 24, 27, 41, 42, 43, 44, 45, 46, 54, 72, 74, 75, 76, 77, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90], $VL = [63, 64], $VM = [1, 101], $VN = [5, 8, 9, 11, 13, 21, 22, 23, 24, 41, 42, 43, 44, 45, 46, 54, 72, 74, 76, 77, 89, 90], $VO = [5, 8, 9, 11, 13, 21, 22, 23, 24, 41, 42, 43, 44, 45, 46, 54, 72, 74, 75, 76, 77, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90], $VP = [1, 110], $VQ = [1, 106], $VR = [1, 107], $VS = [1, 108], $VT = [1, 109], $VU = [1, 111], $VV = [1, 116], $VW = [1, 117], $VX = [1, 114], $VY = [1, 115]; var parser24 = { trace: /* @__PURE__ */ __name(function trace() { }, "trace"), yy: {}, symbols_: { "error": 2, "start": 3, "directive": 4, "NEWLINE": 5, "RD": 6, "diagram": 7, "EOF": 8, "acc_title": 9, "acc_title_value": 10, "acc_descr": 11, "acc_descr_value": 12, "acc_descr_multiline_value": 13, "requirementDef": 14, "elementDef": 15, "relationshipDef": 16, "direction": 17, "styleStatement": 18, "classDefStatement": 19, "classStatement": 20, "direction_tb": 21, "direction_bt": 22, "direction_rl": 23, "direction_lr": 24, "requirementType": 25, "requirementName": 26, "STRUCT_START": 27, "requirementBody": 28, "STYLE_SEPARATOR": 29, "idList": 30, "ID": 31, "COLONSEP": 32, "id": 33, "TEXT": 34, "text": 35, "RISK": 36, "riskLevel": 37, "VERIFYMTHD": 38, "verifyType": 39, "STRUCT_STOP": 40, "REQUIREMENT": 41, "FUNCTIONAL_REQUIREMENT": 42, "INTERFACE_REQUIREMENT": 43, "PERFORMANCE_REQUIREMENT": 44, "PHYSICAL_REQUIREMENT": 45, "DESIGN_CONSTRAINT": 46, "LOW_RISK": 47, "MED_RISK": 48, "HIGH_RISK": 49, "VERIFY_ANALYSIS": 50, "VERIFY_DEMONSTRATION": 51, "VERIFY_INSPECTION": 52, "VERIFY_TEST": 53, "ELEMENT": 54, "elementName": 55, "elementBody": 56, "TYPE": 57, "type": 58, "DOCREF": 59, "ref": 60, "END_ARROW_L": 61, "relationship": 62, "LINE": 63, "END_ARROW_R": 64, "CONTAINS": 65, "COPIES": 66, "DERIVES": 67, "SATISFIES": 68, "VERIFIES": 69, "REFINES": 70, "TRACES": 71, "CLASSDEF": 72, "stylesOpt": 73, "CLASS": 74, "ALPHA": 75, "COMMA": 76, "STYLE": 77, "style": 78, "styleComponent": 79, "NUM": 80, "COLON": 81, "UNIT": 82, "SPACE": 83, "BRKT": 84, "PCT": 85, "MINUS": 86, "LABEL": 87, "SEMICOLON": 88, "unqString": 89, "qString": 90, "$accept": 0, "$end": 1 }, terminals_: { 2: "error", 5: "NEWLINE", 6: "RD", 8: "EOF", 9: "acc_title", 10: "acc_title_value", 11: "acc_descr", 12: "acc_descr_value", 13: "acc_descr_multiline_value", 21: "direction_tb", 22: "direction_bt", 23: "direction_rl", 24: "direction_lr", 27: "STRUCT_START", 29: "STYLE_SEPARATOR", 31: "ID", 32: "COLONSEP", 34: "TEXT", 36: "RISK", 38: "VERIFYMTHD", 40: "STRUCT_STOP", 41: "REQUIREMENT", 42: "FUNCTIONAL_REQUIREMENT", 43: "INTERFACE_REQUIREMENT", 44: "PERFORMANCE_REQUIREMENT", 45: "PHYSICAL_REQUIREMENT", 46: "DESIGN_CONSTRAINT", 47: "LOW_RISK", 48: "MED_RISK", 49: "HIGH_RISK", 50: "VERIFY_ANALYSIS", 51: "VERIFY_DEMONSTRATION", 52: "VERIFY_INSPECTION", 53: "VERIFY_TEST", 54: "ELEMENT", 57: "TYPE", 59: "DOCREF", 61: "END_ARROW_L", 63: "LINE", 64: "END_ARROW_R", 65: "CONTAINS", 66: "COPIES", 67: "DERIVES", 68: "SATISFIES", 69: "VERIFIES", 70: "REFINES", 71: "TRACES", 72: "CLASSDEF", 74: "CLASS", 75: "ALPHA", 76: "COMMA", 77: "STYLE", 80: "NUM", 81: "COLON", 82: "UNIT", 83: "SPACE", 84: "BRKT", 85: "PCT", 86: "MINUS", 87: "LABEL", 88: "SEMICOLON", 89: "unqString", 90: "qString" }, productions_: [0, [3, 3], [3, 2], [3, 4], [4, 2], [4, 2], [4, 1], [7, 0], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [17, 1], [17, 1], [17, 1], [17, 1], [14, 5], [14, 7], [28, 5], [28, 5], [28, 5], [28, 5], [28, 2], [28, 1], [25, 1], [25, 1], [25, 1], [25, 1], [25, 1], [25, 1], [37, 1], [37, 1], [37, 1], [39, 1], [39, 1], [39, 1], [39, 1], [15, 5], [15, 7], [56, 5], [56, 5], [56, 2], [56, 1], [16, 5], [16, 5], [62, 1], [62, 1], [62, 1], [62, 1], [62, 1], [62, 1], [62, 1], [19, 3], [20, 3], [20, 3], [30, 1], [30, 3], [30, 1], [30, 3], [18, 3], [73, 1], [73, 3], [78, 1], [78, 2], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [26, 1], [26, 1], [33, 1], [33, 1], [35, 1], [35, 1], [55, 1], [55, 1], [58, 1], [58, 1], [60, 1], [60, 1]], performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { var $0 = $$.length - 1; switch (yystate) { case 4: this.$ = $$[$0].trim(); yy.setAccTitle(this.$); break; case 5: case 6: this.$ = $$[$0].trim(); yy.setAccDescription(this.$); break; case 7: this.$ = []; break; case 17: yy.setDirection("TB"); break; case 18: yy.setDirection("BT"); break; case 19: yy.setDirection("RL"); break; case 20: yy.setDirection("LR"); break; case 21: yy.addRequirement($$[$0 - 3], $$[$0 - 4]); break; case 22: yy.addRequirement($$[$0 - 5], $$[$0 - 6]); yy.setClass([$$[$0 - 5]], $$[$0 - 3]); break; case 23: yy.setNewReqId($$[$0 - 2]); break; case 24: yy.setNewReqText($$[$0 - 2]); break; case 25: yy.setNewReqRisk($$[$0 - 2]); break; case 26: yy.setNewReqVerifyMethod($$[$0 - 2]); break; case 29: this.$ = yy.RequirementType.REQUIREMENT; break; case 30: this.$ = yy.RequirementType.FUNCTIONAL_REQUIREMENT; break; case 31: this.$ = yy.RequirementType.INTERFACE_REQUIREMENT; break; case 32: this.$ = yy.RequirementType.PERFORMANCE_REQUIREMENT; break; case 33: this.$ = yy.RequirementType.PHYSICAL_REQUIREMENT; break; case 34: this.$ = yy.RequirementType.DESIGN_CONSTRAINT; break; case 35: this.$ = yy.RiskLevel.LOW_RISK; break; case 36: this.$ = yy.RiskLevel.MED_RISK; break; case 37: this.$ = yy.RiskLevel.HIGH_RISK; break; case 38: this.$ = yy.VerifyType.VERIFY_ANALYSIS; break; case 39: this.$ = yy.VerifyType.VERIFY_DEMONSTRATION; break; case 40: this.$ = yy.VerifyType.VERIFY_INSPECTION; break; case 41: this.$ = yy.VerifyType.VERIFY_TEST; break; case 42: yy.addElement($$[$0 - 3]); break; case 43: yy.addElement($$[$0 - 5]); yy.setClass([$$[$0 - 5]], $$[$0 - 3]); break; case 44: yy.setNewElementType($$[$0 - 2]); break; case 45: yy.setNewElementDocRef($$[$0 - 2]); break; case 48: yy.addRelationship($$[$0 - 2], $$[$0], $$[$0 - 4]); break; case 49: yy.addRelationship($$[$0 - 2], $$[$0 - 4], $$[$0]); break; case 50: this.$ = yy.Relationships.CONTAINS; break; case 51: this.$ = yy.Relationships.COPIES; break; case 52: this.$ = yy.Relationships.DERIVES; break; case 53: this.$ = yy.Relationships.SATISFIES; break; case 54: this.$ = yy.Relationships.VERIFIES; break; case 55: this.$ = yy.Relationships.REFINES; break; case 56: this.$ = yy.Relationships.TRACES; break; case 57: this.$ = $$[$0 - 2]; yy.defineClass($$[$0 - 1], $$[$0]); break; case 58: yy.setClass($$[$0 - 1], $$[$0]); break; case 59: yy.setClass([$$[$0 - 2]], $$[$0]); break; case 60: case 62: this.$ = [$$[$0]]; break; case 61: case 63: this.$ = $$[$0 - 2].concat([$$[$0]]); break; case 64: this.$ = $$[$0 - 2]; yy.setCssStyle($$[$0 - 1], $$[$0]); break; case 65: this.$ = [$$[$0]]; break; case 66: $$[$0 - 2].push($$[$0]); this.$ = $$[$0 - 2]; break; case 68: this.$ = $$[$0 - 1] + $$[$0]; break; } }, "anonymous"), table: [{ 3: 1, 4: 2, 6: $V0, 9: $V1, 11: $V2, 13: $V3 }, { 1: [3] }, { 3: 8, 4: 2, 5: [1, 7], 6: $V0, 9: $V1, 11: $V2, 13: $V3 }, { 5: [1, 9] }, { 10: [1, 10] }, { 12: [1, 11] }, o2($V4, [2, 6]), { 3: 12, 4: 2, 6: $V0, 9: $V1, 11: $V2, 13: $V3 }, { 1: [2, 2] }, { 4: 17, 5: $V5, 7: 13, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 18, 18: 19, 19: 20, 20: 21, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: 23, 33: 25, 41: $Vb, 42: $Vc, 43: $Vd, 44: $Ve, 45: $Vf, 46: $Vg, 54: $Vh, 72: $Vi, 74: $Vj, 77: $Vk, 89: $Vl, 90: $Vm }, o2($V4, [2, 4]), o2($V4, [2, 5]), { 1: [2, 1] }, { 8: [1, 41] }, { 4: 17, 5: $V5, 7: 42, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 18, 18: 19, 19: 20, 20: 21, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: 23, 33: 25, 41: $Vb, 42: $Vc, 43: $Vd, 44: $Ve, 45: $Vf, 46: $Vg, 54: $Vh, 72: $Vi, 74: $Vj, 77: $Vk, 89: $Vl, 90: $Vm }, { 4: 17, 5: $V5, 7: 43, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 18, 18: 19, 19: 20, 20: 21, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: 23, 33: 25, 41: $Vb, 42: $Vc, 43: $Vd, 44: $Ve, 45: $Vf, 46: $Vg, 54: $Vh, 72: $Vi, 74: $Vj, 77: $Vk, 89: $Vl, 90: $Vm }, { 4: 17, 5: $V5, 7: 44, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 18, 18: 19, 19: 20, 20: 21, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: 23, 33: 25, 41: $Vb, 42: $Vc, 43: $Vd, 44: $Ve, 45: $Vf, 46: $Vg, 54: $Vh, 72: $Vi, 74: $Vj, 77: $Vk, 89: $Vl, 90: $Vm }, { 4: 17, 5: $V5, 7: 45, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 18, 18: 19, 19: 20, 20: 21, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: 23, 33: 25, 41: $Vb, 42: $Vc, 43: $Vd, 44: $Ve, 45: $Vf, 46: $Vg, 54: $Vh, 72: $Vi, 74: $Vj, 77: $Vk, 89: $Vl, 90: $Vm }, { 4: 17, 5: $V5, 7: 46, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 18, 18: 19, 19: 20, 20: 21, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: 23, 33: 25, 41: $Vb, 42: $Vc, 43: $Vd, 44: $Ve, 45: $Vf, 46: $Vg, 54: $Vh, 72: $Vi, 74: $Vj, 77: $Vk, 89: $Vl, 90: $Vm }, { 4: 17, 5: $V5, 7: 47, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 18, 18: 19, 19: 20, 20: 21, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: 23, 33: 25, 41: $Vb, 42: $Vc, 43: $Vd, 44: $Ve, 45: $Vf, 46: $Vg, 54: $Vh, 72: $Vi, 74: $Vj, 77: $Vk, 89: $Vl, 90: $Vm }, { 4: 17, 5: $V5, 7: 48, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 18, 18: 19, 19: 20, 20: 21, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: 23, 33: 25, 41: $Vb, 42: $Vc, 43: $Vd, 44: $Ve, 45: $Vf, 46: $Vg, 54: $Vh, 72: $Vi, 74: $Vj, 77: $Vk, 89: $Vl, 90: $Vm }, { 4: 17, 5: $V5, 7: 49, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 18, 18: 19, 19: 20, 20: 21, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: 23, 33: 25, 41: $Vb, 42: $Vc, 43: $Vd, 44: $Ve, 45: $Vf, 46: $Vg, 54: $Vh, 72: $Vi, 74: $Vj, 77: $Vk, 89: $Vl, 90: $Vm }, { 4: 17, 5: $V5, 7: 50, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 18, 18: 19, 19: 20, 20: 21, 21: $V7, 22: $V8, 23: $V9, 24: $Va, 25: 23, 33: 25, 41: $Vb, 42: $Vc, 43: $Vd, 44: $Ve, 45: $Vf, 46: $Vg, 54: $Vh, 72: $Vi, 74: $Vj, 77: $Vk, 89: $Vl, 90: $Vm }, { 26: 51, 89: [1, 52], 90: [1, 53] }, { 55: 54, 89: [1, 55], 90: [1, 56] }, { 29: [1, 59], 61: [1, 57], 63: [1, 58] }, o2($Vn, [2, 17]), o2($Vn, [2, 18]), o2($Vn, [2, 19]), o2($Vn, [2, 20]), { 30: 60, 33: 62, 75: $Vo, 89: $Vl, 90: $Vm }, { 30: 63, 33: 62, 75: $Vo, 89: $Vl, 90: $Vm }, { 30: 64, 33: 62, 75: $Vo, 89: $Vl, 90: $Vm }, o2($Vp, [2, 29]), o2($Vp, [2, 30]), o2($Vp, [2, 31]), o2($Vp, [2, 32]), o2($Vp, [2, 33]), o2($Vp, [2, 34]), o2($Vq, [2, 81]), o2($Vq, [2, 82]), { 1: [2, 3] }, { 8: [2, 8] }, { 8: [2, 9] }, { 8: [2, 10] }, { 8: [2, 11] }, { 8: [2, 12] }, { 8: [2, 13] }, { 8: [2, 14] }, { 8: [2, 15] }, { 8: [2, 16] }, { 27: [1, 65], 29: [1, 66] }, o2($Vr, [2, 79]), o2($Vr, [2, 80]), { 27: [1, 67], 29: [1, 68] }, o2($Vr, [2, 85]), o2($Vr, [2, 86]), { 62: 69, 65: $Vs, 66: $Vt, 67: $Vu, 68: $Vv, 69: $Vw, 70: $Vx, 71: $Vy }, { 62: 77, 65: $Vs, 66: $Vt, 67: $Vu, 68: $Vv, 69: $Vw, 70: $Vx, 71: $Vy }, { 30: 78, 33: 62, 75: $Vo, 89: $Vl, 90: $Vm }, { 73: 79, 75: $Vz, 76: $VA, 78: 81, 79: 82, 80: $VB, 81: $VC, 82: $VD, 83: $VE, 84: $VF, 85: $VG, 86: $VH, 87: $VI, 88: $VJ }, o2($VK, [2, 60]), o2($VK, [2, 62]), { 73: 93, 75: $Vz, 76: $VA, 78: 81, 79: 82, 80: $VB, 81: $VC, 82: $VD, 83: $VE, 84: $VF, 85: $VG, 86: $VH, 87: $VI, 88: $VJ }, { 30: 94, 33: 62, 75: $Vo, 76: $VA, 89: $Vl, 90: $Vm }, { 5: [1, 95] }, { 30: 96, 33: 62, 75: $Vo, 89: $Vl, 90: $Vm }, { 5: [1, 97] }, { 30: 98, 33: 62, 75: $Vo, 89: $Vl, 90: $Vm }, { 63: [1, 99] }, o2($VL, [2, 50]), o2($VL, [2, 51]), o2($VL, [2, 52]), o2($VL, [2, 53]), o2($VL, [2, 54]), o2($VL, [2, 55]), o2($VL, [2, 56]), { 64: [1, 100] }, o2($Vn, [2, 59], { 76: $VA }), o2($Vn, [2, 64], { 76: $VM }), { 33: 103, 75: [1, 102], 89: $Vl, 90: $Vm }, o2($VN, [2, 65], { 79: 104, 75: $Vz, 80: $VB, 81: $VC, 82: $VD, 83: $VE, 84: $VF, 85: $VG, 86: $VH, 87: $VI, 88: $VJ }), o2($VO, [2, 67]), o2($VO, [2, 69]), o2($VO, [2, 70]), o2($VO, [2, 71]), o2($VO, [2, 72]), o2($VO, [2, 73]), o2($VO, [2, 74]), o2($VO, [2, 75]), o2($VO, [2, 76]), o2($VO, [2, 77]), o2($VO, [2, 78]), o2($Vn, [2, 57], { 76: $VM }), o2($Vn, [2, 58], { 76: $VA }), { 5: $VP, 28: 105, 31: $VQ, 34: $VR, 36: $VS, 38: $VT, 40: $VU }, { 27: [1, 112], 76: $VA }, { 5: $VV, 40: $VW, 56: 113, 57: $VX, 59: $VY }, { 27: [1, 118], 76: $VA }, { 33: 119, 89: $Vl, 90: $Vm }, { 33: 120, 89: $Vl, 90: $Vm }, { 75: $Vz, 78: 121, 79: 82, 80: $VB, 81: $VC, 82: $VD, 83: $VE, 84: $VF, 85: $VG, 86: $VH, 87: $VI, 88: $VJ }, o2($VK, [2, 61]), o2($VK, [2, 63]), o2($VO, [2, 68]), o2($Vn, [2, 21]), { 32: [1, 122] }, { 32: [1, 123] }, { 32: [1, 124] }, { 32: [1, 125] }, { 5: $VP, 28: 126, 31: $VQ, 34: $VR, 36: $VS, 38: $VT, 40: $VU }, o2($Vn, [2, 28]), { 5: [1, 127] }, o2($Vn, [2, 42]), { 32: [1, 128] }, { 32: [1, 129] }, { 5: $VV, 40: $VW, 56: 130, 57: $VX, 59: $VY }, o2($Vn, [2, 47]), { 5: [1, 131] }, o2($Vn, [2, 48]), o2($Vn, [2, 49]), o2($VN, [2, 66], { 79: 104, 75: $Vz, 80: $VB, 81: $VC, 82: $VD, 83: $VE, 84: $VF, 85: $VG, 86: $VH, 87: $VI, 88: $VJ }), { 33: 132, 89: $Vl, 90: $Vm }, { 35: 133, 89: [1, 134], 90: [1, 135] }, { 37: 136, 47: [1, 137], 48: [1, 138], 49: [1, 139] }, { 39: 140, 50: [1, 141], 51: [1, 142], 52: [1, 143], 53: [1, 144] }, o2($Vn, [2, 27]), { 5: $VP, 28: 145, 31: $VQ, 34: $VR, 36: $VS, 38: $VT, 40: $VU }, { 58: 146, 89: [1, 147], 90: [1, 148] }, { 60: 149, 89: [1, 150], 90: [1, 151] }, o2($Vn, [2, 46]), { 5: $VV, 40: $VW, 56: 152, 57: $VX, 59: $VY }, { 5: [1, 153] }, { 5: [1, 154] }, { 5: [2, 83] }, { 5: [2, 84] }, { 5: [1, 155] }, { 5: [2, 35] }, { 5: [2, 36] }, { 5: [2, 37] }, { 5: [1, 156] }, { 5: [2, 38] }, { 5: [2, 39] }, { 5: [2, 40] }, { 5: [2, 41] }, o2($Vn, [2, 22]), { 5: [1, 157] }, { 5: [2, 87] }, { 5: [2, 88] }, { 5: [1, 158] }, { 5: [2, 89] }, { 5: [2, 90] }, o2($Vn, [2, 43]), { 5: $VP, 28: 159, 31: $VQ, 34: $VR, 36: $VS, 38: $VT, 40: $VU }, { 5: $VP, 28: 160, 31: $VQ, 34: $VR, 36: $VS, 38: $VT, 40: $VU }, { 5: $VP, 28: 161, 31: $VQ, 34: $VR, 36: $VS, 38: $VT, 40: $VU }, { 5: $VP, 28: 162, 31: $VQ, 34: $VR, 36: $VS, 38: $VT, 40: $VU }, { 5: $VV, 40: $VW, 56: 163, 57: $VX, 59: $VY }, { 5: $VV, 40: $VW, 56: 164, 57: $VX, 59: $VY }, o2($Vn, [2, 23]), o2($Vn, [2, 24]), o2($Vn, [2, 25]), o2($Vn, [2, 26]), o2($Vn, [2, 44]), o2($Vn, [2, 45])], defaultActions: { 8: [2, 2], 12: [2, 1], 41: [2, 3], 42: [2, 8], 43: [2, 9], 44: [2, 10], 45: [2, 11], 46: [2, 12], 47: [2, 13], 48: [2, 14], 49: [2, 15], 50: [2, 16], 134: [2, 83], 135: [2, 84], 137: [2, 35], 138: [2, 36], 139: [2, 37], 141: [2, 38], 142: [2, 39], 143: [2, 40], 144: [2, 41], 147: [2, 87], 148: [2, 88], 150: [2, 89], 151: [2, 90] }, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (hash.recoverable) { this.trace(str2); } else { var error3 = new Error(str2); error3.hash = hash; throw error3; } }, "parseError"), parse: /* @__PURE__ */ __name(function parse7(input) { var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1; var args = lstack.slice.call(arguments, 1); var lexer2 = Object.create(this.lexer); var sharedState = { yy: {} }; for (var k2 in this.yy) { if (Object.prototype.hasOwnProperty.call(this.yy, k2)) { sharedState.yy[k2] = this.yy[k2]; } } lexer2.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer2; sharedState.yy.parser = this; if (typeof lexer2.yylloc == "undefined") { lexer2.yylloc = {}; } var yyloc = lexer2.yylloc; lstack.push(yyloc); var ranges = lexer2.options && lexer2.options.ranges; if (typeof sharedState.yy.parseError === "function") { this.parseError = sharedState.yy.parseError; } else { this.parseError = Object.getPrototypeOf(this).parseError; } function popStack(n2) { stack.length = stack.length - 2 * n2; vstack.length = vstack.length - n2; lstack.length = lstack.length - n2; } __name(popStack, "popStack"); function lex() { var token2; token2 = tstack.pop() || lexer2.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex, "lex"); var symbol, preErrorSymbol, state3, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state3 = stack[stack.length - 1]; if (this.defaultActions[state3]) { action = this.defaultActions[state3]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex(); } action = table[state3] && table[state3][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state3]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer2.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; } else { errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); } this.parseError(errStr, { text: lexer2.match, token: this.terminals_[symbol] || symbol, line: lexer2.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state3 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer2.yytext); lstack.push(lexer2.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer2.yyleng; yytext = lexer2.yytext; yylineno = lexer2.yylineno; yyloc = lexer2.yylloc; if (recovering > 0) { recovering--; } } else { symbol = preErrorSymbol; preErrorSymbol = null; } break; case 2: len = this.productions_[action[1]][1]; yyval.$ = vstack[vstack.length - len]; yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; if (ranges) { yyval._$.range = [ lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1] ]; } r2 = this.performAction.apply(yyval, [ yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack ].concat(args)); if (typeof r2 !== "undefined") { return r2; } if (len) { stack = stack.slice(0, -1 * len * 2); vstack = vstack.slice(0, -1 * len); lstack = lstack.slice(0, -1 * len); } stack.push(this.productions_[action[1]][0]); vstack.push(yyval.$); lstack.push(yyval._$); newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]]; stack.push(newState2); break; case 3: return true; } } return true; }, "parse") }; var lexer = /* @__PURE__ */ (function() { var lexer2 = { EOF: 1, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (this.yy.parser) { this.yy.parser.parseError(str2, hash); } else { throw new Error(str2); } }, "parseError"), // resets the lexer, sets new input setInput: /* @__PURE__ */ __name(function(input, yy) { this.yy = yy || this.yy || {}; this._input = input; this._more = this._backtrack = this.done = false; 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 }; if (this.options.ranges) { this.yylloc.range = [0, 0]; } this.offset = 0; return this; }, "setInput"), // consumes and returns one char from the input input: /* @__PURE__ */ __name(function() { var ch = this._input[0]; this.yytext += ch; this.yyleng++; this.offset++; this.match += ch; this.matched += ch; var lines = ch.match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno++; this.yylloc.last_line++; } else { this.yylloc.last_column++; } if (this.options.ranges) { this.yylloc.range[1]++; } this._input = this._input.slice(1); return ch; }, "input"), // unshifts one char (or a string) into the input unput: /* @__PURE__ */ __name(function(ch) { var len = ch.length; var lines = ch.split(/(?:\r\n?|\n)/g); this._input = ch + this._input; this.yytext = this.yytext.substr(0, this.yytext.length - len); this.offset -= len; var oldLines = 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); if (lines.length - 1) { this.yylineno -= lines.length - 1; } var r2 = this.yylloc.range; this.yylloc = { first_line: this.yylloc.first_line, last_line: this.yylineno + 1, first_column: this.yylloc.first_column, last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len }; if (this.options.ranges) { this.yylloc.range = [r2[0], r2[0] + this.yyleng - len]; } this.yyleng = this.yytext.length; return this; }, "unput"), // When called from action, caches matched text and appends it on next action more: /* @__PURE__ */ __name(function() { this._more = true; return this; }, "more"), // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. reject: /* @__PURE__ */ __name(function() { if (this.options.backtrack_lexer) { this._backtrack = true; } 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"), // retain first n characters of the match less: /* @__PURE__ */ __name(function(n2) { this.unput(this.match.slice(n2)); }, "less"), // displays already matched input, i.e. for error messages pastInput: /* @__PURE__ */ __name(function() { var past = this.matched.substr(0, this.matched.length - this.match.length); return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); }, "pastInput"), // displays upcoming input, i.e. for error messages upcomingInput: /* @__PURE__ */ __name(function() { var next3 = this.match; if (next3.length < 20) { next3 += this._input.substr(0, 20 - next3.length); } return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, ""); }, "upcomingInput"), // displays the character position where the lexing error occurred, i.e. for error messages showPosition: /* @__PURE__ */ __name(function() { var pre = this.pastInput(); var c3 = new Array(pre.length + 1).join("-"); return pre + this.upcomingInput() + "\n" + c3 + "^"; }, "showPosition"), // test the lexed token: return FALSE when not a match, otherwise return token test_match: /* @__PURE__ */ __name(function(match2, indexed_rule) { var token2, lines, backup; if (this.options.backtrack_lexer) { backup = { 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 }; if (this.options.ranges) { backup.yylloc.range = this.yylloc.range.slice(0); } } lines = match2[0].match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno += lines.length; } this.yylloc = { first_line: this.yylloc.last_line, last_line: this.yylineno + 1, first_column: this.yylloc.last_column, last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; this.yyleng = this.yytext.length; if (this.options.ranges) { this.yylloc.range = [this.offset, this.offset += this.yyleng]; } this._more = false; this._backtrack = false; this._input = this._input.slice(match2[0].length); this.matched += match2[0]; token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); if (this.done && this._input) { this.done = false; } if (token2) { return token2; } else if (this._backtrack) { for (var k2 in backup) { this[k2] = backup[k2]; } return false; } return false; }, "test_match"), // return next match in input next: /* @__PURE__ */ __name(function() { if (this.done) { return this.EOF; } if (!this._input) { this.done = true; } var token2, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[index]); if (token2 !== false) { return token2; } return false; } if (this._input === "") { return this.EOF; } else { return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { text: "", token: null, line: this.yylineno }); } }, "next"), // return next match that has a token lex: /* @__PURE__ */ __name(function lex() { var r2 = this.next(); if (r2) { return r2; } else { return this.lex(); } }, "lex"), // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) begin: /* @__PURE__ */ __name(function begin(condition) { this.conditionStack.push(condition); }, "begin"), // pop the previously active lexer condition state off the condition stack popState: /* @__PURE__ */ __name(function popState() { var n2 = this.conditionStack.length - 1; if (n2 > 0) { return this.conditionStack.pop(); } else { return this.conditionStack[0]; } }, "popState"), // produce the lexer rule set which is active for the currently active lexer condition state _currentRules: /* @__PURE__ */ __name(function _currentRules() { if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; } else { return this.conditions["INITIAL"].rules; } }, "_currentRules"), // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available topState: /* @__PURE__ */ __name(function topState(n2) { n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0); if (n2 >= 0) { return this.conditionStack[n2]; } else { return "INITIAL"; } }, "topState"), // alias for begin(condition) pushState: /* @__PURE__ */ __name(function pushState(condition) { this.begin(condition); }, "pushState"), // return the number of states currently on the stack stateStackSize: /* @__PURE__ */ __name(function stateStackSize() { return this.conditionStack.length; }, "stateStackSize"), options: { "case-insensitive": true }, performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { var YYSTATE = YY_START; switch ($avoiding_name_collisions) { case 0: return "title"; break; case 1: this.begin("acc_title"); return 9; break; case 2: this.popState(); return "acc_title_value"; break; case 3: this.begin("acc_descr"); return 11; break; case 4: this.popState(); return "acc_descr_value"; break; case 5: this.begin("acc_descr_multiline"); break; case 6: this.popState(); break; case 7: return "acc_descr_multiline_value"; break; case 8: return 21; break; case 9: return 22; break; case 10: return 23; break; case 11: return 24; break; case 12: return 5; break; case 13: break; case 14: break; case 15: break; case 16: return 8; break; case 17: return 6; break; case 18: return 27; break; case 19: return 40; break; case 20: return 29; break; case 21: return 32; break; case 22: return 31; break; case 23: return 34; break; case 24: return 36; break; case 25: return 38; break; case 26: return 41; break; case 27: return 42; break; case 28: return 43; break; case 29: return 44; break; case 30: return 45; break; case 31: return 46; break; case 32: return 47; break; case 33: return 48; break; case 34: return 49; break; case 35: return 50; break; case 36: return 51; break; case 37: return 52; break; case 38: return 53; break; case 39: return 54; break; case 40: return 65; break; case 41: return 66; break; case 42: return 67; break; case 43: return 68; break; case 44: return 69; break; case 45: return 70; break; case 46: return 71; break; case 47: return 57; break; case 48: return 59; break; case 49: this.begin("style"); return 77; break; case 50: return 75; break; case 51: return 81; break; case 52: return 88; break; case 53: return "PERCENT"; break; case 54: return 86; break; case 55: return 84; break; case 56: break; case 57: this.begin("string"); break; case 58: this.popState(); break; case 59: this.begin("style"); return 72; break; case 60: this.begin("style"); return 74; break; case 61: return 61; break; case 62: return 64; break; case 63: return 63; break; case 64: this.begin("string"); break; case 65: this.popState(); break; case 66: return "qString"; break; case 67: yy_.yytext = yy_.yytext.trim(); return 89; break; case 68: return 75; break; case 69: return 80; break; case 70: return 76; break; } }, "anonymous"), rules: [/^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:(\r?\n)+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:$)/i, /^(?:requirementDiagram\b)/i, /^(?:\{)/i, /^(?:\})/i, /^(?::{3})/i, /^(?::)/i, /^(?:id\b)/i, /^(?:text\b)/i, /^(?:risk\b)/i, /^(?:verifyMethod\b)/i, /^(?:requirement\b)/i, /^(?:functionalRequirement\b)/i, /^(?:interfaceRequirement\b)/i, /^(?:performanceRequirement\b)/i, /^(?:physicalRequirement\b)/i, /^(?:designConstraint\b)/i, /^(?:low\b)/i, /^(?:medium\b)/i, /^(?:high\b)/i, /^(?:analysis\b)/i, /^(?:demonstration\b)/i, /^(?:inspection\b)/i, /^(?:test\b)/i, /^(?:element\b)/i, /^(?:contains\b)/i, /^(?:copies\b)/i, /^(?:derives\b)/i, /^(?:satisfies\b)/i, /^(?:verifies\b)/i, /^(?:refines\b)/i, /^(?:traces\b)/i, /^(?:type\b)/i, /^(?:docref\b)/i, /^(?:style\b)/i, /^(?:\w+)/i, /^(?::)/i, /^(?:;)/i, /^(?:%)/i, /^(?:-)/i, /^(?:#)/i, /^(?: )/i, /^(?:["])/i, /^(?:\n)/i, /^(?:classDef\b)/i, /^(?:class\b)/i, /^(?:<-)/i, /^(?:->)/i, /^(?:-)/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[\w][^:,\r\n\{\<\>\-\=]*)/i, /^(?:\w+)/i, /^(?:[0-9]+)/i, /^(?:,)/i], conditions: { "acc_descr_multiline": { "rules": [6, 7, 68, 69, 70], "inclusive": false }, "acc_descr": { "rules": [4, 68, 69, 70], "inclusive": false }, "acc_title": { "rules": [2, 68, 69, 70], "inclusive": false }, "style": { "rules": [50, 51, 52, 53, 54, 55, 56, 57, 58, 68, 69, 70], "inclusive": false }, "unqString": { "rules": [68, 69, 70], "inclusive": false }, "token": { "rules": [68, 69, 70], "inclusive": false }, "string": { "rules": [65, 66, 68, 69, 70], "inclusive": false }, "INITIAL": { "rules": [0, 1, 3, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 59, 60, 61, 62, 63, 64, 67, 68, 69, 70], "inclusive": true } } }; return lexer2; })(); parser24.lexer = lexer; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser24; parser24.Parser = Parser3; return new Parser3(); })(); parser10.parser = parser10; requirementDiagram_default = parser10; } }); // src/diagrams/requirement/requirementDb.ts var RequirementDB; var init_requirementDb = __esm({ "src/diagrams/requirement/requirementDb.ts"() { "use strict"; init_diagramAPI(); init_logger(); init_commonDb(); RequirementDB = class { constructor() { this.relations = []; this.latestRequirement = this.getInitialRequirement(); this.requirements = /* @__PURE__ */ new Map(); this.latestElement = this.getInitialElement(); this.elements = /* @__PURE__ */ new Map(); this.classes = /* @__PURE__ */ new Map(); this.direction = "TB"; this.RequirementType = { REQUIREMENT: "Requirement", FUNCTIONAL_REQUIREMENT: "Functional Requirement", INTERFACE_REQUIREMENT: "Interface Requirement", PERFORMANCE_REQUIREMENT: "Performance Requirement", PHYSICAL_REQUIREMENT: "Physical Requirement", DESIGN_CONSTRAINT: "Design Constraint" }; this.RiskLevel = { LOW_RISK: "Low", MED_RISK: "Medium", HIGH_RISK: "High" }; this.VerifyType = { VERIFY_ANALYSIS: "Analysis", VERIFY_DEMONSTRATION: "Demonstration", VERIFY_INSPECTION: "Inspection", VERIFY_TEST: "Test" }; this.Relationships = { CONTAINS: "contains", COPIES: "copies", DERIVES: "derives", SATISFIES: "satisfies", VERIFIES: "verifies", REFINES: "refines", TRACES: "traces" }; this.setAccTitle = setAccTitle; this.getAccTitle = getAccTitle; this.setAccDescription = setAccDescription; this.getAccDescription = getAccDescription; this.setDiagramTitle = setDiagramTitle; this.getDiagramTitle = getDiagramTitle; this.getConfig = /* @__PURE__ */ __name(() => getConfig2().requirement, "getConfig"); this.clear(); this.setDirection = this.setDirection.bind(this); this.addRequirement = this.addRequirement.bind(this); this.setNewReqId = this.setNewReqId.bind(this); this.setNewReqRisk = this.setNewReqRisk.bind(this); this.setNewReqText = this.setNewReqText.bind(this); this.setNewReqVerifyMethod = this.setNewReqVerifyMethod.bind(this); this.addElement = this.addElement.bind(this); this.setNewElementType = this.setNewElementType.bind(this); this.setNewElementDocRef = this.setNewElementDocRef.bind(this); this.addRelationship = this.addRelationship.bind(this); this.setCssStyle = this.setCssStyle.bind(this); this.setClass = this.setClass.bind(this); this.defineClass = this.defineClass.bind(this); this.setAccTitle = this.setAccTitle.bind(this); this.setAccDescription = this.setAccDescription.bind(this); } static { __name(this, "RequirementDB"); } getDirection() { return this.direction; } setDirection(dir2) { this.direction = dir2; } resetLatestRequirement() { this.latestRequirement = this.getInitialRequirement(); } resetLatestElement() { this.latestElement = this.getInitialElement(); } getInitialRequirement() { return { requirementId: "", text: "", risk: "", verifyMethod: "", name: "", type: "", cssStyles: [], classes: ["default"] }; } getInitialElement() { return { name: "", type: "", docRef: "", cssStyles: [], classes: ["default"] }; } addRequirement(name, type3) { if (!this.requirements.has(name)) { this.requirements.set(name, { name, type: type3, requirementId: this.latestRequirement.requirementId, text: this.latestRequirement.text, risk: this.latestRequirement.risk, verifyMethod: this.latestRequirement.verifyMethod, cssStyles: [], classes: ["default"] }); } this.resetLatestRequirement(); return this.requirements.get(name); } getRequirements() { return this.requirements; } setNewReqId(id30) { if (this.latestRequirement !== void 0) { this.latestRequirement.requirementId = id30; } } setNewReqText(text4) { if (this.latestRequirement !== void 0) { this.latestRequirement.text = text4; } } setNewReqRisk(risk) { if (this.latestRequirement !== void 0) { this.latestRequirement.risk = risk; } } setNewReqVerifyMethod(verifyMethod) { if (this.latestRequirement !== void 0) { this.latestRequirement.verifyMethod = verifyMethod; } } addElement(name) { if (!this.elements.has(name)) { this.elements.set(name, { name, type: this.latestElement.type, docRef: this.latestElement.docRef, cssStyles: [], classes: ["default"] }); log.info("Added new element: ", name); } this.resetLatestElement(); return this.elements.get(name); } getElements() { return this.elements; } setNewElementType(type3) { if (this.latestElement !== void 0) { this.latestElement.type = type3; } } setNewElementDocRef(docRef) { if (this.latestElement !== void 0) { this.latestElement.docRef = docRef; } } addRelationship(type3, src, dst) { this.relations.push({ type: type3, src, dst }); } getRelationships() { return this.relations; } clear() { this.relations = []; this.resetLatestRequirement(); this.requirements = /* @__PURE__ */ new Map(); this.resetLatestElement(); this.elements = /* @__PURE__ */ new Map(); this.classes = /* @__PURE__ */ new Map(); clear(); } setCssStyle(ids, styles4) { for (const id30 of ids) { const node2 = this.requirements.get(id30) ?? this.elements.get(id30); if (!styles4 || !node2) { return; } for (const s2 of styles4) { if (s2.includes(",")) { node2.cssStyles.push(...s2.split(",")); } else { node2.cssStyles.push(s2); } } } } setClass(ids, classNames) { for (const id30 of ids) { const node2 = this.requirements.get(id30) ?? this.elements.get(id30); if (node2) { for (const _class2 of classNames) { node2.classes.push(_class2); const styles4 = this.classes.get(_class2)?.styles; if (styles4) { node2.cssStyles.push(...styles4); } } } } } defineClass(ids, style3) { for (const id30 of ids) { let styleClass = this.classes.get(id30); if (styleClass === void 0) { styleClass = { id: id30, styles: [], textStyles: [] }; this.classes.set(id30, styleClass); } if (style3) { style3.forEach(function(s2) { if (/color/.exec(s2)) { const newStyle = s2.replace("fill", "bgFill"); styleClass.textStyles.push(newStyle); } styleClass.styles.push(s2); }); } this.requirements.forEach((value2) => { if (value2.classes.includes(id30)) { value2.cssStyles.push(...style3.flatMap((s2) => s2.split(","))); } }); this.elements.forEach((value2) => { if (value2.classes.includes(id30)) { value2.cssStyles.push(...style3.flatMap((s2) => s2.split(","))); } }); } } getClasses() { return this.classes; } getData() { const config5 = getConfig2(); const nodes5 = []; const edges3 = []; for (const requirement of this.requirements.values()) { const node2 = requirement; node2.id = requirement.name; node2.cssStyles = requirement.cssStyles; node2.cssClasses = requirement.classes.join(" "); node2.shape = "requirementBox"; node2.look = config5.look; nodes5.push(node2); } for (const element3 of this.elements.values()) { const node2 = element3; node2.shape = "requirementBox"; node2.look = config5.look; node2.id = element3.name; node2.cssStyles = element3.cssStyles; node2.cssClasses = element3.classes.join(" "); nodes5.push(node2); } for (const relation of this.relations) { let counter2 = 0; const isContains = relation.type === this.Relationships.CONTAINS; const edge = { id: `${relation.src}-${relation.dst}-${counter2}`, start: this.requirements.get(relation.src)?.name ?? this.elements.get(relation.src)?.name, end: this.requirements.get(relation.dst)?.name ?? this.elements.get(relation.dst)?.name, label: `<<${relation.type}>>`, classes: "relationshipLine", style: ["fill:none", isContains ? "" : "stroke-dasharray: 10,7"], labelpos: "c", thickness: "normal", type: "normal", pattern: isContains ? "normal" : "dashed", arrowTypeStart: isContains ? "requirement_contains" : "", arrowTypeEnd: isContains ? "" : "requirement_arrow", look: config5.look }; edges3.push(edge); counter2++; } return { nodes: nodes5, edges: edges3, other: {}, config: config5, direction: this.getDirection() }; } }; } }); // src/diagrams/requirement/styles.js var getStyles8, styles_default7; var init_styles7 = __esm({ "src/diagrams/requirement/styles.js"() { "use strict"; getStyles8 = /* @__PURE__ */ __name((options2) => ` marker { fill: ${options2.relationColor}; stroke: ${options2.relationColor}; } marker.cross { stroke: ${options2.lineColor}; } svg { font-family: ${options2.fontFamily}; font-size: ${options2.fontSize}; } .reqBox { fill: ${options2.requirementBackground}; fill-opacity: 1.0; stroke: ${options2.requirementBorderColor}; stroke-width: ${options2.requirementBorderSize}; } .reqTitle, .reqLabel{ fill: ${options2.requirementTextColor}; } .reqLabelBox { fill: ${options2.relationLabelBackground}; fill-opacity: 1.0; } .req-title-line { stroke: ${options2.requirementBorderColor}; stroke-width: ${options2.requirementBorderSize}; } .relationshipLine { stroke: ${options2.relationColor}; stroke-width: 1; } .relationshipLabel { fill: ${options2.relationLabelColor}; } .divider { stroke: ${options2.nodeBorder}; stroke-width: 1; } .label { font-family: ${options2.fontFamily}; color: ${options2.nodeTextColor || options2.textColor}; } .label text,span { fill: ${options2.nodeTextColor || options2.textColor}; color: ${options2.nodeTextColor || options2.textColor}; } .labelBkg { background-color: ${options2.edgeLabelBackground}; } `, "getStyles"); styles_default7 = getStyles8; } }); // src/diagrams/requirement/requirementRenderer.ts var requirementRenderer_exports = {}; __export(requirementRenderer_exports, { draw: () => draw10 }); var draw10; var init_requirementRenderer = __esm({ "src/diagrams/requirement/requirementRenderer.ts"() { "use strict"; init_diagramAPI(); init_logger(); init_insertElementsForSize(); init_render2(); init_setupViewPortForSVG(); init_utils2(); draw10 = /* @__PURE__ */ __name(async function(text4, id30, _version, diag) { log.info("REF0:"); log.info("Drawing requirement diagram (unified)", id30); const { securityLevel, state: conf5, layout: layout6 } = getConfig2(); const data4Layout = diag.db.getData(); const svg2 = getDiagramElement(id30, securityLevel); data4Layout.type = diag.type; data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout6); data4Layout.nodeSpacing = conf5?.nodeSpacing ?? 50; data4Layout.rankSpacing = conf5?.rankSpacing ?? 50; data4Layout.markers = ["requirement_contains", "requirement_arrow"]; data4Layout.diagramId = id30; await render6(data4Layout, svg2); const padding2 = 8; utils_default2.insertTitle( svg2, "requirementDiagramTitleText", conf5?.titleTopMargin ?? 25, diag.db.getDiagramTitle() ); setupViewPortForSVG(svg2, padding2, "requirementDiagram", conf5?.useMaxWidth ?? true); }, "draw"); } }); // src/diagrams/requirement/requirementDiagram.ts var requirementDiagram_exports = {}; __export(requirementDiagram_exports, { diagram: () => diagram10 }); var diagram10; var init_requirementDiagram2 = __esm({ "src/diagrams/requirement/requirementDiagram.ts"() { "use strict"; init_requirementDiagram(); init_requirementDb(); init_styles7(); init_requirementRenderer(); diagram10 = { parser: requirementDiagram_default, get db() { return new RequirementDB(); }, renderer: requirementRenderer_exports, styles: styles_default7 }; } }); // src/diagrams/sequence/parser/sequenceDiagram.jison var parser11, sequenceDiagram_default; var init_sequenceDiagram = __esm({ "src/diagrams/sequence/parser/sequenceDiagram.jison"() { "use strict"; parser11 = (function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) { for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ; return o3; }, "o"), $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 4], $V3 = [2, 4], $V4 = [1, 9], $V5 = [1, 11], $V6 = [1, 13], $V7 = [1, 14], $V8 = [1, 16], $V9 = [1, 17], $Va = [1, 18], $Vb = [1, 24], $Vc = [1, 25], $Vd = [1, 26], $Ve = [1, 27], $Vf = [1, 28], $Vg = [1, 29], $Vh = [1, 30], $Vi = [1, 31], $Vj = [1, 32], $Vk = [1, 33], $Vl = [1, 34], $Vm = [1, 35], $Vn = [1, 36], $Vo = [1, 37], $Vp = [1, 38], $Vq = [1, 39], $Vr = [1, 41], $Vs = [1, 42], $Vt = [1, 43], $Vu = [1, 44], $Vv = [1, 45], $Vw = [1, 46], $Vx = [1, 4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 47, 48, 49, 50, 52, 53, 55, 60, 61, 62, 63, 71], $Vy = [2, 71], $Vz = [4, 5, 16, 50, 52, 53], $VA = [4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 50, 52, 53, 55, 60, 61, 62, 63, 71], $VB = [4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 49, 50, 52, 53, 55, 60, 61, 62, 63, 71], $VC = [4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 48, 50, 52, 53, 55, 60, 61, 62, 63, 71], $VD = [4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 47, 50, 52, 53, 55, 60, 61, 62, 63, 71], $VE = [69, 70, 71], $VF = [1, 127]; var parser24 = { trace: /* @__PURE__ */ __name(function trace() { }, "trace"), yy: {}, symbols_: { "error": 2, "start": 3, "SPACE": 4, "NEWLINE": 5, "SD": 6, "document": 7, "line": 8, "statement": 9, "box_section": 10, "box_line": 11, "participant_statement": 12, "create": 13, "box": 14, "restOfLine": 15, "end": 16, "signal": 17, "autonumber": 18, "NUM": 19, "off": 20, "activate": 21, "actor": 22, "deactivate": 23, "note_statement": 24, "links_statement": 25, "link_statement": 26, "properties_statement": 27, "details_statement": 28, "title": 29, "legacy_title": 30, "acc_title": 31, "acc_title_value": 32, "acc_descr": 33, "acc_descr_value": 34, "acc_descr_multiline_value": 35, "loop": 36, "rect": 37, "opt": 38, "alt": 39, "else_sections": 40, "par": 41, "par_sections": 42, "par_over": 43, "critical": 44, "option_sections": 45, "break": 46, "option": 47, "and": 48, "else": 49, "participant": 50, "AS": 51, "participant_actor": 52, "destroy": 53, "actor_with_config": 54, "note": 55, "placement": 56, "text2": 57, "over": 58, "actor_pair": 59, "links": 60, "link": 61, "properties": 62, "details": 63, "spaceList": 64, ",": 65, "left_of": 66, "right_of": 67, "signaltype": 68, "+": 69, "-": 70, "ACTOR": 71, "config_object": 72, "CONFIG_START": 73, "CONFIG_CONTENT": 74, "CONFIG_END": 75, "SOLID_OPEN_ARROW": 76, "DOTTED_OPEN_ARROW": 77, "SOLID_ARROW": 78, "BIDIRECTIONAL_SOLID_ARROW": 79, "DOTTED_ARROW": 80, "BIDIRECTIONAL_DOTTED_ARROW": 81, "SOLID_CROSS": 82, "DOTTED_CROSS": 83, "SOLID_POINT": 84, "DOTTED_POINT": 85, "TXT": 86, "$accept": 0, "$end": 1 }, terminals_: { 2: "error", 4: "SPACE", 5: "NEWLINE", 6: "SD", 13: "create", 14: "box", 15: "restOfLine", 16: "end", 18: "autonumber", 19: "NUM", 20: "off", 21: "activate", 23: "deactivate", 29: "title", 30: "legacy_title", 31: "acc_title", 32: "acc_title_value", 33: "acc_descr", 34: "acc_descr_value", 35: "acc_descr_multiline_value", 36: "loop", 37: "rect", 38: "opt", 39: "alt", 41: "par", 43: "par_over", 44: "critical", 46: "break", 47: "option", 48: "and", 49: "else", 50: "participant", 51: "AS", 52: "participant_actor", 53: "destroy", 55: "note", 58: "over", 60: "links", 61: "link", 62: "properties", 63: "details", 65: ",", 66: "left_of", 67: "right_of", 69: "+", 70: "-", 71: "ACTOR", 73: "CONFIG_START", 74: "CONFIG_CONTENT", 75: "CONFIG_END", 76: "SOLID_OPEN_ARROW", 77: "DOTTED_OPEN_ARROW", 78: "SOLID_ARROW", 79: "BIDIRECTIONAL_SOLID_ARROW", 80: "DOTTED_ARROW", 81: "BIDIRECTIONAL_DOTTED_ARROW", 82: "SOLID_CROSS", 83: "DOTTED_CROSS", 84: "SOLID_POINT", 85: "DOTTED_POINT", 86: "TXT" }, productions_: [0, [3, 2], [3, 2], [3, 2], [7, 0], [7, 2], [8, 2], [8, 1], [8, 1], [10, 0], [10, 2], [11, 2], [11, 1], [11, 1], [9, 1], [9, 2], [9, 4], [9, 2], [9, 4], [9, 3], [9, 3], [9, 2], [9, 3], [9, 3], [9, 2], [9, 2], [9, 2], [9, 2], [9, 2], [9, 1], [9, 1], [9, 2], [9, 2], [9, 1], [9, 4], [9, 4], [9, 4], [9, 4], [9, 4], [9, 4], [9, 4], [9, 4], [45, 1], [45, 4], [42, 1], [42, 4], [40, 1], [40, 4], [12, 5], [12, 3], [12, 5], [12, 3], [12, 3], [12, 3], [24, 4], [24, 4], [25, 3], [26, 3], [27, 3], [28, 3], [64, 2], [64, 1], [59, 3], [59, 1], [56, 1], [56, 1], [17, 5], [17, 5], [17, 4], [54, 2], [72, 3], [22, 1], [68, 1], [68, 1], [68, 1], [68, 1], [68, 1], [68, 1], [68, 1], [68, 1], [68, 1], [68, 1], [57, 1]], performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { var $0 = $$.length - 1; switch (yystate) { case 3: yy.apply($$[$0]); return $$[$0]; break; case 4: case 9: this.$ = []; break; case 5: case 10: $$[$0 - 1].push($$[$0]); this.$ = $$[$0 - 1]; break; case 6: case 7: case 11: case 12: this.$ = $$[$0]; break; case 8: case 13: this.$ = []; break; case 15: $$[$0].type = "createParticipant"; this.$ = $$[$0]; break; case 16: $$[$0 - 1].unshift({ type: "boxStart", boxData: yy.parseBoxData($$[$0 - 2]) }); $$[$0 - 1].push({ type: "boxEnd", boxText: $$[$0 - 2] }); this.$ = $$[$0 - 1]; break; case 18: this.$ = { type: "sequenceIndex", sequenceIndex: Number($$[$0 - 2]), sequenceIndexStep: Number($$[$0 - 1]), sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER }; break; case 19: this.$ = { type: "sequenceIndex", sequenceIndex: Number($$[$0 - 1]), sequenceIndexStep: 1, sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER }; break; case 20: this.$ = { type: "sequenceIndex", sequenceVisible: false, signalType: yy.LINETYPE.AUTONUMBER }; break; case 21: this.$ = { type: "sequenceIndex", sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER }; break; case 22: this.$ = { type: "activeStart", signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0 - 1].actor }; break; case 23: this.$ = { type: "activeEnd", signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0 - 1].actor }; break; case 29: yy.setDiagramTitle($$[$0].substring(6)); this.$ = $$[$0].substring(6); break; case 30: yy.setDiagramTitle($$[$0].substring(7)); this.$ = $$[$0].substring(7); break; case 31: this.$ = $$[$0].trim(); yy.setAccTitle(this.$); break; case 32: case 33: this.$ = $$[$0].trim(); yy.setAccDescription(this.$); break; case 34: $$[$0 - 1].unshift({ type: "loopStart", loopText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.LOOP_START }); $$[$0 - 1].push({ type: "loopEnd", loopText: $$[$0 - 2], signalType: yy.LINETYPE.LOOP_END }); this.$ = $$[$0 - 1]; break; case 35: $$[$0 - 1].unshift({ type: "rectStart", color: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.RECT_START }); $$[$0 - 1].push({ type: "rectEnd", color: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.RECT_END }); this.$ = $$[$0 - 1]; break; case 36: $$[$0 - 1].unshift({ type: "optStart", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.OPT_START }); $$[$0 - 1].push({ type: "optEnd", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.OPT_END }); this.$ = $$[$0 - 1]; break; case 37: $$[$0 - 1].unshift({ type: "altStart", altText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.ALT_START }); $$[$0 - 1].push({ type: "altEnd", signalType: yy.LINETYPE.ALT_END }); this.$ = $$[$0 - 1]; break; case 38: $$[$0 - 1].unshift({ type: "parStart", parText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.PAR_START }); $$[$0 - 1].push({ type: "parEnd", signalType: yy.LINETYPE.PAR_END }); this.$ = $$[$0 - 1]; break; case 39: $$[$0 - 1].unshift({ type: "parStart", parText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.PAR_OVER_START }); $$[$0 - 1].push({ type: "parEnd", signalType: yy.LINETYPE.PAR_END }); this.$ = $$[$0 - 1]; break; case 40: $$[$0 - 1].unshift({ type: "criticalStart", criticalText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.CRITICAL_START }); $$[$0 - 1].push({ type: "criticalEnd", signalType: yy.LINETYPE.CRITICAL_END }); this.$ = $$[$0 - 1]; break; case 41: $$[$0 - 1].unshift({ type: "breakStart", breakText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.BREAK_START }); $$[$0 - 1].push({ type: "breakEnd", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.BREAK_END }); this.$ = $$[$0 - 1]; break; case 43: this.$ = $$[$0 - 3].concat([{ type: "option", optionText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.CRITICAL_OPTION }, $$[$0]]); break; case 45: this.$ = $$[$0 - 3].concat([{ type: "and", parText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.PAR_AND }, $$[$0]]); break; case 47: this.$ = $$[$0 - 3].concat([{ type: "else", altText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.ALT_ELSE }, $$[$0]]); break; case 48: $$[$0 - 3].draw = "participant"; $$[$0 - 3].type = "addParticipant"; $$[$0 - 3].description = yy.parseMessage($$[$0 - 1]); this.$ = $$[$0 - 3]; break; case 49: $$[$0 - 1].draw = "participant"; $$[$0 - 1].type = "addParticipant"; this.$ = $$[$0 - 1]; break; case 50: $$[$0 - 3].draw = "actor"; $$[$0 - 3].type = "addParticipant"; $$[$0 - 3].description = yy.parseMessage($$[$0 - 1]); this.$ = $$[$0 - 3]; break; case 51: $$[$0 - 1].draw = "actor"; $$[$0 - 1].type = "addParticipant"; this.$ = $$[$0 - 1]; break; case 52: $$[$0 - 1].type = "destroyParticipant"; this.$ = $$[$0 - 1]; break; case 53: $$[$0 - 1].draw = "participant"; $$[$0 - 1].type = "addParticipant"; this.$ = $$[$0 - 1]; break; case 54: this.$ = [$$[$0 - 1], { type: "addNote", placement: $$[$0 - 2], actor: $$[$0 - 1].actor, text: $$[$0] }]; break; case 55: $$[$0 - 2] = [].concat($$[$0 - 1], $$[$0 - 1]).slice(0, 2); $$[$0 - 2][0] = $$[$0 - 2][0].actor; $$[$0 - 2][1] = $$[$0 - 2][1].actor; this.$ = [$$[$0 - 1], { type: "addNote", placement: yy.PLACEMENT.OVER, actor: $$[$0 - 2].slice(0, 2), text: $$[$0] }]; break; case 56: this.$ = [$$[$0 - 1], { type: "addLinks", actor: $$[$0 - 1].actor, text: $$[$0] }]; break; case 57: this.$ = [$$[$0 - 1], { type: "addALink", actor: $$[$0 - 1].actor, text: $$[$0] }]; break; case 58: this.$ = [$$[$0 - 1], { type: "addProperties", actor: $$[$0 - 1].actor, text: $$[$0] }]; break; case 59: this.$ = [$$[$0 - 1], { type: "addDetails", actor: $$[$0 - 1].actor, text: $$[$0] }]; break; case 62: this.$ = [$$[$0 - 2], $$[$0]]; break; case 63: this.$ = $$[$0]; break; case 64: this.$ = yy.PLACEMENT.LEFTOF; break; case 65: this.$ = yy.PLACEMENT.RIGHTOF; break; case 66: this.$ = [ $$[$0 - 4], $$[$0 - 1], { type: "addMessage", from: $$[$0 - 4].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 3], msg: $$[$0], activate: true }, { type: "activeStart", signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0 - 1].actor } ]; break; case 67: this.$ = [ $$[$0 - 4], $$[$0 - 1], { type: "addMessage", from: $$[$0 - 4].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 3], msg: $$[$0] }, { type: "activeEnd", signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0 - 4].actor } ]; break; case 68: this.$ = [$$[$0 - 3], $$[$0 - 1], { type: "addMessage", from: $$[$0 - 3].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 2], msg: $$[$0] }]; break; case 69: this.$ = { type: "addParticipant", actor: $$[$0 - 1], config: $$[$0] }; break; case 70: this.$ = $$[$0 - 1].trim(); break; case 71: this.$ = { type: "addParticipant", actor: $$[$0] }; break; case 72: this.$ = yy.LINETYPE.SOLID_OPEN; break; case 73: this.$ = yy.LINETYPE.DOTTED_OPEN; break; case 74: this.$ = yy.LINETYPE.SOLID; break; case 75: this.$ = yy.LINETYPE.BIDIRECTIONAL_SOLID; break; case 76: this.$ = yy.LINETYPE.DOTTED; break; case 77: this.$ = yy.LINETYPE.BIDIRECTIONAL_DOTTED; break; case 78: this.$ = yy.LINETYPE.SOLID_CROSS; break; case 79: this.$ = yy.LINETYPE.DOTTED_CROSS; break; case 80: this.$ = yy.LINETYPE.SOLID_POINT; break; case 81: this.$ = yy.LINETYPE.DOTTED_POINT; break; case 82: this.$ = yy.parseMessage($$[$0].trim().substring(1)); break; } }, "anonymous"), table: [{ 3: 1, 4: $V0, 5: $V1, 6: $V2 }, { 1: [3] }, { 3: 5, 4: $V0, 5: $V1, 6: $V2 }, { 3: 6, 4: $V0, 5: $V1, 6: $V2 }, o2([1, 4, 5, 13, 14, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 50, 52, 53, 55, 60, 61, 62, 63, 71], $V3, { 7: 7 }), { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3], 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 55: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 71: $Vw }, o2($Vx, [2, 5]), { 9: 47, 12: 12, 13: $V6, 14: $V7, 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 55: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 71: $Vw }, o2($Vx, [2, 7]), o2($Vx, [2, 8]), o2($Vx, [2, 14]), { 12: 48, 50: $Vo, 52: $Vp, 53: $Vq }, { 15: [1, 49] }, { 5: [1, 50] }, { 5: [1, 53], 19: [1, 51], 20: [1, 52] }, { 22: 54, 71: $Vw }, { 22: 55, 71: $Vw }, { 5: [1, 56] }, { 5: [1, 57] }, { 5: [1, 58] }, { 5: [1, 59] }, { 5: [1, 60] }, o2($Vx, [2, 29]), o2($Vx, [2, 30]), { 32: [1, 61] }, { 34: [1, 62] }, o2($Vx, [2, 33]), { 15: [1, 63] }, { 15: [1, 64] }, { 15: [1, 65] }, { 15: [1, 66] }, { 15: [1, 67] }, { 15: [1, 68] }, { 15: [1, 69] }, { 15: [1, 70] }, { 22: 71, 54: 72, 71: [1, 73] }, { 22: 74, 71: $Vw }, { 22: 75, 71: $Vw }, { 68: 76, 76: [1, 77], 77: [1, 78], 78: [1, 79], 79: [1, 80], 80: [1, 81], 81: [1, 82], 82: [1, 83], 83: [1, 84], 84: [1, 85], 85: [1, 86] }, { 56: 87, 58: [1, 88], 66: [1, 89], 67: [1, 90] }, { 22: 91, 71: $Vw }, { 22: 92, 71: $Vw }, { 22: 93, 71: $Vw }, { 22: 94, 71: $Vw }, o2([5, 51, 65, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86], $Vy), o2($Vx, [2, 6]), o2($Vx, [2, 15]), o2($Vz, [2, 9], { 10: 95 }), o2($Vx, [2, 17]), { 5: [1, 97], 19: [1, 96] }, { 5: [1, 98] }, o2($Vx, [2, 21]), { 5: [1, 99] }, { 5: [1, 100] }, o2($Vx, [2, 24]), o2($Vx, [2, 25]), o2($Vx, [2, 26]), o2($Vx, [2, 27]), o2($Vx, [2, 28]), o2($Vx, [2, 31]), o2($Vx, [2, 32]), o2($VA, $V3, { 7: 101 }), o2($VA, $V3, { 7: 102 }), o2($VA, $V3, { 7: 103 }), o2($VB, $V3, { 40: 104, 7: 105 }), o2($VC, $V3, { 42: 106, 7: 107 }), o2($VC, $V3, { 7: 107, 42: 108 }), o2($VD, $V3, { 45: 109, 7: 110 }), o2($VA, $V3, { 7: 111 }), { 5: [1, 113], 51: [1, 112] }, { 5: [1, 114] }, o2([5, 51], $Vy, { 72: 115, 73: [1, 116] }), { 5: [1, 118], 51: [1, 117] }, { 5: [1, 119] }, { 22: 122, 69: [1, 120], 70: [1, 121], 71: $Vw }, o2($VE, [2, 72]), o2($VE, [2, 73]), o2($VE, [2, 74]), o2($VE, [2, 75]), o2($VE, [2, 76]), o2($VE, [2, 77]), o2($VE, [2, 78]), o2($VE, [2, 79]), o2($VE, [2, 80]), o2($VE, [2, 81]), { 22: 123, 71: $Vw }, { 22: 125, 59: 124, 71: $Vw }, { 71: [2, 64] }, { 71: [2, 65] }, { 57: 126, 86: $VF }, { 57: 128, 86: $VF }, { 57: 129, 86: $VF }, { 57: 130, 86: $VF }, { 4: [1, 133], 5: [1, 135], 11: 132, 12: 134, 16: [1, 131], 50: $Vo, 52: $Vp, 53: $Vq }, { 5: [1, 136] }, o2($Vx, [2, 19]), o2($Vx, [2, 20]), o2($Vx, [2, 22]), o2($Vx, [2, 23]), { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [1, 137], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 55: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 71: $Vw }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [1, 138], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 55: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 71: $Vw }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [1, 139], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 55: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 71: $Vw }, { 16: [1, 140] }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [2, 46], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 49: [1, 141], 50: $Vo, 52: $Vp, 53: $Vq, 55: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 71: $Vw }, { 16: [1, 142] }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [2, 44], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 48: [1, 143], 50: $Vo, 52: $Vp, 53: $Vq, 55: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 71: $Vw }, { 16: [1, 144] }, { 16: [1, 145] }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [2, 42], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 47: [1, 146], 50: $Vo, 52: $Vp, 53: $Vq, 55: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 71: $Vw }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [1, 147], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 55: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 71: $Vw }, { 15: [1, 148] }, o2($Vx, [2, 49]), o2($Vx, [2, 53]), { 5: [2, 69] }, { 74: [1, 149] }, { 15: [1, 150] }, o2($Vx, [2, 51]), o2($Vx, [2, 52]), { 22: 151, 71: $Vw }, { 22: 152, 71: $Vw }, { 57: 153, 86: $VF }, { 57: 154, 86: $VF }, { 57: 155, 86: $VF }, { 65: [1, 156], 86: [2, 63] }, { 5: [2, 56] }, { 5: [2, 82] }, { 5: [2, 57] }, { 5: [2, 58] }, { 5: [2, 59] }, o2($Vx, [2, 16]), o2($Vz, [2, 10]), { 12: 157, 50: $Vo, 52: $Vp, 53: $Vq }, o2($Vz, [2, 12]), o2($Vz, [2, 13]), o2($Vx, [2, 18]), o2($Vx, [2, 34]), o2($Vx, [2, 35]), o2($Vx, [2, 36]), o2($Vx, [2, 37]), { 15: [1, 158] }, o2($Vx, [2, 38]), { 15: [1, 159] }, o2($Vx, [2, 39]), o2($Vx, [2, 40]), { 15: [1, 160] }, o2($Vx, [2, 41]), { 5: [1, 161] }, { 75: [1, 162] }, { 5: [1, 163] }, { 57: 164, 86: $VF }, { 57: 165, 86: $VF }, { 5: [2, 68] }, { 5: [2, 54] }, { 5: [2, 55] }, { 22: 166, 71: $Vw }, o2($Vz, [2, 11]), o2($VB, $V3, { 7: 105, 40: 167 }), o2($VC, $V3, { 7: 107, 42: 168 }), o2($VD, $V3, { 7: 110, 45: 169 }), o2($Vx, [2, 48]), { 5: [2, 70] }, o2($Vx, [2, 50]), { 5: [2, 66] }, { 5: [2, 67] }, { 86: [2, 62] }, { 16: [2, 47] }, { 16: [2, 45] }, { 16: [2, 43] }], defaultActions: { 5: [2, 1], 6: [2, 2], 89: [2, 64], 90: [2, 65], 115: [2, 69], 126: [2, 56], 127: [2, 82], 128: [2, 57], 129: [2, 58], 130: [2, 59], 153: [2, 68], 154: [2, 54], 155: [2, 55], 162: [2, 70], 164: [2, 66], 165: [2, 67], 166: [2, 62], 167: [2, 47], 168: [2, 45], 169: [2, 43] }, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (hash.recoverable) { this.trace(str2); } else { var error3 = new Error(str2); error3.hash = hash; throw error3; } }, "parseError"), parse: /* @__PURE__ */ __name(function parse7(input) { var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1; var args = lstack.slice.call(arguments, 1); var lexer2 = Object.create(this.lexer); var sharedState = { yy: {} }; for (var k2 in this.yy) { if (Object.prototype.hasOwnProperty.call(this.yy, k2)) { sharedState.yy[k2] = this.yy[k2]; } } lexer2.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer2; sharedState.yy.parser = this; if (typeof lexer2.yylloc == "undefined") { lexer2.yylloc = {}; } var yyloc = lexer2.yylloc; lstack.push(yyloc); var ranges = lexer2.options && lexer2.options.ranges; if (typeof sharedState.yy.parseError === "function") { this.parseError = sharedState.yy.parseError; } else { this.parseError = Object.getPrototypeOf(this).parseError; } function popStack(n2) { stack.length = stack.length - 2 * n2; vstack.length = vstack.length - n2; lstack.length = lstack.length - n2; } __name(popStack, "popStack"); function lex() { var token2; token2 = tstack.pop() || lexer2.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex, "lex"); var symbol, preErrorSymbol, state3, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state3 = stack[stack.length - 1]; if (this.defaultActions[state3]) { action = this.defaultActions[state3]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex(); } action = table[state3] && table[state3][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state3]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer2.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; } else { errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); } this.parseError(errStr, { text: lexer2.match, token: this.terminals_[symbol] || symbol, line: lexer2.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state3 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer2.yytext); lstack.push(lexer2.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer2.yyleng; yytext = lexer2.yytext; yylineno = lexer2.yylineno; yyloc = lexer2.yylloc; if (recovering > 0) { recovering--; } } else { symbol = preErrorSymbol; preErrorSymbol = null; } break; case 2: len = this.productions_[action[1]][1]; yyval.$ = vstack[vstack.length - len]; yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; if (ranges) { yyval._$.range = [ lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1] ]; } r2 = this.performAction.apply(yyval, [ yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack ].concat(args)); if (typeof r2 !== "undefined") { return r2; } if (len) { stack = stack.slice(0, -1 * len * 2); vstack = vstack.slice(0, -1 * len); lstack = lstack.slice(0, -1 * len); } stack.push(this.productions_[action[1]][0]); vstack.push(yyval.$); lstack.push(yyval._$); newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]]; stack.push(newState2); break; case 3: return true; } } return true; }, "parse") }; var lexer = /* @__PURE__ */ (function() { var lexer2 = { EOF: 1, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (this.yy.parser) { this.yy.parser.parseError(str2, hash); } else { throw new Error(str2); } }, "parseError"), // resets the lexer, sets new input setInput: /* @__PURE__ */ __name(function(input, yy) { this.yy = yy || this.yy || {}; this._input = input; this._more = this._backtrack = this.done = false; 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 }; if (this.options.ranges) { this.yylloc.range = [0, 0]; } this.offset = 0; return this; }, "setInput"), // consumes and returns one char from the input input: /* @__PURE__ */ __name(function() { var ch = this._input[0]; this.yytext += ch; this.yyleng++; this.offset++; this.match += ch; this.matched += ch; var lines = ch.match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno++; this.yylloc.last_line++; } else { this.yylloc.last_column++; } if (this.options.ranges) { this.yylloc.range[1]++; } this._input = this._input.slice(1); return ch; }, "input"), // unshifts one char (or a string) into the input unput: /* @__PURE__ */ __name(function(ch) { var len = ch.length; var lines = ch.split(/(?:\r\n?|\n)/g); this._input = ch + this._input; this.yytext = this.yytext.substr(0, this.yytext.length - len); this.offset -= len; var oldLines = 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); if (lines.length - 1) { this.yylineno -= lines.length - 1; } var r2 = this.yylloc.range; this.yylloc = { first_line: this.yylloc.first_line, last_line: this.yylineno + 1, first_column: this.yylloc.first_column, last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len }; if (this.options.ranges) { this.yylloc.range = [r2[0], r2[0] + this.yyleng - len]; } this.yyleng = this.yytext.length; return this; }, "unput"), // When called from action, caches matched text and appends it on next action more: /* @__PURE__ */ __name(function() { this._more = true; return this; }, "more"), // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. reject: /* @__PURE__ */ __name(function() { if (this.options.backtrack_lexer) { this._backtrack = true; } 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"), // retain first n characters of the match less: /* @__PURE__ */ __name(function(n2) { this.unput(this.match.slice(n2)); }, "less"), // displays already matched input, i.e. for error messages pastInput: /* @__PURE__ */ __name(function() { var past = this.matched.substr(0, this.matched.length - this.match.length); return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); }, "pastInput"), // displays upcoming input, i.e. for error messages upcomingInput: /* @__PURE__ */ __name(function() { var next3 = this.match; if (next3.length < 20) { next3 += this._input.substr(0, 20 - next3.length); } return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, ""); }, "upcomingInput"), // displays the character position where the lexing error occurred, i.e. for error messages showPosition: /* @__PURE__ */ __name(function() { var pre = this.pastInput(); var c3 = new Array(pre.length + 1).join("-"); return pre + this.upcomingInput() + "\n" + c3 + "^"; }, "showPosition"), // test the lexed token: return FALSE when not a match, otherwise return token test_match: /* @__PURE__ */ __name(function(match2, indexed_rule) { var token2, lines, backup; if (this.options.backtrack_lexer) { backup = { 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 }; if (this.options.ranges) { backup.yylloc.range = this.yylloc.range.slice(0); } } lines = match2[0].match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno += lines.length; } this.yylloc = { first_line: this.yylloc.last_line, last_line: this.yylineno + 1, first_column: this.yylloc.last_column, last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; this.yyleng = this.yytext.length; if (this.options.ranges) { this.yylloc.range = [this.offset, this.offset += this.yyleng]; } this._more = false; this._backtrack = false; this._input = this._input.slice(match2[0].length); this.matched += match2[0]; token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); if (this.done && this._input) { this.done = false; } if (token2) { return token2; } else if (this._backtrack) { for (var k2 in backup) { this[k2] = backup[k2]; } return false; } return false; }, "test_match"), // return next match in input next: /* @__PURE__ */ __name(function() { if (this.done) { return this.EOF; } if (!this._input) { this.done = true; } var token2, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[index]); if (token2 !== false) { return token2; } return false; } if (this._input === "") { return this.EOF; } else { return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { text: "", token: null, line: this.yylineno }); } }, "next"), // return next match that has a token lex: /* @__PURE__ */ __name(function lex() { var r2 = this.next(); if (r2) { return r2; } else { return this.lex(); } }, "lex"), // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) begin: /* @__PURE__ */ __name(function begin(condition) { this.conditionStack.push(condition); }, "begin"), // pop the previously active lexer condition state off the condition stack popState: /* @__PURE__ */ __name(function popState() { var n2 = this.conditionStack.length - 1; if (n2 > 0) { return this.conditionStack.pop(); } else { return this.conditionStack[0]; } }, "popState"), // produce the lexer rule set which is active for the currently active lexer condition state _currentRules: /* @__PURE__ */ __name(function _currentRules() { if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; } else { return this.conditions["INITIAL"].rules; } }, "_currentRules"), // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available topState: /* @__PURE__ */ __name(function topState(n2) { n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0); if (n2 >= 0) { return this.conditionStack[n2]; } else { return "INITIAL"; } }, "topState"), // alias for begin(condition) pushState: /* @__PURE__ */ __name(function pushState(condition) { this.begin(condition); }, "pushState"), // return the number of states currently on the stack stateStackSize: /* @__PURE__ */ __name(function stateStackSize() { return this.conditionStack.length; }, "stateStackSize"), options: { "case-insensitive": true }, performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { var YYSTATE = YY_START; switch ($avoiding_name_collisions) { case 0: return 5; break; case 1: break; case 2: break; case 3: break; case 4: break; case 5: break; case 6: return 19; break; case 7: this.begin("CONFIG"); return 73; break; case 8: return 74; break; case 9: this.popState(); this.popState(); return 75; break; case 10: yy_.yytext = yy_.yytext.trim(); return 71; break; case 11: yy_.yytext = yy_.yytext.trim(); this.begin("ALIAS"); return 71; break; case 12: this.begin("LINE"); return 14; break; case 13: this.begin("ID"); return 50; break; case 14: this.begin("ID"); return 52; break; case 15: return 13; break; case 16: this.begin("ID"); return 53; break; case 17: yy_.yytext = yy_.yytext.trim(); this.begin("ALIAS"); return 71; break; case 18: this.popState(); this.popState(); this.begin("LINE"); return 51; break; case 19: this.popState(); this.popState(); return 5; break; case 20: this.begin("LINE"); return 36; break; case 21: this.begin("LINE"); return 37; break; case 22: this.begin("LINE"); return 38; break; case 23: this.begin("LINE"); return 39; break; case 24: this.begin("LINE"); return 49; break; case 25: this.begin("LINE"); return 41; break; case 26: this.begin("LINE"); return 43; break; case 27: this.begin("LINE"); return 48; break; case 28: this.begin("LINE"); return 44; break; case 29: this.begin("LINE"); return 47; break; case 30: this.begin("LINE"); return 46; break; case 31: this.popState(); return 15; break; case 32: return 16; break; case 33: return 66; break; case 34: return 67; break; case 35: return 60; break; case 36: return 61; break; case 37: return 62; break; case 38: return 63; break; case 39: return 58; break; case 40: return 55; break; case 41: this.begin("ID"); return 21; break; case 42: this.begin("ID"); return 23; break; case 43: return 29; break; case 44: return 30; break; case 45: this.begin("acc_title"); return 31; break; case 46: this.popState(); return "acc_title_value"; break; case 47: this.begin("acc_descr"); return 33; break; case 48: this.popState(); return "acc_descr_value"; break; case 49: this.begin("acc_descr_multiline"); break; case 50: this.popState(); break; case 51: return "acc_descr_multiline_value"; break; case 52: return 6; break; case 53: return 18; break; case 54: return 20; break; case 55: return 65; break; case 56: return 5; break; case 57: yy_.yytext = yy_.yytext.trim(); return 71; break; case 58: return 78; break; case 59: return 79; break; case 60: return 80; break; case 61: return 81; break; case 62: return 76; break; case 63: return 77; break; case 64: return 82; break; case 65: return 83; break; case 66: return 84; break; case 67: return 85; break; case 68: return 86; break; case 69: return 86; break; case 70: return 69; break; case 71: return 70; break; case 72: return 5; break; case 73: return "INVALID"; break; } }, "anonymous"), rules: [/^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[0-9]+(?=[ \n]+))/i, /^(?:@\{)/i, /^(?:[^\}]+)/i, /^(?:\})/i, /^(?:[^\<->\->:\n,;@\s]+(?=@\{))/i, /^(?:[^\<->\->:\n,;@]+?([\-]*[^\<->\->:\n,;@]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i, /^(?:box\b)/i, /^(?:participant\b)/i, /^(?:actor\b)/i, /^(?:create\b)/i, /^(?:destroy\b)/i, /^(?:[^<\->\->:\n,;]+?([\-]*[^<\->\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i, /^(?:as\b)/i, /^(?:(?:))/i, /^(?:loop\b)/i, /^(?:rect\b)/i, /^(?:opt\b)/i, /^(?:alt\b)/i, /^(?:else\b)/i, /^(?:par\b)/i, /^(?:par_over\b)/i, /^(?:and\b)/i, /^(?:critical\b)/i, /^(?:option\b)/i, /^(?:break\b)/i, /^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i, /^(?:end\b)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:links\b)/i, /^(?:link\b)/i, /^(?:properties\b)/i, /^(?:details\b)/i, /^(?:over\b)/i, /^(?:note\b)/i, /^(?:activate\b)/i, /^(?:deactivate\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:title:\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:sequenceDiagram\b)/i, /^(?:autonumber\b)/i, /^(?:off\b)/i, /^(?:,)/i, /^(?:;)/i, /^(?:[^+<\->\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+<\->\->:\n,;]+)*)/i, /^(?:->>)/i, /^(?:<<->>)/i, /^(?:-->>)/i, /^(?:<<-->>)/i, /^(?:->)/i, /^(?:-->)/i, /^(?:-[x])/i, /^(?:--[x])/i, /^(?:-[\)])/i, /^(?:--[\)])/i, /^(?::(?:(?:no)?wrap)?[^#\n;]*)/i, /^(?::)/i, /^(?:\+)/i, /^(?:-)/i, /^(?:$)/i, /^(?:.)/i], conditions: { "acc_descr_multiline": { "rules": [50, 51], "inclusive": false }, "acc_descr": { "rules": [48], "inclusive": false }, "acc_title": { "rules": [46], "inclusive": false }, "ID": { "rules": [2, 3, 7, 10, 11, 17], "inclusive": false }, "ALIAS": { "rules": [2, 3, 18, 19], "inclusive": false }, "LINE": { "rules": [2, 3, 31], "inclusive": false }, "CONFIG": { "rules": [8, 9], "inclusive": false }, "CONFIG_DATA": { "rules": [], "inclusive": false }, "INITIAL": { "rules": [0, 1, 3, 4, 5, 6, 12, 13, 14, 15, 16, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 47, 49, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73], "inclusive": true } } }; return lexer2; })(); parser24.lexer = lexer; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser24; parser24.Parser = Parser3; return new Parser3(); })(); parser11.parser = parser11; sequenceDiagram_default = parser11; } }); // src/diagrams/sequence/sequenceDb.ts var LINETYPE2, ARROWTYPE2, PLACEMENT2, PARTICIPANT_TYPE, SequenceDB; var init_sequenceDb = __esm({ "src/diagrams/sequence/sequenceDb.ts"() { "use strict"; init_diagramAPI(); init_js_yaml(); init_logger(); init_imperativeState(); init_common(); init_commonDb(); LINETYPE2 = { SOLID: 0, DOTTED: 1, NOTE: 2, SOLID_CROSS: 3, DOTTED_CROSS: 4, SOLID_OPEN: 5, DOTTED_OPEN: 6, LOOP_START: 10, LOOP_END: 11, ALT_START: 12, ALT_ELSE: 13, ALT_END: 14, OPT_START: 15, OPT_END: 16, ACTIVE_START: 17, ACTIVE_END: 18, PAR_START: 19, PAR_AND: 20, PAR_END: 21, RECT_START: 22, RECT_END: 23, SOLID_POINT: 24, DOTTED_POINT: 25, AUTONUMBER: 26, CRITICAL_START: 27, CRITICAL_OPTION: 28, CRITICAL_END: 29, BREAK_START: 30, BREAK_END: 31, PAR_OVER_START: 32, BIDIRECTIONAL_SOLID: 33, BIDIRECTIONAL_DOTTED: 34 }; ARROWTYPE2 = { FILLED: 0, OPEN: 1 }; PLACEMENT2 = { LEFTOF: 0, RIGHTOF: 1, OVER: 2 }; PARTICIPANT_TYPE = { ACTOR: "actor", BOUNDARY: "boundary", COLLECTIONS: "collections", CONTROL: "control", DATABASE: "database", ENTITY: "entity", PARTICIPANT: "participant", QUEUE: "queue" }; SequenceDB = class { constructor() { this.state = new ImperativeState(() => ({ prevActor: void 0, actors: /* @__PURE__ */ new Map(), createdActors: /* @__PURE__ */ new Map(), destroyedActors: /* @__PURE__ */ new Map(), boxes: [], messages: [], notes: [], sequenceNumbersEnabled: false, wrapEnabled: void 0, currentBox: void 0, lastCreated: void 0, lastDestroyed: void 0 })); this.setAccTitle = setAccTitle; this.setAccDescription = setAccDescription; this.setDiagramTitle = setDiagramTitle; this.getAccTitle = getAccTitle; this.getAccDescription = getAccDescription; this.getDiagramTitle = getDiagramTitle; this.apply = this.apply.bind(this); this.parseBoxData = this.parseBoxData.bind(this); this.parseMessage = this.parseMessage.bind(this); this.clear(); this.setWrap(getConfig2().wrap); this.LINETYPE = LINETYPE2; this.ARROWTYPE = ARROWTYPE2; this.PLACEMENT = PLACEMENT2; } static { __name(this, "SequenceDB"); } addBox(data5) { this.state.records.boxes.push({ name: data5.text, wrap: data5.wrap ?? this.autoWrap(), fill: data5.color, actorKeys: [] }); this.state.records.currentBox = this.state.records.boxes.slice(-1)[0]; } addActor(id30, name, description, type3, metadata) { let assignedBox = this.state.records.currentBox; let doc; if (metadata !== void 0) { let yamlData; if (!metadata.includes("\n")) { yamlData = "{\n" + metadata + "\n}"; } else { yamlData = metadata + "\n"; } doc = load(yamlData, { schema: JSON_SCHEMA }); } type3 = doc?.type ?? type3; const old = this.state.records.actors.get(id30); if (old) { if (this.state.records.currentBox && old.box && this.state.records.currentBox !== old.box) { throw new Error( `A same participant should only be defined in one Box: ${old.name} can't be in '${old.box.name}' and in '${this.state.records.currentBox.name}' at the same time.` ); } assignedBox = old.box ? old.box : this.state.records.currentBox; old.box = assignedBox; if (old && name === old.name && description == null) { return; } } if (description?.text == null) { description = { text: name, type: type3 }; } if (type3 == null || description.text == null) { description = { text: name, type: type3 }; } this.state.records.actors.set(id30, { box: assignedBox, name, description: description.text, wrap: description.wrap ?? this.autoWrap(), prevActor: this.state.records.prevActor, links: {}, properties: {}, actorCnt: null, rectData: null, type: type3 ?? "participant" }); if (this.state.records.prevActor) { const prevActorInRecords = this.state.records.actors.get(this.state.records.prevActor); if (prevActorInRecords) { prevActorInRecords.nextActor = id30; } } if (this.state.records.currentBox) { this.state.records.currentBox.actorKeys.push(id30); } this.state.records.prevActor = id30; } activationCount(part) { let i2; let count2 = 0; if (!part) { return 0; } for (i2 = 0; i2 < this.state.records.messages.length; i2++) { if (this.state.records.messages[i2].type === this.LINETYPE.ACTIVE_START && this.state.records.messages[i2].from === part) { count2++; } if (this.state.records.messages[i2].type === this.LINETYPE.ACTIVE_END && this.state.records.messages[i2].from === part) { count2--; } } return count2; } addMessage(idFrom, idTo, message, answer) { this.state.records.messages.push({ id: this.state.records.messages.length.toString(), from: idFrom, to: idTo, message: message.text, wrap: message.wrap ?? this.autoWrap(), answer }); } addSignal(idFrom, idTo, message, messageType, activate = false) { if (messageType === this.LINETYPE.ACTIVE_END) { const cnt4 = this.activationCount(idFrom ?? ""); if (cnt4 < 1) { const error3 = new Error("Trying to inactivate an inactive participant (" + idFrom + ")"); error3.hash = { text: "->>-", token: "->>-", line: "1", loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, expected: ["'ACTIVE_PARTICIPANT'"] }; throw error3; } } this.state.records.messages.push({ id: this.state.records.messages.length.toString(), from: idFrom, to: idTo, message: message?.text ?? "", wrap: message?.wrap ?? this.autoWrap(), type: messageType, activate }); return true; } hasAtLeastOneBox() { return this.state.records.boxes.length > 0; } hasAtLeastOneBoxWithTitle() { return this.state.records.boxes.some((b3) => b3.name); } getMessages() { return this.state.records.messages; } getBoxes() { return this.state.records.boxes; } getActors() { return this.state.records.actors; } getCreatedActors() { return this.state.records.createdActors; } getDestroyedActors() { return this.state.records.destroyedActors; } getActor(id30) { return this.state.records.actors.get(id30); } getActorKeys() { return [...this.state.records.actors.keys()]; } enableSequenceNumbers() { this.state.records.sequenceNumbersEnabled = true; } disableSequenceNumbers() { this.state.records.sequenceNumbersEnabled = false; } showSequenceNumbers() { return this.state.records.sequenceNumbersEnabled; } setWrap(wrapSetting) { this.state.records.wrapEnabled = wrapSetting; } extractWrap(text4) { if (text4 === void 0) { return {}; } text4 = text4.trim(); const wrap3 = /^:?wrap:/.exec(text4) !== null ? true : /^:?nowrap:/.exec(text4) !== null ? false : void 0; const cleanedText = (wrap3 === void 0 ? text4 : text4.replace(/^:?(?:no)?wrap:/, "")).trim(); return { cleanedText, wrap: wrap3 }; } autoWrap() { if (this.state.records.wrapEnabled !== void 0) { return this.state.records.wrapEnabled; } return getConfig2().sequence?.wrap ?? false; } clear() { this.state.reset(); clear(); } parseMessage(str2) { const trimmedStr = str2.trim(); const { wrap: wrap3, cleanedText } = this.extractWrap(trimmedStr); const message = { text: cleanedText, wrap: wrap3 }; log.debug(`parseMessage: ${JSON.stringify(message)}`); return message; } // We expect the box statement to be color first then description // The color can be rgb,rgba,hsl,hsla, or css code names #hex codes are not supported for now because of the way the char # is handled // We extract first segment as color, the rest of the line is considered as text parseBoxData(str2) { const match2 = /^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/.exec(str2); let color2 = match2?.[1] ? match2[1].trim() : "transparent"; let title2 = match2?.[2] ? match2[2].trim() : void 0; if (window?.CSS) { if (!window.CSS.supports("color", color2)) { color2 = "transparent"; title2 = str2.trim(); } } else { const style3 = new Option().style; style3.color = color2; if (style3.color !== color2) { color2 = "transparent"; title2 = str2.trim(); } } const { wrap: wrap3, cleanedText } = this.extractWrap(title2); return { text: cleanedText ? sanitizeText(cleanedText, getConfig2()) : void 0, color: color2, wrap: wrap3 }; } addNote(actor, placement, message) { const note3 = { actor, placement, message: message.text, wrap: message.wrap ?? this.autoWrap() }; const actors2 = [].concat(actor, actor); this.state.records.notes.push(note3); this.state.records.messages.push({ id: this.state.records.messages.length.toString(), from: actors2[0], to: actors2[1], message: message.text, wrap: message.wrap ?? this.autoWrap(), type: this.LINETYPE.NOTE, placement }); } addLinks(actorId, text4) { const actor = this.getActor(actorId); try { let sanitizedText = sanitizeText(text4.text, getConfig2()); sanitizedText = sanitizedText.replace(/=/g, "="); sanitizedText = sanitizedText.replace(/&/g, "&"); const links3 = JSON.parse(sanitizedText); this.insertLinks(actor, links3); } catch (e3) { log.error("error while parsing actor link text", e3); } } addALink(actorId, text4) { const actor = this.getActor(actorId); try { const links3 = {}; let sanitizedText = sanitizeText(text4.text, getConfig2()); const sep2 = sanitizedText.indexOf("@"); sanitizedText = sanitizedText.replace(/=/g, "="); sanitizedText = sanitizedText.replace(/&/g, "&"); const label = sanitizedText.slice(0, sep2 - 1).trim(); const link2 = sanitizedText.slice(sep2 + 1).trim(); links3[label] = link2; this.insertLinks(actor, links3); } catch (e3) { log.error("error while parsing actor link text", e3); } } insertLinks(actor, links3) { if (actor.links == null) { actor.links = links3; } else { for (const key in links3) { actor.links[key] = links3[key]; } } } addProperties(actorId, text4) { const actor = this.getActor(actorId); try { const sanitizedText = sanitizeText(text4.text, getConfig2()); const properties = JSON.parse(sanitizedText); this.insertProperties(actor, properties); } catch (e3) { log.error("error while parsing actor properties text", e3); } } insertProperties(actor, properties) { if (actor.properties == null) { actor.properties = properties; } else { for (const key in properties) { actor.properties[key] = properties[key]; } } } boxEnd() { this.state.records.currentBox = void 0; } addDetails(actorId, text4) { const actor = this.getActor(actorId); const elem = document.getElementById(text4.text); try { const text5 = elem.innerHTML; const details = JSON.parse(text5); if (details.properties) { this.insertProperties(actor, details.properties); } if (details.links) { this.insertLinks(actor, details.links); } } catch (e3) { log.error("error while parsing actor details text", e3); } } getActorProperty(actor, key) { if (actor?.properties !== void 0) { return actor.properties[key]; } return void 0; } // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-redundant-type-constituents apply(param) { if (Array.isArray(param)) { param.forEach((item) => { this.apply(item); }); } else { switch (param.type) { case "sequenceIndex": this.state.records.messages.push({ id: this.state.records.messages.length.toString(), from: void 0, to: void 0, message: { start: param.sequenceIndex, step: param.sequenceIndexStep, visible: param.sequenceVisible }, wrap: false, type: param.signalType }); break; case "addParticipant": this.addActor(param.actor, param.actor, param.description, param.draw, param.config); break; case "createParticipant": if (this.state.records.actors.has(param.actor)) { throw new Error( "It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior" ); } this.state.records.lastCreated = param.actor; this.addActor(param.actor, param.actor, param.description, param.draw, param.config); this.state.records.createdActors.set(param.actor, this.state.records.messages.length); break; case "destroyParticipant": this.state.records.lastDestroyed = param.actor; this.state.records.destroyedActors.set(param.actor, this.state.records.messages.length); break; case "activeStart": this.addSignal(param.actor, void 0, void 0, param.signalType); break; case "activeEnd": this.addSignal(param.actor, void 0, void 0, param.signalType); break; case "addNote": this.addNote(param.actor, param.placement, param.text); break; case "addLinks": this.addLinks(param.actor, param.text); break; case "addALink": this.addALink(param.actor, param.text); break; case "addProperties": this.addProperties(param.actor, param.text); break; case "addDetails": this.addDetails(param.actor, param.text); break; case "addMessage": if (this.state.records.lastCreated) { if (param.to !== this.state.records.lastCreated) { throw new Error( "The created participant " + this.state.records.lastCreated.name + " does not have an associated creating message after its declaration. Please check the sequence diagram." ); } else { this.state.records.lastCreated = void 0; } } else if (this.state.records.lastDestroyed) { if (param.to !== this.state.records.lastDestroyed && param.from !== this.state.records.lastDestroyed) { throw new Error( "The destroyed participant " + this.state.records.lastDestroyed.name + " does not have an associated destroying message after its declaration. Please check the sequence diagram." ); } else { this.state.records.lastDestroyed = void 0; } } this.addSignal(param.from, param.to, param.msg, param.signalType, param.activate); break; case "boxStart": this.addBox(param.boxData); break; case "boxEnd": this.boxEnd(); break; case "loopStart": this.addSignal(void 0, void 0, param.loopText, param.signalType); break; case "loopEnd": this.addSignal(void 0, void 0, void 0, param.signalType); break; case "rectStart": this.addSignal(void 0, void 0, param.color, param.signalType); break; case "rectEnd": this.addSignal(void 0, void 0, void 0, param.signalType); break; case "optStart": this.addSignal(void 0, void 0, param.optText, param.signalType); break; case "optEnd": this.addSignal(void 0, void 0, void 0, param.signalType); break; case "altStart": this.addSignal(void 0, void 0, param.altText, param.signalType); break; case "else": this.addSignal(void 0, void 0, param.altText, param.signalType); break; case "altEnd": this.addSignal(void 0, void 0, void 0, param.signalType); break; case "setAccTitle": setAccTitle(param.text); break; case "parStart": this.addSignal(void 0, void 0, param.parText, param.signalType); break; case "and": this.addSignal(void 0, void 0, param.parText, param.signalType); break; case "parEnd": this.addSignal(void 0, void 0, void 0, param.signalType); break; case "criticalStart": this.addSignal(void 0, void 0, param.criticalText, param.signalType); break; case "option": this.addSignal(void 0, void 0, param.optionText, param.signalType); break; case "criticalEnd": this.addSignal(void 0, void 0, void 0, param.signalType); break; case "breakStart": this.addSignal(void 0, void 0, param.breakText, param.signalType); break; case "breakEnd": this.addSignal(void 0, void 0, void 0, param.signalType); break; } } } getConfig() { return getConfig2().sequence; } }; } }); // src/diagrams/sequence/styles.js var getStyles9, styles_default8; var init_styles8 = __esm({ "src/diagrams/sequence/styles.js"() { "use strict"; getStyles9 = /* @__PURE__ */ __name((options2) => `.actor { stroke: ${options2.actorBorder}; fill: ${options2.actorBkg}; } text.actor > tspan { fill: ${options2.actorTextColor}; stroke: none; } .actor-line { stroke: ${options2.actorLineColor}; } .innerArc { stroke-width: 1.5; stroke-dasharray: none; } .messageLine0 { stroke-width: 1.5; stroke-dasharray: none; stroke: ${options2.signalColor}; } .messageLine1 { stroke-width: 1.5; stroke-dasharray: 2, 2; stroke: ${options2.signalColor}; } #arrowhead path { fill: ${options2.signalColor}; stroke: ${options2.signalColor}; } .sequenceNumber { fill: ${options2.sequenceNumberColor}; } #sequencenumber { fill: ${options2.signalColor}; } #crosshead path { fill: ${options2.signalColor}; stroke: ${options2.signalColor}; } .messageText { fill: ${options2.signalTextColor}; stroke: none; } .labelBox { stroke: ${options2.labelBoxBorderColor}; fill: ${options2.labelBoxBkgColor}; } .labelText, .labelText > tspan { fill: ${options2.labelTextColor}; stroke: none; } .loopText, .loopText > tspan { fill: ${options2.loopTextColor}; stroke: none; } .loopLine { stroke-width: 2px; stroke-dasharray: 2, 2; stroke: ${options2.labelBoxBorderColor}; fill: ${options2.labelBoxBorderColor}; } .note { //stroke: #decc93; stroke: ${options2.noteBorderColor}; fill: ${options2.noteBkgColor}; } .noteText, .noteText > tspan { fill: ${options2.noteTextColor}; stroke: none; } .activation0 { fill: ${options2.activationBkgColor}; stroke: ${options2.activationBorderColor}; } .activation1 { fill: ${options2.activationBkgColor}; stroke: ${options2.activationBorderColor}; } .activation2 { fill: ${options2.activationBkgColor}; stroke: ${options2.activationBorderColor}; } .actorPopupMenu { position: absolute; } .actorPopupMenuPanel { position: absolute; fill: ${options2.actorBkg}; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4)); } .actor-man line { stroke: ${options2.actorBorder}; fill: ${options2.actorBkg}; } .actor-man circle, line { stroke: ${options2.actorBorder}; fill: ${options2.actorBkg}; stroke-width: 2px; } `, "getStyles"); styles_default8 = getStyles9; } }); // src/diagrams/sequence/svgDraw.js var import_sanitize_url5, ACTOR_TYPE_WIDTH, TOP_ACTOR_CLASS, BOTTOM_ACTOR_CLASS, ACTOR_BOX_CLASS, ACTOR_MAN_FIGURE_CLASS, drawRect4, drawPopup, popupMenuToggle, drawKatex, drawText3, drawLabel, actorCnt, fixLifeLineHeights, drawActorTypeParticipant, drawActorTypeCollections, drawActorTypeQueue, drawActorTypeControl, drawActorTypeEntity, drawActorTypeDatabase, drawActorTypeBoundary, drawActorTypeActor, drawActor, drawBox, anchorElement, drawActivation, drawLoop, drawBackgroundRect2, insertDatabaseIcon2, insertComputerIcon2, insertClockIcon2, insertArrowHead2, insertArrowFilledHead2, insertSequenceNumber, insertArrowCrossHead2, getTextObj3, getNoteRect2, _drawTextCandidateFunc2, _drawMenuItemTextCandidateFunc, svgDraw_default2; var init_svgDraw2 = __esm({ "src/diagrams/sequence/svgDraw.js"() { "use strict"; import_sanitize_url5 = __toESM(require_dist(), 1); init_config(); init_utils2(); init_common(); init_svgDrawCommon(); ACTOR_TYPE_WIDTH = 18 * 2; TOP_ACTOR_CLASS = "actor-top"; BOTTOM_ACTOR_CLASS = "actor-bottom"; ACTOR_BOX_CLASS = "actor-box"; ACTOR_MAN_FIGURE_CLASS = "actor-man"; drawRect4 = /* @__PURE__ */ __name(function(elem, rectData) { return drawRect(elem, rectData); }, "drawRect"); drawPopup = /* @__PURE__ */ __name(function(elem, actor, minMenuWidth, textAttrs, forceMenus) { if (actor.links === void 0 || actor.links === null || Object.keys(actor.links).length === 0) { return { height: 0, width: 0 }; } const links3 = actor.links; const actorCnt2 = actor.actorCnt; const rectData = actor.rectData; var displayValue = "none"; if (forceMenus) { displayValue = "block !important"; } const g2 = elem.append("g"); g2.attr("id", "actor" + actorCnt2 + "_popup"); g2.attr("class", "actorPopupMenu"); g2.attr("display", displayValue); var actorClass = ""; if (rectData.class !== void 0) { actorClass = " " + rectData.class; } let menuWidth = rectData.width > minMenuWidth ? rectData.width : minMenuWidth; const rectElem = g2.append("rect"); rectElem.attr("class", "actorPopupMenuPanel" + actorClass); rectElem.attr("x", rectData.x); rectElem.attr("y", rectData.height); rectElem.attr("fill", rectData.fill); rectElem.attr("stroke", rectData.stroke); rectElem.attr("width", menuWidth); rectElem.attr("height", rectData.height); rectElem.attr("rx", rectData.rx); rectElem.attr("ry", rectData.ry); if (links3 != null) { var linkY = 20; for (let key in links3) { var linkElem = g2.append("a"); var sanitizedLink = (0, import_sanitize_url5.sanitizeUrl)(links3[key]); linkElem.attr("xlink:href", sanitizedLink); linkElem.attr("target", "_blank"); _drawMenuItemTextCandidateFunc(textAttrs)( key, linkElem, rectData.x + 10, rectData.height + linkY, menuWidth, 20, { class: "actor" }, textAttrs ); linkY += 30; } } rectElem.attr("height", linkY); return { height: rectData.height + linkY, width: menuWidth }; }, "drawPopup"); popupMenuToggle = /* @__PURE__ */ __name(function(popId) { return "var pu = document.getElementById('" + popId + "'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }"; }, "popupMenuToggle"); drawKatex = /* @__PURE__ */ __name(async function(elem, textData, msgModel = null) { let textElem = elem.append("foreignObject"); const linesSanitized = await renderKatexSanitized(textData.text, getConfig()); const divElem = textElem.append("xhtml:div").attr("style", "width: fit-content;").attr("xmlns", "http://www.w3.org/1999/xhtml").html(linesSanitized); const dim = divElem.node().getBoundingClientRect(); textElem.attr("height", Math.round(dim.height)).attr("width", Math.round(dim.width)); if (textData.class === "noteText") { const rectElem = elem.node().firstChild; rectElem.setAttribute("height", dim.height + 2 * textData.textMargin); const rectDim = rectElem.getBBox(); textElem.attr("x", Math.round(rectDim.x + rectDim.width / 2 - dim.width / 2)).attr("y", Math.round(rectDim.y + rectDim.height / 2 - dim.height / 2)); } else if (msgModel) { let { startx, stopx, starty } = msgModel; if (startx > stopx) { const temp = startx; startx = stopx; stopx = temp; } textElem.attr("x", Math.round(startx + Math.abs(startx - stopx) / 2 - dim.width / 2)); if (textData.class === "loopText") { textElem.attr("y", Math.round(starty)); } else { textElem.attr("y", Math.round(starty - dim.height)); } } return [textElem]; }, "drawKatex"); drawText3 = /* @__PURE__ */ __name(function(elem, textData) { let prevTextHeight = 0; let textHeight = 0; const lines = textData.text.split(common_default.lineBreakRegex); const [_textFontSize, _textFontSizePx] = parseFontSize(textData.fontSize); let textElems = []; let dy = 0; let yfunc = /* @__PURE__ */ __name(() => textData.y, "yfunc"); if (textData.valign !== void 0 && textData.textMargin !== void 0 && textData.textMargin > 0) { switch (textData.valign) { case "top": case "start": yfunc = /* @__PURE__ */ __name(() => Math.round(textData.y + textData.textMargin), "yfunc"); break; case "middle": case "center": yfunc = /* @__PURE__ */ __name(() => Math.round(textData.y + (prevTextHeight + textHeight + textData.textMargin) / 2), "yfunc"); break; case "bottom": case "end": yfunc = /* @__PURE__ */ __name(() => Math.round( textData.y + (prevTextHeight + textHeight + 2 * textData.textMargin) - textData.textMargin ), "yfunc"); break; } } if (textData.anchor !== void 0 && textData.textMargin !== void 0 && textData.width !== void 0) { switch (textData.anchor) { case "left": case "start": textData.x = Math.round(textData.x + textData.textMargin); textData.anchor = "start"; textData.dominantBaseline = "middle"; textData.alignmentBaseline = "middle"; break; case "middle": case "center": textData.x = Math.round(textData.x + textData.width / 2); textData.anchor = "middle"; textData.dominantBaseline = "middle"; textData.alignmentBaseline = "middle"; break; case "right": case "end": textData.x = Math.round(textData.x + textData.width - textData.textMargin); textData.anchor = "end"; textData.dominantBaseline = "middle"; textData.alignmentBaseline = "middle"; break; } } for (let [i2, line2] of lines.entries()) { if (textData.textMargin !== void 0 && textData.textMargin === 0 && _textFontSize !== void 0) { dy = i2 * _textFontSize; } const textElem = elem.append("text"); textElem.attr("x", textData.x); textElem.attr("y", yfunc()); if (textData.anchor !== void 0) { textElem.attr("text-anchor", textData.anchor).attr("dominant-baseline", textData.dominantBaseline).attr("alignment-baseline", textData.alignmentBaseline); } if (textData.fontFamily !== void 0) { textElem.style("font-family", textData.fontFamily); } if (_textFontSizePx !== void 0) { textElem.style("font-size", _textFontSizePx); } if (textData.fontWeight !== void 0) { textElem.style("font-weight", textData.fontWeight); } if (textData.fill !== void 0) { textElem.attr("fill", textData.fill); } if (textData.class !== void 0) { textElem.attr("class", textData.class); } if (textData.dy !== void 0) { textElem.attr("dy", textData.dy); } else if (dy !== 0) { textElem.attr("dy", dy); } const text4 = line2 || ZERO_WIDTH_SPACE; if (textData.tspan) { const span = textElem.append("tspan"); span.attr("x", textData.x); if (textData.fill !== void 0) { span.attr("fill", textData.fill); } span.text(text4); } else { textElem.text(text4); } if (textData.valign !== void 0 && textData.textMargin !== void 0 && textData.textMargin > 0) { textHeight += (textElem._groups || textElem)[0][0].getBBox().height; prevTextHeight = textHeight; } textElems.push(textElem); } return textElems; }, "drawText"); drawLabel = /* @__PURE__ */ __name(function(elem, txtObject) { function genPoints(x5, y6, width3, height2, cut) { return x5 + "," + y6 + " " + (x5 + width3) + "," + y6 + " " + (x5 + width3) + "," + (y6 + height2 - cut) + " " + (x5 + width3 - cut * 1.2) + "," + (y6 + height2) + " " + x5 + "," + (y6 + height2); } __name(genPoints, "genPoints"); const polygon2 = elem.append("polygon"); polygon2.attr("points", genPoints(txtObject.x, txtObject.y, txtObject.width, txtObject.height, 7)); polygon2.attr("class", "labelBox"); txtObject.y = txtObject.y + txtObject.height / 2; drawText3(elem, txtObject); return polygon2; }, "drawLabel"); actorCnt = -1; fixLifeLineHeights = /* @__PURE__ */ __name((diagram27, actors2, actorKeys, conf5) => { if (!diagram27.select) { return; } actorKeys.forEach((actorKey) => { const actor = actors2.get(actorKey); const actorDOM = diagram27.select("#actor" + actor.actorCnt); if (!conf5.mirrorActors && actor.stopy) { actorDOM.attr("y2", actor.stopy + actor.height / 2); } else if (conf5.mirrorActors) { actorDOM.attr("y2", actor.stopy); } }); }, "fixLifeLineHeights"); drawActorTypeParticipant = /* @__PURE__ */ __name(function(elem, actor, conf5, isFooter) { const actorY = isFooter ? actor.stopy : actor.starty; const center4 = actor.x + actor.width / 2; const centerY = actorY + actor.height; const boxplusLineGroup = elem.append("g").lower(); var g2 = boxplusLineGroup; if (!isFooter) { actorCnt++; if (Object.keys(actor.links || {}).length && !conf5.forceMenus) { g2.attr("onclick", popupMenuToggle(`actor${actorCnt}_popup`)).attr("cursor", "pointer"); } g2.append("line").attr("id", "actor" + actorCnt).attr("x1", center4).attr("y1", centerY).attr("x2", center4).attr("y2", 2e3).attr("class", "actor-line 200").attr("stroke-width", "0.5px").attr("stroke", "#999").attr("name", actor.name); g2 = boxplusLineGroup.append("g"); actor.actorCnt = actorCnt; if (actor.links != null) { g2.attr("id", "root-" + actorCnt); } } const rect3 = getNoteRect(); var cssclass = "actor"; if (actor.properties?.class) { cssclass = actor.properties.class; } else { rect3.fill = "#eaeaea"; } if (isFooter) { cssclass += ` ${BOTTOM_ACTOR_CLASS}`; } else { cssclass += ` ${TOP_ACTOR_CLASS}`; } rect3.x = actor.x; rect3.y = actorY; rect3.width = actor.width; rect3.height = actor.height; rect3.class = cssclass; rect3.rx = 3; rect3.ry = 3; rect3.name = actor.name; const rectElem = drawRect4(g2, rect3); actor.rectData = rect3; if (actor.properties?.icon) { const iconSrc = actor.properties.icon.trim(); if (iconSrc.charAt(0) === "@") { drawEmbeddedImage(g2, rect3.x + rect3.width - 20, rect3.y + 10, iconSrc.substr(1)); } else { drawImage(g2, rect3.x + rect3.width - 20, rect3.y + 10, iconSrc); } } _drawTextCandidateFunc2(conf5, hasKatex(actor.description))( actor.description, g2, rect3.x, rect3.y, rect3.width, rect3.height, { class: `actor ${ACTOR_BOX_CLASS}` }, conf5 ); let height2 = actor.height; if (rectElem.node) { const bounds4 = rectElem.node().getBBox(); actor.height = bounds4.height; height2 = bounds4.height; } return height2; }, "drawActorTypeParticipant"); drawActorTypeCollections = /* @__PURE__ */ __name(function(elem, actor, conf5, isFooter) { const actorY = isFooter ? actor.stopy : actor.starty; const center4 = actor.x + actor.width / 2; const centerY = actorY + actor.height; const boxplusLineGroup = elem.append("g").lower(); var g2 = boxplusLineGroup; if (!isFooter) { actorCnt++; if (Object.keys(actor.links || {}).length && !conf5.forceMenus) { g2.attr("onclick", popupMenuToggle(`actor${actorCnt}_popup`)).attr("cursor", "pointer"); } g2.append("line").attr("id", "actor" + actorCnt).attr("x1", center4).attr("y1", centerY).attr("x2", center4).attr("y2", 2e3).attr("class", "actor-line 200").attr("stroke-width", "0.5px").attr("stroke", "#999").attr("name", actor.name); g2 = boxplusLineGroup.append("g"); actor.actorCnt = actorCnt; if (actor.links != null) { g2.attr("id", "root-" + actorCnt); } } const rect3 = getNoteRect(); var cssclass = "actor"; if (actor.properties?.class) { cssclass = actor.properties.class; } else { rect3.fill = "#eaeaea"; } if (isFooter) { cssclass += ` ${BOTTOM_ACTOR_CLASS}`; } else { cssclass += ` ${TOP_ACTOR_CLASS}`; } rect3.x = actor.x; rect3.y = actorY; rect3.width = actor.width; rect3.height = actor.height; rect3.class = cssclass; rect3.name = actor.name; const offset = 6; const shadowRect = { ...rect3, x: rect3.x + (isFooter ? -offset : -offset), y: rect3.y + (isFooter ? +offset : +offset), class: "actor" }; const rectElem = drawRect4(g2, rect3); drawRect4(g2, shadowRect); actor.rectData = rect3; if (actor.properties?.icon) { const iconSrc = actor.properties.icon.trim(); if (iconSrc.charAt(0) === "@") { drawEmbeddedImage(g2, rect3.x + rect3.width - 20, rect3.y + 10, iconSrc.substr(1)); } else { drawImage(g2, rect3.x + rect3.width - 20, rect3.y + 10, iconSrc); } } _drawTextCandidateFunc2(conf5, hasKatex(actor.description))( actor.description, g2, rect3.x - offset, rect3.y + offset, rect3.width, rect3.height, { class: `actor ${ACTOR_BOX_CLASS}` }, conf5 ); let height2 = actor.height; if (rectElem.node) { const bounds4 = rectElem.node().getBBox(); actor.height = bounds4.height; height2 = bounds4.height; } return height2; }, "drawActorTypeCollections"); drawActorTypeQueue = /* @__PURE__ */ __name(function(elem, actor, conf5, isFooter) { const actorY = isFooter ? actor.stopy : actor.starty; const center4 = actor.x + actor.width / 2; const centerY = actorY + actor.height; const boxplusLineGroup = elem.append("g").lower(); let g2 = boxplusLineGroup; if (!isFooter) { actorCnt++; if (Object.keys(actor.links || {}).length && !conf5.forceMenus) { g2.attr("onclick", popupMenuToggle(`actor${actorCnt}_popup`)).attr("cursor", "pointer"); } g2.append("line").attr("id", "actor" + actorCnt).attr("x1", center4).attr("y1", centerY).attr("x2", center4).attr("y2", 2e3).attr("class", "actor-line 200").attr("stroke-width", "0.5px").attr("stroke", "#999").attr("name", actor.name); g2 = boxplusLineGroup.append("g"); actor.actorCnt = actorCnt; if (actor.links != null) { g2.attr("id", "root-" + actorCnt); } } const rect3 = getNoteRect(); let cssclass = "actor"; if (actor.properties?.class) { cssclass = actor.properties.class; } else { rect3.fill = "#eaeaea"; } if (isFooter) { cssclass += ` ${BOTTOM_ACTOR_CLASS}`; } else { cssclass += ` ${TOP_ACTOR_CLASS}`; } rect3.x = actor.x; rect3.y = actorY; rect3.width = actor.width; rect3.height = actor.height; rect3.class = cssclass; rect3.name = actor.name; const ry = rect3.height / 2; const rx = ry / (2.5 + rect3.height / 50); const cylinderGroup = g2.append("g"); const cylinderArc = g2.append("g"); cylinderGroup.append("path").attr( "d", `M ${rect3.x},${rect3.y + ry} a ${rx},${ry} 0 0 0 0,${rect3.height} h ${rect3.width - 2 * rx} a ${rx},${ry} 0 0 0 0,-${rect3.height} Z ` ).attr("class", cssclass); cylinderArc.append("path").attr( "d", `M ${rect3.x},${rect3.y + ry} a ${rx},${ry} 0 0 0 0,${rect3.height}` ).attr("stroke", "#666").attr("stroke-width", "1px").attr("class", cssclass); cylinderGroup.attr("transform", `translate(${rx}, ${-(rect3.height / 2)})`); cylinderArc.attr("transform", `translate(${rect3.width - rx}, ${-rect3.height / 2})`); actor.rectData = rect3; if (actor.properties?.icon) { const iconSrc = actor.properties.icon.trim(); const iconX = rect3.x + rect3.width - 20; const iconY = rect3.y + 10; if (iconSrc.charAt(0) === "@") { drawEmbeddedImage(g2, iconX, iconY, iconSrc.substr(1)); } else { drawImage(g2, iconX, iconY, iconSrc); } } _drawTextCandidateFunc2(conf5, hasKatex(actor.description))( actor.description, g2, rect3.x, rect3.y, rect3.width, rect3.height, { class: `actor ${ACTOR_BOX_CLASS}` }, conf5 ); let height2 = actor.height; const lastPath = cylinderGroup.select("path:last-child"); if (lastPath.node()) { const bounds4 = lastPath.node().getBBox(); actor.height = bounds4.height; height2 = bounds4.height; } return height2; }, "drawActorTypeQueue"); drawActorTypeControl = /* @__PURE__ */ __name(function(elem, actor, conf5, isFooter) { const actorY = isFooter ? actor.stopy : actor.starty; const center4 = actor.x + actor.width / 2; const centerY = actorY + 75; const line2 = elem.append("g").lower(); if (!isFooter) { actorCnt++; line2.append("line").attr("id", "actor" + actorCnt).attr("x1", center4).attr("y1", centerY).attr("x2", center4).attr("y2", 2e3).attr("class", "actor-line 200").attr("stroke-width", "0.5px").attr("stroke", "#999").attr("name", actor.name); actor.actorCnt = actorCnt; } const actElem = elem.append("g"); let cssClass = ACTOR_MAN_FIGURE_CLASS; if (isFooter) { cssClass += ` ${BOTTOM_ACTOR_CLASS}`; } else { cssClass += ` ${TOP_ACTOR_CLASS}`; } actElem.attr("class", cssClass); actElem.attr("name", actor.name); const rect3 = getNoteRect(); rect3.x = actor.x; rect3.y = actorY; rect3.fill = "#eaeaea"; rect3.width = actor.width; rect3.height = actor.height; rect3.class = "actor"; const cx = actor.x + actor.width / 2; const cy = actorY + 30; const r2 = 18; actElem.append("defs").append("marker").attr("id", "filled-head-control").attr("refX", 11).attr("refY", 5.8).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "172.5").append("path").attr("d", "M 14.4 5.6 L 7.2 10.4 L 8.8 5.6 L 7.2 0.8 Z"); actElem.append("circle").attr("cx", cx).attr("cy", cy).attr("r", r2).attr("fill", "#eaeaf7").attr("stroke", "#666").attr("stroke-width", 1.2); actElem.append("line").attr("marker-end", "url(#filled-head-control)").attr("transform", `translate(${cx}, ${cy - r2})`); const bounds4 = actElem.node().getBBox(); actor.height = bounds4.height + 2 * (conf5?.sequence?.labelBoxHeight ?? 0); _drawTextCandidateFunc2(conf5, hasKatex(actor.description))( actor.description, actElem, rect3.x, rect3.y + r2 + (isFooter ? 5 : 10), rect3.width, rect3.height, { class: `actor ${ACTOR_MAN_FIGURE_CLASS}` }, conf5 ); return actor.height; }, "drawActorTypeControl"); drawActorTypeEntity = /* @__PURE__ */ __name(function(elem, actor, conf5, isFooter) { const actorY = isFooter ? actor.stopy : actor.starty; const center4 = actor.x + actor.width / 2; const centerY = actorY + 75; const line2 = elem.append("g").lower(); const actElem = elem.append("g"); let cssClass = ACTOR_MAN_FIGURE_CLASS; if (isFooter) { cssClass += ` ${BOTTOM_ACTOR_CLASS}`; } else { cssClass += ` ${TOP_ACTOR_CLASS}`; } actElem.attr("class", cssClass); actElem.attr("name", actor.name); const rect3 = getNoteRect(); rect3.x = actor.x; rect3.y = actorY; rect3.fill = "#eaeaea"; rect3.width = actor.width; rect3.height = actor.height; rect3.class = "actor"; const cx = actor.x + actor.width / 2; const cy = actorY + (!isFooter ? 25 : 10); const r2 = 18; actElem.append("circle").attr("cx", cx).attr("cy", cy).attr("r", r2).attr("width", actor.width).attr("height", actor.height); actElem.append("line").attr("x1", cx - r2).attr("x2", cx + r2).attr("y1", cy + r2).attr("y2", cy + r2).attr("stroke", "#333").attr("stroke-width", 2); const bounds4 = actElem.node().getBBox(); actor.height = bounds4.height + (conf5?.sequence?.labelBoxHeight ?? 0); if (!isFooter) { actorCnt++; line2.append("line").attr("id", "actor" + actorCnt).attr("x1", center4).attr("y1", centerY).attr("x2", center4).attr("y2", 2e3).attr("class", "actor-line 200").attr("stroke-width", "0.5px").attr("stroke", "#999").attr("name", actor.name); actor.actorCnt = actorCnt; } _drawTextCandidateFunc2(conf5, hasKatex(actor.description))( actor.description, actElem, rect3.x, rect3.y + (!isFooter ? (cy + r2 - actorY) / 2 : (cy - actorY + r2 - 5) / 2), rect3.width, rect3.height, { class: `actor ${ACTOR_MAN_FIGURE_CLASS}` }, conf5 ); if (!isFooter) { actElem.attr("transform", `translate(${0}, ${r2 / 2})`); } else { actElem.attr("transform", `translate(${0}, ${r2 / 2})`); } return actor.height; }, "drawActorTypeEntity"); drawActorTypeDatabase = /* @__PURE__ */ __name(function(elem, actor, conf5, isFooter) { const actorY = isFooter ? actor.stopy : actor.starty; const center4 = actor.x + actor.width / 2; const centerY = actorY + actor.height + 2 * conf5.boxTextMargin; const boxplusLineGroup = elem.append("g").lower(); let g2 = boxplusLineGroup; if (!isFooter) { actorCnt++; if (Object.keys(actor.links || {}).length && !conf5.forceMenus) { g2.attr("onclick", popupMenuToggle(`actor${actorCnt}_popup`)).attr("cursor", "pointer"); } g2.append("line").attr("id", "actor" + actorCnt).attr("x1", center4).attr("y1", centerY).attr("x2", center4).attr("y2", 2e3).attr("class", "actor-line 200").attr("stroke-width", "0.5px").attr("stroke", "#999").attr("name", actor.name); g2 = boxplusLineGroup.append("g"); actor.actorCnt = actorCnt; if (actor.links != null) { g2.attr("id", "root-" + actorCnt); } } const rect3 = getNoteRect(); let cssclass = "actor"; if (actor.properties?.class) { cssclass = actor.properties.class; } else { rect3.fill = "#eaeaea"; } if (isFooter) { cssclass += ` ${BOTTOM_ACTOR_CLASS}`; } else { cssclass += ` ${TOP_ACTOR_CLASS}`; } rect3.x = actor.x; rect3.y = actorY; rect3.width = actor.width; rect3.height = actor.height; rect3.class = cssclass; rect3.name = actor.name; rect3.x = actor.x; rect3.y = actorY; const w4 = rect3.width / 4; const h3 = rect3.width / 4; const rx = w4 / 2; const ry = rx / (2.5 + w4 / 50); const cylinderGroup = g2.append("g"); const d3 = ` M ${rect3.x},${rect3.y + ry} a ${rx},${ry} 0 0 0 ${w4},0 a ${rx},${ry} 0 0 0 -${w4},0 l 0,${h3 - 2 * ry} a ${rx},${ry} 0 0 0 ${w4},0 l 0,-${h3 - 2 * ry} `; cylinderGroup.append("path").attr("d", d3).attr("fill", "#eaeaea").attr("stroke", "#000").attr("stroke-width", 1).attr("class", cssclass); if (!isFooter) { cylinderGroup.attr("transform", `translate(${w4 * 1.5}, ${(rect3.height + ry) / 4})`); } else { cylinderGroup.attr("transform", `translate(${w4 * 1.5}, ${rect3.height / 4 - 2 * ry})`); } actor.rectData = rect3; _drawTextCandidateFunc2(conf5, hasKatex(actor.description))( actor.description, g2, rect3.x, rect3.y + (!isFooter ? (rect3.height + ry) / 2 : (rect3.height + h3) / 4), rect3.width, rect3.height, { class: `actor ${ACTOR_BOX_CLASS}` }, conf5 ); const lastPath = cylinderGroup.select("path:last-child"); if (lastPath.node()) { const bounds4 = lastPath.node().getBBox(); actor.height = bounds4.height + (conf5.sequence.labelBoxHeight ?? 0); } return actor.height; }, "drawActorTypeDatabase"); drawActorTypeBoundary = /* @__PURE__ */ __name(function(elem, actor, conf5, isFooter) { const actorY = isFooter ? actor.stopy : actor.starty; const center4 = actor.x + actor.width / 2; const centerY = actorY + 80; const radius2 = 30; const line2 = elem.append("g").lower(); if (!isFooter) { actorCnt++; line2.append("line").attr("id", "actor" + actorCnt).attr("x1", center4).attr("y1", centerY).attr("x2", center4).attr("y2", 2e3).attr("class", "actor-line 200").attr("stroke-width", "0.5px").attr("stroke", "#999").attr("name", actor.name); actor.actorCnt = actorCnt; } const actElem = elem.append("g"); let cssClass = ACTOR_MAN_FIGURE_CLASS; if (isFooter) { cssClass += ` ${BOTTOM_ACTOR_CLASS}`; } else { cssClass += ` ${TOP_ACTOR_CLASS}`; } actElem.attr("class", cssClass); actElem.attr("name", actor.name); const rect3 = getNoteRect(); rect3.x = actor.x; rect3.y = actorY; rect3.fill = "#eaeaea"; rect3.width = actor.width; rect3.height = actor.height; rect3.class = "actor"; actElem.append("line").attr("id", "actor-man-torso" + actorCnt).attr("x1", actor.x + actor.width / 2 - radius2 * 2.5).attr("y1", actorY + 10).attr("x2", actor.x + actor.width / 2 - 15).attr("y2", actorY + 10); actElem.append("line").attr("id", "actor-man-arms" + actorCnt).attr("x1", actor.x + actor.width / 2 - radius2 * 2.5).attr("y1", actorY + 0).attr("x2", actor.x + actor.width / 2 - radius2 * 2.5).attr("y2", actorY + 20); actElem.append("circle").attr("cx", actor.x + actor.width / 2).attr("cy", actorY + 10).attr("r", radius2); const bounds4 = actElem.node().getBBox(); actor.height = bounds4.height + (conf5.sequence.labelBoxHeight ?? 0); _drawTextCandidateFunc2(conf5, hasKatex(actor.description))( actor.description, actElem, rect3.x, rect3.y + (!isFooter ? radius2 / 2 + 3 : radius2 / 2 - 4), rect3.width, rect3.height, { class: `actor ${ACTOR_MAN_FIGURE_CLASS}` }, conf5 ); if (!isFooter) { actElem.attr("transform", `translate(0,${radius2 / 2 + 7})`); } else { actElem.attr("transform", `translate(0,${radius2 / 2 + 7})`); } return actor.height; }, "drawActorTypeBoundary"); drawActorTypeActor = /* @__PURE__ */ __name(function(elem, actor, conf5, isFooter) { const actorY = isFooter ? actor.stopy : actor.starty; const center4 = actor.x + actor.width / 2; const centerY = actorY + 80; const line2 = elem.append("g").lower(); if (!isFooter) { actorCnt++; line2.append("line").attr("id", "actor" + actorCnt).attr("x1", center4).attr("y1", centerY).attr("x2", center4).attr("y2", 2e3).attr("class", "actor-line 200").attr("stroke-width", "0.5px").attr("stroke", "#999").attr("name", actor.name); actor.actorCnt = actorCnt; } const actElem = elem.append("g"); let cssClass = ACTOR_MAN_FIGURE_CLASS; if (isFooter) { cssClass += ` ${BOTTOM_ACTOR_CLASS}`; } else { cssClass += ` ${TOP_ACTOR_CLASS}`; } actElem.attr("class", cssClass); actElem.attr("name", actor.name); const rect3 = getNoteRect(); rect3.x = actor.x; rect3.y = actorY; rect3.fill = "#eaeaea"; rect3.width = actor.width; rect3.height = actor.height; rect3.class = "actor"; rect3.rx = 3; rect3.ry = 3; actElem.append("line").attr("id", "actor-man-torso" + actorCnt).attr("x1", center4).attr("y1", actorY + 25).attr("x2", center4).attr("y2", actorY + 45); actElem.append("line").attr("id", "actor-man-arms" + actorCnt).attr("x1", center4 - ACTOR_TYPE_WIDTH / 2).attr("y1", actorY + 33).attr("x2", center4 + ACTOR_TYPE_WIDTH / 2).attr("y2", actorY + 33); actElem.append("line").attr("x1", center4 - ACTOR_TYPE_WIDTH / 2).attr("y1", actorY + 60).attr("x2", center4).attr("y2", actorY + 45); actElem.append("line").attr("x1", center4).attr("y1", actorY + 45).attr("x2", center4 + ACTOR_TYPE_WIDTH / 2 - 2).attr("y2", actorY + 60); const circle6 = actElem.append("circle"); circle6.attr("cx", actor.x + actor.width / 2); circle6.attr("cy", actorY + 10); circle6.attr("r", 15); circle6.attr("width", actor.width); circle6.attr("height", actor.height); const bounds4 = actElem.node().getBBox(); actor.height = bounds4.height; _drawTextCandidateFunc2(conf5, hasKatex(actor.description))( actor.description, actElem, rect3.x, rect3.y + 35, rect3.width, rect3.height, { class: `actor ${ACTOR_MAN_FIGURE_CLASS}` }, conf5 ); return actor.height; }, "drawActorTypeActor"); drawActor = /* @__PURE__ */ __name(async function(elem, actor, conf5, isFooter) { switch (actor.type) { case "actor": return await drawActorTypeActor(elem, actor, conf5, isFooter); case "participant": return await drawActorTypeParticipant(elem, actor, conf5, isFooter); case "boundary": return await drawActorTypeBoundary(elem, actor, conf5, isFooter); case "control": return await drawActorTypeControl(elem, actor, conf5, isFooter); case "entity": return await drawActorTypeEntity(elem, actor, conf5, isFooter); case "database": return await drawActorTypeDatabase(elem, actor, conf5, isFooter); case "collections": return await drawActorTypeCollections(elem, actor, conf5, isFooter); case "queue": return await drawActorTypeQueue(elem, actor, conf5, isFooter); } }, "drawActor"); drawBox = /* @__PURE__ */ __name(function(elem, box, conf5) { const boxplusTextGroup = elem.append("g"); const g2 = boxplusTextGroup; drawBackgroundRect2(g2, box); if (box.name) { _drawTextCandidateFunc2(conf5)( box.name, g2, box.x, box.y + conf5.boxTextMargin + (box.textMaxHeight || 0) / 2, box.width, 0, { class: "text" }, conf5 ); } g2.lower(); }, "drawBox"); anchorElement = /* @__PURE__ */ __name(function(elem) { return elem.append("g"); }, "anchorElement"); drawActivation = /* @__PURE__ */ __name(function(elem, bounds4, verticalPos, conf5, actorActivations2) { const rect3 = getNoteRect(); const g2 = bounds4.anchored; rect3.x = bounds4.startx; rect3.y = bounds4.starty; rect3.class = "activation" + actorActivations2 % 3; rect3.width = bounds4.stopx - bounds4.startx; rect3.height = verticalPos - bounds4.starty; drawRect4(g2, rect3); }, "drawActivation"); drawLoop = /* @__PURE__ */ __name(async function(elem, loopModel, labelText, conf5) { const { boxMargin, boxTextMargin, labelBoxHeight, labelBoxWidth, messageFontFamily: fontFamily, messageFontSize: fontSize, messageFontWeight: fontWeight } = conf5; const g2 = elem.append("g"); const drawLoopLine = /* @__PURE__ */ __name(function(startx, starty, stopx, stopy) { return g2.append("line").attr("x1", startx).attr("y1", starty).attr("x2", stopx).attr("y2", stopy).attr("class", "loopLine"); }, "drawLoopLine"); drawLoopLine(loopModel.startx, loopModel.starty, loopModel.stopx, loopModel.starty); drawLoopLine(loopModel.stopx, loopModel.starty, loopModel.stopx, loopModel.stopy); drawLoopLine(loopModel.startx, loopModel.stopy, loopModel.stopx, loopModel.stopy); drawLoopLine(loopModel.startx, loopModel.starty, loopModel.startx, loopModel.stopy); if (loopModel.sections !== void 0) { loopModel.sections.forEach(function(item) { drawLoopLine(loopModel.startx, item.y, loopModel.stopx, item.y).style( "stroke-dasharray", "3, 3" ); }); } let txt = getTextObj(); txt.text = labelText; txt.x = loopModel.startx; txt.y = loopModel.starty; txt.fontFamily = fontFamily; txt.fontSize = fontSize; txt.fontWeight = fontWeight; txt.anchor = "middle"; txt.valign = "middle"; txt.tspan = false; txt.width = labelBoxWidth || 50; txt.height = labelBoxHeight || 20; txt.textMargin = boxTextMargin; txt.class = "labelText"; drawLabel(g2, txt); txt = getTextObj3(); txt.text = loopModel.title; txt.x = loopModel.startx + labelBoxWidth / 2 + (loopModel.stopx - loopModel.startx) / 2; txt.y = loopModel.starty + boxMargin + boxTextMargin; txt.anchor = "middle"; txt.valign = "middle"; txt.textMargin = boxTextMargin; txt.class = "loopText"; txt.fontFamily = fontFamily; txt.fontSize = fontSize; txt.fontWeight = fontWeight; txt.wrap = true; let textElem = hasKatex(txt.text) ? await drawKatex(g2, txt, loopModel) : drawText3(g2, txt); if (loopModel.sectionTitles !== void 0) { for (const [idx, item] of Object.entries(loopModel.sectionTitles)) { if (item.message) { txt.text = item.message; txt.x = loopModel.startx + (loopModel.stopx - loopModel.startx) / 2; txt.y = loopModel.sections[idx].y + boxMargin + boxTextMargin; txt.class = "loopText"; txt.anchor = "middle"; txt.valign = "middle"; txt.tspan = false; txt.fontFamily = fontFamily; txt.fontSize = fontSize; txt.fontWeight = fontWeight; txt.wrap = loopModel.wrap; if (hasKatex(txt.text)) { loopModel.starty = loopModel.sections[idx].y; await drawKatex(g2, txt, loopModel); } else { drawText3(g2, txt); } let sectionHeight = Math.round( textElem.map((te) => (te._groups || te)[0][0].getBBox().height).reduce((acc, curr) => acc + curr) ); loopModel.sections[idx].height += sectionHeight - (boxMargin + boxTextMargin); } } } loopModel.height = Math.round(loopModel.stopy - loopModel.starty); return g2; }, "drawLoop"); drawBackgroundRect2 = /* @__PURE__ */ __name(function(elem, bounds4) { drawBackgroundRect(elem, bounds4); }, "drawBackgroundRect"); insertDatabaseIcon2 = /* @__PURE__ */ __name(function(elem) { elem.append("defs").append("symbol").attr("id", "database").attr("fill-rule", "evenodd").attr("clip-rule", "evenodd").append("path").attr("transform", "scale(.5)").attr( "d", "M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z" ); }, "insertDatabaseIcon"); insertComputerIcon2 = /* @__PURE__ */ __name(function(elem) { elem.append("defs").append("symbol").attr("id", "computer").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr( "d", "M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z" ); }, "insertComputerIcon"); insertClockIcon2 = /* @__PURE__ */ __name(function(elem) { elem.append("defs").append("symbol").attr("id", "clock").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr( "d", "M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z" ); }, "insertClockIcon"); insertArrowHead2 = /* @__PURE__ */ __name(function(elem) { elem.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 7.9).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto-start-reverse").append("path").attr("d", "M -1 0 L 10 5 L 0 10 z"); }, "insertArrowHead"); insertArrowFilledHead2 = /* @__PURE__ */ __name(function(elem) { elem.append("defs").append("marker").attr("id", "filled-head").attr("refX", 15.5).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"); }, "insertArrowFilledHead"); insertSequenceNumber = /* @__PURE__ */ __name(function(elem) { elem.append("defs").append("marker").attr("id", "sequencenumber").attr("refX", 15).attr("refY", 15).attr("markerWidth", 60).attr("markerHeight", 40).attr("orient", "auto").append("circle").attr("cx", 15).attr("cy", 15).attr("r", 6); }, "insertSequenceNumber"); insertArrowCrossHead2 = /* @__PURE__ */ __name(function(elem) { const defs2 = elem.append("defs"); const marker = defs2.append("marker").attr("id", "crosshead").attr("markerWidth", 15).attr("markerHeight", 8).attr("orient", "auto").attr("refX", 4).attr("refY", 4.5); marker.append("path").attr("fill", "none").attr("stroke", "#000000").style("stroke-dasharray", "0, 0").attr("stroke-width", "1pt").attr("d", "M 1,2 L 6,7 M 6,2 L 1,7"); }, "insertArrowCrossHead"); getTextObj3 = /* @__PURE__ */ __name(function() { return { x: 0, y: 0, fill: void 0, anchor: void 0, style: "#666", width: void 0, height: void 0, textMargin: 0, rx: 0, ry: 0, tspan: true, valign: void 0 }; }, "getTextObj"); getNoteRect2 = /* @__PURE__ */ __name(function() { return { x: 0, y: 0, fill: "#EDF2AE", stroke: "#666", width: 100, anchor: "start", height: 100, rx: 0, ry: 0 }; }, "getNoteRect"); _drawTextCandidateFunc2 = /* @__PURE__ */ (function() { function byText(content, g2, x5, y6, width3, height2, textAttrs) { const text4 = g2.append("text").attr("x", x5 + width3 / 2).attr("y", y6 + height2 / 2 + 5).style("text-anchor", "middle").text(content); _setTextAttrs(text4, textAttrs); } __name(byText, "byText"); function byTspan(content, g2, x5, y6, width3, height2, textAttrs, conf5) { const { actorFontSize, actorFontFamily, actorFontWeight } = conf5; const [_actorFontSize, _actorFontSizePx] = parseFontSize(actorFontSize); const lines = content.split(common_default.lineBreakRegex); for (let i2 = 0; i2 < lines.length; i2++) { const dy = i2 * _actorFontSize - _actorFontSize * (lines.length - 1) / 2; const text4 = g2.append("text").attr("x", x5 + width3 / 2).attr("y", y6).style("text-anchor", "middle").style("font-size", _actorFontSizePx).style("font-weight", actorFontWeight).style("font-family", actorFontFamily); text4.append("tspan").attr("x", x5 + width3 / 2).attr("dy", dy).text(lines[i2]); text4.attr("y", y6 + height2 / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); _setTextAttrs(text4, textAttrs); } } __name(byTspan, "byTspan"); function byFo(content, g2, x5, y6, width3, height2, textAttrs, conf5) { const s2 = g2.append("switch"); const f2 = s2.append("foreignObject").attr("x", x5).attr("y", y6).attr("width", width3).attr("height", height2); const text4 = f2.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); text4.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); byTspan(content, s2, x5, y6, width3, height2, textAttrs, conf5); _setTextAttrs(text4, textAttrs); } __name(byFo, "byFo"); async function byKatex(content, g2, x5, y6, width3, height2, textAttrs, conf5) { const dim = await calculateMathMLDimensions(content, getConfig()); const s2 = g2.append("switch"); const f2 = s2.append("foreignObject").attr("x", x5 + width3 / 2 - dim.width / 2).attr("y", y6 + height2 / 2 - dim.height / 2).attr("width", dim.width).attr("height", dim.height); const text4 = f2.append("xhtml:div").style("height", "100%").style("width", "100%"); text4.append("div").style("text-align", "center").style("vertical-align", "middle").html(await renderKatexSanitized(content, getConfig())); byTspan(content, s2, x5, y6, width3, height2, textAttrs, conf5); _setTextAttrs(text4, textAttrs); } __name(byKatex, "byKatex"); function _setTextAttrs(toText, fromTextAttrsDict) { for (const key in fromTextAttrsDict) { if (fromTextAttrsDict.hasOwnProperty(key)) { toText.attr(key, fromTextAttrsDict[key]); } } } __name(_setTextAttrs, "_setTextAttrs"); return function(conf5, hasKatex2 = false) { if (hasKatex2) { return byKatex; } return conf5.textPlacement === "fo" ? byFo : conf5.textPlacement === "old" ? byText : byTspan; }; })(); _drawMenuItemTextCandidateFunc = /* @__PURE__ */ (function() { function byText(content, g2, x5, y6, width3, height2, textAttrs) { const text4 = g2.append("text").attr("x", x5).attr("y", y6).style("text-anchor", "start").text(content); _setTextAttrs(text4, textAttrs); } __name(byText, "byText"); function byTspan(content, g2, x5, y6, width3, height2, textAttrs, conf5) { const { actorFontSize, actorFontFamily, actorFontWeight } = conf5; const lines = content.split(common_default.lineBreakRegex); for (let i2 = 0; i2 < lines.length; i2++) { const dy = i2 * actorFontSize - actorFontSize * (lines.length - 1) / 2; const text4 = g2.append("text").attr("x", x5).attr("y", y6).style("text-anchor", "start").style("font-size", actorFontSize).style("font-weight", actorFontWeight).style("font-family", actorFontFamily); text4.append("tspan").attr("x", x5).attr("dy", dy).text(lines[i2]); text4.attr("y", y6 + height2 / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); _setTextAttrs(text4, textAttrs); } } __name(byTspan, "byTspan"); function byFo(content, g2, x5, y6, width3, height2, textAttrs, conf5) { const s2 = g2.append("switch"); const f2 = s2.append("foreignObject").attr("x", x5).attr("y", y6).attr("width", width3).attr("height", height2); const text4 = f2.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); text4.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); byTspan(content, s2, x5, y6, width3, height2, textAttrs, conf5); _setTextAttrs(text4, textAttrs); } __name(byFo, "byFo"); function _setTextAttrs(toText, fromTextAttrsDict) { for (const key in fromTextAttrsDict) { if (fromTextAttrsDict.hasOwnProperty(key)) { toText.attr(key, fromTextAttrsDict[key]); } } } __name(_setTextAttrs, "_setTextAttrs"); return function(conf5) { return conf5.textPlacement === "fo" ? byFo : conf5.textPlacement === "old" ? byText : byTspan; }; })(); svgDraw_default2 = { drawRect: drawRect4, drawText: drawText3, drawLabel, drawActor, drawBox, drawPopup, anchorElement, drawActivation, drawLoop, drawBackgroundRect: drawBackgroundRect2, insertArrowHead: insertArrowHead2, insertArrowFilledHead: insertArrowFilledHead2, insertSequenceNumber, insertArrowCrossHead: insertArrowCrossHead2, insertDatabaseIcon: insertDatabaseIcon2, insertComputerIcon: insertComputerIcon2, insertClockIcon: insertClockIcon2, getTextObj: getTextObj3, getNoteRect: getNoteRect2, fixLifeLineHeights, sanitizeUrl: import_sanitize_url5.sanitizeUrl }; } }); // src/diagrams/sequence/sequenceRenderer.ts async function boundMessage(_diagram, msgModel) { bounds2.bumpVerticalPos(10); const { startx, stopx, message } = msgModel; const lines = common_default.splitBreaks(message).length; const isKatexMsg = hasKatex(message); const textDims = isKatexMsg ? await calculateMathMLDimensions(message, getConfig2()) : utils_default2.calculateTextDimensions(message, messageFont2(conf2)); if (!isKatexMsg) { const lineHeight = textDims.height / lines; msgModel.height += lineHeight; bounds2.bumpVerticalPos(lineHeight); } let lineStartY; let totalOffset = textDims.height - 10; const textWidth = textDims.width; if (startx === stopx) { lineStartY = bounds2.getVerticalPos() + totalOffset; if (!conf2.rightAngles) { totalOffset += conf2.boxMargin; lineStartY = bounds2.getVerticalPos() + totalOffset; } totalOffset += 30; const dx = common_default.getMax(textWidth / 2, conf2.width / 2); bounds2.insert( startx - dx, bounds2.getVerticalPos() - 10 + totalOffset, stopx + dx, bounds2.getVerticalPos() + 30 + totalOffset ); } else { totalOffset += conf2.boxMargin; lineStartY = bounds2.getVerticalPos() + totalOffset; bounds2.insert(startx, lineStartY - 10, stopx, lineStartY); } bounds2.bumpVerticalPos(totalOffset); msgModel.height += totalOffset; msgModel.stopy = msgModel.starty + msgModel.height; bounds2.insert(msgModel.fromBounds, msgModel.starty, msgModel.toBounds, msgModel.stopy); return lineStartY; } function adjustLoopHeightForWrap(loopWidths, msg, preMargin, postMargin, addLoopFn) { bounds2.bumpVerticalPos(preMargin); let heightAdjust = postMargin; if (msg.id && msg.message && loopWidths[msg.id]) { const loopWidth = loopWidths[msg.id].width; const textConf = messageFont2(conf2); msg.message = utils_default2.wrapLabel(`[${msg.message}]`, loopWidth - 2 * conf2.wrapPadding, textConf); msg.width = loopWidth; msg.wrap = true; const textDims = utils_default2.calculateTextDimensions(msg.message, textConf); const totalOffset = common_default.getMax(textDims.height, conf2.labelBoxHeight); heightAdjust = postMargin + totalOffset; log.debug(`${totalOffset} - ${msg.message}`); } addLoopFn(msg); bounds2.bumpVerticalPos(heightAdjust); } function adjustCreatedDestroyedData(msg, msgModel, lineStartY, index, actors2, createdActors, destroyedActors) { function receiverAdjustment(actor, adjustment) { if (actor.x < actors2.get(msg.from).x) { bounds2.insert( msgModel.stopx - adjustment, msgModel.starty, msgModel.startx, msgModel.stopy + actor.height / 2 + conf2.noteMargin ); msgModel.stopx = msgModel.stopx + adjustment; } else { bounds2.insert( msgModel.startx, msgModel.starty, msgModel.stopx + adjustment, msgModel.stopy + actor.height / 2 + conf2.noteMargin ); msgModel.stopx = msgModel.stopx - adjustment; } } __name(receiverAdjustment, "receiverAdjustment"); function senderAdjustment(actor, adjustment) { if (actor.x < actors2.get(msg.to).x) { bounds2.insert( msgModel.startx - adjustment, msgModel.starty, msgModel.stopx, msgModel.stopy + actor.height / 2 + conf2.noteMargin ); msgModel.startx = msgModel.startx + adjustment; } else { bounds2.insert( msgModel.stopx, msgModel.starty, msgModel.startx + adjustment, msgModel.stopy + actor.height / 2 + conf2.noteMargin ); msgModel.startx = msgModel.startx - adjustment; } } __name(senderAdjustment, "senderAdjustment"); const actorArray = [ PARTICIPANT_TYPE.ACTOR, PARTICIPANT_TYPE.CONTROL, PARTICIPANT_TYPE.ENTITY, PARTICIPANT_TYPE.DATABASE ]; if (createdActors.get(msg.to) == index) { const actor = actors2.get(msg.to); const adjustment = actorArray.includes(actor.type) ? ACTOR_TYPE_WIDTH / 2 + 3 : actor.width / 2 + 3; receiverAdjustment(actor, adjustment); actor.starty = lineStartY - actor.height / 2; bounds2.bumpVerticalPos(actor.height / 2); } else if (destroyedActors.get(msg.from) == index) { const actor = actors2.get(msg.from); if (conf2.mirrorActors) { const adjustment = actorArray.includes(actor.type) ? ACTOR_TYPE_WIDTH / 2 : actor.width / 2; senderAdjustment(actor, adjustment); } actor.stopy = lineStartY - actor.height / 2; bounds2.bumpVerticalPos(actor.height / 2); } else if (destroyedActors.get(msg.to) == index) { const actor = actors2.get(msg.to); if (conf2.mirrorActors) { const adjustment = actorArray.includes(actor.type) ? ACTOR_TYPE_WIDTH / 2 + 3 : actor.width / 2 + 3; receiverAdjustment(actor, adjustment); } actor.stopy = lineStartY - actor.height / 2; bounds2.bumpVerticalPos(actor.height / 2); } } async function getMaxMessageWidthPerActor(actors2, messages, diagObj) { const maxMessageWidthPerActor = {}; for (const msg of messages) { if (actors2.get(msg.to) && actors2.get(msg.from)) { const actor = actors2.get(msg.to); if (msg.placement === diagObj.db.PLACEMENT.LEFTOF && !actor.prevActor) { continue; } if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF && !actor.nextActor) { continue; } const isNote = msg.placement !== void 0; const isMessage = !isNote; const textFont = isNote ? noteFont(conf2) : messageFont2(conf2); const wrappedMessage = msg.wrap ? utils_default2.wrapLabel(msg.message, conf2.width - 2 * conf2.wrapPadding, textFont) : msg.message; const messageDimensions = hasKatex(wrappedMessage) ? await calculateMathMLDimensions(msg.message, getConfig2()) : utils_default2.calculateTextDimensions(wrappedMessage, textFont); const messageWidth = messageDimensions.width + 2 * conf2.wrapPadding; if (isMessage && msg.from === actor.nextActor) { maxMessageWidthPerActor[msg.to] = common_default.getMax( maxMessageWidthPerActor[msg.to] || 0, messageWidth ); } else if (isMessage && msg.from === actor.prevActor) { maxMessageWidthPerActor[msg.from] = common_default.getMax( maxMessageWidthPerActor[msg.from] || 0, messageWidth ); } else if (isMessage && msg.from === msg.to) { maxMessageWidthPerActor[msg.from] = common_default.getMax( maxMessageWidthPerActor[msg.from] || 0, messageWidth / 2 ); maxMessageWidthPerActor[msg.to] = common_default.getMax( maxMessageWidthPerActor[msg.to] || 0, messageWidth / 2 ); } else if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) { maxMessageWidthPerActor[msg.from] = common_default.getMax( maxMessageWidthPerActor[msg.from] || 0, messageWidth ); } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) { maxMessageWidthPerActor[actor.prevActor] = common_default.getMax( maxMessageWidthPerActor[actor.prevActor] || 0, messageWidth ); } else if (msg.placement === diagObj.db.PLACEMENT.OVER) { if (actor.prevActor) { maxMessageWidthPerActor[actor.prevActor] = common_default.getMax( maxMessageWidthPerActor[actor.prevActor] || 0, messageWidth / 2 ); } if (actor.nextActor) { maxMessageWidthPerActor[msg.from] = common_default.getMax( maxMessageWidthPerActor[msg.from] || 0, messageWidth / 2 ); } } } } log.debug("maxMessageWidthPerActor:", maxMessageWidthPerActor); return maxMessageWidthPerActor; } async function calculateActorMargins(actors2, actorToMessageWidth, boxes) { let maxHeight = 0; for (const prop of actors2.keys()) { const actor = actors2.get(prop); if (actor.wrap) { actor.description = utils_default2.wrapLabel( actor.description, conf2.width - 2 * conf2.wrapPadding, actorFont(conf2) ); } const actDims = hasKatex(actor.description) ? await calculateMathMLDimensions(actor.description, getConfig2()) : utils_default2.calculateTextDimensions(actor.description, actorFont(conf2)); actor.width = actor.wrap ? conf2.width : common_default.getMax(conf2.width, actDims.width + 2 * conf2.wrapPadding); actor.height = actor.wrap ? common_default.getMax(actDims.height, conf2.height) : conf2.height; maxHeight = common_default.getMax(maxHeight, actor.height); } for (const actorKey in actorToMessageWidth) { const actor = actors2.get(actorKey); if (!actor) { continue; } const nextActor = actors2.get(actor.nextActor); if (!nextActor) { const messageWidth2 = actorToMessageWidth[actorKey]; const actorWidth2 = messageWidth2 + conf2.actorMargin - actor.width / 2; actor.margin = common_default.getMax(actorWidth2, conf2.actorMargin); continue; } const messageWidth = actorToMessageWidth[actorKey]; const actorWidth = messageWidth + conf2.actorMargin - actor.width / 2 - nextActor.width / 2; actor.margin = common_default.getMax(actorWidth, conf2.actorMargin); } let maxBoxHeight = 0; boxes.forEach((box) => { const textFont = messageFont2(conf2); let totalWidth = box.actorKeys.reduce((total, aKey) => { return total += actors2.get(aKey).width + (actors2.get(aKey).margin || 0); }, 0); const standardBoxPadding = conf2.boxMargin * 8; totalWidth += standardBoxPadding; totalWidth -= 2 * conf2.boxTextMargin; if (box.wrap) { box.name = utils_default2.wrapLabel(box.name, totalWidth - 2 * conf2.wrapPadding, textFont); } const boxMsgDimensions = utils_default2.calculateTextDimensions(box.name, textFont); maxBoxHeight = common_default.getMax(boxMsgDimensions.height, maxBoxHeight); const minWidth = common_default.getMax(totalWidth, boxMsgDimensions.width + 2 * conf2.wrapPadding); box.margin = conf2.boxTextMargin; if (totalWidth < minWidth) { const missing = (minWidth - totalWidth) / 2; box.margin += missing; } }); boxes.forEach((box) => box.textMaxHeight = maxBoxHeight); return common_default.getMax(maxHeight, conf2.height); } var conf2, bounds2, drawNote, messageFont2, noteFont, actorFont, drawMessage, addActorRenderingData, drawActors, drawActorsPopup, setConf3, actorActivations, activationBounds, draw11, getRequiredPopupWidth, buildNoteModel, buildMessageModel, calculateLoopBounds, sequenceRenderer_default; var init_sequenceRenderer = __esm({ "src/diagrams/sequence/sequenceRenderer.ts"() { "use strict"; init_src32(); init_svgDraw2(); init_logger(); init_common(); init_common(); init_svgDrawCommon(); init_diagramAPI(); init_assignWithDepth(); init_utils2(); init_setupGraphViewbox(); init_sequenceDb(); conf2 = {}; bounds2 = { data: { startx: void 0, stopx: void 0, starty: void 0, stopy: void 0 }, verticalPos: 0, sequenceItems: [], activations: [], models: { getHeight: /* @__PURE__ */ __name(function() { return Math.max.apply( null, this.actors.length === 0 ? [0] : this.actors.map((actor) => actor.height || 0) ) + (this.loops.length === 0 ? 0 : this.loops.map((it) => it.height || 0).reduce((acc, h3) => acc + h3)) + (this.messages.length === 0 ? 0 : this.messages.map((it) => it.height || 0).reduce((acc, h3) => acc + h3)) + (this.notes.length === 0 ? 0 : this.notes.map((it) => it.height || 0).reduce((acc, h3) => acc + h3)); }, "getHeight"), clear: /* @__PURE__ */ __name(function() { this.actors = []; this.boxes = []; this.loops = []; this.messages = []; this.notes = []; }, "clear"), addBox: /* @__PURE__ */ __name(function(boxModel) { this.boxes.push(boxModel); }, "addBox"), addActor: /* @__PURE__ */ __name(function(actorModel) { this.actors.push(actorModel); }, "addActor"), addLoop: /* @__PURE__ */ __name(function(loopModel) { this.loops.push(loopModel); }, "addLoop"), addMessage: /* @__PURE__ */ __name(function(msgModel) { this.messages.push(msgModel); }, "addMessage"), addNote: /* @__PURE__ */ __name(function(noteModel) { this.notes.push(noteModel); }, "addNote"), lastActor: /* @__PURE__ */ __name(function() { return this.actors[this.actors.length - 1]; }, "lastActor"), lastLoop: /* @__PURE__ */ __name(function() { return this.loops[this.loops.length - 1]; }, "lastLoop"), lastMessage: /* @__PURE__ */ __name(function() { return this.messages[this.messages.length - 1]; }, "lastMessage"), lastNote: /* @__PURE__ */ __name(function() { return this.notes[this.notes.length - 1]; }, "lastNote"), actors: [], boxes: [], loops: [], messages: [], notes: [] }, init: /* @__PURE__ */ __name(function() { this.sequenceItems = []; this.activations = []; this.models.clear(); this.data = { startx: void 0, stopx: void 0, starty: void 0, stopy: void 0 }; this.verticalPos = 0; setConf3(getConfig2()); }, "init"), updateVal: /* @__PURE__ */ __name(function(obj, key, val, fun) { if (obj[key] === void 0) { obj[key] = val; } else { obj[key] = fun(val, obj[key]); } }, "updateVal"), updateBounds: /* @__PURE__ */ __name(function(startx, starty, stopx, stopy) { const _self = this; let cnt4 = 0; function updateFn(type3) { return /* @__PURE__ */ __name(function updateItemBounds(item) { cnt4++; const n2 = _self.sequenceItems.length - cnt4 + 1; _self.updateVal(item, "starty", starty - n2 * conf2.boxMargin, Math.min); _self.updateVal(item, "stopy", stopy + n2 * conf2.boxMargin, Math.max); _self.updateVal(bounds2.data, "startx", startx - n2 * conf2.boxMargin, Math.min); _self.updateVal(bounds2.data, "stopx", stopx + n2 * conf2.boxMargin, Math.max); if (!(type3 === "activation")) { _self.updateVal(item, "startx", startx - n2 * conf2.boxMargin, Math.min); _self.updateVal(item, "stopx", stopx + n2 * conf2.boxMargin, Math.max); _self.updateVal(bounds2.data, "starty", starty - n2 * conf2.boxMargin, Math.min); _self.updateVal(bounds2.data, "stopy", stopy + n2 * conf2.boxMargin, Math.max); } }, "updateItemBounds"); } __name(updateFn, "updateFn"); this.sequenceItems.forEach(updateFn()); this.activations.forEach(updateFn("activation")); }, "updateBounds"), insert: /* @__PURE__ */ __name(function(startx, starty, stopx, stopy) { const _startx = common_default.getMin(startx, stopx); const _stopx = common_default.getMax(startx, stopx); const _starty = common_default.getMin(starty, stopy); const _stopy = common_default.getMax(starty, stopy); this.updateVal(bounds2.data, "startx", _startx, Math.min); this.updateVal(bounds2.data, "starty", _starty, Math.min); this.updateVal(bounds2.data, "stopx", _stopx, Math.max); this.updateVal(bounds2.data, "stopy", _stopy, Math.max); this.updateBounds(_startx, _starty, _stopx, _stopy); }, "insert"), newActivation: /* @__PURE__ */ __name(function(message, diagram27, actors2) { const actorRect = actors2.get(message.from); const stackedSize = actorActivations(message.from).length || 0; const x5 = actorRect.x + actorRect.width / 2 + (stackedSize - 1) * conf2.activationWidth / 2; this.activations.push({ startx: x5, starty: this.verticalPos + 2, stopx: x5 + conf2.activationWidth, stopy: void 0, actor: message.from, anchored: svgDraw_default2.anchorElement(diagram27) }); }, "newActivation"), endActivation: /* @__PURE__ */ __name(function(message) { const lastActorActivationIdx = this.activations.map(function(activation) { return activation.actor; }).lastIndexOf(message.from); return this.activations.splice(lastActorActivationIdx, 1)[0]; }, "endActivation"), createLoop: /* @__PURE__ */ __name(function(title2 = { message: void 0, wrap: false, width: void 0 }, fill) { return { startx: void 0, starty: this.verticalPos, stopx: void 0, stopy: void 0, title: title2.message, wrap: title2.wrap, width: title2.width, height: 0, fill }; }, "createLoop"), newLoop: /* @__PURE__ */ __name(function(title2 = { message: void 0, wrap: false, width: void 0 }, fill) { this.sequenceItems.push(this.createLoop(title2, fill)); }, "newLoop"), endLoop: /* @__PURE__ */ __name(function() { return this.sequenceItems.pop(); }, "endLoop"), isLoopOverlap: /* @__PURE__ */ __name(function() { return this.sequenceItems.length ? this.sequenceItems[this.sequenceItems.length - 1].overlap : false; }, "isLoopOverlap"), addSectionToLoop: /* @__PURE__ */ __name(function(message) { const loop = this.sequenceItems.pop(); loop.sections = loop.sections || []; loop.sectionTitles = loop.sectionTitles || []; loop.sections.push({ y: bounds2.getVerticalPos(), height: 0 }); loop.sectionTitles.push(message); this.sequenceItems.push(loop); }, "addSectionToLoop"), saveVerticalPos: /* @__PURE__ */ __name(function() { if (this.isLoopOverlap()) { this.savedVerticalPos = this.verticalPos; } }, "saveVerticalPos"), resetVerticalPos: /* @__PURE__ */ __name(function() { if (this.isLoopOverlap()) { this.verticalPos = this.savedVerticalPos; } }, "resetVerticalPos"), bumpVerticalPos: /* @__PURE__ */ __name(function(bump) { this.verticalPos = this.verticalPos + bump; this.data.stopy = common_default.getMax(this.data.stopy, this.verticalPos); }, "bumpVerticalPos"), getVerticalPos: /* @__PURE__ */ __name(function() { return this.verticalPos; }, "getVerticalPos"), getBounds: /* @__PURE__ */ __name(function() { return { bounds: this.data, models: this.models }; }, "getBounds") }; drawNote = /* @__PURE__ */ __name(async function(elem, noteModel) { bounds2.bumpVerticalPos(conf2.boxMargin); noteModel.height = conf2.boxMargin; noteModel.starty = bounds2.getVerticalPos(); const rect3 = getNoteRect(); rect3.x = noteModel.startx; rect3.y = noteModel.starty; rect3.width = noteModel.width || conf2.width; rect3.class = "note"; const g2 = elem.append("g"); const rectElem = svgDraw_default2.drawRect(g2, rect3); const textObj = getTextObj(); textObj.x = noteModel.startx; textObj.y = noteModel.starty; textObj.width = rect3.width; textObj.dy = "1em"; textObj.text = noteModel.message; textObj.class = "noteText"; textObj.fontFamily = conf2.noteFontFamily; textObj.fontSize = conf2.noteFontSize; textObj.fontWeight = conf2.noteFontWeight; textObj.anchor = conf2.noteAlign; textObj.textMargin = conf2.noteMargin; textObj.valign = "center"; const textElem = hasKatex(textObj.text) ? await drawKatex(g2, textObj) : drawText3(g2, textObj); const textHeight = Math.round( textElem.map((te) => (te._groups || te)[0][0].getBBox().height).reduce((acc, curr) => acc + curr) ); rectElem.attr("height", textHeight + 2 * conf2.noteMargin); noteModel.height += textHeight + 2 * conf2.noteMargin; bounds2.bumpVerticalPos(textHeight + 2 * conf2.noteMargin); noteModel.stopy = noteModel.starty + textHeight + 2 * conf2.noteMargin; noteModel.stopx = noteModel.startx + rect3.width; bounds2.insert(noteModel.startx, noteModel.starty, noteModel.stopx, noteModel.stopy); bounds2.models.addNote(noteModel); }, "drawNote"); messageFont2 = /* @__PURE__ */ __name((cnf) => { return { fontFamily: cnf.messageFontFamily, fontSize: cnf.messageFontSize, fontWeight: cnf.messageFontWeight }; }, "messageFont"); noteFont = /* @__PURE__ */ __name((cnf) => { return { fontFamily: cnf.noteFontFamily, fontSize: cnf.noteFontSize, fontWeight: cnf.noteFontWeight }; }, "noteFont"); actorFont = /* @__PURE__ */ __name((cnf) => { return { fontFamily: cnf.actorFontFamily, fontSize: cnf.actorFontSize, fontWeight: cnf.actorFontWeight }; }, "actorFont"); __name(boundMessage, "boundMessage"); drawMessage = /* @__PURE__ */ __name(async function(diagram27, msgModel, lineStartY, diagObj) { const { startx, stopx, starty, message, type: type3, sequenceIndex, sequenceVisible } = msgModel; const textDims = utils_default2.calculateTextDimensions(message, messageFont2(conf2)); const textObj = getTextObj(); textObj.x = startx; textObj.y = starty + 10; textObj.width = stopx - startx; textObj.class = "messageText"; textObj.dy = "1em"; textObj.text = message; textObj.fontFamily = conf2.messageFontFamily; textObj.fontSize = conf2.messageFontSize; textObj.fontWeight = conf2.messageFontWeight; textObj.anchor = conf2.messageAlign; textObj.valign = "center"; textObj.textMargin = conf2.wrapPadding; textObj.tspan = false; if (hasKatex(textObj.text)) { await drawKatex(diagram27, textObj, { startx, stopx, starty: lineStartY }); } else { drawText3(diagram27, textObj); } const textWidth = textDims.width; let line2; if (startx === stopx) { if (conf2.rightAngles) { line2 = diagram27.append("path").attr( "d", `M ${startx},${lineStartY} H ${startx + common_default.getMax(conf2.width / 2, textWidth / 2)} V ${lineStartY + 25} H ${startx}` ); } else { line2 = diagram27.append("path").attr( "d", "M " + startx + "," + lineStartY + " C " + (startx + 60) + "," + (lineStartY - 10) + " " + (startx + 60) + "," + (lineStartY + 30) + " " + startx + "," + (lineStartY + 20) ); } } else { line2 = diagram27.append("line"); line2.attr("x1", startx); line2.attr("y1", lineStartY); line2.attr("x2", stopx); line2.attr("y2", lineStartY); } if (type3 === diagObj.db.LINETYPE.DOTTED || type3 === diagObj.db.LINETYPE.DOTTED_CROSS || type3 === diagObj.db.LINETYPE.DOTTED_POINT || type3 === diagObj.db.LINETYPE.DOTTED_OPEN || type3 === diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED) { line2.style("stroke-dasharray", "3, 3"); line2.attr("class", "messageLine1"); } else { line2.attr("class", "messageLine0"); } let url = ""; if (conf2.arrowMarkerAbsolute) { url = getUrl(true); } line2.attr("stroke-width", 2); line2.attr("stroke", "none"); line2.style("fill", "none"); if (type3 === diagObj.db.LINETYPE.SOLID || type3 === diagObj.db.LINETYPE.DOTTED) { line2.attr("marker-end", "url(" + url + "#arrowhead)"); } if (type3 === diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID || type3 === diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED) { line2.attr("marker-start", "url(" + url + "#arrowhead)"); line2.attr("marker-end", "url(" + url + "#arrowhead)"); } if (type3 === diagObj.db.LINETYPE.SOLID_POINT || type3 === diagObj.db.LINETYPE.DOTTED_POINT) { line2.attr("marker-end", "url(" + url + "#filled-head)"); } if (type3 === diagObj.db.LINETYPE.SOLID_CROSS || type3 === diagObj.db.LINETYPE.DOTTED_CROSS) { line2.attr("marker-end", "url(" + url + "#crosshead)"); } if (sequenceVisible || conf2.showSequenceNumbers) { const isBidirectional = type3 === diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID || type3 === diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED; if (isBidirectional) { const SEQUENCE_NUMBER_RADIUS = 6; if (startx < stopx) { line2.attr("x1", startx + 2 * SEQUENCE_NUMBER_RADIUS); } else { line2.attr("x1", startx + SEQUENCE_NUMBER_RADIUS); } } diagram27.append("line").attr("x1", startx).attr("y1", lineStartY).attr("x2", startx).attr("y2", lineStartY).attr("stroke-width", 0).attr("marker-start", "url(" + url + "#sequencenumber)"); diagram27.append("text").attr("x", startx).attr("y", lineStartY + 4).attr("font-family", "sans-serif").attr("font-size", "12px").attr("text-anchor", "middle").attr("class", "sequenceNumber").text(sequenceIndex); } }, "drawMessage"); addActorRenderingData = /* @__PURE__ */ __name(function(diagram27, actors2, createdActors, actorKeys, verticalPos, messages, isFooter) { let prevWidth = 0; let prevMargin = 0; let prevBox = void 0; let maxHeight = 0; for (const actorKey of actorKeys) { const actor = actors2.get(actorKey); const box = actor.box; if (prevBox && prevBox != box) { if (!isFooter) { bounds2.models.addBox(prevBox); } prevMargin += conf2.boxMargin + prevBox.margin; } if (box && box != prevBox) { if (!isFooter) { box.x = prevWidth + prevMargin; box.y = verticalPos; } prevMargin += box.margin; } actor.width = actor.width || conf2.width; actor.height = common_default.getMax(actor.height || conf2.height, conf2.height); actor.margin = actor.margin || conf2.actorMargin; maxHeight = common_default.getMax(maxHeight, actor.height); if (createdActors.get(actor.name)) { prevMargin += actor.width / 2; } actor.x = prevWidth + prevMargin; actor.starty = bounds2.getVerticalPos(); bounds2.insert(actor.x, verticalPos, actor.x + actor.width, actor.height); prevWidth += actor.width + prevMargin; if (actor.box) { actor.box.width = prevWidth + box.margin - actor.box.x; } prevMargin = actor.margin; prevBox = actor.box; bounds2.models.addActor(actor); } if (prevBox && !isFooter) { bounds2.models.addBox(prevBox); } bounds2.bumpVerticalPos(maxHeight); }, "addActorRenderingData"); drawActors = /* @__PURE__ */ __name(async function(diagram27, actors2, actorKeys, isFooter) { if (!isFooter) { for (const actorKey of actorKeys) { const actor = actors2.get(actorKey); await svgDraw_default2.drawActor(diagram27, actor, conf2, false); } } else { let maxHeight = 0; bounds2.bumpVerticalPos(conf2.boxMargin * 2); for (const actorKey of actorKeys) { const actor = actors2.get(actorKey); if (!actor.stopy) { actor.stopy = bounds2.getVerticalPos(); } const height2 = await svgDraw_default2.drawActor(diagram27, actor, conf2, true); maxHeight = common_default.getMax(maxHeight, height2); } bounds2.bumpVerticalPos(maxHeight + conf2.boxMargin); } }, "drawActors"); drawActorsPopup = /* @__PURE__ */ __name(function(diagram27, actors2, actorKeys, doc) { let maxHeight = 0; let maxWidth2 = 0; for (const actorKey of actorKeys) { const actor = actors2.get(actorKey); const minMenuWidth = getRequiredPopupWidth(actor); const menuDimensions = svgDraw_default2.drawPopup( diagram27, actor, minMenuWidth, conf2, conf2.forceMenus, doc ); if (menuDimensions.height > maxHeight) { maxHeight = menuDimensions.height; } if (menuDimensions.width + actor.x > maxWidth2) { maxWidth2 = menuDimensions.width + actor.x; } } return { maxHeight, maxWidth: maxWidth2 }; }, "drawActorsPopup"); setConf3 = /* @__PURE__ */ __name(function(cnf) { assignWithDepth_default(conf2, cnf); if (cnf.fontFamily) { conf2.actorFontFamily = conf2.noteFontFamily = conf2.messageFontFamily = cnf.fontFamily; } if (cnf.fontSize) { conf2.actorFontSize = conf2.noteFontSize = conf2.messageFontSize = cnf.fontSize; } if (cnf.fontWeight) { conf2.actorFontWeight = conf2.noteFontWeight = conf2.messageFontWeight = cnf.fontWeight; } }, "setConf"); actorActivations = /* @__PURE__ */ __name(function(actor) { return bounds2.activations.filter(function(activation) { return activation.actor === actor; }); }, "actorActivations"); activationBounds = /* @__PURE__ */ __name(function(actor, actors2) { const actorObj = actors2.get(actor); const activations = actorActivations(actor); const left3 = activations.reduce( function(acc, activation) { return common_default.getMin(acc, activation.startx); }, actorObj.x + actorObj.width / 2 - 1 ); const right3 = activations.reduce( function(acc, activation) { return common_default.getMax(acc, activation.stopx); }, actorObj.x + actorObj.width / 2 + 1 ); return [left3, right3]; }, "activationBounds"); __name(adjustLoopHeightForWrap, "adjustLoopHeightForWrap"); __name(adjustCreatedDestroyedData, "adjustCreatedDestroyedData"); draw11 = /* @__PURE__ */ __name(async function(_text, id30, _version, diagObj) { const { securityLevel, sequence } = getConfig2(); conf2 = sequence; let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = select_default2("#i" + id30); } const root3 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body"); const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; bounds2.init(); log.debug(diagObj.db); const diagram27 = securityLevel === "sandbox" ? root3.select(`[id="${id30}"]`) : select_default2(`[id="${id30}"]`); const actors2 = diagObj.db.getActors(); const createdActors = diagObj.db.getCreatedActors(); const destroyedActors = diagObj.db.getDestroyedActors(); const boxes = diagObj.db.getBoxes(); let actorKeys = diagObj.db.getActorKeys(); const messages = diagObj.db.getMessages(); const title2 = diagObj.db.getDiagramTitle(); const hasBoxes = diagObj.db.hasAtLeastOneBox(); const hasBoxTitles = diagObj.db.hasAtLeastOneBoxWithTitle(); const maxMessageWidthPerActor = await getMaxMessageWidthPerActor(actors2, messages, diagObj); conf2.height = await calculateActorMargins(actors2, maxMessageWidthPerActor, boxes); svgDraw_default2.insertComputerIcon(diagram27); svgDraw_default2.insertDatabaseIcon(diagram27); svgDraw_default2.insertClockIcon(diagram27); if (hasBoxes) { bounds2.bumpVerticalPos(conf2.boxMargin); if (hasBoxTitles) { bounds2.bumpVerticalPos(boxes[0].textMaxHeight); } } if (conf2.hideUnusedParticipants === true) { const newActors = /* @__PURE__ */ new Set(); messages.forEach((message) => { newActors.add(message.from); newActors.add(message.to); }); actorKeys = actorKeys.filter((actorKey) => newActors.has(actorKey)); } addActorRenderingData(diagram27, actors2, createdActors, actorKeys, 0, messages, false); const loopWidths = await calculateLoopBounds(messages, actors2, maxMessageWidthPerActor, diagObj); svgDraw_default2.insertArrowHead(diagram27); svgDraw_default2.insertArrowCrossHead(diagram27); svgDraw_default2.insertArrowFilledHead(diagram27); svgDraw_default2.insertSequenceNumber(diagram27); function activeEnd(msg, verticalPos) { const activationData = bounds2.endActivation(msg); if (activationData.starty + 18 > verticalPos) { activationData.starty = verticalPos - 6; verticalPos += 12; } svgDraw_default2.drawActivation( diagram27, activationData, verticalPos, conf2, actorActivations(msg.from).length ); bounds2.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos); } __name(activeEnd, "activeEnd"); let sequenceIndex = 1; let sequenceIndexStep = 1; const messagesToDraw = []; const backgrounds = []; let index = 0; for (const msg of messages) { let loopModel, noteModel, msgModel; switch (msg.type) { case diagObj.db.LINETYPE.NOTE: bounds2.resetVerticalPos(); noteModel = msg.noteModel; await drawNote(diagram27, noteModel); break; case diagObj.db.LINETYPE.ACTIVE_START: bounds2.newActivation(msg, diagram27, actors2); break; case diagObj.db.LINETYPE.ACTIVE_END: activeEnd(msg, bounds2.getVerticalPos()); break; case diagObj.db.LINETYPE.LOOP_START: adjustLoopHeightForWrap( loopWidths, msg, conf2.boxMargin, conf2.boxMargin + conf2.boxTextMargin, (message) => bounds2.newLoop(message) ); break; case diagObj.db.LINETYPE.LOOP_END: loopModel = bounds2.endLoop(); await svgDraw_default2.drawLoop(diagram27, loopModel, "loop", conf2); bounds2.bumpVerticalPos(loopModel.stopy - bounds2.getVerticalPos()); bounds2.models.addLoop(loopModel); break; case diagObj.db.LINETYPE.RECT_START: adjustLoopHeightForWrap( loopWidths, msg, conf2.boxMargin, conf2.boxMargin, (message) => bounds2.newLoop(void 0, message.message) ); break; case diagObj.db.LINETYPE.RECT_END: loopModel = bounds2.endLoop(); backgrounds.push(loopModel); bounds2.models.addLoop(loopModel); bounds2.bumpVerticalPos(loopModel.stopy - bounds2.getVerticalPos()); break; case diagObj.db.LINETYPE.OPT_START: adjustLoopHeightForWrap( loopWidths, msg, conf2.boxMargin, conf2.boxMargin + conf2.boxTextMargin, (message) => bounds2.newLoop(message) ); break; case diagObj.db.LINETYPE.OPT_END: loopModel = bounds2.endLoop(); await svgDraw_default2.drawLoop(diagram27, loopModel, "opt", conf2); bounds2.bumpVerticalPos(loopModel.stopy - bounds2.getVerticalPos()); bounds2.models.addLoop(loopModel); break; case diagObj.db.LINETYPE.ALT_START: adjustLoopHeightForWrap( loopWidths, msg, conf2.boxMargin, conf2.boxMargin + conf2.boxTextMargin, (message) => bounds2.newLoop(message) ); break; case diagObj.db.LINETYPE.ALT_ELSE: adjustLoopHeightForWrap( loopWidths, msg, conf2.boxMargin + conf2.boxTextMargin, conf2.boxMargin, (message) => bounds2.addSectionToLoop(message) ); break; case diagObj.db.LINETYPE.ALT_END: loopModel = bounds2.endLoop(); await svgDraw_default2.drawLoop(diagram27, loopModel, "alt", conf2); bounds2.bumpVerticalPos(loopModel.stopy - bounds2.getVerticalPos()); bounds2.models.addLoop(loopModel); break; case diagObj.db.LINETYPE.PAR_START: case diagObj.db.LINETYPE.PAR_OVER_START: adjustLoopHeightForWrap( loopWidths, msg, conf2.boxMargin, conf2.boxMargin + conf2.boxTextMargin, (message) => bounds2.newLoop(message) ); bounds2.saveVerticalPos(); break; case diagObj.db.LINETYPE.PAR_AND: adjustLoopHeightForWrap( loopWidths, msg, conf2.boxMargin + conf2.boxTextMargin, conf2.boxMargin, (message) => bounds2.addSectionToLoop(message) ); break; case diagObj.db.LINETYPE.PAR_END: loopModel = bounds2.endLoop(); await svgDraw_default2.drawLoop(diagram27, loopModel, "par", conf2); bounds2.bumpVerticalPos(loopModel.stopy - bounds2.getVerticalPos()); bounds2.models.addLoop(loopModel); break; case diagObj.db.LINETYPE.AUTONUMBER: sequenceIndex = msg.message.start || sequenceIndex; sequenceIndexStep = msg.message.step || sequenceIndexStep; if (msg.message.visible) { diagObj.db.enableSequenceNumbers(); } else { diagObj.db.disableSequenceNumbers(); } break; case diagObj.db.LINETYPE.CRITICAL_START: adjustLoopHeightForWrap( loopWidths, msg, conf2.boxMargin, conf2.boxMargin + conf2.boxTextMargin, (message) => bounds2.newLoop(message) ); break; case diagObj.db.LINETYPE.CRITICAL_OPTION: adjustLoopHeightForWrap( loopWidths, msg, conf2.boxMargin + conf2.boxTextMargin, conf2.boxMargin, (message) => bounds2.addSectionToLoop(message) ); break; case diagObj.db.LINETYPE.CRITICAL_END: loopModel = bounds2.endLoop(); await svgDraw_default2.drawLoop(diagram27, loopModel, "critical", conf2); bounds2.bumpVerticalPos(loopModel.stopy - bounds2.getVerticalPos()); bounds2.models.addLoop(loopModel); break; case diagObj.db.LINETYPE.BREAK_START: adjustLoopHeightForWrap( loopWidths, msg, conf2.boxMargin, conf2.boxMargin + conf2.boxTextMargin, (message) => bounds2.newLoop(message) ); break; case diagObj.db.LINETYPE.BREAK_END: loopModel = bounds2.endLoop(); await svgDraw_default2.drawLoop(diagram27, loopModel, "break", conf2); bounds2.bumpVerticalPos(loopModel.stopy - bounds2.getVerticalPos()); bounds2.models.addLoop(loopModel); break; default: try { msgModel = msg.msgModel; msgModel.starty = bounds2.getVerticalPos(); msgModel.sequenceIndex = sequenceIndex; msgModel.sequenceVisible = diagObj.db.showSequenceNumbers(); const lineStartY = await boundMessage(diagram27, msgModel); adjustCreatedDestroyedData( msg, msgModel, lineStartY, index, actors2, createdActors, destroyedActors ); messagesToDraw.push({ messageModel: msgModel, lineStartY }); bounds2.models.addMessage(msgModel); } catch (e3) { log.error("error while drawing message", e3); } } if ([ diagObj.db.LINETYPE.SOLID_OPEN, diagObj.db.LINETYPE.DOTTED_OPEN, diagObj.db.LINETYPE.SOLID, diagObj.db.LINETYPE.DOTTED, diagObj.db.LINETYPE.SOLID_CROSS, diagObj.db.LINETYPE.DOTTED_CROSS, diagObj.db.LINETYPE.SOLID_POINT, diagObj.db.LINETYPE.DOTTED_POINT, diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID, diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED ].includes(msg.type)) { sequenceIndex = sequenceIndex + sequenceIndexStep; } index++; } log.debug("createdActors", createdActors); log.debug("destroyedActors", destroyedActors); await drawActors(diagram27, actors2, actorKeys, false); for (const e3 of messagesToDraw) { await drawMessage(diagram27, e3.messageModel, e3.lineStartY, diagObj); } if (conf2.mirrorActors) { await drawActors(diagram27, actors2, actorKeys, true); } backgrounds.forEach((e3) => svgDraw_default2.drawBackgroundRect(diagram27, e3)); fixLifeLineHeights(diagram27, actors2, actorKeys, conf2); for (const box2 of bounds2.models.boxes) { box2.height = bounds2.getVerticalPos() - box2.y; bounds2.insert(box2.x, box2.y, box2.x + box2.width, box2.height); const boxPadding = conf2.boxMargin * 2; box2.startx = box2.x - boxPadding; box2.starty = box2.y - boxPadding * 0.25; box2.stopx = box2.startx + box2.width + 2 * boxPadding; box2.stopy = box2.starty + box2.height + boxPadding * 0.75; box2.stroke = "rgb(0,0,0, 0.5)"; svgDraw_default2.drawBox(diagram27, box2, conf2); } if (hasBoxes) { bounds2.bumpVerticalPos(conf2.boxMargin); } const requiredBoxSize = drawActorsPopup(diagram27, actors2, actorKeys, doc); const { bounds: box } = bounds2.getBounds(); if (box.startx === void 0) { box.startx = 0; } if (box.starty === void 0) { box.starty = 0; } if (box.stopx === void 0) { box.stopx = 0; } if (box.stopy === void 0) { box.stopy = 0; } let boxHeight = box.stopy - box.starty; if (boxHeight < requiredBoxSize.maxHeight) { boxHeight = requiredBoxSize.maxHeight; } let height2 = boxHeight + 2 * conf2.diagramMarginY; if (conf2.mirrorActors) { height2 = height2 - conf2.boxMargin + conf2.bottomMarginAdj; } let boxWidth = box.stopx - box.startx; if (boxWidth < requiredBoxSize.maxWidth) { boxWidth = requiredBoxSize.maxWidth; } const width3 = boxWidth + 2 * conf2.diagramMarginX; if (title2) { diagram27.append("text").text(title2).attr("x", (box.stopx - box.startx) / 2 - 2 * conf2.diagramMarginX).attr("y", -25); } configureSvgSize(diagram27, height2, width3, conf2.useMaxWidth); const extraVertForTitle = title2 ? 40 : 0; diagram27.attr( "viewBox", box.startx - conf2.diagramMarginX + " -" + (conf2.diagramMarginY + extraVertForTitle) + " " + width3 + " " + (height2 + extraVertForTitle) ); log.debug(`models:`, bounds2.models); }, "draw"); __name(getMaxMessageWidthPerActor, "getMaxMessageWidthPerActor"); getRequiredPopupWidth = /* @__PURE__ */ __name(function(actor) { let requiredPopupWidth = 0; const textFont = actorFont(conf2); for (const key in actor.links) { const labelDimensions = utils_default2.calculateTextDimensions(key, textFont); const labelWidth = labelDimensions.width + 2 * conf2.wrapPadding + 2 * conf2.boxMargin; if (requiredPopupWidth < labelWidth) { requiredPopupWidth = labelWidth; } } return requiredPopupWidth; }, "getRequiredPopupWidth"); __name(calculateActorMargins, "calculateActorMargins"); buildNoteModel = /* @__PURE__ */ __name(async function(msg, actors2, diagObj) { const fromActor = actors2.get(msg.from); const toActor = actors2.get(msg.to); const startx = fromActor.x; const stopx = toActor.x; const shouldWrap = msg.wrap && msg.message; let textDimensions = hasKatex(msg.message) ? await calculateMathMLDimensions(msg.message, getConfig2()) : utils_default2.calculateTextDimensions( shouldWrap ? utils_default2.wrapLabel(msg.message, conf2.width, noteFont(conf2)) : msg.message, noteFont(conf2) ); const noteModel = { width: shouldWrap ? conf2.width : common_default.getMax(conf2.width, textDimensions.width + 2 * conf2.noteMargin), height: 0, startx: fromActor.x, stopx: 0, starty: 0, stopy: 0, message: msg.message }; if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) { noteModel.width = shouldWrap ? common_default.getMax(conf2.width, textDimensions.width) : common_default.getMax( fromActor.width / 2 + toActor.width / 2, textDimensions.width + 2 * conf2.noteMargin ); noteModel.startx = startx + (fromActor.width + conf2.actorMargin) / 2; } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) { noteModel.width = shouldWrap ? common_default.getMax(conf2.width, textDimensions.width + 2 * conf2.noteMargin) : common_default.getMax( fromActor.width / 2 + toActor.width / 2, textDimensions.width + 2 * conf2.noteMargin ); noteModel.startx = startx - noteModel.width + (fromActor.width - conf2.actorMargin) / 2; } else if (msg.to === msg.from) { textDimensions = utils_default2.calculateTextDimensions( shouldWrap ? utils_default2.wrapLabel(msg.message, common_default.getMax(conf2.width, fromActor.width), noteFont(conf2)) : msg.message, noteFont(conf2) ); noteModel.width = shouldWrap ? common_default.getMax(conf2.width, fromActor.width) : common_default.getMax(fromActor.width, conf2.width, textDimensions.width + 2 * conf2.noteMargin); noteModel.startx = startx + (fromActor.width - noteModel.width) / 2; } else { noteModel.width = Math.abs(startx + fromActor.width / 2 - (stopx + toActor.width / 2)) + conf2.actorMargin; noteModel.startx = startx < stopx ? startx + fromActor.width / 2 - conf2.actorMargin / 2 : stopx + toActor.width / 2 - conf2.actorMargin / 2; } if (shouldWrap) { noteModel.message = utils_default2.wrapLabel( msg.message, noteModel.width - 2 * conf2.wrapPadding, noteFont(conf2) ); } log.debug( `NM:[${noteModel.startx},${noteModel.stopx},${noteModel.starty},${noteModel.stopy}:${noteModel.width},${noteModel.height}=${msg.message}]` ); return noteModel; }, "buildNoteModel"); buildMessageModel = /* @__PURE__ */ __name(function(msg, actors2, diagObj) { if (![ diagObj.db.LINETYPE.SOLID_OPEN, diagObj.db.LINETYPE.DOTTED_OPEN, diagObj.db.LINETYPE.SOLID, diagObj.db.LINETYPE.DOTTED, diagObj.db.LINETYPE.SOLID_CROSS, diagObj.db.LINETYPE.DOTTED_CROSS, diagObj.db.LINETYPE.SOLID_POINT, diagObj.db.LINETYPE.DOTTED_POINT, diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID, diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED ].includes(msg.type)) { return {}; } const [fromLeft, fromRight] = activationBounds(msg.from, actors2); const [toLeft, toRight] = activationBounds(msg.to, actors2); const isArrowToRight = fromLeft <= toLeft; let startx = isArrowToRight ? fromRight : fromLeft; let stopx = isArrowToRight ? toLeft : toRight; const isArrowToActivation = Math.abs(toLeft - toRight) > 2; const adjustValue = /* @__PURE__ */ __name((value2) => { return isArrowToRight ? -value2 : value2; }, "adjustValue"); if (msg.from === msg.to) { stopx = startx; } else { if (msg.activate && !isArrowToActivation) { stopx += adjustValue(conf2.activationWidth / 2 - 1); } if (![diagObj.db.LINETYPE.SOLID_OPEN, diagObj.db.LINETYPE.DOTTED_OPEN].includes(msg.type)) { stopx += adjustValue(3); } if ([diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID, diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes( msg.type )) { startx -= adjustValue(3); } } const allBounds = [fromLeft, fromRight, toLeft, toRight]; const boundedWidth = Math.abs(startx - stopx); if (msg.wrap && msg.message) { msg.message = utils_default2.wrapLabel( msg.message, common_default.getMax(boundedWidth + 2 * conf2.wrapPadding, conf2.width), messageFont2(conf2) ); } const msgDims = utils_default2.calculateTextDimensions(msg.message, messageFont2(conf2)); return { width: common_default.getMax( msg.wrap ? 0 : msgDims.width + 2 * conf2.wrapPadding, boundedWidth + 2 * conf2.wrapPadding, conf2.width ), height: 0, startx, stopx, starty: 0, stopy: 0, message: msg.message, type: msg.type, wrap: msg.wrap, fromBounds: Math.min.apply(null, allBounds), toBounds: Math.max.apply(null, allBounds) }; }, "buildMessageModel"); calculateLoopBounds = /* @__PURE__ */ __name(async function(messages, actors2, _maxWidthPerActor, diagObj) { const loops = {}; const stack = []; let current, noteModel, msgModel; for (const msg of messages) { switch (msg.type) { case diagObj.db.LINETYPE.LOOP_START: case diagObj.db.LINETYPE.ALT_START: case diagObj.db.LINETYPE.OPT_START: case diagObj.db.LINETYPE.PAR_START: case diagObj.db.LINETYPE.PAR_OVER_START: case diagObj.db.LINETYPE.CRITICAL_START: case diagObj.db.LINETYPE.BREAK_START: stack.push({ id: msg.id, msg: msg.message, from: Number.MAX_SAFE_INTEGER, to: Number.MIN_SAFE_INTEGER, width: 0 }); break; case diagObj.db.LINETYPE.ALT_ELSE: case diagObj.db.LINETYPE.PAR_AND: case diagObj.db.LINETYPE.CRITICAL_OPTION: if (msg.message) { current = stack.pop(); loops[current.id] = current; loops[msg.id] = current; stack.push(current); } break; case diagObj.db.LINETYPE.LOOP_END: case diagObj.db.LINETYPE.ALT_END: case diagObj.db.LINETYPE.OPT_END: case diagObj.db.LINETYPE.PAR_END: case diagObj.db.LINETYPE.CRITICAL_END: case diagObj.db.LINETYPE.BREAK_END: current = stack.pop(); loops[current.id] = current; break; case diagObj.db.LINETYPE.ACTIVE_START: { const actorRect = actors2.get(msg.from ? msg.from : msg.to.actor); const stackedSize = actorActivations(msg.from ? msg.from : msg.to.actor).length; const x5 = actorRect.x + actorRect.width / 2 + (stackedSize - 1) * conf2.activationWidth / 2; const toAdd = { startx: x5, stopx: x5 + conf2.activationWidth, actor: msg.from, enabled: true }; bounds2.activations.push(toAdd); } break; case diagObj.db.LINETYPE.ACTIVE_END: { const lastActorActivationIdx = bounds2.activations.map((a2) => a2.actor).lastIndexOf(msg.from); bounds2.activations.splice(lastActorActivationIdx, 1).splice(0, 1); } break; } const isNote = msg.placement !== void 0; if (isNote) { noteModel = await buildNoteModel(msg, actors2, diagObj); msg.noteModel = noteModel; stack.forEach((stk) => { current = stk; current.from = common_default.getMin(current.from, noteModel.startx); current.to = common_default.getMax(current.to, noteModel.startx + noteModel.width); current.width = common_default.getMax(current.width, Math.abs(current.from - current.to)) - conf2.labelBoxWidth; }); } else { msgModel = buildMessageModel(msg, actors2, diagObj); msg.msgModel = msgModel; if (msgModel.startx && msgModel.stopx && stack.length > 0) { stack.forEach((stk) => { current = stk; if (msgModel.startx === msgModel.stopx) { const from2 = actors2.get(msg.from); const to = actors2.get(msg.to); current.from = common_default.getMin( from2.x - msgModel.width / 2, from2.x - from2.width / 2, current.from ); current.to = common_default.getMax( to.x + msgModel.width / 2, to.x + from2.width / 2, current.to ); current.width = common_default.getMax(current.width, Math.abs(current.to - current.from)) - conf2.labelBoxWidth; } else { current.from = common_default.getMin(msgModel.startx, current.from); current.to = common_default.getMax(msgModel.stopx, current.to); current.width = common_default.getMax(current.width, msgModel.width) - conf2.labelBoxWidth; } }); } } } bounds2.activations = []; log.debug("Loop type widths:", loops); return loops; }, "calculateLoopBounds"); sequenceRenderer_default = { bounds: bounds2, drawActors, drawActorsPopup, setConf: setConf3, draw: draw11 }; } }); // src/diagrams/sequence/sequenceDiagram.ts var sequenceDiagram_exports = {}; __export(sequenceDiagram_exports, { diagram: () => diagram11 }); var diagram11; var init_sequenceDiagram2 = __esm({ "src/diagrams/sequence/sequenceDiagram.ts"() { "use strict"; init_sequenceDiagram(); init_sequenceDb(); init_styles8(); init_diagramAPI(); init_sequenceRenderer(); diagram11 = { parser: sequenceDiagram_default, get db() { return new SequenceDB(); }, renderer: sequenceRenderer_default, styles: styles_default8, init: /* @__PURE__ */ __name((cnf) => { if (!cnf.sequence) { cnf.sequence = {}; } if (cnf.wrap) { cnf.sequence.wrap = cnf.wrap; setConfig2({ sequence: { wrap: cnf.wrap } }); } }, "init") }; } }); // src/diagrams/class/parser/classDiagram.jison var parser12, classDiagram_default; var init_classDiagram = __esm({ "src/diagrams/class/parser/classDiagram.jison"() { "use strict"; parser12 = (function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) { for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ; return o3; }, "o"), $V0 = [1, 18], $V1 = [1, 19], $V2 = [1, 20], $V3 = [1, 41], $V4 = [1, 42], $V5 = [1, 26], $V6 = [1, 24], $V7 = [1, 25], $V8 = [1, 32], $V9 = [1, 33], $Va = [1, 34], $Vb = [1, 45], $Vc = [1, 35], $Vd = [1, 36], $Ve = [1, 37], $Vf = [1, 38], $Vg = [1, 27], $Vh = [1, 28], $Vi = [1, 29], $Vj = [1, 30], $Vk = [1, 31], $Vl = [1, 44], $Vm = [1, 46], $Vn = [1, 43], $Vo = [1, 47], $Vp = [1, 9], $Vq = [1, 8, 9], $Vr = [1, 58], $Vs = [1, 59], $Vt = [1, 60], $Vu = [1, 61], $Vv = [1, 62], $Vw = [1, 63], $Vx = [1, 64], $Vy = [1, 8, 9, 41], $Vz = [1, 76], $VA = [1, 8, 9, 12, 13, 22, 39, 41, 44, 68, 69, 70, 71, 72, 73, 74, 79, 81], $VB = [1, 8, 9, 12, 13, 18, 20, 22, 39, 41, 44, 50, 60, 68, 69, 70, 71, 72, 73, 74, 79, 81, 86, 100, 102, 103], $VC = [13, 60, 86, 100, 102, 103], $VD = [13, 60, 73, 74, 86, 100, 102, 103], $VE = [13, 60, 68, 69, 70, 71, 72, 86, 100, 102, 103], $VF = [1, 100], $VG = [1, 117], $VH = [1, 113], $VI = [1, 109], $VJ = [1, 115], $VK = [1, 110], $VL = [1, 111], $VM = [1, 112], $VN = [1, 114], $VO = [1, 116], $VP = [22, 48, 60, 61, 82, 86, 87, 88, 89, 90], $VQ = [1, 8, 9, 39, 41, 44], $VR = [1, 8, 9, 22], $VS = [1, 145], $VT = [1, 8, 9, 61], $VU = [1, 8, 9, 22, 48, 60, 61, 82, 86, 87, 88, 89, 90]; var parser24 = { trace: /* @__PURE__ */ __name(function trace() { }, "trace"), yy: {}, symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "statements": 5, "graphConfig": 6, "CLASS_DIAGRAM": 7, "NEWLINE": 8, "EOF": 9, "statement": 10, "classLabel": 11, "SQS": 12, "STR": 13, "SQE": 14, "namespaceName": 15, "alphaNumToken": 16, "classLiteralName": 17, "DOT": 18, "className": 19, "GENERICTYPE": 20, "relationStatement": 21, "LABEL": 22, "namespaceStatement": 23, "classStatement": 24, "memberStatement": 25, "annotationStatement": 26, "clickStatement": 27, "styleStatement": 28, "cssClassStatement": 29, "noteStatement": 30, "classDefStatement": 31, "direction": 32, "acc_title": 33, "acc_title_value": 34, "acc_descr": 35, "acc_descr_value": 36, "acc_descr_multiline_value": 37, "namespaceIdentifier": 38, "STRUCT_START": 39, "classStatements": 40, "STRUCT_STOP": 41, "NAMESPACE": 42, "classIdentifier": 43, "STYLE_SEPARATOR": 44, "members": 45, "CLASS": 46, "emptyBody": 47, "SPACE": 48, "ANNOTATION_START": 49, "ANNOTATION_END": 50, "MEMBER": 51, "SEPARATOR": 52, "relation": 53, "NOTE_FOR": 54, "noteText": 55, "NOTE": 56, "CLASSDEF": 57, "classList": 58, "stylesOpt": 59, "ALPHA": 60, "COMMA": 61, "direction_tb": 62, "direction_bt": 63, "direction_rl": 64, "direction_lr": 65, "relationType": 66, "lineType": 67, "AGGREGATION": 68, "EXTENSION": 69, "COMPOSITION": 70, "DEPENDENCY": 71, "LOLLIPOP": 72, "LINE": 73, "DOTTED_LINE": 74, "CALLBACK": 75, "LINK": 76, "LINK_TARGET": 77, "CLICK": 78, "CALLBACK_NAME": 79, "CALLBACK_ARGS": 80, "HREF": 81, "STYLE": 82, "CSSCLASS": 83, "style": 84, "styleComponent": 85, "NUM": 86, "COLON": 87, "UNIT": 88, "BRKT": 89, "PCT": 90, "commentToken": 91, "textToken": 92, "graphCodeTokens": 93, "textNoTagsToken": 94, "TAGSTART": 95, "TAGEND": 96, "==": 97, "--": 98, "DEFAULT": 99, "MINUS": 100, "keywords": 101, "UNICODE_TEXT": 102, "BQUOTE_STR": 103, "$accept": 0, "$end": 1 }, terminals_: { 2: "error", 7: "CLASS_DIAGRAM", 8: "NEWLINE", 9: "EOF", 12: "SQS", 13: "STR", 14: "SQE", 18: "DOT", 20: "GENERICTYPE", 22: "LABEL", 33: "acc_title", 34: "acc_title_value", 35: "acc_descr", 36: "acc_descr_value", 37: "acc_descr_multiline_value", 39: "STRUCT_START", 41: "STRUCT_STOP", 42: "NAMESPACE", 44: "STYLE_SEPARATOR", 46: "CLASS", 48: "SPACE", 49: "ANNOTATION_START", 50: "ANNOTATION_END", 51: "MEMBER", 52: "SEPARATOR", 54: "NOTE_FOR", 56: "NOTE", 57: "CLASSDEF", 60: "ALPHA", 61: "COMMA", 62: "direction_tb", 63: "direction_bt", 64: "direction_rl", 65: "direction_lr", 68: "AGGREGATION", 69: "EXTENSION", 70: "COMPOSITION", 71: "DEPENDENCY", 72: "LOLLIPOP", 73: "LINE", 74: "DOTTED_LINE", 75: "CALLBACK", 76: "LINK", 77: "LINK_TARGET", 78: "CLICK", 79: "CALLBACK_NAME", 80: "CALLBACK_ARGS", 81: "HREF", 82: "STYLE", 83: "CSSCLASS", 86: "NUM", 87: "COLON", 88: "UNIT", 89: "BRKT", 90: "PCT", 93: "graphCodeTokens", 95: "TAGSTART", 96: "TAGEND", 97: "==", 98: "--", 99: "DEFAULT", 100: "MINUS", 101: "keywords", 102: "UNICODE_TEXT", 103: "BQUOTE_STR" }, productions_: [0, [3, 1], [3, 1], [4, 1], [6, 4], [5, 1], [5, 2], [5, 3], [11, 3], [15, 1], [15, 1], [15, 3], [15, 2], [19, 1], [19, 3], [19, 1], [19, 2], [19, 2], [19, 2], [10, 1], [10, 2], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [23, 4], [23, 5], [38, 2], [40, 1], [40, 2], [40, 3], [24, 1], [24, 3], [24, 4], [24, 3], [24, 6], [43, 2], [43, 3], [47, 0], [47, 2], [47, 2], [26, 4], [45, 1], [45, 2], [25, 1], [25, 2], [25, 1], [25, 1], [21, 3], [21, 4], [21, 4], [21, 5], [30, 3], [30, 2], [31, 3], [58, 1], [58, 3], [32, 1], [32, 1], [32, 1], [32, 1], [53, 3], [53, 2], [53, 2], [53, 1], [66, 1], [66, 1], [66, 1], [66, 1], [66, 1], [67, 1], [67, 1], [27, 3], [27, 4], [27, 3], [27, 4], [27, 4], [27, 5], [27, 3], [27, 4], [27, 4], [27, 5], [27, 4], [27, 5], [27, 5], [27, 6], [28, 3], [29, 3], [59, 1], [59, 3], [84, 1], [84, 2], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [91, 1], [91, 1], [92, 1], [92, 1], [92, 1], [92, 1], [92, 1], [92, 1], [92, 1], [94, 1], [94, 1], [94, 1], [94, 1], [16, 1], [16, 1], [16, 1], [16, 1], [17, 1], [55, 1]], performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { var $0 = $$.length - 1; switch (yystate) { case 8: this.$ = $$[$0 - 1]; break; case 9: case 10: case 13: case 15: this.$ = $$[$0]; break; case 11: case 14: this.$ = $$[$0 - 2] + "." + $$[$0]; break; case 12: case 16: this.$ = $$[$0 - 1] + $$[$0]; break; case 17: case 18: this.$ = $$[$0 - 1] + "~" + $$[$0] + "~"; break; case 19: yy.addRelation($$[$0]); break; case 20: $$[$0 - 1].title = yy.cleanupLabel($$[$0]); yy.addRelation($$[$0 - 1]); break; case 31: this.$ = $$[$0].trim(); yy.setAccTitle(this.$); break; case 32: case 33: this.$ = $$[$0].trim(); yy.setAccDescription(this.$); break; case 34: yy.addClassesToNamespace($$[$0 - 3], $$[$0 - 1]); break; case 35: yy.addClassesToNamespace($$[$0 - 4], $$[$0 - 1]); break; case 36: this.$ = $$[$0]; yy.addNamespace($$[$0]); break; case 37: this.$ = [$$[$0]]; break; case 38: this.$ = [$$[$0 - 1]]; break; case 39: $$[$0].unshift($$[$0 - 2]); this.$ = $$[$0]; break; case 41: yy.setCssClass($$[$0 - 2], $$[$0]); break; case 42: yy.addMembers($$[$0 - 3], $$[$0 - 1]); break; case 44: yy.setCssClass($$[$0 - 5], $$[$0 - 3]); yy.addMembers($$[$0 - 5], $$[$0 - 1]); break; case 45: this.$ = $$[$0]; yy.addClass($$[$0]); break; case 46: this.$ = $$[$0 - 1]; yy.addClass($$[$0 - 1]); yy.setClassLabel($$[$0 - 1], $$[$0]); break; case 50: yy.addAnnotation($$[$0], $$[$0 - 2]); break; case 51: case 64: this.$ = [$$[$0]]; break; case 52: $$[$0].push($$[$0 - 1]); this.$ = $$[$0]; break; case 53: break; case 54: yy.addMember($$[$0 - 1], yy.cleanupLabel($$[$0])); break; case 55: break; case 56: break; case 57: this.$ = { "id1": $$[$0 - 2], "id2": $$[$0], relation: $$[$0 - 1], relationTitle1: "none", relationTitle2: "none" }; break; case 58: this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 1], relationTitle1: $$[$0 - 2], relationTitle2: "none" }; break; case 59: this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: "none", relationTitle2: $$[$0 - 1] }; break; case 60: this.$ = { id1: $$[$0 - 4], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: $$[$0 - 3], relationTitle2: $$[$0 - 1] }; break; case 61: yy.addNote($$[$0], $$[$0 - 1]); break; case 62: yy.addNote($$[$0]); break; case 63: this.$ = $$[$0 - 2]; yy.defineClass($$[$0 - 1], $$[$0]); break; case 65: this.$ = $$[$0 - 2].concat([$$[$0]]); break; case 66: yy.setDirection("TB"); break; case 67: yy.setDirection("BT"); break; case 68: yy.setDirection("RL"); break; case 69: yy.setDirection("LR"); break; case 70: this.$ = { type1: $$[$0 - 2], type2: $$[$0], lineType: $$[$0 - 1] }; break; case 71: this.$ = { type1: "none", type2: $$[$0], lineType: $$[$0 - 1] }; break; case 72: this.$ = { type1: $$[$0 - 1], type2: "none", lineType: $$[$0] }; break; case 73: this.$ = { type1: "none", type2: "none", lineType: $$[$0] }; break; case 74: this.$ = yy.relationType.AGGREGATION; break; case 75: this.$ = yy.relationType.EXTENSION; break; case 76: this.$ = yy.relationType.COMPOSITION; break; case 77: this.$ = yy.relationType.DEPENDENCY; break; case 78: this.$ = yy.relationType.LOLLIPOP; break; case 79: this.$ = yy.lineType.LINE; break; case 80: this.$ = yy.lineType.DOTTED_LINE; break; case 81: case 87: this.$ = $$[$0 - 2]; yy.setClickEvent($$[$0 - 1], $$[$0]); break; case 82: case 88: this.$ = $$[$0 - 3]; yy.setClickEvent($$[$0 - 2], $$[$0 - 1]); yy.setTooltip($$[$0 - 2], $$[$0]); break; case 83: this.$ = $$[$0 - 2]; yy.setLink($$[$0 - 1], $$[$0]); break; case 84: this.$ = $$[$0 - 3]; yy.setLink($$[$0 - 2], $$[$0 - 1], $$[$0]); break; case 85: this.$ = $$[$0 - 3]; yy.setLink($$[$0 - 2], $$[$0 - 1]); yy.setTooltip($$[$0 - 2], $$[$0]); break; case 86: this.$ = $$[$0 - 4]; yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); yy.setTooltip($$[$0 - 3], $$[$0 - 1]); break; case 89: this.$ = $$[$0 - 3]; yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); break; case 90: this.$ = $$[$0 - 4]; yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]); yy.setTooltip($$[$0 - 3], $$[$0]); break; case 91: this.$ = $$[$0 - 3]; yy.setLink($$[$0 - 2], $$[$0]); break; case 92: this.$ = $$[$0 - 4]; yy.setLink($$[$0 - 3], $$[$0 - 1], $$[$0]); break; case 93: this.$ = $$[$0 - 4]; yy.setLink($$[$0 - 3], $$[$0 - 1]); yy.setTooltip($$[$0 - 3], $$[$0]); break; case 94: this.$ = $$[$0 - 5]; yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); yy.setTooltip($$[$0 - 4], $$[$0 - 1]); break; case 95: this.$ = $$[$0 - 2]; yy.setCssStyle($$[$0 - 1], $$[$0]); break; case 96: yy.setCssClass($$[$0 - 1], $$[$0]); break; case 97: this.$ = [$$[$0]]; break; case 98: $$[$0 - 2].push($$[$0]); this.$ = $$[$0 - 2]; break; case 100: this.$ = $$[$0 - 1] + $$[$0]; break; } }, "anonymous"), table: [{ 3: 1, 4: 2, 5: 3, 6: 4, 7: [1, 6], 10: 5, 16: 39, 17: 40, 19: 21, 21: 7, 23: 8, 24: 9, 25: 10, 26: 11, 27: 12, 28: 13, 29: 14, 30: 15, 31: 16, 32: 17, 33: $V0, 35: $V1, 37: $V2, 38: 22, 42: $V3, 43: 23, 46: $V4, 49: $V5, 51: $V6, 52: $V7, 54: $V8, 56: $V9, 57: $Va, 60: $Vb, 62: $Vc, 63: $Vd, 64: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 83: $Vk, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, o2($Vp, [2, 5], { 8: [1, 48] }), { 8: [1, 49] }, o2($Vq, [2, 19], { 22: [1, 50] }), o2($Vq, [2, 21]), o2($Vq, [2, 22]), o2($Vq, [2, 23]), o2($Vq, [2, 24]), o2($Vq, [2, 25]), o2($Vq, [2, 26]), o2($Vq, [2, 27]), o2($Vq, [2, 28]), o2($Vq, [2, 29]), o2($Vq, [2, 30]), { 34: [1, 51] }, { 36: [1, 52] }, o2($Vq, [2, 33]), o2($Vq, [2, 53], { 53: 53, 66: 56, 67: 57, 13: [1, 54], 22: [1, 55], 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv, 73: $Vw, 74: $Vx }), { 39: [1, 65] }, o2($Vy, [2, 40], { 39: [1, 67], 44: [1, 66] }), o2($Vq, [2, 55]), o2($Vq, [2, 56]), { 16: 68, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn }, { 16: 39, 17: 40, 19: 69, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 16: 39, 17: 40, 19: 70, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 16: 39, 17: 40, 19: 71, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 60: [1, 72] }, { 13: [1, 73] }, { 16: 39, 17: 40, 19: 74, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 13: $Vz, 55: 75 }, { 58: 77, 60: [1, 78] }, o2($Vq, [2, 66]), o2($Vq, [2, 67]), o2($Vq, [2, 68]), o2($Vq, [2, 69]), o2($VA, [2, 13], { 16: 39, 17: 40, 19: 80, 18: [1, 79], 20: [1, 81], 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }), o2($VA, [2, 15], { 20: [1, 82] }), { 15: 83, 16: 84, 17: 85, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 16: 39, 17: 40, 19: 86, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o2($VB, [2, 123]), o2($VB, [2, 124]), o2($VB, [2, 125]), o2($VB, [2, 126]), o2([1, 8, 9, 12, 13, 20, 22, 39, 41, 44, 68, 69, 70, 71, 72, 73, 74, 79, 81], [2, 127]), o2($Vp, [2, 6], { 10: 5, 21: 7, 23: 8, 24: 9, 25: 10, 26: 11, 27: 12, 28: 13, 29: 14, 30: 15, 31: 16, 32: 17, 19: 21, 38: 22, 43: 23, 16: 39, 17: 40, 5: 87, 33: $V0, 35: $V1, 37: $V2, 42: $V3, 46: $V4, 49: $V5, 51: $V6, 52: $V7, 54: $V8, 56: $V9, 57: $Va, 60: $Vb, 62: $Vc, 63: $Vd, 64: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 83: $Vk, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }), { 5: 88, 10: 5, 16: 39, 17: 40, 19: 21, 21: 7, 23: 8, 24: 9, 25: 10, 26: 11, 27: 12, 28: 13, 29: 14, 30: 15, 31: 16, 32: 17, 33: $V0, 35: $V1, 37: $V2, 38: 22, 42: $V3, 43: 23, 46: $V4, 49: $V5, 51: $V6, 52: $V7, 54: $V8, 56: $V9, 57: $Va, 60: $Vb, 62: $Vc, 63: $Vd, 64: $Ve, 65: $Vf, 75: $Vg, 76: $Vh, 78: $Vi, 82: $Vj, 83: $Vk, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o2($Vq, [2, 20]), o2($Vq, [2, 31]), o2($Vq, [2, 32]), { 13: [1, 90], 16: 39, 17: 40, 19: 89, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 53: 91, 66: 56, 67: 57, 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv, 73: $Vw, 74: $Vx }, o2($Vq, [2, 54]), { 67: 92, 73: $Vw, 74: $Vx }, o2($VC, [2, 73], { 66: 93, 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv }), o2($VD, [2, 74]), o2($VD, [2, 75]), o2($VD, [2, 76]), o2($VD, [2, 77]), o2($VD, [2, 78]), o2($VE, [2, 79]), o2($VE, [2, 80]), { 8: [1, 95], 24: 96, 40: 94, 43: 23, 46: $V4 }, { 16: 97, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn }, { 41: [1, 99], 45: 98, 51: $VF }, { 50: [1, 101] }, { 13: [1, 102] }, { 13: [1, 103] }, { 79: [1, 104], 81: [1, 105] }, { 22: $VG, 48: $VH, 59: 106, 60: $VI, 82: $VJ, 84: 107, 85: 108, 86: $VK, 87: $VL, 88: $VM, 89: $VN, 90: $VO }, { 60: [1, 118] }, { 13: $Vz, 55: 119 }, o2($Vq, [2, 62]), o2($Vq, [2, 128]), { 22: $VG, 48: $VH, 59: 120, 60: $VI, 61: [1, 121], 82: $VJ, 84: 107, 85: 108, 86: $VK, 87: $VL, 88: $VM, 89: $VN, 90: $VO }, o2($VP, [2, 64]), { 16: 39, 17: 40, 19: 122, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o2($VA, [2, 16]), o2($VA, [2, 17]), o2($VA, [2, 18]), { 39: [2, 36] }, { 15: 124, 16: 84, 17: 85, 18: [1, 123], 39: [2, 9], 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 39: [2, 10] }, o2($VQ, [2, 45], { 11: 125, 12: [1, 126] }), o2($Vp, [2, 7]), { 9: [1, 127] }, o2($VR, [2, 57]), { 16: 39, 17: 40, 19: 128, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 13: [1, 130], 16: 39, 17: 40, 19: 129, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o2($VC, [2, 72], { 66: 131, 68: $Vr, 69: $Vs, 70: $Vt, 71: $Vu, 72: $Vv }), o2($VC, [2, 71]), { 41: [1, 132] }, { 24: 96, 40: 133, 43: 23, 46: $V4 }, { 8: [1, 134], 41: [2, 37] }, o2($Vy, [2, 41], { 39: [1, 135] }), { 41: [1, 136] }, o2($Vy, [2, 43]), { 41: [2, 51], 45: 137, 51: $VF }, { 16: 39, 17: 40, 19: 138, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o2($Vq, [2, 81], { 13: [1, 139] }), o2($Vq, [2, 83], { 13: [1, 141], 77: [1, 140] }), o2($Vq, [2, 87], { 13: [1, 142], 80: [1, 143] }), { 13: [1, 144] }, o2($Vq, [2, 95], { 61: $VS }), o2($VT, [2, 97], { 85: 146, 22: $VG, 48: $VH, 60: $VI, 82: $VJ, 86: $VK, 87: $VL, 88: $VM, 89: $VN, 90: $VO }), o2($VU, [2, 99]), o2($VU, [2, 101]), o2($VU, [2, 102]), o2($VU, [2, 103]), o2($VU, [2, 104]), o2($VU, [2, 105]), o2($VU, [2, 106]), o2($VU, [2, 107]), o2($VU, [2, 108]), o2($VU, [2, 109]), o2($Vq, [2, 96]), o2($Vq, [2, 61]), o2($Vq, [2, 63], { 61: $VS }), { 60: [1, 147] }, o2($VA, [2, 14]), { 15: 148, 16: 84, 17: 85, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, { 39: [2, 12] }, o2($VQ, [2, 46]), { 13: [1, 149] }, { 1: [2, 4] }, o2($VR, [2, 59]), o2($VR, [2, 58]), { 16: 39, 17: 40, 19: 150, 60: $Vb, 86: $Vl, 100: $Vm, 102: $Vn, 103: $Vo }, o2($VC, [2, 70]), o2($Vq, [2, 34]), { 41: [1, 151] }, { 24: 96, 40: 152, 41: [2, 38], 43: 23, 46: $V4 }, { 45: 153, 51: $VF }, o2($Vy, [2, 42]), { 41: [2, 52] }, o2($Vq, [2, 50]), o2($Vq, [2, 82]), o2($Vq, [2, 84]), o2($Vq, [2, 85], { 77: [1, 154] }), o2($Vq, [2, 88]), o2($Vq, [2, 89], { 13: [1, 155] }), o2($Vq, [2, 91], { 13: [1, 157], 77: [1, 156] }), { 22: $VG, 48: $VH, 60: $VI, 82: $VJ, 84: 158, 85: 108, 86: $VK, 87: $VL, 88: $VM, 89: $VN, 90: $VO }, o2($VU, [2, 100]), o2($VP, [2, 65]), { 39: [2, 11] }, { 14: [1, 159] }, o2($VR, [2, 60]), o2($Vq, [2, 35]), { 41: [2, 39] }, { 41: [1, 160] }, o2($Vq, [2, 86]), o2($Vq, [2, 90]), o2($Vq, [2, 92]), o2($Vq, [2, 93], { 77: [1, 161] }), o2($VT, [2, 98], { 85: 146, 22: $VG, 48: $VH, 60: $VI, 82: $VJ, 86: $VK, 87: $VL, 88: $VM, 89: $VN, 90: $VO }), o2($VQ, [2, 8]), o2($Vy, [2, 44]), o2($Vq, [2, 94])], defaultActions: { 2: [2, 1], 3: [2, 2], 4: [2, 3], 83: [2, 36], 85: [2, 10], 124: [2, 12], 127: [2, 4], 137: [2, 52], 148: [2, 11], 152: [2, 39] }, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (hash.recoverable) { this.trace(str2); } else { var error3 = new Error(str2); error3.hash = hash; throw error3; } }, "parseError"), parse: /* @__PURE__ */ __name(function parse7(input) { var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1; var args = lstack.slice.call(arguments, 1); var lexer2 = Object.create(this.lexer); var sharedState = { yy: {} }; for (var k2 in this.yy) { if (Object.prototype.hasOwnProperty.call(this.yy, k2)) { sharedState.yy[k2] = this.yy[k2]; } } lexer2.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer2; sharedState.yy.parser = this; if (typeof lexer2.yylloc == "undefined") { lexer2.yylloc = {}; } var yyloc = lexer2.yylloc; lstack.push(yyloc); var ranges = lexer2.options && lexer2.options.ranges; if (typeof sharedState.yy.parseError === "function") { this.parseError = sharedState.yy.parseError; } else { this.parseError = Object.getPrototypeOf(this).parseError; } function popStack(n2) { stack.length = stack.length - 2 * n2; vstack.length = vstack.length - n2; lstack.length = lstack.length - n2; } __name(popStack, "popStack"); function lex() { var token2; token2 = tstack.pop() || lexer2.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex, "lex"); var symbol, preErrorSymbol, state3, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state3 = stack[stack.length - 1]; if (this.defaultActions[state3]) { action = this.defaultActions[state3]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex(); } action = table[state3] && table[state3][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state3]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer2.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; } else { errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); } this.parseError(errStr, { text: lexer2.match, token: this.terminals_[symbol] || symbol, line: lexer2.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state3 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer2.yytext); lstack.push(lexer2.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer2.yyleng; yytext = lexer2.yytext; yylineno = lexer2.yylineno; yyloc = lexer2.yylloc; if (recovering > 0) { recovering--; } } else { symbol = preErrorSymbol; preErrorSymbol = null; } break; case 2: len = this.productions_[action[1]][1]; yyval.$ = vstack[vstack.length - len]; yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; if (ranges) { yyval._$.range = [ lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1] ]; } r2 = this.performAction.apply(yyval, [ yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack ].concat(args)); if (typeof r2 !== "undefined") { return r2; } if (len) { stack = stack.slice(0, -1 * len * 2); vstack = vstack.slice(0, -1 * len); lstack = lstack.slice(0, -1 * len); } stack.push(this.productions_[action[1]][0]); vstack.push(yyval.$); lstack.push(yyval._$); newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]]; stack.push(newState2); break; case 3: return true; } } return true; }, "parse") }; var lexer = /* @__PURE__ */ (function() { var lexer2 = { EOF: 1, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (this.yy.parser) { this.yy.parser.parseError(str2, hash); } else { throw new Error(str2); } }, "parseError"), // resets the lexer, sets new input setInput: /* @__PURE__ */ __name(function(input, yy) { this.yy = yy || this.yy || {}; this._input = input; this._more = this._backtrack = this.done = false; 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 }; if (this.options.ranges) { this.yylloc.range = [0, 0]; } this.offset = 0; return this; }, "setInput"), // consumes and returns one char from the input input: /* @__PURE__ */ __name(function() { var ch = this._input[0]; this.yytext += ch; this.yyleng++; this.offset++; this.match += ch; this.matched += ch; var lines = ch.match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno++; this.yylloc.last_line++; } else { this.yylloc.last_column++; } if (this.options.ranges) { this.yylloc.range[1]++; } this._input = this._input.slice(1); return ch; }, "input"), // unshifts one char (or a string) into the input unput: /* @__PURE__ */ __name(function(ch) { var len = ch.length; var lines = ch.split(/(?:\r\n?|\n)/g); this._input = ch + this._input; this.yytext = this.yytext.substr(0, this.yytext.length - len); this.offset -= len; var oldLines = 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); if (lines.length - 1) { this.yylineno -= lines.length - 1; } var r2 = this.yylloc.range; this.yylloc = { first_line: this.yylloc.first_line, last_line: this.yylineno + 1, first_column: this.yylloc.first_column, last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len }; if (this.options.ranges) { this.yylloc.range = [r2[0], r2[0] + this.yyleng - len]; } this.yyleng = this.yytext.length; return this; }, "unput"), // When called from action, caches matched text and appends it on next action more: /* @__PURE__ */ __name(function() { this._more = true; return this; }, "more"), // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. reject: /* @__PURE__ */ __name(function() { if (this.options.backtrack_lexer) { this._backtrack = true; } 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"), // retain first n characters of the match less: /* @__PURE__ */ __name(function(n2) { this.unput(this.match.slice(n2)); }, "less"), // displays already matched input, i.e. for error messages pastInput: /* @__PURE__ */ __name(function() { var past = this.matched.substr(0, this.matched.length - this.match.length); return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); }, "pastInput"), // displays upcoming input, i.e. for error messages upcomingInput: /* @__PURE__ */ __name(function() { var next3 = this.match; if (next3.length < 20) { next3 += this._input.substr(0, 20 - next3.length); } return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, ""); }, "upcomingInput"), // displays the character position where the lexing error occurred, i.e. for error messages showPosition: /* @__PURE__ */ __name(function() { var pre = this.pastInput(); var c3 = new Array(pre.length + 1).join("-"); return pre + this.upcomingInput() + "\n" + c3 + "^"; }, "showPosition"), // test the lexed token: return FALSE when not a match, otherwise return token test_match: /* @__PURE__ */ __name(function(match2, indexed_rule) { var token2, lines, backup; if (this.options.backtrack_lexer) { backup = { 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 }; if (this.options.ranges) { backup.yylloc.range = this.yylloc.range.slice(0); } } lines = match2[0].match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno += lines.length; } this.yylloc = { first_line: this.yylloc.last_line, last_line: this.yylineno + 1, first_column: this.yylloc.last_column, last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; this.yyleng = this.yytext.length; if (this.options.ranges) { this.yylloc.range = [this.offset, this.offset += this.yyleng]; } this._more = false; this._backtrack = false; this._input = this._input.slice(match2[0].length); this.matched += match2[0]; token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); if (this.done && this._input) { this.done = false; } if (token2) { return token2; } else if (this._backtrack) { for (var k2 in backup) { this[k2] = backup[k2]; } return false; } return false; }, "test_match"), // return next match in input next: /* @__PURE__ */ __name(function() { if (this.done) { return this.EOF; } if (!this._input) { this.done = true; } var token2, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[index]); if (token2 !== false) { return token2; } return false; } if (this._input === "") { return this.EOF; } else { return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { text: "", token: null, line: this.yylineno }); } }, "next"), // return next match that has a token lex: /* @__PURE__ */ __name(function lex() { var r2 = this.next(); if (r2) { return r2; } else { return this.lex(); } }, "lex"), // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) begin: /* @__PURE__ */ __name(function begin(condition) { this.conditionStack.push(condition); }, "begin"), // pop the previously active lexer condition state off the condition stack popState: /* @__PURE__ */ __name(function popState() { var n2 = this.conditionStack.length - 1; if (n2 > 0) { return this.conditionStack.pop(); } else { return this.conditionStack[0]; } }, "popState"), // produce the lexer rule set which is active for the currently active lexer condition state _currentRules: /* @__PURE__ */ __name(function _currentRules() { if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; } else { return this.conditions["INITIAL"].rules; } }, "_currentRules"), // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available topState: /* @__PURE__ */ __name(function topState(n2) { n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0); if (n2 >= 0) { return this.conditionStack[n2]; } else { return "INITIAL"; } }, "topState"), // alias for begin(condition) pushState: /* @__PURE__ */ __name(function pushState(condition) { this.begin(condition); }, "pushState"), // return the number of states currently on the stack stateStackSize: /* @__PURE__ */ __name(function stateStackSize() { return this.conditionStack.length; }, "stateStackSize"), options: {}, performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { var YYSTATE = YY_START; switch ($avoiding_name_collisions) { case 0: return 62; break; case 1: return 63; break; case 2: return 64; break; case 3: return 65; break; case 4: break; case 5: break; case 6: this.begin("acc_title"); return 33; break; case 7: this.popState(); return "acc_title_value"; break; case 8: this.begin("acc_descr"); return 35; break; case 9: this.popState(); return "acc_descr_value"; break; case 10: this.begin("acc_descr_multiline"); break; case 11: this.popState(); break; case 12: return "acc_descr_multiline_value"; break; case 13: return 8; break; case 14: break; case 15: return 7; break; case 16: return 7; break; case 17: return "EDGE_STATE"; break; case 18: this.begin("callback_name"); break; case 19: this.popState(); break; case 20: this.popState(); this.begin("callback_args"); break; case 21: return 79; break; case 22: this.popState(); break; case 23: return 80; break; case 24: this.popState(); break; case 25: return "STR"; break; case 26: this.begin("string"); break; case 27: return 82; break; case 28: return 57; break; case 29: this.begin("namespace"); return 42; break; case 30: this.popState(); return 8; break; case 31: break; case 32: this.begin("namespace-body"); return 39; break; case 33: this.popState(); return 41; break; case 34: return "EOF_IN_STRUCT"; break; case 35: return 8; break; case 36: break; case 37: return "EDGE_STATE"; break; case 38: this.begin("class"); return 46; break; case 39: this.popState(); return 8; break; case 40: break; case 41: this.popState(); this.popState(); return 41; break; case 42: this.begin("class-body"); return 39; break; case 43: this.popState(); return 41; break; case 44: return "EOF_IN_STRUCT"; break; case 45: return "EDGE_STATE"; break; case 46: return "OPEN_IN_STRUCT"; break; case 47: break; case 48: return "MEMBER"; break; case 49: return 83; break; case 50: return 75; break; case 51: return 76; break; case 52: return 78; break; case 53: return 54; break; case 54: return 56; break; case 55: return 49; break; case 56: return 50; break; case 57: return 81; break; case 58: this.popState(); break; case 59: return "GENERICTYPE"; break; case 60: this.begin("generic"); break; case 61: this.popState(); break; case 62: return "BQUOTE_STR"; break; case 63: this.begin("bqstring"); break; case 64: return 77; break; case 65: return 77; break; case 66: return 77; break; case 67: return 77; break; case 68: return 69; break; case 69: return 69; break; case 70: return 71; break; case 71: return 71; break; case 72: return 70; break; case 73: return 68; break; case 74: return 72; break; case 75: return 73; break; case 76: return 74; break; case 77: return 22; break; case 78: return 44; break; case 79: return 100; break; case 80: return 18; break; case 81: return "PLUS"; break; case 82: return 87; break; case 83: return 61; break; case 84: return 89; break; case 85: return 89; break; case 86: return 90; break; case 87: return "EQUALS"; break; case 88: return "EQUALS"; break; case 89: return 60; break; case 90: return 12; break; case 91: return 14; break; case 92: return "PUNCTUATION"; break; case 93: return 86; break; case 94: return 102; break; case 95: return 48; break; case 96: return 48; break; case 97: return 9; break; } }, "anonymous"), rules: [/^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/, /^(?:%%[^\n]*(\r?\n)*)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:classDiagram-v2\b)/, /^(?:classDiagram\b)/, /^(?:\[\*\])/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:["])/, /^(?:[^"]*)/, /^(?:["])/, /^(?:style\b)/, /^(?:classDef\b)/, /^(?:namespace\b)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:\[\*\])/, /^(?:class\b)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:[}])/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\[\*\])/, /^(?:[{])/, /^(?:[\n])/, /^(?:[^{}\n]*)/, /^(?:cssClass\b)/, /^(?:callback\b)/, /^(?:link\b)/, /^(?:click\b)/, /^(?:note for\b)/, /^(?:note\b)/, /^(?:<<)/, /^(?:>>)/, /^(?:href\b)/, /^(?:[~])/, /^(?:[^~]*)/, /^(?:~)/, /^(?:[`])/, /^(?:[^`]+)/, /^(?:[`])/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:\s*<\|)/, /^(?:\s*\|>)/, /^(?:\s*>)/, /^(?:\s*<)/, /^(?:\s*\*)/, /^(?:\s*o\b)/, /^(?:\s*\(\))/, /^(?:--)/, /^(?:\.\.)/, /^(?::{1}[^:\n;]+)/, /^(?::{3})/, /^(?:-)/, /^(?:\.)/, /^(?:\+)/, /^(?::)/, /^(?:,)/, /^(?:#)/, /^(?:#)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:\w+)/, /^(?:\[)/, /^(?:\])/, /^(?:[!"#$%&'*+,-.`?\\/])/, /^(?:[0-9]+)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\s)/, /^(?:\s)/, /^(?:$)/], conditions: { "namespace-body": { "rules": [26, 33, 34, 35, 36, 37, 38, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "namespace": { "rules": [26, 29, 30, 31, 32, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "class-body": { "rules": [26, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "class": { "rules": [26, 39, 40, 41, 42, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "acc_descr_multiline": { "rules": [11, 12, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "acc_descr": { "rules": [9, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "acc_title": { "rules": [7, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "callback_args": { "rules": [22, 23, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "callback_name": { "rules": [19, 20, 21, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "href": { "rules": [26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "struct": { "rules": [26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "generic": { "rules": [26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "bqstring": { "rules": [26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "string": { "rules": [24, 25, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 14, 15, 16, 17, 18, 26, 27, 28, 29, 38, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], "inclusive": true } } }; return lexer2; })(); parser24.lexer = lexer; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser24; parser24.Parser = Parser3; return new Parser3(); })(); parser12.parser = parser12; classDiagram_default = parser12; } }); // src/diagrams/class/classTypes.ts var visibilityValues, ClassMember; var init_classTypes = __esm({ "src/diagrams/class/classTypes.ts"() { "use strict"; init_diagramAPI(); init_common(); visibilityValues = ["#", "+", "~", "-", ""]; ClassMember = class { static { __name(this, "ClassMember"); } constructor(input, memberType) { this.memberType = memberType; this.visibility = ""; this.classifier = ""; this.text = ""; const sanitizedInput = sanitizeText(input, getConfig2()); this.parseMember(sanitizedInput); } getDisplayDetails() { let displayText = this.visibility + parseGenericTypes(this.id); if (this.memberType === "method") { displayText += `(${parseGenericTypes(this.parameters.trim())})`; if (this.returnType) { displayText += " : " + parseGenericTypes(this.returnType); } } displayText = displayText.trim(); const cssStyle = this.parseClassifier(); return { displayText, cssStyle }; } parseMember(input) { let potentialClassifier = ""; if (this.memberType === "method") { const methodRegEx = /([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/; const match2 = methodRegEx.exec(input); if (match2) { const detectedVisibility = match2[1] ? match2[1].trim() : ""; if (visibilityValues.includes(detectedVisibility)) { this.visibility = detectedVisibility; } this.id = match2[2]; this.parameters = match2[3] ? match2[3].trim() : ""; potentialClassifier = match2[4] ? match2[4].trim() : ""; this.returnType = match2[5] ? match2[5].trim() : ""; if (potentialClassifier === "") { const lastChar = this.returnType.substring(this.returnType.length - 1); if (/[$*]/.exec(lastChar)) { potentialClassifier = lastChar; this.returnType = this.returnType.substring(0, this.returnType.length - 1); } } } } else { const length2 = input.length; const firstChar = input.substring(0, 1); const lastChar = input.substring(length2 - 1); if (visibilityValues.includes(firstChar)) { this.visibility = firstChar; } if (/[$*]/.exec(lastChar)) { potentialClassifier = lastChar; } this.id = input.substring( this.visibility === "" ? 0 : 1, potentialClassifier === "" ? length2 : length2 - 1 ); } this.classifier = potentialClassifier; this.id = this.id.startsWith(" ") ? " " + this.id.trim() : this.id.trim(); const combinedText = `${this.visibility ? "\\" + this.visibility : ""}${parseGenericTypes(this.id)}${this.memberType === "method" ? `(${parseGenericTypes(this.parameters)})${this.returnType ? " : " + parseGenericTypes(this.returnType) : ""}` : ""}`; this.text = combinedText.replaceAll("<", "<").replaceAll(">", ">"); if (this.text.startsWith("\\<")) { this.text = this.text.replace("\\<", "~"); } } parseClassifier() { switch (this.classifier) { case "*": return "font-style:italic;"; case "$": return "text-decoration:underline;"; default: return ""; } } }; } }); // src/diagrams/class/classDb.ts var MERMAID_DOM_ID_PREFIX2, classCounter, sanitizeText4, ClassDB; var init_classDb = __esm({ "src/diagrams/class/classDb.ts"() { "use strict"; init_src32(); init_logger(); init_diagramAPI(); init_common(); init_utils2(); init_commonDb(); init_classTypes(); MERMAID_DOM_ID_PREFIX2 = "classId-"; classCounter = 0; sanitizeText4 = /* @__PURE__ */ __name((txt) => common_default.sanitizeText(txt, getConfig2()), "sanitizeText"); ClassDB = class { constructor() { this.relations = []; this.classes = /* @__PURE__ */ new Map(); this.styleClasses = /* @__PURE__ */ new Map(); this.notes = []; this.interfaces = []; // private static classCounter = 0; this.namespaces = /* @__PURE__ */ new Map(); this.namespaceCounter = 0; this.functions = []; this.lineType = { LINE: 0, DOTTED_LINE: 1 }; this.relationType = { AGGREGATION: 0, EXTENSION: 1, COMPOSITION: 2, DEPENDENCY: 3, LOLLIPOP: 4 }; this.setupToolTips = /* @__PURE__ */ __name((element3) => { let tooltipElem = select_default2(".mermaidTooltip"); if ((tooltipElem._groups || tooltipElem)[0][0] === null) { tooltipElem = select_default2("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); } const svg2 = select_default2(element3).select("svg"); const nodes5 = svg2.selectAll("g.node"); nodes5.on("mouseover", (event3) => { const el = select_default2(event3.currentTarget); const title2 = el.attr("title"); if (title2 === null) { return; } const rect3 = this.getBoundingClientRect(); tooltipElem.transition().duration(200).style("opacity", ".9"); tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect3.left + (rect3.right - rect3.left) / 2 + "px").style("top", window.scrollY + rect3.top - 14 + document.body.scrollTop + "px"); tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "
")); el.classed("hover", true); }).on("mouseout", (event3) => { tooltipElem.transition().duration(500).style("opacity", 0); const el = select_default2(event3.currentTarget); el.classed("hover", false); }); }, "setupToolTips"); this.direction = "TB"; this.setAccTitle = setAccTitle; this.getAccTitle = getAccTitle; this.setAccDescription = setAccDescription; this.getAccDescription = getAccDescription; this.setDiagramTitle = setDiagramTitle; this.getDiagramTitle = getDiagramTitle; this.getConfig = /* @__PURE__ */ __name(() => getConfig2().class, "getConfig"); this.functions.push(this.setupToolTips.bind(this)); this.clear(); this.addRelation = this.addRelation.bind(this); this.addClassesToNamespace = this.addClassesToNamespace.bind(this); this.addNamespace = this.addNamespace.bind(this); this.setCssClass = this.setCssClass.bind(this); this.addMembers = this.addMembers.bind(this); this.addClass = this.addClass.bind(this); this.setClassLabel = this.setClassLabel.bind(this); this.addAnnotation = this.addAnnotation.bind(this); this.addMember = this.addMember.bind(this); this.cleanupLabel = this.cleanupLabel.bind(this); this.addNote = this.addNote.bind(this); this.defineClass = this.defineClass.bind(this); this.setDirection = this.setDirection.bind(this); this.setLink = this.setLink.bind(this); this.bindFunctions = this.bindFunctions.bind(this); this.clear = this.clear.bind(this); this.setTooltip = this.setTooltip.bind(this); this.setClickEvent = this.setClickEvent.bind(this); this.setCssStyle = this.setCssStyle.bind(this); } static { __name(this, "ClassDB"); } splitClassNameAndType(_id) { const id30 = common_default.sanitizeText(_id, getConfig2()); let genericType = ""; let className = id30; if (id30.indexOf("~") > 0) { const split = id30.split("~"); className = sanitizeText4(split[0]); genericType = sanitizeText4(split[1]); } return { className, type: genericType }; } setClassLabel(_id, label) { const id30 = common_default.sanitizeText(_id, getConfig2()); if (label) { label = sanitizeText4(label); } const { className } = this.splitClassNameAndType(id30); this.classes.get(className).label = label; this.classes.get(className).text = `${label}${this.classes.get(className).type ? `<${this.classes.get(className).type}>` : ""}`; } /** * Function called by parser when a node definition has been found. * * @param id - ID of the class to add * @public */ addClass(_id) { const id30 = common_default.sanitizeText(_id, getConfig2()); const { className, type: type3 } = this.splitClassNameAndType(id30); if (this.classes.has(className)) { return; } const name = common_default.sanitizeText(className, getConfig2()); this.classes.set(name, { id: name, type: type3, label: name, text: `${name}${type3 ? `<${type3}>` : ""}`, shape: "classBox", cssClasses: "default", methods: [], members: [], annotations: [], styles: [], domId: MERMAID_DOM_ID_PREFIX2 + name + "-" + classCounter }); classCounter++; } addInterface(label, classId) { const classInterface = { id: `interface${this.interfaces.length}`, label, classId }; this.interfaces.push(classInterface); } /** * Function to lookup domId from id in the graph definition. * * @param id - class ID to lookup * @public */ lookUpDomId(_id) { const id30 = common_default.sanitizeText(_id, getConfig2()); if (this.classes.has(id30)) { return this.classes.get(id30).domId; } throw new Error("Class not found: " + id30); } clear() { this.relations = []; this.classes = /* @__PURE__ */ new Map(); this.notes = []; this.interfaces = []; this.functions = []; this.functions.push(this.setupToolTips.bind(this)); this.namespaces = /* @__PURE__ */ new Map(); this.namespaceCounter = 0; this.direction = "TB"; clear(); } getClass(id30) { return this.classes.get(id30); } getClasses() { return this.classes; } getRelations() { return this.relations; } getNotes() { return this.notes; } addRelation(classRelation) { log.debug("Adding relation: " + JSON.stringify(classRelation)); const invalidTypes = [ this.relationType.LOLLIPOP, this.relationType.AGGREGATION, this.relationType.COMPOSITION, this.relationType.DEPENDENCY, this.relationType.EXTENSION ]; if (classRelation.relation.type1 === this.relationType.LOLLIPOP && !invalidTypes.includes(classRelation.relation.type2)) { this.addClass(classRelation.id2); this.addInterface(classRelation.id1, classRelation.id2); classRelation.id1 = `interface${this.interfaces.length - 1}`; } else if (classRelation.relation.type2 === this.relationType.LOLLIPOP && !invalidTypes.includes(classRelation.relation.type1)) { this.addClass(classRelation.id1); this.addInterface(classRelation.id2, classRelation.id1); classRelation.id2 = `interface${this.interfaces.length - 1}`; } else { this.addClass(classRelation.id1); this.addClass(classRelation.id2); } classRelation.id1 = this.splitClassNameAndType(classRelation.id1).className; classRelation.id2 = this.splitClassNameAndType(classRelation.id2).className; classRelation.relationTitle1 = common_default.sanitizeText( classRelation.relationTitle1.trim(), getConfig2() ); classRelation.relationTitle2 = common_default.sanitizeText( classRelation.relationTitle2.trim(), getConfig2() ); this.relations.push(classRelation); } /** * Adds an annotation to the specified class Annotations mark special properties of the given type * (like 'interface' or 'service') * * @param className - The class name * @param annotation - The name of the annotation without any brackets * @public */ addAnnotation(className, annotation) { const validatedClassName = this.splitClassNameAndType(className).className; this.classes.get(validatedClassName).annotations.push(annotation); } /** * Adds a member to the specified class * * @param className - The class name * @param member - The full name of the member. If the member is enclosed in `<>` it is * treated as an annotation If the member is ending with a closing bracket ) it is treated as a * method Otherwise the member will be treated as a normal property * @public */ addMember(className, member) { this.addClass(className); const validatedClassName = this.splitClassNameAndType(className).className; const theClass = this.classes.get(validatedClassName); if (typeof member === "string") { const memberString = member.trim(); if (memberString.startsWith("<<") && memberString.endsWith(">>")) { theClass.annotations.push(sanitizeText4(memberString.substring(2, memberString.length - 2))); } else if (memberString.indexOf(")") > 0) { theClass.methods.push(new ClassMember(memberString, "method")); } else if (memberString) { theClass.members.push(new ClassMember(memberString, "attribute")); } } } addMembers(className, members) { if (Array.isArray(members)) { members.reverse(); members.forEach((member) => this.addMember(className, member)); } } addNote(text4, className) { const note3 = { id: `note${this.notes.length}`, class: className, text: text4 }; this.notes.push(note3); } cleanupLabel(label) { if (label.startsWith(":")) { label = label.substring(1); } return sanitizeText4(label.trim()); } /** * Called by parser when assigning cssClass to a class * * @param ids - Comma separated list of ids * @param className - Class to add */ setCssClass(ids, className) { ids.split(",").forEach((_id) => { let id30 = _id; if (/\d/.exec(_id[0])) { id30 = MERMAID_DOM_ID_PREFIX2 + id30; } const classNode = this.classes.get(id30); if (classNode) { classNode.cssClasses += " " + className; } }); } defineClass(ids, style3) { for (const id30 of ids) { let styleClass = this.styleClasses.get(id30); if (styleClass === void 0) { styleClass = { id: id30, styles: [], textStyles: [] }; this.styleClasses.set(id30, styleClass); } if (style3) { style3.forEach((s2) => { if (/color/.exec(s2)) { const newStyle = s2.replace("fill", "bgFill"); styleClass.textStyles.push(newStyle); } styleClass.styles.push(s2); }); } this.classes.forEach((value2) => { if (value2.cssClasses.includes(id30)) { value2.styles.push(...style3.flatMap((s2) => s2.split(","))); } }); } } /** * Called by parser when a tooltip is found, e.g. a clickable element. * * @param ids - Comma separated list of ids * @param tooltip - Tooltip to add */ setTooltip(ids, tooltip) { ids.split(",").forEach((id30) => { if (tooltip !== void 0) { this.classes.get(id30).tooltip = sanitizeText4(tooltip); } }); } getTooltip(id30, namespace) { if (namespace && this.namespaces.has(namespace)) { return this.namespaces.get(namespace).classes.get(id30).tooltip; } return this.classes.get(id30).tooltip; } /** * Called by parser when a link is found. Adds the URL to the vertex data. * * @param ids - Comma separated list of ids * @param linkStr - URL to create a link for * @param target - Target of the link, _blank by default as originally defined in the svgDraw.js file */ setLink(ids, linkStr, target) { const config5 = getConfig2(); ids.split(",").forEach((_id) => { let id30 = _id; if (/\d/.exec(_id[0])) { id30 = MERMAID_DOM_ID_PREFIX2 + id30; } const theClass = this.classes.get(id30); if (theClass) { theClass.link = utils_default2.formatUrl(linkStr, config5); if (config5.securityLevel === "sandbox") { theClass.linkTarget = "_top"; } else if (typeof target === "string") { theClass.linkTarget = sanitizeText4(target); } else { theClass.linkTarget = "_blank"; } } }); this.setCssClass(ids, "clickable"); } /** * Called by parser when a click definition is found. Registers an event handler. * * @param ids - Comma separated list of ids * @param functionName - Function to be called on click * @param functionArgs - Function args the function should be called with */ setClickEvent(ids, functionName, functionArgs) { ids.split(",").forEach((id30) => { this.setClickFunc(id30, functionName, functionArgs); this.classes.get(id30).haveCallback = true; }); this.setCssClass(ids, "clickable"); } setClickFunc(_domId, functionName, functionArgs) { const domId = common_default.sanitizeText(_domId, getConfig2()); const config5 = getConfig2(); if (config5.securityLevel !== "loose") { return; } if (functionName === void 0) { return; } const id30 = domId; if (this.classes.has(id30)) { const elemId = this.lookUpDomId(id30); let argList = []; if (typeof functionArgs === "string") { argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); for (let i2 = 0; i2 < argList.length; i2++) { let item = argList[i2].trim(); if (item.startsWith('"') && item.endsWith('"')) { item = item.substr(1, item.length - 2); } argList[i2] = item; } } if (argList.length === 0) { argList.push(elemId); } this.functions.push(() => { const elem = document.querySelector(`[id="${elemId}"]`); if (elem !== null) { elem.addEventListener( "click", () => { utils_default2.runFunc(functionName, ...argList); }, false ); } }); } } bindFunctions(element3) { this.functions.forEach((fun) => { fun(element3); }); } getDirection() { return this.direction; } setDirection(dir2) { this.direction = dir2; } /** * Function called by parser when a namespace definition has been found. * * @param id - ID of the namespace to add * @public */ addNamespace(id30) { if (this.namespaces.has(id30)) { return; } this.namespaces.set(id30, { id: id30, classes: /* @__PURE__ */ new Map(), children: {}, domId: MERMAID_DOM_ID_PREFIX2 + id30 + "-" + this.namespaceCounter }); this.namespaceCounter++; } getNamespace(name) { return this.namespaces.get(name); } getNamespaces() { return this.namespaces; } /** * Function called by parser when a namespace definition has been found. * * @param id - ID of the namespace to add * @param classNames - IDs of the class to add * @public */ addClassesToNamespace(id30, classNames) { if (!this.namespaces.has(id30)) { return; } for (const name of classNames) { const { className } = this.splitClassNameAndType(name); this.classes.get(className).parent = id30; this.namespaces.get(id30).classes.set(className, this.classes.get(className)); } } setCssStyle(id30, styles4) { const thisClass = this.classes.get(id30); if (!styles4 || !thisClass) { return; } for (const s2 of styles4) { if (s2.includes(",")) { thisClass.styles.push(...s2.split(",")); } else { thisClass.styles.push(s2); } } } /** * Gets the arrow marker for a type index * * @param type - The type to look for * @returns The arrow marker */ getArrowMarker(type3) { let marker; switch (type3) { case 0: marker = "aggregation"; break; case 1: marker = "extension"; break; case 2: marker = "composition"; break; case 3: marker = "dependency"; break; case 4: marker = "lollipop"; break; default: marker = "none"; } return marker; } getData() { const nodes5 = []; const edges3 = []; const config5 = getConfig2(); for (const namespaceKey of this.namespaces.keys()) { const namespace = this.namespaces.get(namespaceKey); if (namespace) { const node2 = { id: namespace.id, label: namespace.id, isGroup: true, padding: config5.class.padding ?? 16, // parent node must be one of [rect, roundedWithTitle, noteGroup, divider] shape: "rect", cssStyles: ["fill: none", "stroke: black"], look: config5.look }; nodes5.push(node2); } } for (const classKey of this.classes.keys()) { const classNode = this.classes.get(classKey); if (classNode) { const node2 = classNode; node2.parentId = classNode.parent; node2.look = config5.look; nodes5.push(node2); } } let cnt4 = 0; for (const note3 of this.notes) { cnt4++; const noteNode = { id: note3.id, label: note3.text, isGroup: false, shape: "note", padding: config5.class.padding ?? 6, cssStyles: [ "text-align: left", "white-space: nowrap", `fill: ${config5.themeVariables.noteBkgColor}`, `stroke: ${config5.themeVariables.noteBorderColor}` ], look: config5.look }; nodes5.push(noteNode); const noteClassId = this.classes.get(note3.class)?.id ?? ""; if (noteClassId) { const edge = { id: `edgeNote${cnt4}`, start: note3.id, end: noteClassId, type: "normal", thickness: "normal", classes: "relation", arrowTypeStart: "none", arrowTypeEnd: "none", arrowheadStyle: "", labelStyle: [""], style: ["fill: none"], pattern: "dotted", look: config5.look }; edges3.push(edge); } } for (const _interface of this.interfaces) { const interfaceNode = { id: _interface.id, label: _interface.label, isGroup: false, shape: "rect", cssStyles: ["opacity: 0;"], look: config5.look }; nodes5.push(interfaceNode); } cnt4 = 0; for (const classRelation of this.relations) { cnt4++; const edge = { id: getEdgeId(classRelation.id1, classRelation.id2, { prefix: "id", counter: cnt4 }), start: classRelation.id1, end: classRelation.id2, type: "normal", label: classRelation.title, labelpos: "c", thickness: "normal", classes: "relation", arrowTypeStart: this.getArrowMarker(classRelation.relation.type1), arrowTypeEnd: this.getArrowMarker(classRelation.relation.type2), startLabelRight: classRelation.relationTitle1 === "none" ? "" : classRelation.relationTitle1, endLabelLeft: classRelation.relationTitle2 === "none" ? "" : classRelation.relationTitle2, arrowheadStyle: "", labelStyle: ["display: inline-block"], style: classRelation.style || "", pattern: classRelation.relation.lineType == 1 ? "dashed" : "solid", look: config5.look }; edges3.push(edge); } return { nodes: nodes5, edges: edges3, other: {}, config: config5, direction: this.getDirection() }; } }; } }); // src/diagrams/class/styles.js var getStyles10, styles_default9; var init_styles9 = __esm({ "src/diagrams/class/styles.js"() { "use strict"; init_globalStyles(); getStyles10 = /* @__PURE__ */ __name((options2) => `g.classGroup text { fill: ${options2.nodeBorder || options2.classText}; stroke: none; font-family: ${options2.fontFamily}; font-size: 10px; .title { font-weight: bolder; } } .nodeLabel, .edgeLabel { color: ${options2.classText}; } .edgeLabel .label rect { fill: ${options2.mainBkg}; } .label text { fill: ${options2.classText}; } .labelBkg { background: ${options2.mainBkg}; } .edgeLabel .label span { background: ${options2.mainBkg}; } .classTitle { font-weight: bolder; } .node rect, .node circle, .node ellipse, .node polygon, .node path { fill: ${options2.mainBkg}; stroke: ${options2.nodeBorder}; stroke-width: 1px; } .divider { stroke: ${options2.nodeBorder}; stroke-width: 1; } g.clickable { cursor: pointer; } g.classGroup rect { fill: ${options2.mainBkg}; stroke: ${options2.nodeBorder}; } g.classGroup line { stroke: ${options2.nodeBorder}; stroke-width: 1; } .classLabel .box { stroke: none; stroke-width: 0; fill: ${options2.mainBkg}; opacity: 0.5; } .classLabel .label { fill: ${options2.nodeBorder}; font-size: 10px; } .relation { stroke: ${options2.lineColor}; stroke-width: 1; fill: none; } .dashed-line{ stroke-dasharray: 3; } .dotted-line{ stroke-dasharray: 1 2; } #compositionStart, .composition { fill: ${options2.lineColor} !important; stroke: ${options2.lineColor} !important; stroke-width: 1; } #compositionEnd, .composition { fill: ${options2.lineColor} !important; stroke: ${options2.lineColor} !important; stroke-width: 1; } #dependencyStart, .dependency { fill: ${options2.lineColor} !important; stroke: ${options2.lineColor} !important; stroke-width: 1; } #dependencyStart, .dependency { fill: ${options2.lineColor} !important; stroke: ${options2.lineColor} !important; stroke-width: 1; } #extensionStart, .extension { fill: transparent !important; stroke: ${options2.lineColor} !important; stroke-width: 1; } #extensionEnd, .extension { fill: transparent !important; stroke: ${options2.lineColor} !important; stroke-width: 1; } #aggregationStart, .aggregation { fill: transparent !important; stroke: ${options2.lineColor} !important; stroke-width: 1; } #aggregationEnd, .aggregation { fill: transparent !important; stroke: ${options2.lineColor} !important; stroke-width: 1; } #lollipopStart, .lollipop { fill: ${options2.mainBkg} !important; stroke: ${options2.lineColor} !important; stroke-width: 1; } #lollipopEnd, .lollipop { fill: ${options2.mainBkg} !important; stroke: ${options2.lineColor} !important; stroke-width: 1; } .edgeTerminals { font-size: 11px; line-height: initial; } .classTitleText { text-anchor: middle; font-size: 18px; fill: ${options2.textColor}; } ${getIconStyles()} `, "getStyles"); styles_default9 = getStyles10; } }); // src/diagrams/class/classRenderer-v3-unified.ts var getDir, getClasses2, draw12, classRenderer_v3_unified_default; var init_classRenderer_v3_unified = __esm({ "src/diagrams/class/classRenderer-v3-unified.ts"() { "use strict"; init_diagramAPI(); init_logger(); init_insertElementsForSize(); init_render2(); init_setupViewPortForSVG(); init_utils2(); getDir = /* @__PURE__ */ __name((parsedItem, defaultDir = "TB") => { if (!parsedItem.doc) { return defaultDir; } let dir2 = defaultDir; for (const parsedItemDoc of parsedItem.doc) { if (parsedItemDoc.stmt === "dir") { dir2 = parsedItemDoc.value; } } return dir2; }, "getDir"); getClasses2 = /* @__PURE__ */ __name(function(text4, diagramObj) { return diagramObj.db.getClasses(); }, "getClasses"); draw12 = /* @__PURE__ */ __name(async function(text4, id30, _version, diag) { log.info("REF0:"); log.info("Drawing class diagram (v3)", id30); const { securityLevel, state: conf5, layout: layout6 } = getConfig2(); const data4Layout = diag.db.getData(); const svg2 = getDiagramElement(id30, securityLevel); data4Layout.type = diag.type; data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout6); data4Layout.nodeSpacing = conf5?.nodeSpacing || 50; data4Layout.rankSpacing = conf5?.rankSpacing || 50; data4Layout.markers = ["aggregation", "extension", "composition", "dependency", "lollipop"]; data4Layout.diagramId = id30; await render6(data4Layout, svg2); const padding2 = 8; utils_default2.insertTitle( svg2, "classDiagramTitleText", conf5?.titleTopMargin ?? 25, diag.db.getDiagramTitle() ); setupViewPortForSVG(svg2, padding2, "classDiagram", conf5?.useMaxWidth ?? true); }, "draw"); classRenderer_v3_unified_default = { getClasses: getClasses2, draw: draw12, getDir }; } }); // src/diagrams/class/classDiagram.ts var classDiagram_exports = {}; __export(classDiagram_exports, { diagram: () => diagram12 }); var diagram12; var init_classDiagram2 = __esm({ "src/diagrams/class/classDiagram.ts"() { "use strict"; init_classDiagram(); init_classDb(); init_styles9(); init_classRenderer_v3_unified(); diagram12 = { parser: classDiagram_default, get db() { return new ClassDB(); }, renderer: classRenderer_v3_unified_default, styles: styles_default9, init: /* @__PURE__ */ __name((cnf) => { if (!cnf.class) { cnf.class = {}; } cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; }, "init") }; } }); // src/diagrams/class/classDiagram-v2.ts var classDiagram_v2_exports = {}; __export(classDiagram_v2_exports, { diagram: () => diagram13 }); var diagram13; var init_classDiagram_v2 = __esm({ "src/diagrams/class/classDiagram-v2.ts"() { "use strict"; init_classDiagram(); init_classDb(); init_styles9(); init_classRenderer_v3_unified(); diagram13 = { parser: classDiagram_default, get db() { return new ClassDB(); }, renderer: classRenderer_v3_unified_default, styles: styles_default9, init: /* @__PURE__ */ __name((cnf) => { if (!cnf.class) { cnf.class = {}; } cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; }, "init") }; } }); // src/diagrams/state/parser/stateDiagram.jison var parser13, stateDiagram_default; var init_stateDiagram = __esm({ "src/diagrams/state/parser/stateDiagram.jison"() { "use strict"; parser13 = (function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) { for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ; return o3; }, "o"), $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 4], $V3 = [2, 4], $V4 = [1, 9], $V5 = [1, 11], $V6 = [1, 16], $V7 = [1, 17], $V8 = [1, 18], $V9 = [1, 19], $Va = [1, 33], $Vb = [1, 20], $Vc = [1, 21], $Vd = [1, 22], $Ve = [1, 23], $Vf = [1, 24], $Vg = [1, 26], $Vh = [1, 27], $Vi = [1, 28], $Vj = [1, 29], $Vk = [1, 30], $Vl = [1, 31], $Vm = [1, 32], $Vn = [1, 35], $Vo = [1, 36], $Vp = [1, 37], $Vq = [1, 38], $Vr = [1, 34], $Vs = [1, 4, 5, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 41, 45, 48, 51, 52, 53, 54, 57], $Vt = [1, 4, 5, 14, 15, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 39, 40, 41, 45, 48, 51, 52, 53, 54, 57], $Vu = [4, 5, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 41, 45, 48, 51, 52, 53, 54, 57]; var parser24 = { trace: /* @__PURE__ */ __name(function trace() { }, "trace"), yy: {}, symbols_: { "error": 2, "start": 3, "SPACE": 4, "NL": 5, "SD": 6, "document": 7, "line": 8, "statement": 9, "classDefStatement": 10, "styleStatement": 11, "cssClassStatement": 12, "idStatement": 13, "DESCR": 14, "-->": 15, "HIDE_EMPTY": 16, "scale": 17, "WIDTH": 18, "COMPOSIT_STATE": 19, "STRUCT_START": 20, "STRUCT_STOP": 21, "STATE_DESCR": 22, "AS": 23, "ID": 24, "FORK": 25, "JOIN": 26, "CHOICE": 27, "CONCURRENT": 28, "note": 29, "notePosition": 30, "NOTE_TEXT": 31, "direction": 32, "acc_title": 33, "acc_title_value": 34, "acc_descr": 35, "acc_descr_value": 36, "acc_descr_multiline_value": 37, "CLICK": 38, "STRING": 39, "HREF": 40, "classDef": 41, "CLASSDEF_ID": 42, "CLASSDEF_STYLEOPTS": 43, "DEFAULT": 44, "style": 45, "STYLE_IDS": 46, "STYLEDEF_STYLEOPTS": 47, "class": 48, "CLASSENTITY_IDS": 49, "STYLECLASS": 50, "direction_tb": 51, "direction_bt": 52, "direction_rl": 53, "direction_lr": 54, "eol": 55, ";": 56, "EDGE_STATE": 57, "STYLE_SEPARATOR": 58, "left_of": 59, "right_of": 60, "$accept": 0, "$end": 1 }, terminals_: { 2: "error", 4: "SPACE", 5: "NL", 6: "SD", 14: "DESCR", 15: "-->", 16: "HIDE_EMPTY", 17: "scale", 18: "WIDTH", 19: "COMPOSIT_STATE", 20: "STRUCT_START", 21: "STRUCT_STOP", 22: "STATE_DESCR", 23: "AS", 24: "ID", 25: "FORK", 26: "JOIN", 27: "CHOICE", 28: "CONCURRENT", 29: "note", 31: "NOTE_TEXT", 33: "acc_title", 34: "acc_title_value", 35: "acc_descr", 36: "acc_descr_value", 37: "acc_descr_multiline_value", 38: "CLICK", 39: "STRING", 40: "HREF", 41: "classDef", 42: "CLASSDEF_ID", 43: "CLASSDEF_STYLEOPTS", 44: "DEFAULT", 45: "style", 46: "STYLE_IDS", 47: "STYLEDEF_STYLEOPTS", 48: "class", 49: "CLASSENTITY_IDS", 50: "STYLECLASS", 51: "direction_tb", 52: "direction_bt", 53: "direction_rl", 54: "direction_lr", 56: ";", 57: "EDGE_STATE", 58: "STYLE_SEPARATOR", 59: "left_of", 60: "right_of" }, productions_: [0, [3, 2], [3, 2], [3, 2], [7, 0], [7, 2], [8, 2], [8, 1], [8, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 2], [9, 3], [9, 4], [9, 1], [9, 2], [9, 1], [9, 4], [9, 3], [9, 6], [9, 1], [9, 1], [9, 1], [9, 1], [9, 4], [9, 4], [9, 1], [9, 2], [9, 2], [9, 1], [9, 5], [9, 5], [10, 3], [10, 3], [11, 3], [12, 3], [32, 1], [32, 1], [32, 1], [32, 1], [55, 1], [55, 1], [13, 1], [13, 1], [13, 3], [13, 3], [30, 1], [30, 1]], performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { var $0 = $$.length - 1; switch (yystate) { case 3: yy.setRootDoc($$[$0]); return $$[$0]; break; case 4: this.$ = []; break; case 5: if ($$[$0] != "nl") { $$[$0 - 1].push($$[$0]); this.$ = $$[$0 - 1]; } break; case 6: case 7: this.$ = $$[$0]; break; case 8: this.$ = "nl"; break; case 12: this.$ = $$[$0]; break; case 13: const stateStmt = $$[$0 - 1]; stateStmt.description = yy.trimColon($$[$0]); this.$ = stateStmt; break; case 14: this.$ = { stmt: "relation", state1: $$[$0 - 2], state2: $$[$0] }; break; case 15: const relDescription = yy.trimColon($$[$0]); this.$ = { stmt: "relation", state1: $$[$0 - 3], state2: $$[$0 - 1], description: relDescription }; break; case 19: this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: "", doc: $$[$0 - 1] }; break; case 20: var id30 = $$[$0]; var description = $$[$0 - 2].trim(); if ($$[$0].match(":")) { var parts = $$[$0].split(":"); id30 = parts[0]; description = [description, parts[1]]; } this.$ = { stmt: "state", id: id30, type: "default", description }; break; case 21: this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: $$[$0 - 5], doc: $$[$0 - 1] }; break; case 22: this.$ = { stmt: "state", id: $$[$0], type: "fork" }; break; case 23: this.$ = { stmt: "state", id: $$[$0], type: "join" }; break; case 24: this.$ = { stmt: "state", id: $$[$0], type: "choice" }; break; case 25: this.$ = { stmt: "state", id: yy.getDividerId(), type: "divider" }; break; case 26: this.$ = { stmt: "state", id: $$[$0 - 1].trim(), note: { position: $$[$0 - 2].trim(), text: $$[$0].trim() } }; break; case 29: this.$ = $$[$0].trim(); yy.setAccTitle(this.$); break; case 30: case 31: this.$ = $$[$0].trim(); yy.setAccDescription(this.$); break; case 32: this.$ = { stmt: "click", id: $$[$0 - 3], url: $$[$0 - 2], tooltip: $$[$0 - 1] }; break; case 33: this.$ = { stmt: "click", id: $$[$0 - 3], url: $$[$0 - 1], tooltip: "" }; break; case 34: case 35: this.$ = { stmt: "classDef", id: $$[$0 - 1].trim(), classes: $$[$0].trim() }; break; case 36: this.$ = { stmt: "style", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() }; break; case 37: this.$ = { stmt: "applyClass", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() }; break; case 38: yy.setDirection("TB"); this.$ = { stmt: "dir", value: "TB" }; break; case 39: yy.setDirection("BT"); this.$ = { stmt: "dir", value: "BT" }; break; case 40: yy.setDirection("RL"); this.$ = { stmt: "dir", value: "RL" }; break; case 41: yy.setDirection("LR"); this.$ = { stmt: "dir", value: "LR" }; break; case 44: case 45: this.$ = { stmt: "state", id: $$[$0].trim(), type: "default", description: "" }; break; case 46: this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" }; break; case 47: this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" }; break; } }, "anonymous"), table: [{ 3: 1, 4: $V0, 5: $V1, 6: $V2 }, { 1: [3] }, { 3: 5, 4: $V0, 5: $V1, 6: $V2 }, { 3: 6, 4: $V0, 5: $V1, 6: $V2 }, o2([1, 4, 5, 16, 17, 19, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 41, 45, 48, 51, 52, 53, 54, 57], $V3, { 7: 7 }), { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3], 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 13: 15, 16: $V6, 17: $V7, 19: $V8, 22: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: $Vd, 28: $Ve, 29: $Vf, 32: 25, 33: $Vg, 35: $Vh, 37: $Vi, 38: $Vj, 41: $Vk, 45: $Vl, 48: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 54: $Vq, 57: $Vr }, o2($Vs, [2, 5]), { 9: 39, 10: 12, 11: 13, 12: 14, 13: 15, 16: $V6, 17: $V7, 19: $V8, 22: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: $Vd, 28: $Ve, 29: $Vf, 32: 25, 33: $Vg, 35: $Vh, 37: $Vi, 38: $Vj, 41: $Vk, 45: $Vl, 48: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 54: $Vq, 57: $Vr }, o2($Vs, [2, 7]), o2($Vs, [2, 8]), o2($Vs, [2, 9]), o2($Vs, [2, 10]), o2($Vs, [2, 11]), o2($Vs, [2, 12], { 14: [1, 40], 15: [1, 41] }), o2($Vs, [2, 16]), { 18: [1, 42] }, o2($Vs, [2, 18], { 20: [1, 43] }), { 23: [1, 44] }, o2($Vs, [2, 22]), o2($Vs, [2, 23]), o2($Vs, [2, 24]), o2($Vs, [2, 25]), { 30: 45, 31: [1, 46], 59: [1, 47], 60: [1, 48] }, o2($Vs, [2, 28]), { 34: [1, 49] }, { 36: [1, 50] }, o2($Vs, [2, 31]), { 13: 51, 24: $Va, 57: $Vr }, { 42: [1, 52], 44: [1, 53] }, { 46: [1, 54] }, { 49: [1, 55] }, o2($Vt, [2, 44], { 58: [1, 56] }), o2($Vt, [2, 45], { 58: [1, 57] }), o2($Vs, [2, 38]), o2($Vs, [2, 39]), o2($Vs, [2, 40]), o2($Vs, [2, 41]), o2($Vs, [2, 6]), o2($Vs, [2, 13]), { 13: 58, 24: $Va, 57: $Vr }, o2($Vs, [2, 17]), o2($Vu, $V3, { 7: 59 }), { 24: [1, 60] }, { 24: [1, 61] }, { 23: [1, 62] }, { 24: [2, 48] }, { 24: [2, 49] }, o2($Vs, [2, 29]), o2($Vs, [2, 30]), { 39: [1, 63], 40: [1, 64] }, { 43: [1, 65] }, { 43: [1, 66] }, { 47: [1, 67] }, { 50: [1, 68] }, { 24: [1, 69] }, { 24: [1, 70] }, o2($Vs, [2, 14], { 14: [1, 71] }), { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 13: 15, 16: $V6, 17: $V7, 19: $V8, 21: [1, 72], 22: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: $Vd, 28: $Ve, 29: $Vf, 32: 25, 33: $Vg, 35: $Vh, 37: $Vi, 38: $Vj, 41: $Vk, 45: $Vl, 48: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 54: $Vq, 57: $Vr }, o2($Vs, [2, 20], { 20: [1, 73] }), { 31: [1, 74] }, { 24: [1, 75] }, { 39: [1, 76] }, { 39: [1, 77] }, o2($Vs, [2, 34]), o2($Vs, [2, 35]), o2($Vs, [2, 36]), o2($Vs, [2, 37]), o2($Vt, [2, 46]), o2($Vt, [2, 47]), o2($Vs, [2, 15]), o2($Vs, [2, 19]), o2($Vu, $V3, { 7: 78 }), o2($Vs, [2, 26]), o2($Vs, [2, 27]), { 5: [1, 79] }, { 5: [1, 80] }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 13: 15, 16: $V6, 17: $V7, 19: $V8, 21: [1, 81], 22: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: $Vd, 28: $Ve, 29: $Vf, 32: 25, 33: $Vg, 35: $Vh, 37: $Vi, 38: $Vj, 41: $Vk, 45: $Vl, 48: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 54: $Vq, 57: $Vr }, o2($Vs, [2, 32]), o2($Vs, [2, 33]), o2($Vs, [2, 21])], defaultActions: { 5: [2, 1], 6: [2, 2], 47: [2, 48], 48: [2, 49] }, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (hash.recoverable) { this.trace(str2); } else { var error3 = new Error(str2); error3.hash = hash; throw error3; } }, "parseError"), parse: /* @__PURE__ */ __name(function parse7(input) { var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1; var args = lstack.slice.call(arguments, 1); var lexer2 = Object.create(this.lexer); var sharedState = { yy: {} }; for (var k2 in this.yy) { if (Object.prototype.hasOwnProperty.call(this.yy, k2)) { sharedState.yy[k2] = this.yy[k2]; } } lexer2.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer2; sharedState.yy.parser = this; if (typeof lexer2.yylloc == "undefined") { lexer2.yylloc = {}; } var yyloc = lexer2.yylloc; lstack.push(yyloc); var ranges = lexer2.options && lexer2.options.ranges; if (typeof sharedState.yy.parseError === "function") { this.parseError = sharedState.yy.parseError; } else { this.parseError = Object.getPrototypeOf(this).parseError; } function popStack(n2) { stack.length = stack.length - 2 * n2; vstack.length = vstack.length - n2; lstack.length = lstack.length - n2; } __name(popStack, "popStack"); function lex() { var token2; token2 = tstack.pop() || lexer2.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex, "lex"); var symbol, preErrorSymbol, state3, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state3 = stack[stack.length - 1]; if (this.defaultActions[state3]) { action = this.defaultActions[state3]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex(); } action = table[state3] && table[state3][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state3]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer2.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; } else { errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); } this.parseError(errStr, { text: lexer2.match, token: this.terminals_[symbol] || symbol, line: lexer2.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state3 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer2.yytext); lstack.push(lexer2.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer2.yyleng; yytext = lexer2.yytext; yylineno = lexer2.yylineno; yyloc = lexer2.yylloc; if (recovering > 0) { recovering--; } } else { symbol = preErrorSymbol; preErrorSymbol = null; } break; case 2: len = this.productions_[action[1]][1]; yyval.$ = vstack[vstack.length - len]; yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; if (ranges) { yyval._$.range = [ lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1] ]; } r2 = this.performAction.apply(yyval, [ yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack ].concat(args)); if (typeof r2 !== "undefined") { return r2; } if (len) { stack = stack.slice(0, -1 * len * 2); vstack = vstack.slice(0, -1 * len); lstack = lstack.slice(0, -1 * len); } stack.push(this.productions_[action[1]][0]); vstack.push(yyval.$); lstack.push(yyval._$); newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]]; stack.push(newState2); break; case 3: return true; } } return true; }, "parse") }; var lexer = /* @__PURE__ */ (function() { var lexer2 = { EOF: 1, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (this.yy.parser) { this.yy.parser.parseError(str2, hash); } else { throw new Error(str2); } }, "parseError"), // resets the lexer, sets new input setInput: /* @__PURE__ */ __name(function(input, yy) { this.yy = yy || this.yy || {}; this._input = input; this._more = this._backtrack = this.done = false; 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 }; if (this.options.ranges) { this.yylloc.range = [0, 0]; } this.offset = 0; return this; }, "setInput"), // consumes and returns one char from the input input: /* @__PURE__ */ __name(function() { var ch = this._input[0]; this.yytext += ch; this.yyleng++; this.offset++; this.match += ch; this.matched += ch; var lines = ch.match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno++; this.yylloc.last_line++; } else { this.yylloc.last_column++; } if (this.options.ranges) { this.yylloc.range[1]++; } this._input = this._input.slice(1); return ch; }, "input"), // unshifts one char (or a string) into the input unput: /* @__PURE__ */ __name(function(ch) { var len = ch.length; var lines = ch.split(/(?:\r\n?|\n)/g); this._input = ch + this._input; this.yytext = this.yytext.substr(0, this.yytext.length - len); this.offset -= len; var oldLines = 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); if (lines.length - 1) { this.yylineno -= lines.length - 1; } var r2 = this.yylloc.range; this.yylloc = { first_line: this.yylloc.first_line, last_line: this.yylineno + 1, first_column: this.yylloc.first_column, last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len }; if (this.options.ranges) { this.yylloc.range = [r2[0], r2[0] + this.yyleng - len]; } this.yyleng = this.yytext.length; return this; }, "unput"), // When called from action, caches matched text and appends it on next action more: /* @__PURE__ */ __name(function() { this._more = true; return this; }, "more"), // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. reject: /* @__PURE__ */ __name(function() { if (this.options.backtrack_lexer) { this._backtrack = true; } 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"), // retain first n characters of the match less: /* @__PURE__ */ __name(function(n2) { this.unput(this.match.slice(n2)); }, "less"), // displays already matched input, i.e. for error messages pastInput: /* @__PURE__ */ __name(function() { var past = this.matched.substr(0, this.matched.length - this.match.length); return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); }, "pastInput"), // displays upcoming input, i.e. for error messages upcomingInput: /* @__PURE__ */ __name(function() { var next3 = this.match; if (next3.length < 20) { next3 += this._input.substr(0, 20 - next3.length); } return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, ""); }, "upcomingInput"), // displays the character position where the lexing error occurred, i.e. for error messages showPosition: /* @__PURE__ */ __name(function() { var pre = this.pastInput(); var c3 = new Array(pre.length + 1).join("-"); return pre + this.upcomingInput() + "\n" + c3 + "^"; }, "showPosition"), // test the lexed token: return FALSE when not a match, otherwise return token test_match: /* @__PURE__ */ __name(function(match2, indexed_rule) { var token2, lines, backup; if (this.options.backtrack_lexer) { backup = { 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 }; if (this.options.ranges) { backup.yylloc.range = this.yylloc.range.slice(0); } } lines = match2[0].match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno += lines.length; } this.yylloc = { first_line: this.yylloc.last_line, last_line: this.yylineno + 1, first_column: this.yylloc.last_column, last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; this.yyleng = this.yytext.length; if (this.options.ranges) { this.yylloc.range = [this.offset, this.offset += this.yyleng]; } this._more = false; this._backtrack = false; this._input = this._input.slice(match2[0].length); this.matched += match2[0]; token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); if (this.done && this._input) { this.done = false; } if (token2) { return token2; } else if (this._backtrack) { for (var k2 in backup) { this[k2] = backup[k2]; } return false; } return false; }, "test_match"), // return next match in input next: /* @__PURE__ */ __name(function() { if (this.done) { return this.EOF; } if (!this._input) { this.done = true; } var token2, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[index]); if (token2 !== false) { return token2; } return false; } if (this._input === "") { return this.EOF; } else { return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { text: "", token: null, line: this.yylineno }); } }, "next"), // return next match that has a token lex: /* @__PURE__ */ __name(function lex() { var r2 = this.next(); if (r2) { return r2; } else { return this.lex(); } }, "lex"), // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) begin: /* @__PURE__ */ __name(function begin(condition) { this.conditionStack.push(condition); }, "begin"), // pop the previously active lexer condition state off the condition stack popState: /* @__PURE__ */ __name(function popState() { var n2 = this.conditionStack.length - 1; if (n2 > 0) { return this.conditionStack.pop(); } else { return this.conditionStack[0]; } }, "popState"), // produce the lexer rule set which is active for the currently active lexer condition state _currentRules: /* @__PURE__ */ __name(function _currentRules() { if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; } else { return this.conditions["INITIAL"].rules; } }, "_currentRules"), // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available topState: /* @__PURE__ */ __name(function topState(n2) { n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0); if (n2 >= 0) { return this.conditionStack[n2]; } else { return "INITIAL"; } }, "topState"), // alias for begin(condition) pushState: /* @__PURE__ */ __name(function pushState(condition) { this.begin(condition); }, "pushState"), // return the number of states currently on the stack stateStackSize: /* @__PURE__ */ __name(function stateStackSize() { return this.conditionStack.length; }, "stateStackSize"), options: { "case-insensitive": true }, performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { var YYSTATE = YY_START; switch ($avoiding_name_collisions) { case 0: return 38; break; case 1: return 40; break; case 2: return 39; break; case 3: return 44; break; case 4: return 51; break; case 5: return 52; break; case 6: return 53; break; case 7: return 54; break; case 8: break; case 9: { } break; case 10: return 5; break; case 11: break; case 12: break; case 13: break; case 14: break; case 15: this.pushState("SCALE"); return 17; break; case 16: return 18; break; case 17: this.popState(); break; case 18: this.begin("acc_title"); return 33; break; case 19: this.popState(); return "acc_title_value"; break; case 20: this.begin("acc_descr"); return 35; break; case 21: this.popState(); return "acc_descr_value"; break; case 22: this.begin("acc_descr_multiline"); break; case 23: this.popState(); break; case 24: return "acc_descr_multiline_value"; break; case 25: this.pushState("CLASSDEF"); return 41; break; case 26: this.popState(); this.pushState("CLASSDEFID"); return "DEFAULT_CLASSDEF_ID"; break; case 27: this.popState(); this.pushState("CLASSDEFID"); return 42; break; case 28: this.popState(); return 43; break; case 29: this.pushState("CLASS"); return 48; break; case 30: this.popState(); this.pushState("CLASS_STYLE"); return 49; break; case 31: this.popState(); return 50; break; case 32: this.pushState("STYLE"); return 45; break; case 33: this.popState(); this.pushState("STYLEDEF_STYLES"); return 46; break; case 34: this.popState(); return 47; break; case 35: this.pushState("SCALE"); return 17; break; case 36: return 18; break; case 37: this.popState(); break; case 38: this.pushState("STATE"); break; case 39: this.popState(); yy_.yytext = yy_.yytext.slice(0, -8).trim(); return 25; break; case 40: this.popState(); yy_.yytext = yy_.yytext.slice(0, -8).trim(); return 26; break; case 41: this.popState(); yy_.yytext = yy_.yytext.slice(0, -10).trim(); return 27; break; case 42: this.popState(); yy_.yytext = yy_.yytext.slice(0, -8).trim(); return 25; break; case 43: this.popState(); yy_.yytext = yy_.yytext.slice(0, -8).trim(); return 26; break; case 44: this.popState(); yy_.yytext = yy_.yytext.slice(0, -10).trim(); return 27; break; case 45: return 51; break; case 46: return 52; break; case 47: return 53; break; case 48: return 54; break; case 49: this.pushState("STATE_STRING"); break; case 50: this.pushState("STATE_ID"); return "AS"; break; case 51: this.popState(); return "ID"; break; case 52: this.popState(); break; case 53: return "STATE_DESCR"; break; case 54: return 19; break; case 55: this.popState(); break; case 56: this.popState(); this.pushState("struct"); return 20; break; case 57: break; case 58: this.popState(); return 21; break; case 59: break; case 60: this.begin("NOTE"); return 29; break; case 61: this.popState(); this.pushState("NOTE_ID"); return 59; break; case 62: this.popState(); this.pushState("NOTE_ID"); return 60; break; case 63: this.popState(); this.pushState("FLOATING_NOTE"); break; case 64: this.popState(); this.pushState("FLOATING_NOTE_ID"); return "AS"; break; case 65: break; case 66: return "NOTE_TEXT"; break; case 67: this.popState(); return "ID"; break; case 68: this.popState(); this.pushState("NOTE_TEXT"); return 24; break; case 69: this.popState(); yy_.yytext = yy_.yytext.substr(2).trim(); return 31; break; case 70: this.popState(); yy_.yytext = yy_.yytext.slice(0, -8).trim(); return 31; break; case 71: return 6; break; case 72: return 6; break; case 73: return 16; break; case 74: return 57; break; case 75: return 24; break; case 76: yy_.yytext = yy_.yytext.trim(); return 14; break; case 77: return 15; break; case 78: return 28; break; case 79: return 58; break; case 80: return 5; break; case 81: return "INVALID"; break; } }, "anonymous"), rules: [/^(?:click\b)/i, /^(?:href\b)/i, /^(?:"[^"]*")/i, /^(?:default\b)/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:[\s]+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:classDef\s+)/i, /^(?:DEFAULT\s+)/i, /^(?:\w+\s+)/i, /^(?:[^\n]*)/i, /^(?:class\s+)/i, /^(?:(\w+)+((,\s*\w+)*))/i, /^(?:[^\n]*)/i, /^(?:style\s+)/i, /^(?:[\w,]+\s+)/i, /^(?:[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:state\s+)/i, /^(?:.*<>)/i, /^(?:.*<>)/i, /^(?:.*<>)/i, /^(?:.*\[\[fork\]\])/i, /^(?:.*\[\[join\]\])/i, /^(?:.*\[\[choice\]\])/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:["])/i, /^(?:\s*as\s+)/i, /^(?:[^\n\{]*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n\s\{]+)/i, /^(?:\n)/i, /^(?:\{)/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:\})/i, /^(?:[\n])/i, /^(?:note\s+)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:")/i, /^(?:\s*as\s*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n]*)/i, /^(?:\s*[^:\n\s\-]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:[\s\S]*?end note\b)/i, /^(?:stateDiagram\s+)/i, /^(?:stateDiagram-v2\s+)/i, /^(?:hide empty description\b)/i, /^(?:\[\*\])/i, /^(?:[^:\n\s\-\{]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:-->)/i, /^(?:--)/i, /^(?::::)/i, /^(?:$)/i, /^(?:.)/i], conditions: { "LINE": { "rules": [12, 13], "inclusive": false }, "struct": { "rules": [12, 13, 25, 29, 32, 38, 45, 46, 47, 48, 57, 58, 59, 60, 74, 75, 76, 77, 78], "inclusive": false }, "FLOATING_NOTE_ID": { "rules": [67], "inclusive": false }, "FLOATING_NOTE": { "rules": [64, 65, 66], "inclusive": false }, "NOTE_TEXT": { "rules": [69, 70], "inclusive": false }, "NOTE_ID": { "rules": [68], "inclusive": false }, "NOTE": { "rules": [61, 62, 63], "inclusive": false }, "STYLEDEF_STYLEOPTS": { "rules": [], "inclusive": false }, "STYLEDEF_STYLES": { "rules": [34], "inclusive": false }, "STYLE_IDS": { "rules": [], "inclusive": false }, "STYLE": { "rules": [33], "inclusive": false }, "CLASS_STYLE": { "rules": [31], "inclusive": false }, "CLASS": { "rules": [30], "inclusive": false }, "CLASSDEFID": { "rules": [28], "inclusive": false }, "CLASSDEF": { "rules": [26, 27], "inclusive": false }, "acc_descr_multiline": { "rules": [23, 24], "inclusive": false }, "acc_descr": { "rules": [21], "inclusive": false }, "acc_title": { "rules": [19], "inclusive": false }, "SCALE": { "rules": [16, 17, 36, 37], "inclusive": false }, "ALIAS": { "rules": [], "inclusive": false }, "STATE_ID": { "rules": [51], "inclusive": false }, "STATE_STRING": { "rules": [52, 53], "inclusive": false }, "FORK_STATE": { "rules": [], "inclusive": false }, "STATE": { "rules": [12, 13, 39, 40, 41, 42, 43, 44, 49, 50, 54, 55, 56], "inclusive": false }, "ID": { "rules": [12, 13], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 18, 20, 22, 25, 29, 32, 35, 38, 56, 60, 71, 72, 73, 74, 75, 76, 77, 79, 80, 81], "inclusive": true } } }; return lexer2; })(); parser24.lexer = lexer; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser24; parser24.Parser = Parser3; return new Parser3(); })(); parser13.parser = parser13; stateDiagram_default = parser13; } }); // src/diagrams/state/stateCommon.ts var DEFAULT_DIAGRAM_DIRECTION, DEFAULT_NESTED_DOC_DIR, STMT_DIRECTION, STMT_STATE, STMT_ROOT, STMT_RELATION, STMT_CLASSDEF, STMT_STYLEDEF, STMT_APPLYCLASS, DEFAULT_STATE_TYPE, DIVIDER_TYPE, G_EDGE_STYLE, G_EDGE_ARROWHEADSTYLE, G_EDGE_LABELPOS, G_EDGE_LABELTYPE, G_EDGE_THICKNESS, SHAPE_STATE, SHAPE_STATE_WITH_DESC, SHAPE_START, SHAPE_END, SHAPE_DIVIDER, SHAPE_GROUP, SHAPE_NOTE, SHAPE_NOTEGROUP, CSS_DIAGRAM, CSS_STATE, CSS_DIAGRAM_STATE, CSS_EDGE, CSS_NOTE, CSS_NOTE_EDGE, CSS_EDGE_NOTE_EDGE, CSS_DIAGRAM_NOTE, CSS_CLUSTER, CSS_DIAGRAM_CLUSTER, CSS_CLUSTER_ALT, CSS_DIAGRAM_CLUSTER_ALT, PARENT2, NOTE, DOMID_STATE, DOMID_TYPE_SPACER, NOTE_ID, PARENT_ID; var init_stateCommon = __esm({ "src/diagrams/state/stateCommon.ts"() { "use strict"; DEFAULT_DIAGRAM_DIRECTION = "TB"; DEFAULT_NESTED_DOC_DIR = "TB"; STMT_DIRECTION = "dir"; STMT_STATE = "state"; STMT_ROOT = "root"; STMT_RELATION = "relation"; STMT_CLASSDEF = "classDef"; STMT_STYLEDEF = "style"; STMT_APPLYCLASS = "applyClass"; DEFAULT_STATE_TYPE = "default"; DIVIDER_TYPE = "divider"; G_EDGE_STYLE = "fill:none"; G_EDGE_ARROWHEADSTYLE = "fill: #333"; G_EDGE_LABELPOS = "c"; G_EDGE_LABELTYPE = "text"; G_EDGE_THICKNESS = "normal"; SHAPE_STATE = "rect"; SHAPE_STATE_WITH_DESC = "rectWithTitle"; SHAPE_START = "stateStart"; SHAPE_END = "stateEnd"; SHAPE_DIVIDER = "divider"; SHAPE_GROUP = "roundedWithTitle"; SHAPE_NOTE = "note"; SHAPE_NOTEGROUP = "noteGroup"; CSS_DIAGRAM = "statediagram"; CSS_STATE = "state"; CSS_DIAGRAM_STATE = `${CSS_DIAGRAM}-${CSS_STATE}`; CSS_EDGE = "transition"; CSS_NOTE = "note"; CSS_NOTE_EDGE = "note-edge"; CSS_EDGE_NOTE_EDGE = `${CSS_EDGE} ${CSS_NOTE_EDGE}`; CSS_DIAGRAM_NOTE = `${CSS_DIAGRAM}-${CSS_NOTE}`; CSS_CLUSTER = "cluster"; CSS_DIAGRAM_CLUSTER = `${CSS_DIAGRAM}-${CSS_CLUSTER}`; CSS_CLUSTER_ALT = "cluster-alt"; CSS_DIAGRAM_CLUSTER_ALT = `${CSS_DIAGRAM}-${CSS_CLUSTER_ALT}`; PARENT2 = "parent"; NOTE = "note"; DOMID_STATE = "state"; DOMID_TYPE_SPACER = "----"; NOTE_ID = `${DOMID_TYPE_SPACER}${NOTE}`; PARENT_ID = `${DOMID_TYPE_SPACER}${PARENT2}`; } }); // src/diagrams/state/dataFetcher.ts function stateDomId(itemId = "", counter2 = 0, type3 = "", typeSpacer = DOMID_TYPE_SPACER) { const typeStr = type3 !== null && type3.length > 0 ? `${typeSpacer}${type3}` : ""; return `${DOMID_STATE}-${itemId}${typeStr}-${counter2}`; } function insertOrUpdateNode(nodes5, nodeData2, classes3) { if (!nodeData2.id || nodeData2.id === "" || nodeData2.id === "") { return; } if (nodeData2.cssClasses) { if (!Array.isArray(nodeData2.cssCompiledStyles)) { nodeData2.cssCompiledStyles = []; } nodeData2.cssClasses.split(" ").forEach((cssClass) => { const classDef = classes3.get(cssClass); if (classDef) { nodeData2.cssCompiledStyles = [...nodeData2.cssCompiledStyles ?? [], ...classDef.styles]; } }); } const existingNodeData = nodes5.find((node2) => node2.id === nodeData2.id); if (existingNodeData) { Object.assign(existingNodeData, nodeData2); } else { nodes5.push(nodeData2); } } function getClassesFromDbInfo(dbInfoItem) { return dbInfoItem?.classes?.join(" ") ?? ""; } function getStylesFromDbInfo(dbInfoItem) { return dbInfoItem?.styles ?? []; } var nodeDb, graphItemCount, setupDoc, getDir2, dataFetcher, reset3; var init_dataFetcher = __esm({ "src/diagrams/state/dataFetcher.ts"() { "use strict"; init_diagramAPI(); init_logger(); init_common(); init_stateCommon(); nodeDb = /* @__PURE__ */ new Map(); graphItemCount = 0; __name(stateDomId, "stateDomId"); setupDoc = /* @__PURE__ */ __name((parentParsedItem, doc, diagramStates, nodes5, edges3, altFlag, look, classes3) => { log.trace("items", doc); doc.forEach((item) => { switch (item.stmt) { case STMT_STATE: dataFetcher(parentParsedItem, item, diagramStates, nodes5, edges3, altFlag, look, classes3); break; case DEFAULT_STATE_TYPE: dataFetcher(parentParsedItem, item, diagramStates, nodes5, edges3, altFlag, look, classes3); break; case STMT_RELATION: { dataFetcher( parentParsedItem, item.state1, diagramStates, nodes5, edges3, altFlag, look, classes3 ); dataFetcher( parentParsedItem, item.state2, diagramStates, nodes5, edges3, altFlag, look, classes3 ); const edgeData2 = { id: "edge" + graphItemCount, start: item.state1.id, end: item.state2.id, arrowhead: "normal", arrowTypeEnd: "arrow_barb", style: G_EDGE_STYLE, labelStyle: "", label: common_default.sanitizeText(item.description ?? "", getConfig2()), arrowheadStyle: G_EDGE_ARROWHEADSTYLE, labelpos: G_EDGE_LABELPOS, labelType: G_EDGE_LABELTYPE, thickness: G_EDGE_THICKNESS, classes: CSS_EDGE, look }; edges3.push(edgeData2); graphItemCount++; } break; } }); }, "setupDoc"); getDir2 = /* @__PURE__ */ __name((parsedItem, defaultDir = DEFAULT_NESTED_DOC_DIR) => { let dir2 = defaultDir; if (parsedItem.doc) { for (const parsedItemDoc of parsedItem.doc) { if (parsedItemDoc.stmt === "dir") { dir2 = parsedItemDoc.value; } } } return dir2; }, "getDir"); __name(insertOrUpdateNode, "insertOrUpdateNode"); __name(getClassesFromDbInfo, "getClassesFromDbInfo"); __name(getStylesFromDbInfo, "getStylesFromDbInfo"); dataFetcher = /* @__PURE__ */ __name((parent4, parsedItem, diagramStates, nodes5, edges3, altFlag, look, classes3) => { const itemId = parsedItem.id; const dbState = diagramStates.get(itemId); const classStr = getClassesFromDbInfo(dbState); const style3 = getStylesFromDbInfo(dbState); const config5 = getConfig2(); log.info("dataFetcher parsedItem", parsedItem, dbState, style3); if (itemId !== "root") { let shape = SHAPE_STATE; if (parsedItem.start === true) { shape = SHAPE_START; } else if (parsedItem.start === false) { shape = SHAPE_END; } if (parsedItem.type !== DEFAULT_STATE_TYPE) { shape = parsedItem.type; } if (!nodeDb.get(itemId)) { nodeDb.set(itemId, { id: itemId, shape, description: common_default.sanitizeText(itemId, config5), cssClasses: `${classStr} ${CSS_DIAGRAM_STATE}`, cssStyles: style3 }); } const newNode = nodeDb.get(itemId); if (parsedItem.description) { if (Array.isArray(newNode.description)) { newNode.shape = SHAPE_STATE_WITH_DESC; newNode.description.push(parsedItem.description); } else { if (newNode.description?.length && newNode.description.length > 0) { newNode.shape = SHAPE_STATE_WITH_DESC; if (newNode.description === itemId) { newNode.description = [parsedItem.description]; } else { newNode.description = [newNode.description, parsedItem.description]; } } else { newNode.shape = SHAPE_STATE; newNode.description = parsedItem.description; } } newNode.description = common_default.sanitizeTextOrArray(newNode.description, config5); } if (newNode.description?.length === 1 && newNode.shape === SHAPE_STATE_WITH_DESC) { if (newNode.type === "group") { newNode.shape = SHAPE_GROUP; } else { newNode.shape = SHAPE_STATE; } } if (!newNode.type && parsedItem.doc) { log.info("Setting cluster for XCX", itemId, getDir2(parsedItem)); newNode.type = "group"; newNode.isGroup = true; newNode.dir = getDir2(parsedItem); newNode.shape = parsedItem.type === DIVIDER_TYPE ? SHAPE_DIVIDER : SHAPE_GROUP; newNode.cssClasses = `${newNode.cssClasses} ${CSS_DIAGRAM_CLUSTER} ${altFlag ? CSS_DIAGRAM_CLUSTER_ALT : ""}`; } const nodeData2 = { labelStyle: "", shape: newNode.shape, label: newNode.description, cssClasses: newNode.cssClasses, cssCompiledStyles: [], cssStyles: newNode.cssStyles, id: itemId, dir: newNode.dir, domId: stateDomId(itemId, graphItemCount), type: newNode.type, isGroup: newNode.type === "group", padding: 8, rx: 10, ry: 10, look }; if (nodeData2.shape === SHAPE_DIVIDER) { nodeData2.label = ""; } if (parent4 && parent4.id !== "root") { log.trace("Setting node ", itemId, " to be child of its parent ", parent4.id); nodeData2.parentId = parent4.id; } nodeData2.centerLabel = true; if (parsedItem.note) { const noteData = { labelStyle: "", shape: SHAPE_NOTE, label: parsedItem.note.text, cssClasses: CSS_DIAGRAM_NOTE, // useHtmlLabels: false, cssStyles: [], cssCompiledStyles: [], id: itemId + NOTE_ID + "-" + graphItemCount, domId: stateDomId(itemId, graphItemCount, NOTE), type: newNode.type, isGroup: newNode.type === "group", padding: config5.flowchart?.padding, look, position: parsedItem.note.position }; const parentNodeId = itemId + PARENT_ID; const groupData = { labelStyle: "", shape: SHAPE_NOTEGROUP, label: parsedItem.note.text, cssClasses: newNode.cssClasses, cssStyles: [], id: itemId + PARENT_ID, domId: stateDomId(itemId, graphItemCount, PARENT2), type: "group", isGroup: true, padding: 16, //getConfig().flowchart.padding look, position: parsedItem.note.position }; graphItemCount++; groupData.id = parentNodeId; noteData.parentId = parentNodeId; insertOrUpdateNode(nodes5, groupData, classes3); insertOrUpdateNode(nodes5, noteData, classes3); insertOrUpdateNode(nodes5, nodeData2, classes3); let from2 = itemId; let to = noteData.id; if (parsedItem.note.position === "left of") { from2 = noteData.id; to = itemId; } edges3.push({ id: from2 + "-" + to, start: from2, end: to, arrowhead: "none", arrowTypeEnd: "", style: G_EDGE_STYLE, labelStyle: "", classes: CSS_EDGE_NOTE_EDGE, arrowheadStyle: G_EDGE_ARROWHEADSTYLE, labelpos: G_EDGE_LABELPOS, labelType: G_EDGE_LABELTYPE, thickness: G_EDGE_THICKNESS, look }); } else { insertOrUpdateNode(nodes5, nodeData2, classes3); } } if (parsedItem.doc) { log.trace("Adding nodes children "); setupDoc(parsedItem, parsedItem.doc, diagramStates, nodes5, edges3, !altFlag, look, classes3); } }, "dataFetcher"); reset3 = /* @__PURE__ */ __name(() => { nodeDb.clear(); graphItemCount = 0; }, "reset"); } }); // src/diagrams/state/stateRenderer-v3-unified.ts var getDir3, getClasses3, draw13, stateRenderer_v3_unified_default; var init_stateRenderer_v3_unified = __esm({ "src/diagrams/state/stateRenderer-v3-unified.ts"() { "use strict"; init_diagramAPI(); init_logger(); init_insertElementsForSize(); init_render2(); init_setupViewPortForSVG(); init_utils2(); init_stateCommon(); getDir3 = /* @__PURE__ */ __name((parsedItem, defaultDir = DEFAULT_NESTED_DOC_DIR) => { if (!parsedItem.doc) { return defaultDir; } let dir2 = defaultDir; for (const parsedItemDoc of parsedItem.doc) { if (parsedItemDoc.stmt === "dir") { dir2 = parsedItemDoc.value; } } return dir2; }, "getDir"); getClasses3 = /* @__PURE__ */ __name(function(text4, diagramObj) { return diagramObj.db.getClasses(); }, "getClasses"); draw13 = /* @__PURE__ */ __name(async function(text4, id30, _version, diag) { log.info("REF0:"); log.info("Drawing state diagram (v2)", id30); const { securityLevel, state: conf5, layout: layout6 } = getConfig2(); diag.db.extract(diag.db.getRootDocV2()); const data4Layout = diag.db.getData(); const svg2 = getDiagramElement(id30, securityLevel); data4Layout.type = diag.type; data4Layout.layoutAlgorithm = layout6; data4Layout.nodeSpacing = conf5?.nodeSpacing || 50; data4Layout.rankSpacing = conf5?.rankSpacing || 50; data4Layout.markers = ["barb"]; data4Layout.diagramId = id30; await render6(data4Layout, svg2); const padding2 = 8; try { const links3 = typeof diag.db.getLinks === "function" ? diag.db.getLinks() : /* @__PURE__ */ new Map(); links3.forEach((linkInfo, key) => { const stateId = typeof key === "string" ? key : typeof key?.id === "string" ? key.id : ""; if (!stateId) { log.warn("\u26A0\uFE0F Invalid or missing stateId from key:", JSON.stringify(key)); return; } const allNodes = svg2.node()?.querySelectorAll("g"); let matchedElem; allNodes?.forEach((g2) => { const text5 = g2.textContent?.trim(); if (text5 === stateId) { matchedElem = g2; } }); if (!matchedElem) { log.warn("\u26A0\uFE0F Could not find node matching text:", stateId); return; } const parent4 = matchedElem.parentNode; if (!parent4) { log.warn("\u26A0\uFE0F Node has no parent, cannot wrap:", stateId); return; } const a2 = document.createElementNS("http://www.w3.org/2000/svg", "a"); const cleanedUrl = linkInfo.url.replace(/^"+|"+$/g, ""); a2.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", cleanedUrl); a2.setAttribute("target", "_blank"); if (linkInfo.tooltip) { const tooltip = linkInfo.tooltip.replace(/^"+|"+$/g, ""); a2.setAttribute("title", tooltip); } parent4.replaceChild(a2, matchedElem); a2.appendChild(matchedElem); log.info("\u{1F517} Wrapped node in tag for:", stateId, linkInfo.url); }); } catch (err) { log.error("\u274C Error injecting clickable links:", err); } utils_default2.insertTitle( svg2, "statediagramTitleText", conf5?.titleTopMargin ?? 25, diag.db.getDiagramTitle() ); setupViewPortForSVG(svg2, padding2, CSS_DIAGRAM, conf5?.useMaxWidth ?? true); }, "draw"); stateRenderer_v3_unified_default = { getClasses: getClasses3, draw: draw13, getDir: getDir3 }; } }); // src/diagrams/state/stateDb.ts var CONSTANTS, newClassesList, newDoc, clone5, StateDB; var init_stateDb = __esm({ "src/diagrams/state/stateDb.ts"() { "use strict"; init_diagramAPI(); init_logger(); init_utils2(); init_common(); init_commonDb(); init_dataFetcher(); init_stateRenderer_v3_unified(); init_stateCommon(); CONSTANTS = { START_NODE: "[*]", START_TYPE: "start", END_NODE: "[*]", END_TYPE: "end", COLOR_KEYWORD: "color", FILL_KEYWORD: "fill", BG_FILL: "bgFill", STYLECLASS_SEP: "," }; newClassesList = /* @__PURE__ */ __name(() => /* @__PURE__ */ new Map(), "newClassesList"); newDoc = /* @__PURE__ */ __name(() => ({ relations: [], states: /* @__PURE__ */ new Map(), documents: {} }), "newDoc"); clone5 = /* @__PURE__ */ __name((o2) => JSON.parse(JSON.stringify(o2)), "clone"); StateDB = class { constructor(version3) { this.version = version3; this.nodes = []; this.edges = []; this.rootDoc = []; this.classes = newClassesList(); this.documents = { root: newDoc() }; this.currentDocument = this.documents.root; this.startEndCount = 0; this.dividerCnt = 0; this.links = /* @__PURE__ */ new Map(); this.getAccTitle = getAccTitle; this.setAccTitle = setAccTitle; this.getAccDescription = getAccDescription; this.setAccDescription = setAccDescription; this.setDiagramTitle = setDiagramTitle; this.getDiagramTitle = getDiagramTitle; this.clear(); this.setRootDoc = this.setRootDoc.bind(this); this.getDividerId = this.getDividerId.bind(this); this.setDirection = this.setDirection.bind(this); this.trimColon = this.trimColon.bind(this); } static { __name(this, "StateDB"); } static { this.relationType = { AGGREGATION: 0, EXTENSION: 1, COMPOSITION: 2, DEPENDENCY: 3 }; } /** * Convert all of the statements (stmts) that were parsed into states and relationships. * This is done because a state diagram may have nested sections, * where each section is a 'document' and has its own set of statements. * Ex: the section within a fork has its own statements, and incoming and outgoing statements * refer to the fork as a whole (document). * See the parser grammar: the definition of a document is a document then a 'line', where a line can be a statement. * This will push the statement into the list of statements for the current document. */ extract(statements) { this.clear(true); for (const item of Array.isArray(statements) ? statements : statements.doc) { switch (item.stmt) { case STMT_STATE: this.addState(item.id.trim(), item.type, item.doc, item.description, item.note); break; case STMT_RELATION: this.addRelation(item.state1, item.state2, item.description); break; case STMT_CLASSDEF: this.addStyleClass(item.id.trim(), item.classes); break; case STMT_STYLEDEF: this.handleStyleDef(item); break; case STMT_APPLYCLASS: this.setCssClass(item.id.trim(), item.styleClass); break; case "click": this.addLink(item.id, item.url, item.tooltip); break; } } const diagramStates = this.getStates(); const config5 = getConfig2(); reset3(); dataFetcher( void 0, this.getRootDocV2(), diagramStates, this.nodes, this.edges, true, config5.look, this.classes ); for (const node2 of this.nodes) { if (!Array.isArray(node2.label)) { continue; } node2.description = node2.label.slice(1); if (node2.isGroup && node2.description.length > 0) { throw new Error( `Group nodes can only have label. Remove the additional description for node [${node2.id}]` ); } node2.label = node2.label[0]; } } handleStyleDef(item) { const ids = item.id.trim().split(","); const styles4 = item.styleClass.split(","); for (const id30 of ids) { let state3 = this.getState(id30); if (!state3) { const trimmedId = id30.trim(); this.addState(trimmedId); state3 = this.getState(trimmedId); } if (state3) { state3.styles = styles4.map((s2) => s2.replace(/;/g, "")?.trim()); } } } setRootDoc(o2) { log.info("Setting root doc", o2); this.rootDoc = o2; if (this.version === 1) { this.extract(o2); } else { this.extract(this.getRootDocV2()); } } docTranslator(parent4, node2, first3) { if (node2.stmt === STMT_RELATION) { this.docTranslator(parent4, node2.state1, true); this.docTranslator(parent4, node2.state2, false); return; } if (node2.stmt === STMT_STATE) { if (node2.id === CONSTANTS.START_NODE) { node2.id = parent4.id + (first3 ? "_start" : "_end"); node2.start = first3; } else { node2.id = node2.id.trim(); } } if (node2.stmt !== STMT_ROOT && node2.stmt !== STMT_STATE || !node2.doc) { return; } const doc = []; let currentDoc = []; for (const stmt of node2.doc) { if (stmt.type === DIVIDER_TYPE) { const newNode = clone5(stmt); newNode.doc = clone5(currentDoc); doc.push(newNode); currentDoc = []; } else { currentDoc.push(stmt); } } if (doc.length > 0 && currentDoc.length > 0) { const newNode = { stmt: STMT_STATE, id: generateId(), type: "divider", doc: clone5(currentDoc) }; doc.push(clone5(newNode)); node2.doc = doc; } node2.doc.forEach((docNode) => this.docTranslator(node2, docNode, true)); } getRootDocV2() { this.docTranslator( { id: STMT_ROOT, stmt: STMT_ROOT }, { id: STMT_ROOT, stmt: STMT_ROOT, doc: this.rootDoc }, true ); return { id: STMT_ROOT, doc: this.rootDoc }; } /** * Function called by parser when a node definition has been found. * * @param descr - description for the state. Can be a string or a list or strings * @param classes - class styles to apply to this state. Can be a string (1 style) or an array of styles. If it's just 1 class, convert it to an array of that 1 class. * @param styles - styles to apply to this state. Can be a string (1 style) or an array of styles. If it's just 1 style, convert it to an array of that 1 style. * @param textStyles - text styles to apply to this state. Can be a string (1 text test) or an array of text styles. If it's just 1 text style, convert it to an array of that 1 text style. */ addState(id30, type3 = DEFAULT_STATE_TYPE, doc = void 0, descr = void 0, note3 = void 0, classes3 = void 0, styles4 = void 0, textStyles = void 0) { const trimmedId = id30?.trim(); if (!this.currentDocument.states.has(trimmedId)) { log.info("Adding state ", trimmedId, descr); this.currentDocument.states.set(trimmedId, { stmt: STMT_STATE, id: trimmedId, descriptions: [], type: type3, doc, note: note3, classes: [], styles: [], textStyles: [] }); } else { const state3 = this.currentDocument.states.get(trimmedId); if (!state3) { throw new Error(`State not found: ${trimmedId}`); } if (!state3.doc) { state3.doc = doc; } if (!state3.type) { state3.type = type3; } } if (descr) { log.info("Setting state description", trimmedId, descr); const descriptions = Array.isArray(descr) ? descr : [descr]; descriptions.forEach((des) => this.addDescription(trimmedId, des.trim())); } if (note3) { const doc2 = this.currentDocument.states.get(trimmedId); if (!doc2) { throw new Error(`State not found: ${trimmedId}`); } doc2.note = note3; doc2.note.text = common_default.sanitizeText(doc2.note.text, getConfig2()); } if (classes3) { log.info("Setting state classes", trimmedId, classes3); const classesList = Array.isArray(classes3) ? classes3 : [classes3]; classesList.forEach((cssClass) => this.setCssClass(trimmedId, cssClass.trim())); } if (styles4) { log.info("Setting state styles", trimmedId, styles4); const stylesList = Array.isArray(styles4) ? styles4 : [styles4]; stylesList.forEach((style3) => this.setStyle(trimmedId, style3.trim())); } if (textStyles) { log.info("Setting state styles", trimmedId, styles4); const textStylesList = Array.isArray(textStyles) ? textStyles : [textStyles]; textStylesList.forEach((textStyle) => this.setTextStyle(trimmedId, textStyle.trim())); } } clear(saveCommon) { this.nodes = []; this.edges = []; this.documents = { root: newDoc() }; this.currentDocument = this.documents.root; this.startEndCount = 0; this.classes = newClassesList(); if (!saveCommon) { this.links = /* @__PURE__ */ new Map(); clear(); } } getState(id30) { return this.currentDocument.states.get(id30); } getStates() { return this.currentDocument.states; } logDocuments() { log.info("Documents = ", this.documents); } getRelations() { return this.currentDocument.relations; } /** * Adds a clickable link to a state. */ addLink(stateId, url, tooltip) { this.links.set(stateId, { url, tooltip }); log.warn("Adding link", stateId, url, tooltip); } /** * Get all registered links. */ getLinks() { return this.links; } /** * If the id is a start node ( [*] ), then return a new id constructed from * the start node name and the current start node count. * else return the given id */ startIdIfNeeded(id30 = "") { if (id30 === CONSTANTS.START_NODE) { this.startEndCount++; return `${CONSTANTS.START_TYPE}${this.startEndCount}`; } return id30; } /** * If the id is a start node ( [*] ), then return the start type ('start') * else return the given type */ startTypeIfNeeded(id30 = "", type3 = DEFAULT_STATE_TYPE) { return id30 === CONSTANTS.START_NODE ? CONSTANTS.START_TYPE : type3; } /** * If the id is an end node ( [*] ), then return a new id constructed from * the end node name and the current start_end node count. * else return the given id */ endIdIfNeeded(id30 = "") { if (id30 === CONSTANTS.END_NODE) { this.startEndCount++; return `${CONSTANTS.END_TYPE}${this.startEndCount}`; } return id30; } /** * If the id is an end node ( [*] ), then return the end type * else return the given type * */ endTypeIfNeeded(id30 = "", type3 = DEFAULT_STATE_TYPE) { return id30 === CONSTANTS.END_NODE ? CONSTANTS.END_TYPE : type3; } addRelationObjs(item1, item2, relationTitle = "") { const id1 = this.startIdIfNeeded(item1.id.trim()); const type1 = this.startTypeIfNeeded(item1.id.trim(), item1.type); const id210 = this.startIdIfNeeded(item2.id.trim()); const type22 = this.startTypeIfNeeded(item2.id.trim(), item2.type); this.addState( id1, type1, item1.doc, item1.description, item1.note, item1.classes, item1.styles, item1.textStyles ); this.addState( id210, type22, item2.doc, item2.description, item2.note, item2.classes, item2.styles, item2.textStyles ); this.currentDocument.relations.push({ id1, id2: id210, relationTitle: common_default.sanitizeText(relationTitle, getConfig2()) }); } /** * Add a relation between two items. The items may be full objects or just the string id of a state. */ addRelation(item1, item2, title2) { if (typeof item1 === "object" && typeof item2 === "object") { this.addRelationObjs(item1, item2, title2); } else if (typeof item1 === "string" && typeof item2 === "string") { const id1 = this.startIdIfNeeded(item1.trim()); const type1 = this.startTypeIfNeeded(item1); const id210 = this.endIdIfNeeded(item2.trim()); const type22 = this.endTypeIfNeeded(item2); this.addState(id1, type1); this.addState(id210, type22); this.currentDocument.relations.push({ id1, id2: id210, relationTitle: title2 ? common_default.sanitizeText(title2, getConfig2()) : void 0 }); } } addDescription(id30, descr) { const theState = this.currentDocument.states.get(id30); const _descr = descr.startsWith(":") ? descr.replace(":", "").trim() : descr; theState?.descriptions?.push(common_default.sanitizeText(_descr, getConfig2())); } cleanupLabel(label) { return label.startsWith(":") ? label.slice(2).trim() : label.trim(); } getDividerId() { this.dividerCnt++; return `divider-id-${this.dividerCnt}`; } /** * Called when the parser comes across a (style) class definition * @example classDef my-style fill:#f96; * * @param id - the id of this (style) class * @param styleAttributes - the string with 1 or more style attributes (each separated by a comma) */ addStyleClass(id30, styleAttributes = "") { if (!this.classes.has(id30)) { this.classes.set(id30, { id: id30, styles: [], textStyles: [] }); } const foundClass = this.classes.get(id30); if (styleAttributes && foundClass) { styleAttributes.split(CONSTANTS.STYLECLASS_SEP).forEach((attrib) => { const fixedAttrib = attrib.replace(/([^;]*);/, "$1").trim(); if (RegExp(CONSTANTS.COLOR_KEYWORD).exec(attrib)) { const newStyle1 = fixedAttrib.replace(CONSTANTS.FILL_KEYWORD, CONSTANTS.BG_FILL); const newStyle2 = newStyle1.replace(CONSTANTS.COLOR_KEYWORD, CONSTANTS.FILL_KEYWORD); foundClass.textStyles.push(newStyle2); } foundClass.styles.push(fixedAttrib); }); } } getClasses() { return this.classes; } /** * Add a (style) class or css class to a state with the given id. * If the state isn't already in the list of known states, add it. * Might be called by parser when a style class or CSS class should be applied to a state * * @param itemIds - The id or a list of ids of the item(s) to apply the css class to * @param cssClassName - CSS class name */ setCssClass(itemIds, cssClassName) { itemIds.split(",").forEach((id30) => { let foundState = this.getState(id30); if (!foundState) { const trimmedId = id30.trim(); this.addState(trimmedId); foundState = this.getState(trimmedId); } foundState?.classes?.push(cssClassName); }); } /** * Add a style to a state with the given id. * @example style stateId fill:#f9f,stroke:#333,stroke-width:4px * where 'style' is the keyword * stateId is the id of a state * the rest of the string is the styleText (all of the attributes to be applied to the state) * * @param itemId - The id of item to apply the style to * @param styleText - the text of the attributes for the style */ setStyle(itemId, styleText) { this.getState(itemId)?.styles?.push(styleText); } /** * Add a text style to a state with the given id * * @param itemId - The id of item to apply the css class to * @param cssClassName - CSS class name */ setTextStyle(itemId, cssClassName) { this.getState(itemId)?.textStyles?.push(cssClassName); } /** * Finds the direction statement in the root document. * @returns the direction statement if present */ getDirectionStatement() { return this.rootDoc.find((doc) => doc.stmt === STMT_DIRECTION); } getDirection() { return this.getDirectionStatement()?.value ?? DEFAULT_DIAGRAM_DIRECTION; } setDirection(dir2) { const doc = this.getDirectionStatement(); if (doc) { doc.value = dir2; } else { this.rootDoc.unshift({ stmt: STMT_DIRECTION, value: dir2 }); } } trimColon(str2) { return str2.startsWith(":") ? str2.slice(1).trim() : str2.trim(); } getData() { const config5 = getConfig2(); return { nodes: this.nodes, edges: this.edges, other: {}, config: config5, direction: getDir3(this.getRootDocV2()) }; } getConfig() { return getConfig2().state; } }; } }); // src/diagrams/state/styles.js var getStyles11, styles_default10; var init_styles10 = __esm({ "src/diagrams/state/styles.js"() { "use strict"; getStyles11 = /* @__PURE__ */ __name((options2) => ` defs #statediagram-barbEnd { fill: ${options2.transitionColor}; stroke: ${options2.transitionColor}; } g.stateGroup text { fill: ${options2.nodeBorder}; stroke: none; font-size: 10px; } g.stateGroup text { fill: ${options2.textColor}; stroke: none; font-size: 10px; } g.stateGroup .state-title { font-weight: bolder; fill: ${options2.stateLabelColor}; } g.stateGroup rect { fill: ${options2.mainBkg}; stroke: ${options2.nodeBorder}; } g.stateGroup line { stroke: ${options2.lineColor}; stroke-width: 1; } .transition { stroke: ${options2.transitionColor}; stroke-width: 1; fill: none; } .stateGroup .composit { fill: ${options2.background}; border-bottom: 1px } .stateGroup .alt-composit { fill: #e0e0e0; border-bottom: 1px } .state-note { stroke: ${options2.noteBorderColor}; fill: ${options2.noteBkgColor}; text { fill: ${options2.noteTextColor}; stroke: none; font-size: 10px; } } .stateLabel .box { stroke: none; stroke-width: 0; fill: ${options2.mainBkg}; opacity: 0.5; } .edgeLabel .label rect { fill: ${options2.labelBackgroundColor}; opacity: 0.5; } .edgeLabel { background-color: ${options2.edgeLabelBackground}; p { background-color: ${options2.edgeLabelBackground}; } rect { opacity: 0.5; background-color: ${options2.edgeLabelBackground}; fill: ${options2.edgeLabelBackground}; } text-align: center; } .edgeLabel .label text { fill: ${options2.transitionLabelColor || options2.tertiaryTextColor}; } .label div .edgeLabel { color: ${options2.transitionLabelColor || options2.tertiaryTextColor}; } .stateLabel text { fill: ${options2.stateLabelColor}; font-size: 10px; font-weight: bold; } .node circle.state-start { fill: ${options2.specialStateColor}; stroke: ${options2.specialStateColor}; } .node .fork-join { fill: ${options2.specialStateColor}; stroke: ${options2.specialStateColor}; } .node circle.state-end { fill: ${options2.innerEndBackground}; stroke: ${options2.background}; stroke-width: 1.5 } .end-state-inner { fill: ${options2.compositeBackground || options2.background}; // stroke: ${options2.background}; stroke-width: 1.5 } .node rect { fill: ${options2.stateBkg || options2.mainBkg}; stroke: ${options2.stateBorder || options2.nodeBorder}; stroke-width: 1px; } .node polygon { fill: ${options2.mainBkg}; stroke: ${options2.stateBorder || options2.nodeBorder};; stroke-width: 1px; } #statediagram-barbEnd { fill: ${options2.lineColor}; } .statediagram-cluster rect { fill: ${options2.compositeTitleBackground}; stroke: ${options2.stateBorder || options2.nodeBorder}; stroke-width: 1px; } .cluster-label, .nodeLabel { color: ${options2.stateLabelColor}; // line-height: 1; } .statediagram-cluster rect.outer { rx: 5px; ry: 5px; } .statediagram-state .divider { stroke: ${options2.stateBorder || options2.nodeBorder}; } .statediagram-state .title-state { rx: 5px; ry: 5px; } .statediagram-cluster.statediagram-cluster .inner { fill: ${options2.compositeBackground || options2.background}; } .statediagram-cluster.statediagram-cluster-alt .inner { fill: ${options2.altBackground ? options2.altBackground : "#efefef"}; } .statediagram-cluster .inner { rx:0; ry:0; } .statediagram-state rect.basic { rx: 5px; ry: 5px; } .statediagram-state rect.divider { stroke-dasharray: 10,10; fill: ${options2.altBackground ? options2.altBackground : "#efefef"}; } .note-edge { stroke-dasharray: 5; } .statediagram-note rect { fill: ${options2.noteBkgColor}; stroke: ${options2.noteBorderColor}; stroke-width: 1px; rx: 0; ry: 0; } .statediagram-note rect { fill: ${options2.noteBkgColor}; stroke: ${options2.noteBorderColor}; stroke-width: 1px; rx: 0; ry: 0; } .statediagram-note text { fill: ${options2.noteTextColor}; } .statediagram-note .nodeLabel { color: ${options2.noteTextColor}; } .statediagram .edgeLabel { color: red; // ${options2.noteTextColor}; } #dependencyStart, #dependencyEnd { fill: ${options2.lineColor}; stroke: ${options2.lineColor}; stroke-width: 1; } .statediagramTitleText { text-anchor: middle; font-size: 18px; fill: ${options2.textColor}; } `, "getStyles"); styles_default10 = getStyles11; } }); // src/diagrams/state/shapes.js var drawStartState, drawDivider, drawSimpleState, drawDescrState, addTitleAndBox, drawEndState, drawForkJoinState, _drawLongText, drawNote2, drawState, edgeCount, drawEdge; var init_shapes2 = __esm({ "src/diagrams/state/shapes.js"() { "use strict"; init_src32(); init_stateDb(); init_utils2(); init_common(); init_diagramAPI(); init_logger(); drawStartState = /* @__PURE__ */ __name((g2) => g2.append("circle").attr("class", "start-state").attr("r", getConfig2().state.sizeUnit).attr("cx", getConfig2().state.padding + getConfig2().state.sizeUnit).attr("cy", getConfig2().state.padding + getConfig2().state.sizeUnit), "drawStartState"); drawDivider = /* @__PURE__ */ __name((g2) => g2.append("line").style("stroke", "grey").style("stroke-dasharray", "3").attr("x1", getConfig2().state.textHeight).attr("class", "divider").attr("x2", getConfig2().state.textHeight * 2).attr("y1", 0).attr("y2", 0), "drawDivider"); drawSimpleState = /* @__PURE__ */ __name((g2, stateDef) => { const state3 = g2.append("text").attr("x", 2 * getConfig2().state.padding).attr("y", getConfig2().state.textHeight + 2 * getConfig2().state.padding).attr("font-size", getConfig2().state.fontSize).attr("class", "state-title").text(stateDef.id); const classBox2 = state3.node().getBBox(); g2.insert("rect", ":first-child").attr("x", getConfig2().state.padding).attr("y", getConfig2().state.padding).attr("width", classBox2.width + 2 * getConfig2().state.padding).attr("height", classBox2.height + 2 * getConfig2().state.padding).attr("rx", getConfig2().state.radius); return state3; }, "drawSimpleState"); drawDescrState = /* @__PURE__ */ __name((g2, stateDef) => { const addTspan = /* @__PURE__ */ __name(function(textEl, txt, isFirst2) { const tSpan = textEl.append("tspan").attr("x", 2 * getConfig2().state.padding).text(txt); if (!isFirst2) { tSpan.attr("dy", getConfig2().state.textHeight); } }, "addTspan"); const title2 = g2.append("text").attr("x", 2 * getConfig2().state.padding).attr("y", getConfig2().state.textHeight + 1.3 * getConfig2().state.padding).attr("font-size", getConfig2().state.fontSize).attr("class", "state-title").text(stateDef.descriptions[0]); const titleBox = title2.node().getBBox(); const titleHeight = titleBox.height; const description = g2.append("text").attr("x", getConfig2().state.padding).attr( "y", titleHeight + getConfig2().state.padding * 0.4 + getConfig2().state.dividerMargin + getConfig2().state.textHeight ).attr("class", "state-description"); let isFirst = true; let isSecond = true; stateDef.descriptions.forEach(function(descr) { if (!isFirst) { addTspan(description, descr, isSecond); isSecond = false; } isFirst = false; }); const descrLine = g2.append("line").attr("x1", getConfig2().state.padding).attr("y1", getConfig2().state.padding + titleHeight + getConfig2().state.dividerMargin / 2).attr("y2", getConfig2().state.padding + titleHeight + getConfig2().state.dividerMargin / 2).attr("class", "descr-divider"); const descrBox = description.node().getBBox(); const width3 = Math.max(descrBox.width, titleBox.width); descrLine.attr("x2", width3 + 3 * getConfig2().state.padding); g2.insert("rect", ":first-child").attr("x", getConfig2().state.padding).attr("y", getConfig2().state.padding).attr("width", width3 + 2 * getConfig2().state.padding).attr("height", descrBox.height + titleHeight + 2 * getConfig2().state.padding).attr("rx", getConfig2().state.radius); return g2; }, "drawDescrState"); addTitleAndBox = /* @__PURE__ */ __name((g2, stateDef, altBkg) => { const pad3 = getConfig2().state.padding; const dblPad = 2 * getConfig2().state.padding; const orgBox = g2.node().getBBox(); const orgWidth = orgBox.width; const orgX = orgBox.x; const title2 = g2.append("text").attr("x", 0).attr("y", getConfig2().state.titleShift).attr("font-size", getConfig2().state.fontSize).attr("class", "state-title").text(stateDef.id); const titleBox = title2.node().getBBox(); const titleWidth = titleBox.width + dblPad; let width3 = Math.max(titleWidth, orgWidth); if (width3 === orgWidth) { width3 = width3 + dblPad; } let startX2; const graphBox = g2.node().getBBox(); if (stateDef.doc) { } startX2 = orgX - pad3; if (titleWidth > orgWidth) { startX2 = (orgWidth - width3) / 2 + pad3; } if (Math.abs(orgX - graphBox.x) < pad3 && titleWidth > orgWidth) { startX2 = orgX - (titleWidth - orgWidth) / 2; } const lineY = 1 - getConfig2().state.textHeight; g2.insert("rect", ":first-child").attr("x", startX2).attr("y", lineY).attr("class", altBkg ? "alt-composit" : "composit").attr("width", width3).attr( "height", graphBox.height + getConfig2().state.textHeight + getConfig2().state.titleShift + 1 ).attr("rx", "0"); title2.attr("x", startX2 + pad3); if (titleWidth <= orgWidth) { title2.attr("x", orgX + (width3 - dblPad) / 2 - titleWidth / 2 + pad3); } g2.insert("rect", ":first-child").attr("x", startX2).attr( "y", getConfig2().state.titleShift - getConfig2().state.textHeight - getConfig2().state.padding ).attr("width", width3).attr("height", getConfig2().state.textHeight * 3).attr("rx", getConfig2().state.radius); g2.insert("rect", ":first-child").attr("x", startX2).attr( "y", getConfig2().state.titleShift - getConfig2().state.textHeight - getConfig2().state.padding ).attr("width", width3).attr("height", graphBox.height + 3 + 2 * getConfig2().state.textHeight).attr("rx", getConfig2().state.radius); return g2; }, "addTitleAndBox"); drawEndState = /* @__PURE__ */ __name((g2) => { g2.append("circle").attr("class", "end-state-outer").attr("r", getConfig2().state.sizeUnit + getConfig2().state.miniPadding).attr( "cx", getConfig2().state.padding + getConfig2().state.sizeUnit + getConfig2().state.miniPadding ).attr( "cy", getConfig2().state.padding + getConfig2().state.sizeUnit + getConfig2().state.miniPadding ); return g2.append("circle").attr("class", "end-state-inner").attr("r", getConfig2().state.sizeUnit).attr("cx", getConfig2().state.padding + getConfig2().state.sizeUnit + 2).attr("cy", getConfig2().state.padding + getConfig2().state.sizeUnit + 2); }, "drawEndState"); drawForkJoinState = /* @__PURE__ */ __name((g2, stateDef) => { let width3 = getConfig2().state.forkWidth; let height2 = getConfig2().state.forkHeight; if (stateDef.parentId) { let tmp = width3; width3 = height2; height2 = tmp; } return g2.append("rect").style("stroke", "black").style("fill", "black").attr("width", width3).attr("height", height2).attr("x", getConfig2().state.padding).attr("y", getConfig2().state.padding); }, "drawForkJoinState"); _drawLongText = /* @__PURE__ */ __name((_text, x5, y6, g2) => { let textHeight = 0; const textElem = g2.append("text"); textElem.style("text-anchor", "start"); textElem.attr("class", "noteText"); let text4 = _text.replace(/\r\n/g, "
"); text4 = text4.replace(/\n/g, "
"); const lines = text4.split(common_default.lineBreakRegex); let tHeight = 1.25 * getConfig2().state.noteMargin; for (const line2 of lines) { const txt = line2.trim(); if (txt.length > 0) { const span = textElem.append("tspan"); span.text(txt); if (tHeight === 0) { const textBounds = span.node().getBBox(); tHeight += textBounds.height; } textHeight += tHeight; span.attr("x", x5 + getConfig2().state.noteMargin); span.attr("y", y6 + textHeight + 1.25 * getConfig2().state.noteMargin); } } return { textWidth: textElem.node().getBBox().width, textHeight }; }, "_drawLongText"); drawNote2 = /* @__PURE__ */ __name((text4, g2) => { g2.attr("class", "state-note"); const note3 = g2.append("rect").attr("x", 0).attr("y", getConfig2().state.padding); const rectElem = g2.append("g"); const { textWidth, textHeight } = _drawLongText(text4, 0, 0, rectElem); note3.attr("height", textHeight + 2 * getConfig2().state.noteMargin); note3.attr("width", textWidth + getConfig2().state.noteMargin * 2); return note3; }, "drawNote"); drawState = /* @__PURE__ */ __name(function(elem, stateDef) { const id30 = stateDef.id; const stateInfo = { id: id30, label: stateDef.id, width: 0, height: 0 }; const g2 = elem.append("g").attr("id", id30).attr("class", "stateGroup"); if (stateDef.type === "start") { drawStartState(g2); } if (stateDef.type === "end") { drawEndState(g2); } if (stateDef.type === "fork" || stateDef.type === "join") { drawForkJoinState(g2, stateDef); } if (stateDef.type === "note") { drawNote2(stateDef.note.text, g2); } if (stateDef.type === "divider") { drawDivider(g2); } if (stateDef.type === "default" && stateDef.descriptions.length === 0) { drawSimpleState(g2, stateDef); } if (stateDef.type === "default" && stateDef.descriptions.length > 0) { drawDescrState(g2, stateDef); } const stateBox = g2.node().getBBox(); stateInfo.width = stateBox.width + 2 * getConfig2().state.padding; stateInfo.height = stateBox.height + 2 * getConfig2().state.padding; return stateInfo; }, "drawState"); edgeCount = 0; drawEdge = /* @__PURE__ */ __name(function(elem, path4, relation) { const getRelationType = /* @__PURE__ */ __name(function(type3) { switch (type3) { case StateDB.relationType.AGGREGATION: return "aggregation"; case StateDB.relationType.EXTENSION: return "extension"; case StateDB.relationType.COMPOSITION: return "composition"; case StateDB.relationType.DEPENDENCY: return "dependency"; } }, "getRelationType"); path4.points = path4.points.filter((p3) => !Number.isNaN(p3.y)); const lineData = path4.points; const lineFunction = line_default().x(function(d3) { return d3.x; }).y(function(d3) { return d3.y; }).curve(basis_default2); const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "transition"); let url = ""; if (getConfig2().state.arrowMarkerAbsolute) { url = getUrl(true); } svgPath.attr( "marker-end", "url(" + url + "#" + getRelationType(StateDB.relationType.DEPENDENCY) + "End)" ); if (relation.title !== void 0) { const label = elem.append("g").attr("class", "stateLabel"); const { x: x5, y: y6 } = utils_default2.calcLabelPosition(path4.points); const rows = common_default.getRows(relation.title); let titleHeight = 0; const titleRows = []; let maxWidth2 = 0; let minX = 0; for (let i2 = 0; i2 <= rows.length; i2++) { const title2 = label.append("text").attr("text-anchor", "middle").text(rows[i2]).attr("x", x5).attr("y", y6 + titleHeight); const boundsTmp = title2.node().getBBox(); maxWidth2 = Math.max(maxWidth2, boundsTmp.width); minX = Math.min(minX, boundsTmp.x); log.info(boundsTmp.x, x5, y6 + titleHeight); if (titleHeight === 0) { const titleBox = title2.node().getBBox(); titleHeight = titleBox.height; log.info("Title height", titleHeight, y6); } titleRows.push(title2); } let boxHeight = titleHeight * rows.length; if (rows.length > 1) { const heightAdj = (rows.length - 1) * titleHeight * 0.5; titleRows.forEach((title2, i2) => title2.attr("y", y6 + i2 * titleHeight - heightAdj)); boxHeight = titleHeight * rows.length; } const bounds4 = label.node().getBBox(); label.insert("rect", ":first-child").attr("class", "box").attr("x", x5 - maxWidth2 / 2 - getConfig2().state.padding / 2).attr("y", y6 - boxHeight / 2 - getConfig2().state.padding / 2 - 3.5).attr("width", maxWidth2 + getConfig2().state.padding).attr("height", boxHeight + getConfig2().state.padding); log.info(bounds4); } edgeCount++; }, "drawEdge"); } }); // src/diagrams/state/stateRenderer.js var conf3, transformationLog, setConf4, insertMarkers2, draw14, getLabelWidth, renderDoc, stateRenderer_default; var init_stateRenderer = __esm({ "src/diagrams/state/stateRenderer.js"() { "use strict"; init_src32(); init_dagre(); init_graphlib(); init_logger(); init_common(); init_shapes2(); init_diagramAPI(); init_setupGraphViewbox(); transformationLog = {}; setConf4 = /* @__PURE__ */ __name(function() { }, "setConf"); insertMarkers2 = /* @__PURE__ */ __name(function(elem) { elem.append("defs").append("marker").attr("id", "dependencyEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); }, "insertMarkers"); draw14 = /* @__PURE__ */ __name(function(text4, id30, _version, diagObj) { conf3 = getConfig2().state; const securityLevel = getConfig2().securityLevel; let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = select_default2("#i" + id30); } const root3 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body"); const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; log.debug("Rendering diagram " + text4); const diagram27 = root3.select(`[id='${id30}']`); insertMarkers2(diagram27); const rootDoc = diagObj.db.getRootDoc(); renderDoc(rootDoc, diagram27, void 0, false, root3, doc, diagObj); const padding2 = conf3.padding; const bounds4 = diagram27.node().getBBox(); const width3 = bounds4.width + padding2 * 2; const height2 = bounds4.height + padding2 * 2; const svgWidth = width3 * 1.75; configureSvgSize(diagram27, height2, svgWidth, conf3.useMaxWidth); diagram27.attr( "viewBox", `${bounds4.x - conf3.padding} ${bounds4.y - conf3.padding} ` + width3 + " " + height2 ); }, "draw"); getLabelWidth = /* @__PURE__ */ __name((text4) => { return text4 ? text4.length * conf3.fontSizeFactor : 1; }, "getLabelWidth"); renderDoc = /* @__PURE__ */ __name((doc, diagram27, parentId, altBkg, root3, domDocument, diagObj) => { const graph = new Graph({ compound: true, multigraph: true }); let i2; let edgeFreeDoc = true; for (i2 = 0; i2 < doc.length; i2++) { if (doc[i2].stmt === "relation") { edgeFreeDoc = false; break; } } if (parentId) { graph.setGraph({ rankdir: "LR", multigraph: true, compound: true, // acyclicer: 'greedy', ranker: "tight-tree", ranksep: edgeFreeDoc ? 1 : conf3.edgeLengthFactor, nodeSep: edgeFreeDoc ? 1 : 50, isMultiGraph: true // ranksep: 5, // nodesep: 1 }); } else { graph.setGraph({ rankdir: "TB", multigraph: true, compound: true, // isCompound: true, // acyclicer: 'greedy', // ranker: 'longest-path' ranksep: edgeFreeDoc ? 1 : conf3.edgeLengthFactor, nodeSep: edgeFreeDoc ? 1 : 50, ranker: "tight-tree", // ranker: 'network-simplex' isMultiGraph: true }); } graph.setDefaultEdgeLabel(function() { return {}; }); const states = diagObj.db.getStates(); const relations = diagObj.db.getRelations(); const keys2 = Object.keys(states); let first3 = true; for (const key of keys2) { const stateDef = states[key]; if (parentId) { stateDef.parentId = parentId; } let node2; if (stateDef.doc) { let sub2 = diagram27.append("g").attr("id", stateDef.id).attr("class", "stateGroup"); node2 = renderDoc(stateDef.doc, sub2, stateDef.id, !altBkg, root3, domDocument, diagObj); if (first3) { sub2 = addTitleAndBox(sub2, stateDef, altBkg); let boxBounds = sub2.node().getBBox(); node2.width = boxBounds.width; node2.height = boxBounds.height + conf3.padding / 2; transformationLog[stateDef.id] = { y: conf3.compositTitleSize }; } else { let boxBounds = sub2.node().getBBox(); node2.width = boxBounds.width; node2.height = boxBounds.height; } } else { node2 = drawState(diagram27, stateDef, graph); } if (stateDef.note) { const noteDef = { descriptions: [], id: stateDef.id + "-note", note: stateDef.note, type: "note" }; const note3 = drawState(diagram27, noteDef, graph); if (stateDef.note.position === "left of") { graph.setNode(node2.id + "-note", note3); graph.setNode(node2.id, node2); } else { graph.setNode(node2.id, node2); graph.setNode(node2.id + "-note", note3); } graph.setParent(node2.id, node2.id + "-group"); graph.setParent(node2.id + "-note", node2.id + "-group"); } else { graph.setNode(node2.id, node2); } } log.debug("Count=", graph.nodeCount(), graph); let cnt4 = 0; relations.forEach(function(relation) { cnt4++; log.debug("Setting edge", relation); graph.setEdge( relation.id1, relation.id2, { relation, width: getLabelWidth(relation.title), height: conf3.labelHeight * common_default.getRows(relation.title).length, labelpos: "c" }, "id" + cnt4 ); }); layout(graph); log.debug("Graph after layout", graph.nodes()); const svgElem = diagram27.node(); graph.nodes().forEach(function(v3) { if (v3 !== void 0 && graph.node(v3) !== void 0) { log.warn("Node " + v3 + ": " + JSON.stringify(graph.node(v3))); root3.select("#" + svgElem.id + " #" + v3).attr( "transform", "translate(" + (graph.node(v3).x - graph.node(v3).width / 2) + "," + (graph.node(v3).y + (transformationLog[v3] ? transformationLog[v3].y : 0) - graph.node(v3).height / 2) + " )" ); root3.select("#" + svgElem.id + " #" + v3).attr("data-x-shift", graph.node(v3).x - graph.node(v3).width / 2); const dividers = domDocument.querySelectorAll("#" + svgElem.id + " #" + v3 + " .divider"); dividers.forEach((divider2) => { const parent4 = divider2.parentElement; let pWidth = 0; let pShift = 0; if (parent4) { if (parent4.parentElement) { pWidth = parent4.parentElement.getBBox().width; } pShift = parseInt(parent4.getAttribute("data-x-shift"), 10); if (Number.isNaN(pShift)) { pShift = 0; } } divider2.setAttribute("x1", 0 - pShift + 8); divider2.setAttribute("x2", pWidth - pShift - 8); }); } else { log.debug("No Node " + v3 + ": " + JSON.stringify(graph.node(v3))); } }); let stateBox = svgElem.getBBox(); graph.edges().forEach(function(e3) { if (e3 !== void 0 && graph.edge(e3) !== void 0) { log.debug("Edge " + e3.v + " -> " + e3.w + ": " + JSON.stringify(graph.edge(e3))); drawEdge(diagram27, graph.edge(e3), graph.edge(e3).relation); } }); stateBox = svgElem.getBBox(); const stateInfo = { id: parentId ? parentId : "root", label: parentId ? parentId : "root", width: 0, height: 0 }; stateInfo.width = stateBox.width + 2 * conf3.padding; stateInfo.height = stateBox.height + 2 * conf3.padding; log.debug("Doc rendered", stateInfo, graph); return stateInfo; }, "renderDoc"); stateRenderer_default = { setConf: setConf4, draw: draw14 }; } }); // src/diagrams/state/stateDiagram.ts var stateDiagram_exports = {}; __export(stateDiagram_exports, { diagram: () => diagram14 }); var diagram14; var init_stateDiagram2 = __esm({ "src/diagrams/state/stateDiagram.ts"() { "use strict"; init_stateDiagram(); init_stateDb(); init_styles10(); init_stateRenderer(); diagram14 = { parser: stateDiagram_default, get db() { return new StateDB(1); }, renderer: stateRenderer_default, styles: styles_default10, init: /* @__PURE__ */ __name((cnf) => { if (!cnf.state) { cnf.state = {}; } cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; }, "init") }; } }); // src/diagrams/state/stateDiagram-v2.ts var stateDiagram_v2_exports = {}; __export(stateDiagram_v2_exports, { diagram: () => diagram15 }); var diagram15; var init_stateDiagram_v2 = __esm({ "src/diagrams/state/stateDiagram-v2.ts"() { "use strict"; init_stateDiagram(); init_stateDb(); init_styles10(); init_stateRenderer_v3_unified(); diagram15 = { parser: stateDiagram_default, get db() { return new StateDB(2); }, renderer: stateRenderer_v3_unified_default, styles: styles_default10, init: /* @__PURE__ */ __name((cnf) => { if (!cnf.state) { cnf.state = {}; } cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; }, "init") }; } }); // src/diagrams/user-journey/parser/journey.jison var parser14, journey_default; var init_journey = __esm({ "src/diagrams/user-journey/parser/journey.jison"() { "use strict"; parser14 = (function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) { for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ; return o3; }, "o"), $V0 = [6, 8, 10, 11, 12, 14, 16, 17, 18], $V1 = [1, 9], $V2 = [1, 10], $V3 = [1, 11], $V4 = [1, 12], $V5 = [1, 13], $V6 = [1, 14]; var parser24 = { trace: /* @__PURE__ */ __name(function trace() { }, "trace"), yy: {}, symbols_: { "error": 2, "start": 3, "journey": 4, "document": 5, "EOF": 6, "line": 7, "SPACE": 8, "statement": 9, "NEWLINE": 10, "title": 11, "acc_title": 12, "acc_title_value": 13, "acc_descr": 14, "acc_descr_value": 15, "acc_descr_multiline_value": 16, "section": 17, "taskName": 18, "taskData": 19, "$accept": 0, "$end": 1 }, terminals_: { 2: "error", 4: "journey", 6: "EOF", 8: "SPACE", 10: "NEWLINE", 11: "title", 12: "acc_title", 13: "acc_title_value", 14: "acc_descr", 15: "acc_descr_value", 16: "acc_descr_multiline_value", 17: "section", 18: "taskName", 19: "taskData" }, productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [9, 1], [9, 2], [9, 2], [9, 1], [9, 1], [9, 2]], performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { var $0 = $$.length - 1; switch (yystate) { case 1: return $$[$0 - 1]; break; case 2: this.$ = []; break; case 3: $$[$0 - 1].push($$[$0]); this.$ = $$[$0 - 1]; break; case 4: case 5: this.$ = $$[$0]; break; case 6: case 7: this.$ = []; break; case 8: yy.setDiagramTitle($$[$0].substr(6)); this.$ = $$[$0].substr(6); break; case 9: this.$ = $$[$0].trim(); yy.setAccTitle(this.$); break; case 10: case 11: this.$ = $$[$0].trim(); yy.setAccDescription(this.$); break; case 12: yy.addSection($$[$0].substr(8)); this.$ = $$[$0].substr(8); break; case 13: yy.addTask($$[$0 - 1], $$[$0]); this.$ = "task"; break; } }, "anonymous"), table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o2($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: $V1, 12: $V2, 14: $V3, 16: $V4, 17: $V5, 18: $V6 }, o2($V0, [2, 7], { 1: [2, 1] }), o2($V0, [2, 3]), { 9: 15, 11: $V1, 12: $V2, 14: $V3, 16: $V4, 17: $V5, 18: $V6 }, o2($V0, [2, 5]), o2($V0, [2, 6]), o2($V0, [2, 8]), { 13: [1, 16] }, { 15: [1, 17] }, o2($V0, [2, 11]), o2($V0, [2, 12]), { 19: [1, 18] }, o2($V0, [2, 4]), o2($V0, [2, 9]), o2($V0, [2, 10]), o2($V0, [2, 13])], defaultActions: {}, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (hash.recoverable) { this.trace(str2); } else { var error3 = new Error(str2); error3.hash = hash; throw error3; } }, "parseError"), parse: /* @__PURE__ */ __name(function parse7(input) { var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1; var args = lstack.slice.call(arguments, 1); var lexer2 = Object.create(this.lexer); var sharedState = { yy: {} }; for (var k2 in this.yy) { if (Object.prototype.hasOwnProperty.call(this.yy, k2)) { sharedState.yy[k2] = this.yy[k2]; } } lexer2.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer2; sharedState.yy.parser = this; if (typeof lexer2.yylloc == "undefined") { lexer2.yylloc = {}; } var yyloc = lexer2.yylloc; lstack.push(yyloc); var ranges = lexer2.options && lexer2.options.ranges; if (typeof sharedState.yy.parseError === "function") { this.parseError = sharedState.yy.parseError; } else { this.parseError = Object.getPrototypeOf(this).parseError; } function popStack(n2) { stack.length = stack.length - 2 * n2; vstack.length = vstack.length - n2; lstack.length = lstack.length - n2; } __name(popStack, "popStack"); function lex() { var token2; token2 = tstack.pop() || lexer2.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex, "lex"); var symbol, preErrorSymbol, state3, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state3 = stack[stack.length - 1]; if (this.defaultActions[state3]) { action = this.defaultActions[state3]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex(); } action = table[state3] && table[state3][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state3]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer2.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; } else { errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); } this.parseError(errStr, { text: lexer2.match, token: this.terminals_[symbol] || symbol, line: lexer2.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state3 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer2.yytext); lstack.push(lexer2.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer2.yyleng; yytext = lexer2.yytext; yylineno = lexer2.yylineno; yyloc = lexer2.yylloc; if (recovering > 0) { recovering--; } } else { symbol = preErrorSymbol; preErrorSymbol = null; } break; case 2: len = this.productions_[action[1]][1]; yyval.$ = vstack[vstack.length - len]; yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; if (ranges) { yyval._$.range = [ lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1] ]; } r2 = this.performAction.apply(yyval, [ yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack ].concat(args)); if (typeof r2 !== "undefined") { return r2; } if (len) { stack = stack.slice(0, -1 * len * 2); vstack = vstack.slice(0, -1 * len); lstack = lstack.slice(0, -1 * len); } stack.push(this.productions_[action[1]][0]); vstack.push(yyval.$); lstack.push(yyval._$); newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]]; stack.push(newState2); break; case 3: return true; } } return true; }, "parse") }; var lexer = /* @__PURE__ */ (function() { var lexer2 = { EOF: 1, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (this.yy.parser) { this.yy.parser.parseError(str2, hash); } else { throw new Error(str2); } }, "parseError"), // resets the lexer, sets new input setInput: /* @__PURE__ */ __name(function(input, yy) { this.yy = yy || this.yy || {}; this._input = input; this._more = this._backtrack = this.done = false; 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 }; if (this.options.ranges) { this.yylloc.range = [0, 0]; } this.offset = 0; return this; }, "setInput"), // consumes and returns one char from the input input: /* @__PURE__ */ __name(function() { var ch = this._input[0]; this.yytext += ch; this.yyleng++; this.offset++; this.match += ch; this.matched += ch; var lines = ch.match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno++; this.yylloc.last_line++; } else { this.yylloc.last_column++; } if (this.options.ranges) { this.yylloc.range[1]++; } this._input = this._input.slice(1); return ch; }, "input"), // unshifts one char (or a string) into the input unput: /* @__PURE__ */ __name(function(ch) { var len = ch.length; var lines = ch.split(/(?:\r\n?|\n)/g); this._input = ch + this._input; this.yytext = this.yytext.substr(0, this.yytext.length - len); this.offset -= len; var oldLines = 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); if (lines.length - 1) { this.yylineno -= lines.length - 1; } var r2 = this.yylloc.range; this.yylloc = { first_line: this.yylloc.first_line, last_line: this.yylineno + 1, first_column: this.yylloc.first_column, last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len }; if (this.options.ranges) { this.yylloc.range = [r2[0], r2[0] + this.yyleng - len]; } this.yyleng = this.yytext.length; return this; }, "unput"), // When called from action, caches matched text and appends it on next action more: /* @__PURE__ */ __name(function() { this._more = true; return this; }, "more"), // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. reject: /* @__PURE__ */ __name(function() { if (this.options.backtrack_lexer) { this._backtrack = true; } 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"), // retain first n characters of the match less: /* @__PURE__ */ __name(function(n2) { this.unput(this.match.slice(n2)); }, "less"), // displays already matched input, i.e. for error messages pastInput: /* @__PURE__ */ __name(function() { var past = this.matched.substr(0, this.matched.length - this.match.length); return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); }, "pastInput"), // displays upcoming input, i.e. for error messages upcomingInput: /* @__PURE__ */ __name(function() { var next3 = this.match; if (next3.length < 20) { next3 += this._input.substr(0, 20 - next3.length); } return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, ""); }, "upcomingInput"), // displays the character position where the lexing error occurred, i.e. for error messages showPosition: /* @__PURE__ */ __name(function() { var pre = this.pastInput(); var c3 = new Array(pre.length + 1).join("-"); return pre + this.upcomingInput() + "\n" + c3 + "^"; }, "showPosition"), // test the lexed token: return FALSE when not a match, otherwise return token test_match: /* @__PURE__ */ __name(function(match2, indexed_rule) { var token2, lines, backup; if (this.options.backtrack_lexer) { backup = { 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 }; if (this.options.ranges) { backup.yylloc.range = this.yylloc.range.slice(0); } } lines = match2[0].match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno += lines.length; } this.yylloc = { first_line: this.yylloc.last_line, last_line: this.yylineno + 1, first_column: this.yylloc.last_column, last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; this.yyleng = this.yytext.length; if (this.options.ranges) { this.yylloc.range = [this.offset, this.offset += this.yyleng]; } this._more = false; this._backtrack = false; this._input = this._input.slice(match2[0].length); this.matched += match2[0]; token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); if (this.done && this._input) { this.done = false; } if (token2) { return token2; } else if (this._backtrack) { for (var k2 in backup) { this[k2] = backup[k2]; } return false; } return false; }, "test_match"), // return next match in input next: /* @__PURE__ */ __name(function() { if (this.done) { return this.EOF; } if (!this._input) { this.done = true; } var token2, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[index]); if (token2 !== false) { return token2; } return false; } if (this._input === "") { return this.EOF; } else { return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { text: "", token: null, line: this.yylineno }); } }, "next"), // return next match that has a token lex: /* @__PURE__ */ __name(function lex() { var r2 = this.next(); if (r2) { return r2; } else { return this.lex(); } }, "lex"), // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) begin: /* @__PURE__ */ __name(function begin(condition) { this.conditionStack.push(condition); }, "begin"), // pop the previously active lexer condition state off the condition stack popState: /* @__PURE__ */ __name(function popState() { var n2 = this.conditionStack.length - 1; if (n2 > 0) { return this.conditionStack.pop(); } else { return this.conditionStack[0]; } }, "popState"), // produce the lexer rule set which is active for the currently active lexer condition state _currentRules: /* @__PURE__ */ __name(function _currentRules() { if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; } else { return this.conditions["INITIAL"].rules; } }, "_currentRules"), // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available topState: /* @__PURE__ */ __name(function topState(n2) { n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0); if (n2 >= 0) { return this.conditionStack[n2]; } else { return "INITIAL"; } }, "topState"), // alias for begin(condition) pushState: /* @__PURE__ */ __name(function pushState(condition) { this.begin(condition); }, "pushState"), // return the number of states currently on the stack stateStackSize: /* @__PURE__ */ __name(function stateStackSize() { return this.conditionStack.length; }, "stateStackSize"), options: { "case-insensitive": true }, performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { var YYSTATE = YY_START; switch ($avoiding_name_collisions) { case 0: break; case 1: break; case 2: return 10; break; case 3: break; case 4: break; case 5: return 4; break; case 6: return 11; break; case 7: this.begin("acc_title"); return 12; break; case 8: this.popState(); return "acc_title_value"; break; case 9: this.begin("acc_descr"); return 14; break; case 10: this.popState(); return "acc_descr_value"; break; case 11: this.begin("acc_descr_multiline"); break; case 12: this.popState(); break; case 13: return "acc_descr_multiline_value"; break; case 14: return 17; break; case 15: return 18; break; case 16: return 19; break; case 17: return ":"; break; case 18: return 6; break; case 19: return "INVALID"; break; } }, "anonymous"), rules: [/^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:journey\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:section\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?::[^#\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i], conditions: { "acc_descr_multiline": { "rules": [12, 13], "inclusive": false }, "acc_descr": { "rules": [10], "inclusive": false }, "acc_title": { "rules": [8], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18, 19], "inclusive": true } } }; return lexer2; })(); parser24.lexer = lexer; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser24; parser24.Parser = Parser3; return new Parser3(); })(); parser14.parser = parser14; journey_default = parser14; } }); // src/diagrams/user-journey/journeyDb.js var currentSection2, sections3, tasks2, rawTasks2, clear13, addSection3, getSections3, getTasks2, updateActors, addTask2, addTaskOrg2, compileTasks2, getActors, journeyDb_default; var init_journeyDb = __esm({ "src/diagrams/user-journey/journeyDb.js"() { "use strict"; init_diagramAPI(); init_commonDb(); currentSection2 = ""; sections3 = []; tasks2 = []; rawTasks2 = []; clear13 = /* @__PURE__ */ __name(function() { sections3.length = 0; tasks2.length = 0; currentSection2 = ""; rawTasks2.length = 0; clear(); }, "clear"); addSection3 = /* @__PURE__ */ __name(function(txt) { currentSection2 = txt; sections3.push(txt); }, "addSection"); getSections3 = /* @__PURE__ */ __name(function() { return sections3; }, "getSections"); getTasks2 = /* @__PURE__ */ __name(function() { let allItemsProcessed = compileTasks2(); const maxDepth = 100; let iterationCount = 0; while (!allItemsProcessed && iterationCount < maxDepth) { allItemsProcessed = compileTasks2(); iterationCount++; } tasks2.push(...rawTasks2); return tasks2; }, "getTasks"); updateActors = /* @__PURE__ */ __name(function() { const tempActors = []; tasks2.forEach((task) => { if (task.people) { tempActors.push(...task.people); } }); const unique = new Set(tempActors); return [...unique].sort(); }, "updateActors"); addTask2 = /* @__PURE__ */ __name(function(descr, taskData) { const pieces = taskData.substr(1).split(":"); let score = 0; let peeps = []; if (pieces.length === 1) { score = Number(pieces[0]); peeps = []; } else { score = Number(pieces[0]); peeps = pieces[1].split(","); } const peopleList = peeps.map((s2) => s2.trim()); const rawTask = { section: currentSection2, type: currentSection2, people: peopleList, task: descr, score }; rawTasks2.push(rawTask); }, "addTask"); addTaskOrg2 = /* @__PURE__ */ __name(function(descr) { const newTask = { section: currentSection2, type: currentSection2, description: descr, task: descr, classes: [] }; tasks2.push(newTask); }, "addTaskOrg"); compileTasks2 = /* @__PURE__ */ __name(function() { const compileTask = /* @__PURE__ */ __name(function(pos) { return rawTasks2[pos].processed; }, "compileTask"); let allProcessed = true; for (const [i2, rawTask] of rawTasks2.entries()) { compileTask(i2); allProcessed = allProcessed && rawTask.processed; } return allProcessed; }, "compileTasks"); getActors = /* @__PURE__ */ __name(function() { return updateActors(); }, "getActors"); journeyDb_default = { getConfig: /* @__PURE__ */ __name(() => getConfig2().journey, "getConfig"), clear: clear13, setDiagramTitle, getDiagramTitle, setAccTitle, getAccTitle, setAccDescription, getAccDescription, addSection: addSection3, getSections: getSections3, getTasks: getTasks2, addTask: addTask2, addTaskOrg: addTaskOrg2, getActors }; } }); // src/diagrams/user-journey/styles.js var getStyles12, styles_default11; var init_styles11 = __esm({ "src/diagrams/user-journey/styles.js"() { "use strict"; init_globalStyles(); getStyles12 = /* @__PURE__ */ __name((options2) => `.label { font-family: ${options2.fontFamily}; color: ${options2.textColor}; } .mouth { stroke: #666; } line { stroke: ${options2.textColor} } .legend { fill: ${options2.textColor}; font-family: ${options2.fontFamily}; } .label text { fill: #333; } .label { color: ${options2.textColor} } .face { ${options2.faceColor ? `fill: ${options2.faceColor}` : "fill: #FFF8DC"}; stroke: #999; } .node rect, .node circle, .node ellipse, .node polygon, .node path { fill: ${options2.mainBkg}; stroke: ${options2.nodeBorder}; stroke-width: 1px; } .node .label { text-align: center; } .node.clickable { cursor: pointer; } .arrowheadPath { fill: ${options2.arrowheadColor}; } .edgePath .path { stroke: ${options2.lineColor}; stroke-width: 1.5px; } .flowchart-link { stroke: ${options2.lineColor}; fill: none; } .edgeLabel { background-color: ${options2.edgeLabelBackground}; rect { opacity: 0.5; } text-align: center; } .cluster rect { } .cluster text { fill: ${options2.titleColor}; } div.mermaidTooltip { position: absolute; text-align: center; max-width: 200px; padding: 2px; font-family: ${options2.fontFamily}; font-size: 12px; background: ${options2.tertiaryColor}; border: 1px solid ${options2.border2}; border-radius: 2px; pointer-events: none; z-index: 100; } .task-type-0, .section-type-0 { ${options2.fillType0 ? `fill: ${options2.fillType0}` : ""}; } .task-type-1, .section-type-1 { ${options2.fillType0 ? `fill: ${options2.fillType1}` : ""}; } .task-type-2, .section-type-2 { ${options2.fillType0 ? `fill: ${options2.fillType2}` : ""}; } .task-type-3, .section-type-3 { ${options2.fillType0 ? `fill: ${options2.fillType3}` : ""}; } .task-type-4, .section-type-4 { ${options2.fillType0 ? `fill: ${options2.fillType4}` : ""}; } .task-type-5, .section-type-5 { ${options2.fillType0 ? `fill: ${options2.fillType5}` : ""}; } .task-type-6, .section-type-6 { ${options2.fillType0 ? `fill: ${options2.fillType6}` : ""}; } .task-type-7, .section-type-7 { ${options2.fillType0 ? `fill: ${options2.fillType7}` : ""}; } .actor-0 { ${options2.actor0 ? `fill: ${options2.actor0}` : ""}; } .actor-1 { ${options2.actor1 ? `fill: ${options2.actor1}` : ""}; } .actor-2 { ${options2.actor2 ? `fill: ${options2.actor2}` : ""}; } .actor-3 { ${options2.actor3 ? `fill: ${options2.actor3}` : ""}; } .actor-4 { ${options2.actor4 ? `fill: ${options2.actor4}` : ""}; } .actor-5 { ${options2.actor5 ? `fill: ${options2.actor5}` : ""}; } ${getIconStyles()} `, "getStyles"); styles_default11 = getStyles12; } }); // src/diagrams/user-journey/svgDraw.js var drawRect5, drawFace, drawCircle, drawText4, drawLabel2, drawSection, taskCount, drawTask, drawBackgroundRect3, _drawTextCandidateFunc3, initGraphics, svgDraw_default3; var init_svgDraw3 = __esm({ "src/diagrams/user-journey/svgDraw.js"() { "use strict"; init_src32(); init_svgDrawCommon(); drawRect5 = /* @__PURE__ */ __name(function(elem, rectData) { return drawRect(elem, rectData); }, "drawRect"); drawFace = /* @__PURE__ */ __name(function(element3, faceData) { const radius2 = 15; const circleElement = element3.append("circle").attr("cx", faceData.cx).attr("cy", faceData.cy).attr("class", "face").attr("r", radius2).attr("stroke-width", 2).attr("overflow", "visible"); const face = element3.append("g"); face.append("circle").attr("cx", faceData.cx - radius2 / 3).attr("cy", faceData.cy - radius2 / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); face.append("circle").attr("cx", faceData.cx + radius2 / 3).attr("cy", faceData.cy - radius2 / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); function smile(face2) { const arc = arc_default().startAngle(Math.PI / 2).endAngle(3 * (Math.PI / 2)).innerRadius(radius2 / 2).outerRadius(radius2 / 2.2); face2.append("path").attr("class", "mouth").attr("d", arc).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 2) + ")"); } __name(smile, "smile"); function sad(face2) { const arc = arc_default().startAngle(3 * Math.PI / 2).endAngle(5 * (Math.PI / 2)).innerRadius(radius2 / 2).outerRadius(radius2 / 2.2); face2.append("path").attr("class", "mouth").attr("d", arc).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 7) + ")"); } __name(sad, "sad"); function ambivalent(face2) { face2.append("line").attr("class", "mouth").attr("stroke", 2).attr("x1", faceData.cx - 5).attr("y1", faceData.cy + 7).attr("x2", faceData.cx + 5).attr("y2", faceData.cy + 7).attr("class", "mouth").attr("stroke-width", "1px").attr("stroke", "#666"); } __name(ambivalent, "ambivalent"); if (faceData.score > 3) { smile(face); } else if (faceData.score < 3) { sad(face); } else { ambivalent(face); } return circleElement; }, "drawFace"); drawCircle = /* @__PURE__ */ __name(function(element3, circleData) { const circleElement = element3.append("circle"); circleElement.attr("cx", circleData.cx); circleElement.attr("cy", circleData.cy); circleElement.attr("class", "actor-" + circleData.pos); circleElement.attr("fill", circleData.fill); circleElement.attr("stroke", circleData.stroke); circleElement.attr("r", circleData.r); if (circleElement.class !== void 0) { circleElement.attr("class", circleElement.class); } if (circleData.title !== void 0) { circleElement.append("title").text(circleData.title); } return circleElement; }, "drawCircle"); drawText4 = /* @__PURE__ */ __name(function(elem, textData) { return drawText(elem, textData); }, "drawText"); drawLabel2 = /* @__PURE__ */ __name(function(elem, txtObject) { function genPoints(x5, y6, width3, height2, cut) { return x5 + "," + y6 + " " + (x5 + width3) + "," + y6 + " " + (x5 + width3) + "," + (y6 + height2 - cut) + " " + (x5 + width3 - cut * 1.2) + "," + (y6 + height2) + " " + x5 + "," + (y6 + height2); } __name(genPoints, "genPoints"); const polygon2 = elem.append("polygon"); polygon2.attr("points", genPoints(txtObject.x, txtObject.y, 50, 20, 7)); polygon2.attr("class", "labelBox"); txtObject.y = txtObject.y + txtObject.labelMargin; txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin; drawText4(elem, txtObject); }, "drawLabel"); drawSection = /* @__PURE__ */ __name(function(elem, section, conf5) { const g2 = elem.append("g"); const rect3 = getNoteRect(); rect3.x = section.x; rect3.y = section.y; rect3.fill = section.fill; rect3.width = conf5.width * section.taskCount + // width of the tasks conf5.diagramMarginX * (section.taskCount - 1); rect3.height = conf5.height; rect3.class = "journey-section section-type-" + section.num; rect3.rx = 3; rect3.ry = 3; drawRect5(g2, rect3); _drawTextCandidateFunc3(conf5)( section.text, g2, rect3.x, rect3.y, rect3.width, rect3.height, { class: "journey-section section-type-" + section.num }, conf5, section.colour ); }, "drawSection"); taskCount = -1; drawTask = /* @__PURE__ */ __name(function(elem, task, conf5) { const center4 = task.x + conf5.width / 2; const g2 = elem.append("g"); taskCount++; const maxHeight = 300 + 5 * 30; g2.append("line").attr("id", "task" + taskCount).attr("x1", center4).attr("y1", task.y).attr("x2", center4).attr("y2", maxHeight).attr("class", "task-line").attr("stroke-width", "1px").attr("stroke-dasharray", "4 2").attr("stroke", "#666"); drawFace(g2, { cx: center4, cy: 300 + (5 - task.score) * 30, score: task.score }); const rect3 = getNoteRect(); rect3.x = task.x; rect3.y = task.y; rect3.fill = task.fill; rect3.width = conf5.width; rect3.height = conf5.height; rect3.class = "task task-type-" + task.num; rect3.rx = 3; rect3.ry = 3; drawRect5(g2, rect3); let xPos = task.x + 14; task.people.forEach((person) => { const colour = task.actors[person].color; const circle6 = { cx: xPos, cy: task.y, r: 7, fill: colour, stroke: "#000", title: person, pos: task.actors[person].position }; drawCircle(g2, circle6); xPos += 10; }); _drawTextCandidateFunc3(conf5)( task.task, g2, rect3.x, rect3.y, rect3.width, rect3.height, { class: "task" }, conf5, task.colour ); }, "drawTask"); drawBackgroundRect3 = /* @__PURE__ */ __name(function(elem, bounds4) { drawBackgroundRect(elem, bounds4); }, "drawBackgroundRect"); _drawTextCandidateFunc3 = /* @__PURE__ */ (function() { function byText(content, g2, x5, y6, width3, height2, textAttrs, colour) { const text4 = g2.append("text").attr("x", x5 + width3 / 2).attr("y", y6 + height2 / 2 + 5).style("font-color", colour).style("text-anchor", "middle").text(content); _setTextAttrs(text4, textAttrs); } __name(byText, "byText"); function byTspan(content, g2, x5, y6, width3, height2, textAttrs, conf5, colour) { const { taskFontSize, taskFontFamily } = conf5; const lines = content.split(//gi); for (let i2 = 0; i2 < lines.length; i2++) { const dy = i2 * taskFontSize - taskFontSize * (lines.length - 1) / 2; const text4 = g2.append("text").attr("x", x5 + width3 / 2).attr("y", y6).attr("fill", colour).style("text-anchor", "middle").style("font-size", taskFontSize).style("font-family", taskFontFamily); text4.append("tspan").attr("x", x5 + width3 / 2).attr("dy", dy).text(lines[i2]); text4.attr("y", y6 + height2 / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); _setTextAttrs(text4, textAttrs); } } __name(byTspan, "byTspan"); function byFo(content, g2, x5, y6, width3, height2, textAttrs, conf5) { const body = g2.append("switch"); const f2 = body.append("foreignObject").attr("x", x5).attr("y", y6).attr("width", width3).attr("height", height2).attr("position", "fixed"); const text4 = f2.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); text4.append("div").attr("class", "label").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); byTspan(content, body, x5, y6, width3, height2, textAttrs, conf5); _setTextAttrs(text4, textAttrs); } __name(byFo, "byFo"); function _setTextAttrs(toText, fromTextAttrsDict) { for (const key in fromTextAttrsDict) { if (key in fromTextAttrsDict) { toText.attr(key, fromTextAttrsDict[key]); } } } __name(_setTextAttrs, "_setTextAttrs"); return function(conf5) { return conf5.textPlacement === "fo" ? byFo : conf5.textPlacement === "old" ? byText : byTspan; }; })(); initGraphics = /* @__PURE__ */ __name(function(graphics) { graphics.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 5).attr("refY", 2).attr("markerWidth", 6).attr("markerHeight", 4).attr("orient", "auto").append("path").attr("d", "M 0,0 V 4 L6,2 Z"); }, "initGraphics"); svgDraw_default3 = { drawRect: drawRect5, drawCircle, drawSection, drawText: drawText4, drawLabel: drawLabel2, drawTask, drawBackgroundRect: drawBackgroundRect3, initGraphics }; } }); // src/diagrams/user-journey/journeyRenderer.ts function drawActorLegend(diagram27) { const conf5 = getConfig2().journey; const maxLabelWidth = conf5.maxLabelWidth; maxWidth = 0; let yPos = 60; Object.keys(actors).forEach((person) => { const colour = actors[person].color; const circleData = { cx: 20, cy: yPos, r: 7, fill: colour, stroke: "#000", pos: actors[person].position }; svgDraw_default3.drawCircle(diagram27, circleData); let measureText = diagram27.append("text").attr("visibility", "hidden").text(person); const fullTextWidth = measureText.node().getBoundingClientRect().width; measureText.remove(); let lines = []; if (fullTextWidth <= maxLabelWidth) { lines = [person]; } else { const words = person.split(" "); let currentLine = ""; measureText = diagram27.append("text").attr("visibility", "hidden"); words.forEach((word) => { const testLine = currentLine ? `${currentLine} ${word}` : word; measureText.text(testLine); const textWidth = measureText.node().getBoundingClientRect().width; if (textWidth > maxLabelWidth) { if (currentLine) { lines.push(currentLine); } currentLine = word; measureText.text(word); if (measureText.node().getBoundingClientRect().width > maxLabelWidth) { let brokenWord = ""; for (const char2 of word) { brokenWord += char2; measureText.text(brokenWord + "-"); if (measureText.node().getBoundingClientRect().width > maxLabelWidth) { lines.push(brokenWord.slice(0, -1) + "-"); brokenWord = char2; } } currentLine = brokenWord; } } else { currentLine = testLine; } }); if (currentLine) { lines.push(currentLine); } measureText.remove(); } lines.forEach((line2, index) => { const labelData = { x: 40, y: yPos + 7 + index * 20, fill: "#666", text: line2, textMargin: conf5.boxTextMargin ?? 5 }; const textElement = svgDraw_default3.drawText(diagram27, labelData); const lineWidth = textElement.node().getBoundingClientRect().width; if (lineWidth > maxWidth && lineWidth > conf5.leftMargin - lineWidth) { maxWidth = lineWidth; } }); yPos += Math.max(20, lines.length * 20); }); } var setConf5, actors, maxWidth, conf4, leftMargin, draw15, bounds3, fills, textColours, drawTasks, journeyRenderer_default; var init_journeyRenderer = __esm({ "src/diagrams/user-journey/journeyRenderer.ts"() { "use strict"; init_src32(); init_svgDraw3(); init_diagramAPI(); init_setupGraphViewbox(); setConf5 = /* @__PURE__ */ __name(function(cnf) { const keys2 = Object.keys(cnf); keys2.forEach(function(key) { conf4[key] = cnf[key]; }); }, "setConf"); actors = {}; maxWidth = 0; __name(drawActorLegend, "drawActorLegend"); conf4 = getConfig2().journey; leftMargin = 0; draw15 = /* @__PURE__ */ __name(function(text4, id30, version3, diagObj) { const configObject = getConfig2(); const titleColor = configObject.journey.titleColor; const titleFontSize = configObject.journey.titleFontSize; const titleFontFamily = configObject.journey.titleFontFamily; const securityLevel = configObject.securityLevel; let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = select_default2("#i" + id30); } const root3 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body"); bounds3.init(); const diagram27 = root3.select("#" + id30); svgDraw_default3.initGraphics(diagram27); const tasks4 = diagObj.db.getTasks(); const title2 = diagObj.db.getDiagramTitle(); const actorNames = diagObj.db.getActors(); for (const member in actors) { delete actors[member]; } let actorPos = 0; actorNames.forEach((actorName) => { actors[actorName] = { color: conf4.actorColours[actorPos % conf4.actorColours.length], position: actorPos }; actorPos++; }); drawActorLegend(diagram27); leftMargin = conf4.leftMargin + maxWidth; bounds3.insert(0, 0, leftMargin, Object.keys(actors).length * 50); drawTasks(diagram27, tasks4, 0); const box = bounds3.getBounds(); if (title2) { diagram27.append("text").text(title2).attr("x", leftMargin).attr("font-size", titleFontSize).attr("font-weight", "bold").attr("y", 25).attr("fill", titleColor).attr("font-family", titleFontFamily); } const height2 = box.stopy - box.starty + 2 * conf4.diagramMarginY; const width3 = leftMargin + box.stopx + 2 * conf4.diagramMarginX; configureSvgSize(diagram27, height2, width3, conf4.useMaxWidth); diagram27.append("line").attr("x1", leftMargin).attr("y1", conf4.height * 4).attr("x2", width3 - leftMargin - 4).attr("y2", conf4.height * 4).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", "url(#arrowhead)"); const extraVertForTitle = title2 ? 70 : 0; diagram27.attr("viewBox", `${box.startx} -25 ${width3} ${height2 + extraVertForTitle}`); diagram27.attr("preserveAspectRatio", "xMinYMin meet"); diagram27.attr("height", height2 + extraVertForTitle + 25); }, "draw"); bounds3 = { data: { startx: void 0, stopx: void 0, starty: void 0, stopy: void 0 }, verticalPos: 0, sequenceItems: [], init: /* @__PURE__ */ __name(function() { this.sequenceItems = []; this.data = { startx: void 0, stopx: void 0, starty: void 0, stopy: void 0 }; this.verticalPos = 0; }, "init"), updateVal: /* @__PURE__ */ __name(function(obj, key, val, fun) { if (obj[key] === void 0) { obj[key] = val; } else { obj[key] = fun(val, obj[key]); } }, "updateVal"), updateBounds: /* @__PURE__ */ __name(function(startx, starty, stopx, stopy) { const conf5 = getConfig2().journey; const _self = this; let cnt4 = 0; function updateFn(type3) { return /* @__PURE__ */ __name(function updateItemBounds(item) { cnt4++; const n2 = _self.sequenceItems.length - cnt4 + 1; _self.updateVal(item, "starty", starty - n2 * conf5.boxMargin, Math.min); _self.updateVal(item, "stopy", stopy + n2 * conf5.boxMargin, Math.max); _self.updateVal(bounds3.data, "startx", startx - n2 * conf5.boxMargin, Math.min); _self.updateVal(bounds3.data, "stopx", stopx + n2 * conf5.boxMargin, Math.max); if (!(type3 === "activation")) { _self.updateVal(item, "startx", startx - n2 * conf5.boxMargin, Math.min); _self.updateVal(item, "stopx", stopx + n2 * conf5.boxMargin, Math.max); _self.updateVal(bounds3.data, "starty", starty - n2 * conf5.boxMargin, Math.min); _self.updateVal(bounds3.data, "stopy", stopy + n2 * conf5.boxMargin, Math.max); } }, "updateItemBounds"); } __name(updateFn, "updateFn"); this.sequenceItems.forEach(updateFn()); }, "updateBounds"), insert: /* @__PURE__ */ __name(function(startx, starty, stopx, stopy) { const _startx = Math.min(startx, stopx); const _stopx = Math.max(startx, stopx); const _starty = Math.min(starty, stopy); const _stopy = Math.max(starty, stopy); this.updateVal(bounds3.data, "startx", _startx, Math.min); this.updateVal(bounds3.data, "starty", _starty, Math.min); this.updateVal(bounds3.data, "stopx", _stopx, Math.max); this.updateVal(bounds3.data, "stopy", _stopy, Math.max); this.updateBounds(_startx, _starty, _stopx, _stopy); }, "insert"), bumpVerticalPos: /* @__PURE__ */ __name(function(bump) { this.verticalPos = this.verticalPos + bump; this.data.stopy = this.verticalPos; }, "bumpVerticalPos"), getVerticalPos: /* @__PURE__ */ __name(function() { return this.verticalPos; }, "getVerticalPos"), getBounds: /* @__PURE__ */ __name(function() { return this.data; }, "getBounds") }; fills = conf4.sectionFills; textColours = conf4.sectionColours; drawTasks = /* @__PURE__ */ __name(function(diagram27, tasks4, verticalPos) { const conf5 = getConfig2().journey; let lastSection = ""; const sectionVHeight = conf5.height * 2 + conf5.diagramMarginY; const taskPos = verticalPos + sectionVHeight; let sectionNumber = 0; let fill = "#CCC"; let colour = "black"; let num = 0; for (const [i2, task] of tasks4.entries()) { if (lastSection !== task.section) { fill = fills[sectionNumber % fills.length]; num = sectionNumber % fills.length; colour = textColours[sectionNumber % textColours.length]; let taskInSectionCount = 0; const currentSection4 = task.section; for (let taskIndex = i2; taskIndex < tasks4.length; taskIndex++) { if (tasks4[taskIndex].section == currentSection4) { taskInSectionCount = taskInSectionCount + 1; } else { break; } } const section = { x: i2 * conf5.taskMargin + i2 * conf5.width + leftMargin, y: 50, text: task.section, fill, num, colour, taskCount: taskInSectionCount }; svgDraw_default3.drawSection(diagram27, section, conf5); lastSection = task.section; sectionNumber++; } const taskActors = task.people.reduce((acc, actorName) => { if (actors[actorName]) { acc[actorName] = actors[actorName]; } return acc; }, {}); task.x = i2 * conf5.taskMargin + i2 * conf5.width + leftMargin; task.y = taskPos; task.width = conf5.diagramMarginX; task.height = conf5.diagramMarginY; task.colour = colour; task.fill = fill; task.num = num; task.actors = taskActors; svgDraw_default3.drawTask(diagram27, task, conf5); bounds3.insert(task.x, task.y, task.x + task.width + conf5.taskMargin, 300 + 5 * 30); } }, "drawTasks"); journeyRenderer_default = { setConf: setConf5, draw: draw15 }; } }); // src/diagrams/user-journey/journeyDiagram.ts var journeyDiagram_exports = {}; __export(journeyDiagram_exports, { diagram: () => diagram16 }); var diagram16; var init_journeyDiagram = __esm({ "src/diagrams/user-journey/journeyDiagram.ts"() { "use strict"; init_journey(); init_journeyDb(); init_styles11(); init_journeyRenderer(); diagram16 = { parser: journey_default, db: journeyDb_default, renderer: journeyRenderer_default, styles: styles_default11, init: /* @__PURE__ */ __name((cnf) => { journeyRenderer_default.setConf(cnf.journey); journeyDb_default.clear(); }, "init") }; } }); // src/diagrams/timeline/parser/timeline.jison var parser15, timeline_default; var init_timeline = __esm({ "src/diagrams/timeline/parser/timeline.jison"() { "use strict"; parser15 = (function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) { for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ; return o3; }, "o"), $V0 = [6, 8, 10, 11, 12, 14, 16, 17, 20, 21], $V1 = [1, 9], $V2 = [1, 10], $V3 = [1, 11], $V4 = [1, 12], $V5 = [1, 13], $V6 = [1, 16], $V7 = [1, 17]; var parser24 = { trace: /* @__PURE__ */ __name(function trace() { }, "trace"), yy: {}, symbols_: { "error": 2, "start": 3, "timeline": 4, "document": 5, "EOF": 6, "line": 7, "SPACE": 8, "statement": 9, "NEWLINE": 10, "title": 11, "acc_title": 12, "acc_title_value": 13, "acc_descr": 14, "acc_descr_value": 15, "acc_descr_multiline_value": 16, "section": 17, "period_statement": 18, "event_statement": 19, "period": 20, "event": 21, "$accept": 0, "$end": 1 }, terminals_: { 2: "error", 4: "timeline", 6: "EOF", 8: "SPACE", 10: "NEWLINE", 11: "title", 12: "acc_title", 13: "acc_title_value", 14: "acc_descr", 15: "acc_descr_value", 16: "acc_descr_multiline_value", 17: "section", 20: "period", 21: "event" }, productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [9, 1], [9, 2], [9, 2], [9, 1], [9, 1], [9, 1], [9, 1], [18, 1], [19, 1]], performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { var $0 = $$.length - 1; switch (yystate) { case 1: return $$[$0 - 1]; break; case 2: this.$ = []; break; case 3: $$[$0 - 1].push($$[$0]); this.$ = $$[$0 - 1]; break; case 4: case 5: this.$ = $$[$0]; break; case 6: case 7: this.$ = []; break; case 8: yy.getCommonDb().setDiagramTitle($$[$0].substr(6)); this.$ = $$[$0].substr(6); break; case 9: this.$ = $$[$0].trim(); yy.getCommonDb().setAccTitle(this.$); break; case 10: case 11: this.$ = $$[$0].trim(); yy.getCommonDb().setAccDescription(this.$); break; case 12: yy.addSection($$[$0].substr(8)); this.$ = $$[$0].substr(8); break; case 15: yy.addTask($$[$0], 0, ""); this.$ = $$[$0]; break; case 16: yy.addEvent($$[$0].substr(2)); this.$ = $$[$0]; break; } }, "anonymous"), table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o2($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: $V1, 12: $V2, 14: $V3, 16: $V4, 17: $V5, 18: 14, 19: 15, 20: $V6, 21: $V7 }, o2($V0, [2, 7], { 1: [2, 1] }), o2($V0, [2, 3]), { 9: 18, 11: $V1, 12: $V2, 14: $V3, 16: $V4, 17: $V5, 18: 14, 19: 15, 20: $V6, 21: $V7 }, o2($V0, [2, 5]), o2($V0, [2, 6]), o2($V0, [2, 8]), { 13: [1, 19] }, { 15: [1, 20] }, o2($V0, [2, 11]), o2($V0, [2, 12]), o2($V0, [2, 13]), o2($V0, [2, 14]), o2($V0, [2, 15]), o2($V0, [2, 16]), o2($V0, [2, 4]), o2($V0, [2, 9]), o2($V0, [2, 10])], defaultActions: {}, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (hash.recoverable) { this.trace(str2); } else { var error3 = new Error(str2); error3.hash = hash; throw error3; } }, "parseError"), parse: /* @__PURE__ */ __name(function parse7(input) { var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1; var args = lstack.slice.call(arguments, 1); var lexer2 = Object.create(this.lexer); var sharedState = { yy: {} }; for (var k2 in this.yy) { if (Object.prototype.hasOwnProperty.call(this.yy, k2)) { sharedState.yy[k2] = this.yy[k2]; } } lexer2.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer2; sharedState.yy.parser = this; if (typeof lexer2.yylloc == "undefined") { lexer2.yylloc = {}; } var yyloc = lexer2.yylloc; lstack.push(yyloc); var ranges = lexer2.options && lexer2.options.ranges; if (typeof sharedState.yy.parseError === "function") { this.parseError = sharedState.yy.parseError; } else { this.parseError = Object.getPrototypeOf(this).parseError; } function popStack(n2) { stack.length = stack.length - 2 * n2; vstack.length = vstack.length - n2; lstack.length = lstack.length - n2; } __name(popStack, "popStack"); function lex() { var token2; token2 = tstack.pop() || lexer2.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex, "lex"); var symbol, preErrorSymbol, state3, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state3 = stack[stack.length - 1]; if (this.defaultActions[state3]) { action = this.defaultActions[state3]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex(); } action = table[state3] && table[state3][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state3]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer2.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; } else { errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); } this.parseError(errStr, { text: lexer2.match, token: this.terminals_[symbol] || symbol, line: lexer2.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state3 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer2.yytext); lstack.push(lexer2.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer2.yyleng; yytext = lexer2.yytext; yylineno = lexer2.yylineno; yyloc = lexer2.yylloc; if (recovering > 0) { recovering--; } } else { symbol = preErrorSymbol; preErrorSymbol = null; } break; case 2: len = this.productions_[action[1]][1]; yyval.$ = vstack[vstack.length - len]; yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; if (ranges) { yyval._$.range = [ lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1] ]; } r2 = this.performAction.apply(yyval, [ yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack ].concat(args)); if (typeof r2 !== "undefined") { return r2; } if (len) { stack = stack.slice(0, -1 * len * 2); vstack = vstack.slice(0, -1 * len); lstack = lstack.slice(0, -1 * len); } stack.push(this.productions_[action[1]][0]); vstack.push(yyval.$); lstack.push(yyval._$); newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]]; stack.push(newState2); break; case 3: return true; } } return true; }, "parse") }; var lexer = /* @__PURE__ */ (function() { var lexer2 = { EOF: 1, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (this.yy.parser) { this.yy.parser.parseError(str2, hash); } else { throw new Error(str2); } }, "parseError"), // resets the lexer, sets new input setInput: /* @__PURE__ */ __name(function(input, yy) { this.yy = yy || this.yy || {}; this._input = input; this._more = this._backtrack = this.done = false; 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 }; if (this.options.ranges) { this.yylloc.range = [0, 0]; } this.offset = 0; return this; }, "setInput"), // consumes and returns one char from the input input: /* @__PURE__ */ __name(function() { var ch = this._input[0]; this.yytext += ch; this.yyleng++; this.offset++; this.match += ch; this.matched += ch; var lines = ch.match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno++; this.yylloc.last_line++; } else { this.yylloc.last_column++; } if (this.options.ranges) { this.yylloc.range[1]++; } this._input = this._input.slice(1); return ch; }, "input"), // unshifts one char (or a string) into the input unput: /* @__PURE__ */ __name(function(ch) { var len = ch.length; var lines = ch.split(/(?:\r\n?|\n)/g); this._input = ch + this._input; this.yytext = this.yytext.substr(0, this.yytext.length - len); this.offset -= len; var oldLines = 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); if (lines.length - 1) { this.yylineno -= lines.length - 1; } var r2 = this.yylloc.range; this.yylloc = { first_line: this.yylloc.first_line, last_line: this.yylineno + 1, first_column: this.yylloc.first_column, last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len }; if (this.options.ranges) { this.yylloc.range = [r2[0], r2[0] + this.yyleng - len]; } this.yyleng = this.yytext.length; return this; }, "unput"), // When called from action, caches matched text and appends it on next action more: /* @__PURE__ */ __name(function() { this._more = true; return this; }, "more"), // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. reject: /* @__PURE__ */ __name(function() { if (this.options.backtrack_lexer) { this._backtrack = true; } 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"), // retain first n characters of the match less: /* @__PURE__ */ __name(function(n2) { this.unput(this.match.slice(n2)); }, "less"), // displays already matched input, i.e. for error messages pastInput: /* @__PURE__ */ __name(function() { var past = this.matched.substr(0, this.matched.length - this.match.length); return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); }, "pastInput"), // displays upcoming input, i.e. for error messages upcomingInput: /* @__PURE__ */ __name(function() { var next3 = this.match; if (next3.length < 20) { next3 += this._input.substr(0, 20 - next3.length); } return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, ""); }, "upcomingInput"), // displays the character position where the lexing error occurred, i.e. for error messages showPosition: /* @__PURE__ */ __name(function() { var pre = this.pastInput(); var c3 = new Array(pre.length + 1).join("-"); return pre + this.upcomingInput() + "\n" + c3 + "^"; }, "showPosition"), // test the lexed token: return FALSE when not a match, otherwise return token test_match: /* @__PURE__ */ __name(function(match2, indexed_rule) { var token2, lines, backup; if (this.options.backtrack_lexer) { backup = { 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 }; if (this.options.ranges) { backup.yylloc.range = this.yylloc.range.slice(0); } } lines = match2[0].match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno += lines.length; } this.yylloc = { first_line: this.yylloc.last_line, last_line: this.yylineno + 1, first_column: this.yylloc.last_column, last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; this.yyleng = this.yytext.length; if (this.options.ranges) { this.yylloc.range = [this.offset, this.offset += this.yyleng]; } this._more = false; this._backtrack = false; this._input = this._input.slice(match2[0].length); this.matched += match2[0]; token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); if (this.done && this._input) { this.done = false; } if (token2) { return token2; } else if (this._backtrack) { for (var k2 in backup) { this[k2] = backup[k2]; } return false; } return false; }, "test_match"), // return next match in input next: /* @__PURE__ */ __name(function() { if (this.done) { return this.EOF; } if (!this._input) { this.done = true; } var token2, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[index]); if (token2 !== false) { return token2; } return false; } if (this._input === "") { return this.EOF; } else { return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { text: "", token: null, line: this.yylineno }); } }, "next"), // return next match that has a token lex: /* @__PURE__ */ __name(function lex() { var r2 = this.next(); if (r2) { return r2; } else { return this.lex(); } }, "lex"), // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) begin: /* @__PURE__ */ __name(function begin(condition) { this.conditionStack.push(condition); }, "begin"), // pop the previously active lexer condition state off the condition stack popState: /* @__PURE__ */ __name(function popState() { var n2 = this.conditionStack.length - 1; if (n2 > 0) { return this.conditionStack.pop(); } else { return this.conditionStack[0]; } }, "popState"), // produce the lexer rule set which is active for the currently active lexer condition state _currentRules: /* @__PURE__ */ __name(function _currentRules() { if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; } else { return this.conditions["INITIAL"].rules; } }, "_currentRules"), // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available topState: /* @__PURE__ */ __name(function topState(n2) { n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0); if (n2 >= 0) { return this.conditionStack[n2]; } else { return "INITIAL"; } }, "topState"), // alias for begin(condition) pushState: /* @__PURE__ */ __name(function pushState(condition) { this.begin(condition); }, "pushState"), // return the number of states currently on the stack stateStackSize: /* @__PURE__ */ __name(function stateStackSize() { return this.conditionStack.length; }, "stateStackSize"), options: { "case-insensitive": true }, performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { var YYSTATE = YY_START; switch ($avoiding_name_collisions) { case 0: break; case 1: break; case 2: return 10; break; case 3: break; case 4: break; case 5: return 4; break; case 6: return 11; break; case 7: this.begin("acc_title"); return 12; break; case 8: this.popState(); return "acc_title_value"; break; case 9: this.begin("acc_descr"); return 14; break; case 10: this.popState(); return "acc_descr_value"; break; case 11: this.begin("acc_descr_multiline"); break; case 12: this.popState(); break; case 13: return "acc_descr_multiline_value"; break; case 14: return 17; break; case 15: return 21; break; case 16: return 20; break; case 17: return 6; break; case 18: return "INVALID"; break; } }, "anonymous"), rules: [/^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:timeline\b)/i, /^(?:title\s[^\n]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:section\s[^:\n]+)/i, /^(?::\s(?:[^:\n]|:(?!\s))+)/i, /^(?:[^#:\n]+)/i, /^(?:$)/i, /^(?:.)/i], conditions: { "acc_descr_multiline": { "rules": [12, 13], "inclusive": false }, "acc_descr": { "rules": [10], "inclusive": false }, "acc_title": { "rules": [8], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18], "inclusive": true } } }; return lexer2; })(); parser24.lexer = lexer; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser24; parser24.Parser = Parser3; return new Parser3(); })(); parser15.parser = parser15; timeline_default = parser15; } }); // src/diagrams/timeline/timelineDb.js var timelineDb_exports = {}; __export(timelineDb_exports, { addEvent: () => addEvent, addSection: () => addSection4, addTask: () => addTask3, addTaskOrg: () => addTaskOrg3, clear: () => clear14, default: () => timelineDb_default, getCommonDb: () => getCommonDb2, getSections: () => getSections4, getTasks: () => getTasks3 }); var currentSection3, currentTaskId, sections4, tasks3, rawTasks3, getCommonDb2, clear14, addSection4, getSections4, getTasks3, addTask3, addEvent, addTaskOrg3, compileTasks3, timelineDb_default; var init_timelineDb = __esm({ "src/diagrams/timeline/timelineDb.js"() { "use strict"; init_commonDb(); currentSection3 = ""; currentTaskId = 0; sections4 = []; tasks3 = []; rawTasks3 = []; getCommonDb2 = /* @__PURE__ */ __name(() => commonDb_exports, "getCommonDb"); clear14 = /* @__PURE__ */ __name(function() { sections4.length = 0; tasks3.length = 0; currentSection3 = ""; rawTasks3.length = 0; clear(); }, "clear"); addSection4 = /* @__PURE__ */ __name(function(txt) { currentSection3 = txt; sections4.push(txt); }, "addSection"); getSections4 = /* @__PURE__ */ __name(function() { return sections4; }, "getSections"); getTasks3 = /* @__PURE__ */ __name(function() { let allItemsProcessed = compileTasks3(); const maxDepth = 100; let iterationCount = 0; while (!allItemsProcessed && iterationCount < maxDepth) { allItemsProcessed = compileTasks3(); iterationCount++; } tasks3.push(...rawTasks3); return tasks3; }, "getTasks"); addTask3 = /* @__PURE__ */ __name(function(period, length2, event3) { const rawTask = { id: currentTaskId++, section: currentSection3, type: currentSection3, task: period, score: length2 ? length2 : 0, //if event is defined, then add it the events array events: event3 ? [event3] : [] }; rawTasks3.push(rawTask); }, "addTask"); addEvent = /* @__PURE__ */ __name(function(event3) { const currentTask = rawTasks3.find((task) => task.id === currentTaskId - 1); currentTask.events.push(event3); }, "addEvent"); addTaskOrg3 = /* @__PURE__ */ __name(function(descr) { const newTask = { section: currentSection3, type: currentSection3, description: descr, task: descr, classes: [] }; tasks3.push(newTask); }, "addTaskOrg"); compileTasks3 = /* @__PURE__ */ __name(function() { const compileTask = /* @__PURE__ */ __name(function(pos) { return rawTasks3[pos].processed; }, "compileTask"); let allProcessed = true; for (const [i2, rawTask] of rawTasks3.entries()) { compileTask(i2); allProcessed = allProcessed && rawTask.processed; } return allProcessed; }, "compileTasks"); timelineDb_default = { clear: clear14, getCommonDb: getCommonDb2, addSection: addSection4, getSections: getSections4, getTasks: getTasks3, addTask: addTask3, addTaskOrg: addTaskOrg3, addEvent }; } }); // src/diagrams/timeline/svgDraw.js function wrap2(text4, width3) { text4.each(function() { var text5 = select_default2(this), words = text5.text().split(/(\s+|
)/).reverse(), word, line2 = [], lineHeight = 1.1, y6 = text5.attr("y"), dy = parseFloat(text5.attr("dy")), tspan = text5.text(null).append("tspan").attr("x", 0).attr("y", y6).attr("dy", dy + "em"); for (let j3 = 0; j3 < words.length; j3++) { word = words[words.length - 1 - j3]; line2.push(word); tspan.text(line2.join(" ").trim()); if (tspan.node().getComputedTextLength() > width3 || word === "
") { line2.pop(); tspan.text(line2.join(" ").trim()); if (word === "
") { line2 = [""]; } else { line2 = [word]; } tspan = text5.append("tspan").attr("x", 0).attr("y", y6).attr("dy", lineHeight + "em").text(word); } } }); } var MAX_SECTIONS, drawRect6, drawFace2, drawCircle2, drawText5, drawLabel3, drawSection2, taskCount2, drawTask2, drawBackgroundRect4, getTextObj4, getNoteRect3, _drawTextCandidateFunc4, initGraphics2, drawNode, getVirtualNodeHeight, defaultBkg, svgDraw_default4; var init_svgDraw4 = __esm({ "src/diagrams/timeline/svgDraw.js"() { "use strict"; init_src32(); MAX_SECTIONS = 12; drawRect6 = /* @__PURE__ */ __name(function(elem, rectData) { const rectElem = elem.append("rect"); rectElem.attr("x", rectData.x); rectElem.attr("y", rectData.y); rectElem.attr("fill", rectData.fill); rectElem.attr("stroke", rectData.stroke); rectElem.attr("width", rectData.width); rectElem.attr("height", rectData.height); rectElem.attr("rx", rectData.rx); rectElem.attr("ry", rectData.ry); if (rectData.class !== void 0) { rectElem.attr("class", rectData.class); } return rectElem; }, "drawRect"); drawFace2 = /* @__PURE__ */ __name(function(element3, faceData) { const radius2 = 15; const circleElement = element3.append("circle").attr("cx", faceData.cx).attr("cy", faceData.cy).attr("class", "face").attr("r", radius2).attr("stroke-width", 2).attr("overflow", "visible"); const face = element3.append("g"); face.append("circle").attr("cx", faceData.cx - radius2 / 3).attr("cy", faceData.cy - radius2 / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); face.append("circle").attr("cx", faceData.cx + radius2 / 3).attr("cy", faceData.cy - radius2 / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); function smile(face2) { const arc = arc_default().startAngle(Math.PI / 2).endAngle(3 * (Math.PI / 2)).innerRadius(radius2 / 2).outerRadius(radius2 / 2.2); face2.append("path").attr("class", "mouth").attr("d", arc).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 2) + ")"); } __name(smile, "smile"); function sad(face2) { const arc = arc_default().startAngle(3 * Math.PI / 2).endAngle(5 * (Math.PI / 2)).innerRadius(radius2 / 2).outerRadius(radius2 / 2.2); face2.append("path").attr("class", "mouth").attr("d", arc).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 7) + ")"); } __name(sad, "sad"); function ambivalent(face2) { face2.append("line").attr("class", "mouth").attr("stroke", 2).attr("x1", faceData.cx - 5).attr("y1", faceData.cy + 7).attr("x2", faceData.cx + 5).attr("y2", faceData.cy + 7).attr("class", "mouth").attr("stroke-width", "1px").attr("stroke", "#666"); } __name(ambivalent, "ambivalent"); if (faceData.score > 3) { smile(face); } else if (faceData.score < 3) { sad(face); } else { ambivalent(face); } return circleElement; }, "drawFace"); drawCircle2 = /* @__PURE__ */ __name(function(element3, circleData) { const circleElement = element3.append("circle"); circleElement.attr("cx", circleData.cx); circleElement.attr("cy", circleData.cy); circleElement.attr("class", "actor-" + circleData.pos); circleElement.attr("fill", circleData.fill); circleElement.attr("stroke", circleData.stroke); circleElement.attr("r", circleData.r); if (circleElement.class !== void 0) { circleElement.attr("class", circleElement.class); } if (circleData.title !== void 0) { circleElement.append("title").text(circleData.title); } return circleElement; }, "drawCircle"); drawText5 = /* @__PURE__ */ __name(function(elem, textData) { const nText = textData.text.replace(//gi, " "); const textElem = elem.append("text"); textElem.attr("x", textData.x); textElem.attr("y", textData.y); textElem.attr("class", "legend"); textElem.style("text-anchor", textData.anchor); if (textData.class !== void 0) { textElem.attr("class", textData.class); } const span = textElem.append("tspan"); span.attr("x", textData.x + textData.textMargin * 2); span.text(nText); return textElem; }, "drawText"); drawLabel3 = /* @__PURE__ */ __name(function(elem, txtObject) { function genPoints(x5, y6, width3, height2, cut) { return x5 + "," + y6 + " " + (x5 + width3) + "," + y6 + " " + (x5 + width3) + "," + (y6 + height2 - cut) + " " + (x5 + width3 - cut * 1.2) + "," + (y6 + height2) + " " + x5 + "," + (y6 + height2); } __name(genPoints, "genPoints"); const polygon2 = elem.append("polygon"); polygon2.attr("points", genPoints(txtObject.x, txtObject.y, 50, 20, 7)); polygon2.attr("class", "labelBox"); txtObject.y = txtObject.y + txtObject.labelMargin; txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin; drawText5(elem, txtObject); }, "drawLabel"); drawSection2 = /* @__PURE__ */ __name(function(elem, section, conf5) { const g2 = elem.append("g"); const rect3 = getNoteRect3(); rect3.x = section.x; rect3.y = section.y; rect3.fill = section.fill; rect3.width = conf5.width; rect3.height = conf5.height; rect3.class = "journey-section section-type-" + section.num; rect3.rx = 3; rect3.ry = 3; drawRect6(g2, rect3); _drawTextCandidateFunc4(conf5)( section.text, g2, rect3.x, rect3.y, rect3.width, rect3.height, { class: "journey-section section-type-" + section.num }, conf5, section.colour ); }, "drawSection"); taskCount2 = -1; drawTask2 = /* @__PURE__ */ __name(function(elem, task, conf5) { const center4 = task.x + conf5.width / 2; const g2 = elem.append("g"); taskCount2++; const maxHeight = 300 + 5 * 30; g2.append("line").attr("id", "task" + taskCount2).attr("x1", center4).attr("y1", task.y).attr("x2", center4).attr("y2", maxHeight).attr("class", "task-line").attr("stroke-width", "1px").attr("stroke-dasharray", "4 2").attr("stroke", "#666"); drawFace2(g2, { cx: center4, cy: 300 + (5 - task.score) * 30, score: task.score }); const rect3 = getNoteRect3(); rect3.x = task.x; rect3.y = task.y; rect3.fill = task.fill; rect3.width = conf5.width; rect3.height = conf5.height; rect3.class = "task task-type-" + task.num; rect3.rx = 3; rect3.ry = 3; drawRect6(g2, rect3); _drawTextCandidateFunc4(conf5)( task.task, g2, rect3.x, rect3.y, rect3.width, rect3.height, { class: "task" }, conf5, task.colour ); }, "drawTask"); drawBackgroundRect4 = /* @__PURE__ */ __name(function(elem, bounds4) { const rectElem = drawRect6(elem, { x: bounds4.startx, y: bounds4.starty, width: bounds4.stopx - bounds4.startx, height: bounds4.stopy - bounds4.starty, fill: bounds4.fill, class: "rect" }); rectElem.lower(); }, "drawBackgroundRect"); getTextObj4 = /* @__PURE__ */ __name(function() { return { x: 0, y: 0, fill: void 0, "text-anchor": "start", width: 100, height: 100, textMargin: 0, rx: 0, ry: 0 }; }, "getTextObj"); getNoteRect3 = /* @__PURE__ */ __name(function() { return { x: 0, y: 0, width: 100, anchor: "start", height: 100, rx: 0, ry: 0 }; }, "getNoteRect"); _drawTextCandidateFunc4 = /* @__PURE__ */ (function() { function byText(content, g2, x5, y6, width3, height2, textAttrs, colour) { const text4 = g2.append("text").attr("x", x5 + width3 / 2).attr("y", y6 + height2 / 2 + 5).style("font-color", colour).style("text-anchor", "middle").text(content); _setTextAttrs(text4, textAttrs); } __name(byText, "byText"); function byTspan(content, g2, x5, y6, width3, height2, textAttrs, conf5, colour) { const { taskFontSize, taskFontFamily } = conf5; const lines = content.split(//gi); for (let i2 = 0; i2 < lines.length; i2++) { const dy = i2 * taskFontSize - taskFontSize * (lines.length - 1) / 2; const text4 = g2.append("text").attr("x", x5 + width3 / 2).attr("y", y6).attr("fill", colour).style("text-anchor", "middle").style("font-size", taskFontSize).style("font-family", taskFontFamily); text4.append("tspan").attr("x", x5 + width3 / 2).attr("dy", dy).text(lines[i2]); text4.attr("y", y6 + height2 / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); _setTextAttrs(text4, textAttrs); } } __name(byTspan, "byTspan"); function byFo(content, g2, x5, y6, width3, height2, textAttrs, conf5) { const body = g2.append("switch"); const f2 = body.append("foreignObject").attr("x", x5).attr("y", y6).attr("width", width3).attr("height", height2).attr("position", "fixed"); const text4 = f2.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); text4.append("div").attr("class", "label").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); byTspan(content, body, x5, y6, width3, height2, textAttrs, conf5); _setTextAttrs(text4, textAttrs); } __name(byFo, "byFo"); function _setTextAttrs(toText, fromTextAttrsDict) { for (const key in fromTextAttrsDict) { if (key in fromTextAttrsDict) { toText.attr(key, fromTextAttrsDict[key]); } } } __name(_setTextAttrs, "_setTextAttrs"); return function(conf5) { return conf5.textPlacement === "fo" ? byFo : conf5.textPlacement === "old" ? byText : byTspan; }; })(); initGraphics2 = /* @__PURE__ */ __name(function(graphics) { graphics.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 5).attr("refY", 2).attr("markerWidth", 6).attr("markerHeight", 4).attr("orient", "auto").append("path").attr("d", "M 0,0 V 4 L6,2 Z"); }, "initGraphics"); __name(wrap2, "wrap"); drawNode = /* @__PURE__ */ __name(function(elem, node2, fullSection, conf5) { const section = fullSection % MAX_SECTIONS - 1; const nodeElem = elem.append("g"); node2.section = section; nodeElem.attr( "class", (node2.class ? node2.class + " " : "") + "timeline-node " + ("section-" + section) ); const bkgElem = nodeElem.append("g"); const textElem = nodeElem.append("g"); const txt = textElem.append("text").text(node2.descr).attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle").call(wrap2, node2.width); const bbox = txt.node().getBBox(); const fontSize = conf5.fontSize?.replace ? conf5.fontSize.replace("px", "") : conf5.fontSize; node2.height = bbox.height + fontSize * 1.1 * 0.5 + node2.padding; node2.height = Math.max(node2.height, node2.maxHeight); node2.width = node2.width + 2 * node2.padding; textElem.attr("transform", "translate(" + node2.width / 2 + ", " + node2.padding / 2 + ")"); defaultBkg(bkgElem, node2, section, conf5); return node2; }, "drawNode"); getVirtualNodeHeight = /* @__PURE__ */ __name(function(elem, node2, conf5) { const textElem = elem.append("g"); const txt = textElem.append("text").text(node2.descr).attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle").call(wrap2, node2.width); const bbox = txt.node().getBBox(); const fontSize = conf5.fontSize?.replace ? conf5.fontSize.replace("px", "") : conf5.fontSize; textElem.remove(); return bbox.height + fontSize * 1.1 * 0.5 + node2.padding; }, "getVirtualNodeHeight"); defaultBkg = /* @__PURE__ */ __name(function(elem, node2, section) { const rd = 5; elem.append("path").attr("id", "node-" + node2.id).attr("class", "node-bkg node-" + node2.type).attr( "d", `M0 ${node2.height - rd} v${-node2.height + 2 * rd} q0,-5 5,-5 h${node2.width - 2 * rd} q5,0 5,5 v${node2.height - rd} H0 Z` ); elem.append("line").attr("class", "node-line-" + section).attr("x1", 0).attr("y1", node2.height).attr("x2", node2.width).attr("y2", node2.height); }, "defaultBkg"); svgDraw_default4 = { drawRect: drawRect6, drawCircle: drawCircle2, drawSection: drawSection2, drawText: drawText5, drawLabel: drawLabel3, drawTask: drawTask2, drawBackgroundRect: drawBackgroundRect4, getTextObj: getTextObj4, getNoteRect: getNoteRect3, initGraphics: initGraphics2, drawNode, getVirtualNodeHeight }; } }); // src/diagrams/timeline/timelineRenderer.ts var draw17, drawTasks2, drawEvents, timelineRenderer_default; var init_timelineRenderer = __esm({ "src/diagrams/timeline/timelineRenderer.ts"() { "use strict"; init_src32(); init_svgDraw4(); init_logger(); init_diagramAPI(); init_setupGraphViewbox(); draw17 = /* @__PURE__ */ __name(function(text4, id30, version3, diagObj) { const conf5 = getConfig2(); const LEFT_MARGIN = conf5.timeline?.leftMargin ?? 50; log.debug("timeline", diagObj.db); const securityLevel = conf5.securityLevel; let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = select_default2("#i" + id30); } const root3 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body"); const svg2 = root3.select("#" + id30); svg2.append("g"); const tasks4 = diagObj.db.getTasks(); const title2 = diagObj.db.getCommonDb().getDiagramTitle(); log.debug("task", tasks4); svgDraw_default4.initGraphics(svg2); const sections6 = diagObj.db.getSections(); log.debug("sections", sections6); let maxSectionHeight = 0; let maxTaskHeight = 0; let depthY = 0; let sectionBeginY = 0; let masterX = 50 + LEFT_MARGIN; let masterY = 50; sectionBeginY = 50; let sectionNumber = 0; let hasSections = true; sections6.forEach(function(section) { const sectionNode = { number: sectionNumber, descr: section, section: sectionNumber, width: 150, padding: 20, maxHeight: maxSectionHeight }; const sectionHeight = svgDraw_default4.getVirtualNodeHeight(svg2, sectionNode, conf5); log.debug("sectionHeight before draw", sectionHeight); maxSectionHeight = Math.max(maxSectionHeight, sectionHeight + 20); }); let maxEventCount = 0; let maxEventLineLength = 0; log.debug("tasks.length", tasks4.length); for (const [i2, task] of tasks4.entries()) { const taskNode = { number: i2, descr: task, section: task.section, width: 150, padding: 20, maxHeight: maxTaskHeight }; const taskHeight = svgDraw_default4.getVirtualNodeHeight(svg2, taskNode, conf5); log.debug("taskHeight before draw", taskHeight); maxTaskHeight = Math.max(maxTaskHeight, taskHeight + 20); maxEventCount = Math.max(maxEventCount, task.events.length); let maxEventLineLengthTemp = 0; for (const event3 of task.events) { const eventNode = { descr: event3, section: task.section, number: task.section, width: 150, padding: 20, maxHeight: 50 }; maxEventLineLengthTemp += svgDraw_default4.getVirtualNodeHeight(svg2, eventNode, conf5); } if (task.events.length > 0) { maxEventLineLengthTemp += (task.events.length - 1) * 10; } maxEventLineLength = Math.max(maxEventLineLength, maxEventLineLengthTemp); } log.debug("maxSectionHeight before draw", maxSectionHeight); log.debug("maxTaskHeight before draw", maxTaskHeight); if (sections6 && sections6.length > 0) { sections6.forEach((section) => { const tasksForSection = tasks4.filter((task) => task.section === section); const sectionNode = { number: sectionNumber, descr: section, section: sectionNumber, width: 200 * Math.max(tasksForSection.length, 1) - 50, padding: 20, maxHeight: maxSectionHeight }; log.debug("sectionNode", sectionNode); const sectionNodeWrapper = svg2.append("g"); const node2 = svgDraw_default4.drawNode(sectionNodeWrapper, sectionNode, sectionNumber, conf5); log.debug("sectionNode output", node2); sectionNodeWrapper.attr("transform", `translate(${masterX}, ${sectionBeginY})`); masterY += maxSectionHeight + 50; if (tasksForSection.length > 0) { drawTasks2( svg2, tasksForSection, sectionNumber, masterX, masterY, maxTaskHeight, conf5, maxEventCount, maxEventLineLength, maxSectionHeight, false ); } masterX += 200 * Math.max(tasksForSection.length, 1); masterY = sectionBeginY; sectionNumber++; }); } else { hasSections = false; drawTasks2( svg2, tasks4, sectionNumber, masterX, masterY, maxTaskHeight, conf5, maxEventCount, maxEventLineLength, maxSectionHeight, true ); } const box = svg2.node().getBBox(); log.debug("bounds", box); if (title2) { svg2.append("text").text(title2).attr("x", box.width / 2 - LEFT_MARGIN).attr("font-size", "4ex").attr("font-weight", "bold").attr("y", 20); } depthY = hasSections ? maxSectionHeight + maxTaskHeight + 150 : maxTaskHeight + 100; const lineWrapper = svg2.append("g").attr("class", "lineWrapper"); lineWrapper.append("line").attr("x1", LEFT_MARGIN).attr("y1", depthY).attr("x2", box.width + 3 * LEFT_MARGIN).attr("y2", depthY).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", "url(#arrowhead)"); setupGraphViewbox( void 0, svg2, conf5.timeline?.padding ?? 50, conf5.timeline?.useMaxWidth ?? false ); }, "draw"); drawTasks2 = /* @__PURE__ */ __name(function(diagram27, tasks4, sectionColor, masterX, masterY, maxTaskHeight, conf5, maxEventCount, maxEventLineLength, maxSectionHeight, isWithoutSections) { for (const task of tasks4) { const taskNode = { descr: task.task, section: sectionColor, number: sectionColor, width: 150, padding: 20, maxHeight: maxTaskHeight }; log.debug("taskNode", taskNode); const taskWrapper = diagram27.append("g").attr("class", "taskWrapper"); const node2 = svgDraw_default4.drawNode(taskWrapper, taskNode, sectionColor, conf5); const taskHeight = node2.height; log.debug("taskHeight after draw", taskHeight); taskWrapper.attr("transform", `translate(${masterX}, ${masterY})`); maxTaskHeight = Math.max(maxTaskHeight, taskHeight); if (task.events) { const lineWrapper = diagram27.append("g").attr("class", "lineWrapper"); let lineLength = maxTaskHeight; masterY += 100; lineLength = lineLength + drawEvents(diagram27, task.events, sectionColor, masterX, masterY, conf5); masterY -= 100; lineWrapper.append("line").attr("x1", masterX + 190 / 2).attr("y1", masterY + maxTaskHeight).attr("x2", masterX + 190 / 2).attr("y2", masterY + maxTaskHeight + 100 + maxEventLineLength + 100).attr("stroke-width", 2).attr("stroke", "black").attr("marker-end", "url(#arrowhead)").attr("stroke-dasharray", "5,5"); } masterX = masterX + 200; if (isWithoutSections && !conf5.timeline?.disableMulticolor) { sectionColor++; } } masterY = masterY - 10; }, "drawTasks"); drawEvents = /* @__PURE__ */ __name(function(diagram27, events, sectionColor, masterX, masterY, conf5) { let maxEventHeight = 0; const eventBeginY = masterY; masterY = masterY + 100; for (const event3 of events) { const eventNode = { descr: event3, section: sectionColor, number: sectionColor, width: 150, padding: 20, maxHeight: 50 }; log.debug("eventNode", eventNode); const eventWrapper = diagram27.append("g").attr("class", "eventWrapper"); const node2 = svgDraw_default4.drawNode(eventWrapper, eventNode, sectionColor, conf5); const eventHeight = node2.height; maxEventHeight = maxEventHeight + eventHeight; eventWrapper.attr("transform", `translate(${masterX}, ${masterY})`); masterY = masterY + 10 + eventHeight; } masterY = eventBeginY; return maxEventHeight; }, "drawEvents"); timelineRenderer_default = { setConf: /* @__PURE__ */ __name(() => { }, "setConf"), draw: draw17 }; } }); // src/diagrams/timeline/styles.js var genSections, getStyles13, styles_default12; var init_styles12 = __esm({ "src/diagrams/timeline/styles.js"() { "use strict"; init_dist(); genSections = /* @__PURE__ */ __name((options2) => { let sections6 = ""; for (let i2 = 0; i2 < options2.THEME_COLOR_LIMIT; i2++) { options2["lineColor" + i2] = options2["lineColor" + i2] || options2["cScaleInv" + i2]; if (is_dark_default(options2["lineColor" + i2])) { options2["lineColor" + i2] = lighten_default(options2["lineColor" + i2], 20); } else { options2["lineColor" + i2] = darken_default(options2["lineColor" + i2], 20); } } for (let i2 = 0; i2 < options2.THEME_COLOR_LIMIT; i2++) { const sw = "" + (17 - 3 * i2); sections6 += ` .section-${i2 - 1} rect, .section-${i2 - 1} path, .section-${i2 - 1} circle, .section-${i2 - 1} path { fill: ${options2["cScale" + i2]}; } .section-${i2 - 1} text { fill: ${options2["cScaleLabel" + i2]}; } .node-icon-${i2 - 1} { font-size: 40px; color: ${options2["cScaleLabel" + i2]}; } .section-edge-${i2 - 1}{ stroke: ${options2["cScale" + i2]}; } .edge-depth-${i2 - 1}{ stroke-width: ${sw}; } .section-${i2 - 1} line { stroke: ${options2["cScaleInv" + i2]} ; stroke-width: 3; } .lineWrapper line{ stroke: ${options2["cScaleLabel" + i2]} ; } .disabled, .disabled circle, .disabled text { fill: lightgray; } .disabled text { fill: #efefef; } `; } return sections6; }, "genSections"); getStyles13 = /* @__PURE__ */ __name((options2) => ` .edge { stroke-width: 3; } ${genSections(options2)} .section-root rect, .section-root path, .section-root circle { fill: ${options2.git0}; } .section-root text { fill: ${options2.gitBranchLabel0}; } .icon-container { height:100%; display: flex; justify-content: center; align-items: center; } .edge { fill: none; } .eventWrapper { filter: brightness(120%); } `, "getStyles"); styles_default12 = getStyles13; } }); // src/diagrams/timeline/timeline-definition.ts var timeline_definition_exports = {}; __export(timeline_definition_exports, { diagram: () => diagram18 }); var diagram18; var init_timeline_definition = __esm({ "src/diagrams/timeline/timeline-definition.ts"() { "use strict"; init_timeline(); init_timelineDb(); init_timelineRenderer(); init_styles12(); diagram18 = { db: timelineDb_exports, renderer: timelineRenderer_default, parser: timeline_default, styles: styles_default12 }; } }); // src/diagrams/mindmap/parser/mindmap.jison var parser16, mindmap_default; var init_mindmap = __esm({ "src/diagrams/mindmap/parser/mindmap.jison"() { "use strict"; parser16 = (function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) { for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ; return o3; }, "o"), $V0 = [1, 4], $V1 = [1, 13], $V2 = [1, 12], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 20], $V6 = [1, 19], $V7 = [6, 7, 8], $V8 = [1, 26], $V9 = [1, 24], $Va = [1, 25], $Vb = [6, 7, 11], $Vc = [1, 6, 13, 15, 16, 19, 22], $Vd = [1, 33], $Ve = [1, 34], $Vf = [1, 6, 7, 11, 13, 15, 16, 19, 22]; var parser24 = { trace: /* @__PURE__ */ __name(function trace() { }, "trace"), yy: {}, symbols_: { "error": 2, "start": 3, "mindMap": 4, "spaceLines": 5, "SPACELINE": 6, "NL": 7, "MINDMAP": 8, "document": 9, "stop": 10, "EOF": 11, "statement": 12, "SPACELIST": 13, "node": 14, "ICON": 15, "CLASS": 16, "nodeWithId": 17, "nodeWithoutId": 18, "NODE_DSTART": 19, "NODE_DESCR": 20, "NODE_DEND": 21, "NODE_ID": 22, "$accept": 0, "$end": 1 }, terminals_: { 2: "error", 6: "SPACELINE", 7: "NL", 8: "MINDMAP", 11: "EOF", 13: "SPACELIST", 15: "ICON", 16: "CLASS", 19: "NODE_DSTART", 20: "NODE_DESCR", 21: "NODE_DEND", 22: "NODE_ID" }, productions_: [0, [3, 1], [3, 2], [5, 1], [5, 2], [5, 2], [4, 2], [4, 3], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [9, 3], [9, 2], [12, 2], [12, 2], [12, 2], [12, 1], [12, 1], [12, 1], [12, 1], [12, 1], [14, 1], [14, 1], [18, 3], [17, 1], [17, 4]], performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { var $0 = $$.length - 1; switch (yystate) { case 6: case 7: return yy; break; case 8: yy.getLogger().trace("Stop NL "); break; case 9: yy.getLogger().trace("Stop EOF "); break; case 11: yy.getLogger().trace("Stop NL2 "); break; case 12: yy.getLogger().trace("Stop EOF2 "); break; case 15: yy.getLogger().info("Node: ", $$[$0].id); yy.addNode($$[$0 - 1].length, $$[$0].id, $$[$0].descr, $$[$0].type); break; case 16: yy.getLogger().trace("Icon: ", $$[$0]); yy.decorateNode({ icon: $$[$0] }); break; case 17: case 21: yy.decorateNode({ class: $$[$0] }); break; case 18: yy.getLogger().trace("SPACELIST"); break; case 19: yy.getLogger().trace("Node: ", $$[$0].id); yy.addNode(0, $$[$0].id, $$[$0].descr, $$[$0].type); break; case 20: yy.decorateNode({ icon: $$[$0] }); break; case 25: yy.getLogger().trace("node found ..", $$[$0 - 2]); this.$ = { id: $$[$0 - 1], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) }; break; case 26: this.$ = { id: $$[$0], descr: $$[$0], type: yy.nodeType.DEFAULT }; break; case 27: yy.getLogger().trace("node found ..", $$[$0 - 3]); this.$ = { id: $$[$0 - 3], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) }; break; } }, "anonymous"), table: [{ 3: 1, 4: 2, 5: 3, 6: [1, 5], 8: $V0 }, { 1: [3] }, { 1: [2, 1] }, { 4: 6, 6: [1, 7], 7: [1, 8], 8: $V0 }, { 6: $V1, 7: [1, 10], 9: 9, 12: 11, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, o2($V7, [2, 3]), { 1: [2, 2] }, o2($V7, [2, 4]), o2($V7, [2, 5]), { 1: [2, 6], 6: $V1, 12: 21, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, { 6: $V1, 9: 22, 12: 11, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, { 6: $V8, 7: $V9, 10: 23, 11: $Va }, o2($Vb, [2, 22], { 17: 17, 18: 18, 14: 27, 15: [1, 28], 16: [1, 29], 19: $V5, 22: $V6 }), o2($Vb, [2, 18]), o2($Vb, [2, 19]), o2($Vb, [2, 20]), o2($Vb, [2, 21]), o2($Vb, [2, 23]), o2($Vb, [2, 24]), o2($Vb, [2, 26], { 19: [1, 30] }), { 20: [1, 31] }, { 6: $V8, 7: $V9, 10: 32, 11: $Va }, { 1: [2, 7], 6: $V1, 12: 21, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, o2($Vc, [2, 14], { 7: $Vd, 11: $Ve }), o2($Vf, [2, 8]), o2($Vf, [2, 9]), o2($Vf, [2, 10]), o2($Vb, [2, 15]), o2($Vb, [2, 16]), o2($Vb, [2, 17]), { 20: [1, 35] }, { 21: [1, 36] }, o2($Vc, [2, 13], { 7: $Vd, 11: $Ve }), o2($Vf, [2, 11]), o2($Vf, [2, 12]), { 21: [1, 37] }, o2($Vb, [2, 25]), o2($Vb, [2, 27])], defaultActions: { 2: [2, 1], 6: [2, 2] }, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (hash.recoverable) { this.trace(str2); } else { var error3 = new Error(str2); error3.hash = hash; throw error3; } }, "parseError"), parse: /* @__PURE__ */ __name(function parse7(input) { var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1; var args = lstack.slice.call(arguments, 1); var lexer2 = Object.create(this.lexer); var sharedState = { yy: {} }; for (var k2 in this.yy) { if (Object.prototype.hasOwnProperty.call(this.yy, k2)) { sharedState.yy[k2] = this.yy[k2]; } } lexer2.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer2; sharedState.yy.parser = this; if (typeof lexer2.yylloc == "undefined") { lexer2.yylloc = {}; } var yyloc = lexer2.yylloc; lstack.push(yyloc); var ranges = lexer2.options && lexer2.options.ranges; if (typeof sharedState.yy.parseError === "function") { this.parseError = sharedState.yy.parseError; } else { this.parseError = Object.getPrototypeOf(this).parseError; } function popStack(n2) { stack.length = stack.length - 2 * n2; vstack.length = vstack.length - n2; lstack.length = lstack.length - n2; } __name(popStack, "popStack"); function lex() { var token2; token2 = tstack.pop() || lexer2.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex, "lex"); var symbol, preErrorSymbol, state3, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state3 = stack[stack.length - 1]; if (this.defaultActions[state3]) { action = this.defaultActions[state3]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex(); } action = table[state3] && table[state3][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state3]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer2.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; } else { errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); } this.parseError(errStr, { text: lexer2.match, token: this.terminals_[symbol] || symbol, line: lexer2.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state3 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer2.yytext); lstack.push(lexer2.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer2.yyleng; yytext = lexer2.yytext; yylineno = lexer2.yylineno; yyloc = lexer2.yylloc; if (recovering > 0) { recovering--; } } else { symbol = preErrorSymbol; preErrorSymbol = null; } break; case 2: len = this.productions_[action[1]][1]; yyval.$ = vstack[vstack.length - len]; yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; if (ranges) { yyval._$.range = [ lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1] ]; } r2 = this.performAction.apply(yyval, [ yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack ].concat(args)); if (typeof r2 !== "undefined") { return r2; } if (len) { stack = stack.slice(0, -1 * len * 2); vstack = vstack.slice(0, -1 * len); lstack = lstack.slice(0, -1 * len); } stack.push(this.productions_[action[1]][0]); vstack.push(yyval.$); lstack.push(yyval._$); newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]]; stack.push(newState2); break; case 3: return true; } } return true; }, "parse") }; var lexer = /* @__PURE__ */ (function() { var lexer2 = { EOF: 1, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (this.yy.parser) { this.yy.parser.parseError(str2, hash); } else { throw new Error(str2); } }, "parseError"), // resets the lexer, sets new input setInput: /* @__PURE__ */ __name(function(input, yy) { this.yy = yy || this.yy || {}; this._input = input; this._more = this._backtrack = this.done = false; 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 }; if (this.options.ranges) { this.yylloc.range = [0, 0]; } this.offset = 0; return this; }, "setInput"), // consumes and returns one char from the input input: /* @__PURE__ */ __name(function() { var ch = this._input[0]; this.yytext += ch; this.yyleng++; this.offset++; this.match += ch; this.matched += ch; var lines = ch.match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno++; this.yylloc.last_line++; } else { this.yylloc.last_column++; } if (this.options.ranges) { this.yylloc.range[1]++; } this._input = this._input.slice(1); return ch; }, "input"), // unshifts one char (or a string) into the input unput: /* @__PURE__ */ __name(function(ch) { var len = ch.length; var lines = ch.split(/(?:\r\n?|\n)/g); this._input = ch + this._input; this.yytext = this.yytext.substr(0, this.yytext.length - len); this.offset -= len; var oldLines = 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); if (lines.length - 1) { this.yylineno -= lines.length - 1; } var r2 = this.yylloc.range; this.yylloc = { first_line: this.yylloc.first_line, last_line: this.yylineno + 1, first_column: this.yylloc.first_column, last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len }; if (this.options.ranges) { this.yylloc.range = [r2[0], r2[0] + this.yyleng - len]; } this.yyleng = this.yytext.length; return this; }, "unput"), // When called from action, caches matched text and appends it on next action more: /* @__PURE__ */ __name(function() { this._more = true; return this; }, "more"), // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. reject: /* @__PURE__ */ __name(function() { if (this.options.backtrack_lexer) { this._backtrack = true; } 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"), // retain first n characters of the match less: /* @__PURE__ */ __name(function(n2) { this.unput(this.match.slice(n2)); }, "less"), // displays already matched input, i.e. for error messages pastInput: /* @__PURE__ */ __name(function() { var past = this.matched.substr(0, this.matched.length - this.match.length); return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); }, "pastInput"), // displays upcoming input, i.e. for error messages upcomingInput: /* @__PURE__ */ __name(function() { var next3 = this.match; if (next3.length < 20) { next3 += this._input.substr(0, 20 - next3.length); } return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, ""); }, "upcomingInput"), // displays the character position where the lexing error occurred, i.e. for error messages showPosition: /* @__PURE__ */ __name(function() { var pre = this.pastInput(); var c3 = new Array(pre.length + 1).join("-"); return pre + this.upcomingInput() + "\n" + c3 + "^"; }, "showPosition"), // test the lexed token: return FALSE when not a match, otherwise return token test_match: /* @__PURE__ */ __name(function(match2, indexed_rule) { var token2, lines, backup; if (this.options.backtrack_lexer) { backup = { 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 }; if (this.options.ranges) { backup.yylloc.range = this.yylloc.range.slice(0); } } lines = match2[0].match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno += lines.length; } this.yylloc = { first_line: this.yylloc.last_line, last_line: this.yylineno + 1, first_column: this.yylloc.last_column, last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; this.yyleng = this.yytext.length; if (this.options.ranges) { this.yylloc.range = [this.offset, this.offset += this.yyleng]; } this._more = false; this._backtrack = false; this._input = this._input.slice(match2[0].length); this.matched += match2[0]; token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); if (this.done && this._input) { this.done = false; } if (token2) { return token2; } else if (this._backtrack) { for (var k2 in backup) { this[k2] = backup[k2]; } return false; } return false; }, "test_match"), // return next match in input next: /* @__PURE__ */ __name(function() { if (this.done) { return this.EOF; } if (!this._input) { this.done = true; } var token2, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[index]); if (token2 !== false) { return token2; } return false; } if (this._input === "") { return this.EOF; } else { return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { text: "", token: null, line: this.yylineno }); } }, "next"), // return next match that has a token lex: /* @__PURE__ */ __name(function lex() { var r2 = this.next(); if (r2) { return r2; } else { return this.lex(); } }, "lex"), // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) begin: /* @__PURE__ */ __name(function begin(condition) { this.conditionStack.push(condition); }, "begin"), // pop the previously active lexer condition state off the condition stack popState: /* @__PURE__ */ __name(function popState() { var n2 = this.conditionStack.length - 1; if (n2 > 0) { return this.conditionStack.pop(); } else { return this.conditionStack[0]; } }, "popState"), // produce the lexer rule set which is active for the currently active lexer condition state _currentRules: /* @__PURE__ */ __name(function _currentRules() { if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; } else { return this.conditions["INITIAL"].rules; } }, "_currentRules"), // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available topState: /* @__PURE__ */ __name(function topState(n2) { n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0); if (n2 >= 0) { return this.conditionStack[n2]; } else { return "INITIAL"; } }, "topState"), // alias for begin(condition) pushState: /* @__PURE__ */ __name(function pushState(condition) { this.begin(condition); }, "pushState"), // return the number of states currently on the stack stateStackSize: /* @__PURE__ */ __name(function stateStackSize() { return this.conditionStack.length; }, "stateStackSize"), options: { "case-insensitive": true }, performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { var YYSTATE = YY_START; switch ($avoiding_name_collisions) { case 0: yy.getLogger().trace("Found comment", yy_.yytext); return 6; break; case 1: return 8; break; case 2: this.begin("CLASS"); break; case 3: this.popState(); return 16; break; case 4: this.popState(); break; case 5: yy.getLogger().trace("Begin icon"); this.begin("ICON"); break; case 6: yy.getLogger().trace("SPACELINE"); return 6; break; case 7: return 7; break; case 8: return 15; break; case 9: yy.getLogger().trace("end icon"); this.popState(); break; case 10: yy.getLogger().trace("Exploding node"); this.begin("NODE"); return 19; break; case 11: yy.getLogger().trace("Cloud"); this.begin("NODE"); return 19; break; case 12: yy.getLogger().trace("Explosion Bang"); this.begin("NODE"); return 19; break; case 13: yy.getLogger().trace("Cloud Bang"); this.begin("NODE"); return 19; break; case 14: this.begin("NODE"); return 19; break; case 15: this.begin("NODE"); return 19; break; case 16: this.begin("NODE"); return 19; break; case 17: this.begin("NODE"); return 19; break; case 18: return 13; break; case 19: return 22; break; case 20: return 11; break; case 21: this.begin("NSTR2"); break; case 22: return "NODE_DESCR"; break; case 23: this.popState(); break; case 24: yy.getLogger().trace("Starting NSTR"); this.begin("NSTR"); break; case 25: yy.getLogger().trace("description:", yy_.yytext); return "NODE_DESCR"; break; case 26: this.popState(); break; case 27: this.popState(); yy.getLogger().trace("node end ))"); return "NODE_DEND"; break; case 28: this.popState(); yy.getLogger().trace("node end )"); return "NODE_DEND"; break; case 29: this.popState(); yy.getLogger().trace("node end ...", yy_.yytext); return "NODE_DEND"; break; case 30: this.popState(); yy.getLogger().trace("node end (("); return "NODE_DEND"; break; case 31: this.popState(); yy.getLogger().trace("node end (-"); return "NODE_DEND"; break; case 32: this.popState(); yy.getLogger().trace("node end (-"); return "NODE_DEND"; break; case 33: this.popState(); yy.getLogger().trace("node end (("); return "NODE_DEND"; break; case 34: this.popState(); yy.getLogger().trace("node end (("); return "NODE_DEND"; break; case 35: yy.getLogger().trace("Long description:", yy_.yytext); return 20; break; case 36: yy.getLogger().trace("Long description:", yy_.yytext); return 20; break; } }, "anonymous"), rules: [/^(?:\s*%%.*)/i, /^(?:mindmap\b)/i, /^(?::::)/i, /^(?:.+)/i, /^(?:\n)/i, /^(?:::icon\()/i, /^(?:[\s]+[\n])/i, /^(?:[\n]+)/i, /^(?:[^\)]+)/i, /^(?:\))/i, /^(?:-\))/i, /^(?:\(-)/i, /^(?:\)\))/i, /^(?:\))/i, /^(?:\(\()/i, /^(?:\{\{)/i, /^(?:\()/i, /^(?:\[)/i, /^(?:[\s]+)/i, /^(?:[^\(\[\n\)\{\}]+)/i, /^(?:$)/i, /^(?:["][`])/i, /^(?:[^`"]+)/i, /^(?:[`]["])/i, /^(?:["])/i, /^(?:[^"]+)/i, /^(?:["])/i, /^(?:[\)]\))/i, /^(?:[\)])/i, /^(?:[\]])/i, /^(?:\}\})/i, /^(?:\(-)/i, /^(?:-\))/i, /^(?:\(\()/i, /^(?:\()/i, /^(?:[^\)\]\(\}]+)/i, /^(?:.+(?!\(\())/i], conditions: { "CLASS": { "rules": [3, 4], "inclusive": false }, "ICON": { "rules": [8, 9], "inclusive": false }, "NSTR2": { "rules": [22, 23], "inclusive": false }, "NSTR": { "rules": [25, 26], "inclusive": false }, "NODE": { "rules": [21, 24, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "inclusive": true } } }; return lexer2; })(); parser24.lexer = lexer; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser24; parser24.Parser = Parser3; return new Parser3(); })(); parser16.parser = parser16; mindmap_default = parser16; } }); // ../../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/stringify.js function unsafeStringify(arr, offset = 0) { return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); } var byteToHex; var init_stringify = __esm({ "../../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/stringify.js"() { "use strict"; byteToHex = []; for (let i2 = 0; i2 < 256; ++i2) { byteToHex.push((i2 + 256).toString(16).slice(1)); } __name(unsafeStringify, "unsafeStringify"); } }); // ../../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/rng.js function rng() { if (!getRandomValues) { if (typeof crypto === "undefined" || !crypto.getRandomValues) { throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported"); } getRandomValues = crypto.getRandomValues.bind(crypto); } return getRandomValues(rnds8); } var getRandomValues, rnds8; var init_rng = __esm({ "../../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/rng.js"() { "use strict"; rnds8 = new Uint8Array(16); __name(rng, "rng"); } }); // ../../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/native.js var randomUUID, native_default; var init_native = __esm({ "../../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/native.js"() { "use strict"; randomUUID = typeof crypto !== "undefined" && crypto.randomUUID && crypto.randomUUID.bind(crypto); native_default = { randomUUID }; } }); // ../../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v4.js function v4(options2, buf, offset) { if (native_default.randomUUID && !buf && !options2) { return native_default.randomUUID(); } options2 = options2 || {}; const rnds = options2.random ?? options2.rng?.() ?? rng(); if (rnds.length < 16) { throw new Error("Random bytes length must be >= 16"); } rnds[6] = rnds[6] & 15 | 64; rnds[8] = rnds[8] & 63 | 128; if (buf) { offset = offset || 0; if (offset < 0 || offset + 16 > buf.length) { throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`); } for (let i2 = 0; i2 < 16; ++i2) { buf[offset + i2] = rnds[i2]; } return buf; } return unsafeStringify(rnds); } var v4_default; var init_v4 = __esm({ "../../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v4.js"() { "use strict"; init_native(); init_rng(); init_stringify(); __name(v4, "v4"); v4_default = v4; } }); // ../../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/index.js var init_esm_browser = __esm({ "../../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/index.js"() { "use strict"; init_v4(); } }); // src/diagrams/mindmap/mindmapDb.ts var nodeType, MindmapDB; var init_mindmapDb = __esm({ "src/diagrams/mindmap/mindmapDb.ts"() { "use strict"; init_diagramAPI(); init_esm_browser(); init_common(); init_logger(); init_defaultConfig(); init_config(); nodeType = { DEFAULT: 0, NO_BORDER: 0, ROUNDED_RECT: 1, RECT: 2, CIRCLE: 3, CLOUD: 4, BANG: 5, HEXAGON: 6 }; MindmapDB = class { constructor() { this.nodes = []; this.count = 0; this.elements = {}; this.getLogger = this.getLogger.bind(this); this.nodeType = nodeType; this.clear(); this.getType = this.getType.bind(this); this.getElementById = this.getElementById.bind(this); this.getParent = this.getParent.bind(this); this.getMindmap = this.getMindmap.bind(this); this.addNode = this.addNode.bind(this); this.decorateNode = this.decorateNode.bind(this); } static { __name(this, "MindmapDB"); } clear() { this.nodes = []; this.count = 0; this.elements = {}; this.baseLevel = void 0; } getParent(level) { for (let i2 = this.nodes.length - 1; i2 >= 0; i2--) { if (this.nodes[i2].level < level) { return this.nodes[i2]; } } return null; } getMindmap() { return this.nodes.length > 0 ? this.nodes[0] : null; } addNode(level, id30, descr, type3) { log.info("addNode", level, id30, descr, type3); let isRoot = false; if (this.nodes.length === 0) { this.baseLevel = level; level = 0; isRoot = true; } else if (this.baseLevel !== void 0) { level = level - this.baseLevel; isRoot = false; } const conf5 = getConfig2(); let padding2 = conf5.mindmap?.padding ?? defaultConfig_default.mindmap.padding; switch (type3) { case this.nodeType.ROUNDED_RECT: case this.nodeType.RECT: case this.nodeType.HEXAGON: padding2 *= 2; break; } const node2 = { id: this.count++, nodeId: sanitizeText(id30, conf5), level, descr: sanitizeText(descr, conf5), type: type3, children: [], width: conf5.mindmap?.maxNodeWidth ?? defaultConfig_default.mindmap.maxNodeWidth, padding: padding2, isRoot }; const parent4 = this.getParent(level); if (parent4) { parent4.children.push(node2); this.nodes.push(node2); } else { if (isRoot) { this.nodes.push(node2); } else { throw new Error( `There can be only one root. No parent could be found for ("${node2.descr}")` ); } } } getType(startStr, endStr) { log.debug("In get type", startStr, endStr); switch (startStr) { case "[": return this.nodeType.RECT; case "(": return endStr === ")" ? this.nodeType.ROUNDED_RECT : this.nodeType.CLOUD; case "((": return this.nodeType.CIRCLE; case ")": return this.nodeType.CLOUD; case "))": return this.nodeType.BANG; case "{{": return this.nodeType.HEXAGON; default: return this.nodeType.DEFAULT; } } setElementForId(id30, element3) { this.elements[id30] = element3; } getElementById(id30) { return this.elements[id30]; } decorateNode(decoration) { if (!decoration) { return; } const config5 = getConfig2(); const node2 = this.nodes[this.nodes.length - 1]; if (decoration.icon) { node2.icon = sanitizeText(decoration.icon, config5); } if (decoration.class) { node2.class = sanitizeText(decoration.class, config5); } } type2Str(type3) { switch (type3) { case this.nodeType.DEFAULT: return "no-border"; case this.nodeType.RECT: return "rect"; case this.nodeType.ROUNDED_RECT: return "rounded-rect"; case this.nodeType.CIRCLE: return "circle"; case this.nodeType.CLOUD: return "cloud"; case this.nodeType.BANG: return "bang"; case this.nodeType.HEXAGON: return "hexgon"; // cspell: disable-line default: return "no-border"; } } /** * Assign section numbers to nodes based on their position relative to root * @param node - The mindmap node to process * @param sectionNumber - The section number to assign (undefined for root) */ assignSections(node2, sectionNumber) { if (node2.level === 0) { node2.section = void 0; } else { node2.section = sectionNumber; } if (node2.children) { for (const [index, child] of node2.children.entries()) { const childSectionNumber = node2.level === 0 ? index : sectionNumber; this.assignSections(child, childSectionNumber); } } } /** * Convert mindmap tree structure to flat array of nodes * @param node - The mindmap node to process * @param processedNodes - Array to collect processed nodes */ flattenNodes(node2, processedNodes) { const cssClasses = ["mindmap-node"]; if (node2.isRoot === true) { cssClasses.push("section-root", "section--1"); } else if (node2.section !== void 0) { cssClasses.push(`section-${node2.section}`); } if (node2.class) { cssClasses.push(node2.class); } const classes3 = cssClasses.join(" "); const getShapeFromType = /* @__PURE__ */ __name((type3) => { switch (type3) { case nodeType.CIRCLE: return "mindmapCircle"; case nodeType.RECT: return "rect"; case nodeType.ROUNDED_RECT: return "rounded"; case nodeType.CLOUD: return "cloud"; case nodeType.BANG: return "bang"; case nodeType.HEXAGON: return "hexagon"; case nodeType.DEFAULT: return "defaultMindmapNode"; case nodeType.NO_BORDER: default: return "rect"; } }, "getShapeFromType"); const processedNode = { id: node2.id.toString(), domId: "node_" + node2.id.toString(), label: node2.descr, isGroup: false, shape: getShapeFromType(node2.type), width: node2.width, height: node2.height ?? 0, padding: node2.padding, cssClasses: classes3, cssStyles: [], look: "default", icon: node2.icon, x: node2.x, y: node2.y, // Mindmap-specific properties level: node2.level, nodeId: node2.nodeId, type: node2.type, section: node2.section }; processedNodes.push(processedNode); if (node2.children) { for (const child of node2.children) { this.flattenNodes(child, processedNodes); } } } /** * Generate edges from parent-child relationships in mindmap tree * @param node - The mindmap node to process * @param edges - Array to collect edges */ generateEdges(node2, edges3) { if (!node2.children) { return; } for (const child of node2.children) { let edgeClasses = "edge"; if (child.section !== void 0) { edgeClasses += ` section-edge-${child.section}`; } const edgeDepth = node2.level + 1; edgeClasses += ` edge-depth-${edgeDepth}`; const edge = { id: `edge_${node2.id}_${child.id}`, start: node2.id.toString(), end: child.id.toString(), type: "normal", curve: "basis", thickness: "normal", look: "default", classes: edgeClasses, // Store mindmap-specific data depth: node2.level, section: child.section }; edges3.push(edge); this.generateEdges(child, edges3); } } /** * Get structured data for layout algorithms * Following the pattern established by ER diagrams * @returns Structured data containing nodes, edges, and config */ getData() { const mindmapRoot = this.getMindmap(); const config5 = getConfig2(); const userDefinedConfig = getUserDefinedConfig(); const hasUserDefinedLayout = userDefinedConfig.layout !== void 0; const finalConfig = config5; if (!hasUserDefinedLayout) { finalConfig.layout = "cose-bilkent"; } if (!mindmapRoot) { return { nodes: [], edges: [], config: finalConfig }; } log.debug("getData: mindmapRoot", mindmapRoot, config5); this.assignSections(mindmapRoot); const processedNodes = []; const processedEdges = []; this.flattenNodes(mindmapRoot, processedNodes); this.generateEdges(mindmapRoot, processedEdges); log.debug( `getData: processed ${processedNodes.length} nodes and ${processedEdges.length} edges` ); const shapes4 = /* @__PURE__ */ new Map(); for (const node2 of processedNodes) { shapes4.set(node2.id, { shape: node2.shape, width: node2.width, height: node2.height, padding: node2.padding }); } return { nodes: processedNodes, edges: processedEdges, config: finalConfig, // Store the root node for mindmap-specific layout algorithms rootNode: mindmapRoot, // Properties required by dagre layout algorithm markers: ["point"], // Mindmaps don't use markers direction: "TB", // Top-to-bottom direction for mindmaps nodeSpacing: 50, // Default spacing between nodes rankSpacing: 50, // Default spacing between ranks // Add shapes for ELK compatibility shapes: Object.fromEntries(shapes4), // Additional properties that layout algorithms might expect type: "mindmap", diagramId: "mindmap-" + v4_default() }; } // Expose logger to grammar getLogger() { return log; } }; } }); // src/diagrams/mindmap/mindmapRenderer.ts var draw18, mindmapRenderer_default; var init_mindmapRenderer = __esm({ "src/diagrams/mindmap/mindmapRenderer.ts"() { "use strict"; init_logger(); init_insertElementsForSize(); init_render2(); init_setupViewPortForSVG(); init_defaultConfig(); draw18 = /* @__PURE__ */ __name(async (text4, id30, _version, diagObj) => { log.debug("Rendering mindmap diagram\n" + text4); const db7 = diagObj.db; const data4Layout = db7.getData(); const svg2 = getDiagramElement(id30, data4Layout.config.securityLevel); data4Layout.type = diagObj.type; data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(data4Layout.config.layout, { fallback: "cose-bilkent" }); data4Layout.diagramId = id30; const mm = db7.getMindmap(); if (!mm) { return; } data4Layout.nodes.forEach((node2) => { if (node2.shape === "rounded") { node2.radius = 15; node2.taper = 15; node2.stroke = "none"; node2.width = 0; node2.padding = 15; } else if (node2.shape === "circle") { node2.padding = 10; } else if (node2.shape === "rect") { node2.width = 0; node2.padding = 10; } }); await render6(data4Layout, svg2); setupViewPortForSVG( svg2, data4Layout.config.mindmap?.padding ?? defaultConfig_default.mindmap.padding, "mindmapDiagram", data4Layout.config.mindmap?.useMaxWidth ?? defaultConfig_default.mindmap.useMaxWidth ); }, "draw"); mindmapRenderer_default = { draw: draw18 }; } }); // src/diagrams/mindmap/styles.ts var genSections2, getStyles14, styles_default13; var init_styles13 = __esm({ "src/diagrams/mindmap/styles.ts"() { "use strict"; init_dist(); genSections2 = /* @__PURE__ */ __name((options2) => { let sections6 = ""; for (let i2 = 0; i2 < options2.THEME_COLOR_LIMIT; i2++) { options2["lineColor" + i2] = options2["lineColor" + i2] || options2["cScaleInv" + i2]; if (is_dark_default(options2["lineColor" + i2])) { options2["lineColor" + i2] = lighten_default(options2["lineColor" + i2], 20); } else { options2["lineColor" + i2] = darken_default(options2["lineColor" + i2], 20); } } for (let i2 = 0; i2 < options2.THEME_COLOR_LIMIT; i2++) { const sw = "" + (17 - 3 * i2); sections6 += ` .section-${i2 - 1} rect, .section-${i2 - 1} path, .section-${i2 - 1} circle, .section-${i2 - 1} polygon, .section-${i2 - 1} path { fill: ${options2["cScale" + i2]}; } .section-${i2 - 1} text { fill: ${options2["cScaleLabel" + i2]}; } .node-icon-${i2 - 1} { font-size: 40px; color: ${options2["cScaleLabel" + i2]}; } .section-edge-${i2 - 1}{ stroke: ${options2["cScale" + i2]}; } .edge-depth-${i2 - 1}{ stroke-width: ${sw}; } .section-${i2 - 1} line { stroke: ${options2["cScaleInv" + i2]} ; stroke-width: 3; } .disabled, .disabled circle, .disabled text { fill: lightgray; } .disabled text { fill: #efefef; } `; } return sections6; }, "genSections"); getStyles14 = /* @__PURE__ */ __name((options2) => ` .edge { stroke-width: 3; } ${genSections2(options2)} .section-root rect, .section-root path, .section-root circle, .section-root polygon { fill: ${options2.git0}; } .section-root text { fill: ${options2.gitBranchLabel0}; } .section-root span { color: ${options2.gitBranchLabel0}; } .section-2 span { color: ${options2.gitBranchLabel0}; } .icon-container { height:100%; display: flex; justify-content: center; align-items: center; } .edge { fill: none; } .mindmap-node-label { dy: 1em; alignment-baseline: middle; text-anchor: middle; dominant-baseline: middle; text-align: center; } `, "getStyles"); styles_default13 = getStyles14; } }); // src/diagrams/mindmap/mindmap-definition.ts var mindmap_definition_exports = {}; __export(mindmap_definition_exports, { diagram: () => diagram19 }); var diagram19; var init_mindmap_definition = __esm({ "src/diagrams/mindmap/mindmap-definition.ts"() { "use strict"; init_mindmap(); init_mindmapDb(); init_mindmapRenderer(); init_styles13(); diagram19 = { get db() { return new MindmapDB(); }, renderer: mindmapRenderer_default, parser: mindmap_default, styles: styles_default13 }; } }); // src/diagrams/kanban/parser/kanban.jison var parser17, kanban_default; var init_kanban = __esm({ "src/diagrams/kanban/parser/kanban.jison"() { "use strict"; parser17 = (function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) { for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ; return o3; }, "o"), $V0 = [1, 4], $V1 = [1, 13], $V2 = [1, 12], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 20], $V6 = [1, 19], $V7 = [6, 7, 8], $V8 = [1, 26], $V9 = [1, 24], $Va = [1, 25], $Vb = [6, 7, 11], $Vc = [1, 31], $Vd = [6, 7, 11, 24], $Ve = [1, 6, 13, 16, 17, 20, 23], $Vf = [1, 35], $Vg = [1, 36], $Vh = [1, 6, 7, 11, 13, 16, 17, 20, 23], $Vi = [1, 38]; var parser24 = { trace: /* @__PURE__ */ __name(function trace() { }, "trace"), yy: {}, symbols_: { "error": 2, "start": 3, "mindMap": 4, "spaceLines": 5, "SPACELINE": 6, "NL": 7, "KANBAN": 8, "document": 9, "stop": 10, "EOF": 11, "statement": 12, "SPACELIST": 13, "node": 14, "shapeData": 15, "ICON": 16, "CLASS": 17, "nodeWithId": 18, "nodeWithoutId": 19, "NODE_DSTART": 20, "NODE_DESCR": 21, "NODE_DEND": 22, "NODE_ID": 23, "SHAPE_DATA": 24, "$accept": 0, "$end": 1 }, terminals_: { 2: "error", 6: "SPACELINE", 7: "NL", 8: "KANBAN", 11: "EOF", 13: "SPACELIST", 16: "ICON", 17: "CLASS", 20: "NODE_DSTART", 21: "NODE_DESCR", 22: "NODE_DEND", 23: "NODE_ID", 24: "SHAPE_DATA" }, productions_: [0, [3, 1], [3, 2], [5, 1], [5, 2], [5, 2], [4, 2], [4, 3], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [9, 3], [9, 2], [12, 3], [12, 2], [12, 2], [12, 2], [12, 1], [12, 2], [12, 1], [12, 1], [12, 1], [12, 1], [14, 1], [14, 1], [19, 3], [18, 1], [18, 4], [15, 2], [15, 1]], performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { var $0 = $$.length - 1; switch (yystate) { case 6: case 7: return yy; break; case 8: yy.getLogger().trace("Stop NL "); break; case 9: yy.getLogger().trace("Stop EOF "); break; case 11: yy.getLogger().trace("Stop NL2 "); break; case 12: yy.getLogger().trace("Stop EOF2 "); break; case 15: yy.getLogger().info("Node: ", $$[$0 - 1].id); yy.addNode($$[$0 - 2].length, $$[$0 - 1].id, $$[$0 - 1].descr, $$[$0 - 1].type, $$[$0]); break; case 16: yy.getLogger().info("Node: ", $$[$0].id); yy.addNode($$[$0 - 1].length, $$[$0].id, $$[$0].descr, $$[$0].type); break; case 17: yy.getLogger().trace("Icon: ", $$[$0]); yy.decorateNode({ icon: $$[$0] }); break; case 18: case 23: yy.decorateNode({ class: $$[$0] }); break; case 19: yy.getLogger().trace("SPACELIST"); break; case 20: yy.getLogger().trace("Node: ", $$[$0 - 1].id); yy.addNode(0, $$[$0 - 1].id, $$[$0 - 1].descr, $$[$0 - 1].type, $$[$0]); break; case 21: yy.getLogger().trace("Node: ", $$[$0].id); yy.addNode(0, $$[$0].id, $$[$0].descr, $$[$0].type); break; case 22: yy.decorateNode({ icon: $$[$0] }); break; case 27: yy.getLogger().trace("node found ..", $$[$0 - 2]); this.$ = { id: $$[$0 - 1], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) }; break; case 28: this.$ = { id: $$[$0], descr: $$[$0], type: 0 }; break; case 29: yy.getLogger().trace("node found ..", $$[$0 - 3]); this.$ = { id: $$[$0 - 3], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) }; break; case 30: this.$ = $$[$0 - 1] + $$[$0]; break; case 31: this.$ = $$[$0]; break; } }, "anonymous"), table: [{ 3: 1, 4: 2, 5: 3, 6: [1, 5], 8: $V0 }, { 1: [3] }, { 1: [2, 1] }, { 4: 6, 6: [1, 7], 7: [1, 8], 8: $V0 }, { 6: $V1, 7: [1, 10], 9: 9, 12: 11, 13: $V2, 14: 14, 16: $V3, 17: $V4, 18: 17, 19: 18, 20: $V5, 23: $V6 }, o2($V7, [2, 3]), { 1: [2, 2] }, o2($V7, [2, 4]), o2($V7, [2, 5]), { 1: [2, 6], 6: $V1, 12: 21, 13: $V2, 14: 14, 16: $V3, 17: $V4, 18: 17, 19: 18, 20: $V5, 23: $V6 }, { 6: $V1, 9: 22, 12: 11, 13: $V2, 14: 14, 16: $V3, 17: $V4, 18: 17, 19: 18, 20: $V5, 23: $V6 }, { 6: $V8, 7: $V9, 10: 23, 11: $Va }, o2($Vb, [2, 24], { 18: 17, 19: 18, 14: 27, 16: [1, 28], 17: [1, 29], 20: $V5, 23: $V6 }), o2($Vb, [2, 19]), o2($Vb, [2, 21], { 15: 30, 24: $Vc }), o2($Vb, [2, 22]), o2($Vb, [2, 23]), o2($Vd, [2, 25]), o2($Vd, [2, 26]), o2($Vd, [2, 28], { 20: [1, 32] }), { 21: [1, 33] }, { 6: $V8, 7: $V9, 10: 34, 11: $Va }, { 1: [2, 7], 6: $V1, 12: 21, 13: $V2, 14: 14, 16: $V3, 17: $V4, 18: 17, 19: 18, 20: $V5, 23: $V6 }, o2($Ve, [2, 14], { 7: $Vf, 11: $Vg }), o2($Vh, [2, 8]), o2($Vh, [2, 9]), o2($Vh, [2, 10]), o2($Vb, [2, 16], { 15: 37, 24: $Vc }), o2($Vb, [2, 17]), o2($Vb, [2, 18]), o2($Vb, [2, 20], { 24: $Vi }), o2($Vd, [2, 31]), { 21: [1, 39] }, { 22: [1, 40] }, o2($Ve, [2, 13], { 7: $Vf, 11: $Vg }), o2($Vh, [2, 11]), o2($Vh, [2, 12]), o2($Vb, [2, 15], { 24: $Vi }), o2($Vd, [2, 30]), { 22: [1, 41] }, o2($Vd, [2, 27]), o2($Vd, [2, 29])], defaultActions: { 2: [2, 1], 6: [2, 2] }, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (hash.recoverable) { this.trace(str2); } else { var error3 = new Error(str2); error3.hash = hash; throw error3; } }, "parseError"), parse: /* @__PURE__ */ __name(function parse7(input) { var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1; var args = lstack.slice.call(arguments, 1); var lexer2 = Object.create(this.lexer); var sharedState = { yy: {} }; for (var k2 in this.yy) { if (Object.prototype.hasOwnProperty.call(this.yy, k2)) { sharedState.yy[k2] = this.yy[k2]; } } lexer2.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer2; sharedState.yy.parser = this; if (typeof lexer2.yylloc == "undefined") { lexer2.yylloc = {}; } var yyloc = lexer2.yylloc; lstack.push(yyloc); var ranges = lexer2.options && lexer2.options.ranges; if (typeof sharedState.yy.parseError === "function") { this.parseError = sharedState.yy.parseError; } else { this.parseError = Object.getPrototypeOf(this).parseError; } function popStack(n2) { stack.length = stack.length - 2 * n2; vstack.length = vstack.length - n2; lstack.length = lstack.length - n2; } __name(popStack, "popStack"); function lex() { var token2; token2 = tstack.pop() || lexer2.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex, "lex"); var symbol, preErrorSymbol, state3, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state3 = stack[stack.length - 1]; if (this.defaultActions[state3]) { action = this.defaultActions[state3]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex(); } action = table[state3] && table[state3][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state3]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer2.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; } else { errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); } this.parseError(errStr, { text: lexer2.match, token: this.terminals_[symbol] || symbol, line: lexer2.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state3 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer2.yytext); lstack.push(lexer2.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer2.yyleng; yytext = lexer2.yytext; yylineno = lexer2.yylineno; yyloc = lexer2.yylloc; if (recovering > 0) { recovering--; } } else { symbol = preErrorSymbol; preErrorSymbol = null; } break; case 2: len = this.productions_[action[1]][1]; yyval.$ = vstack[vstack.length - len]; yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; if (ranges) { yyval._$.range = [ lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1] ]; } r2 = this.performAction.apply(yyval, [ yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack ].concat(args)); if (typeof r2 !== "undefined") { return r2; } if (len) { stack = stack.slice(0, -1 * len * 2); vstack = vstack.slice(0, -1 * len); lstack = lstack.slice(0, -1 * len); } stack.push(this.productions_[action[1]][0]); vstack.push(yyval.$); lstack.push(yyval._$); newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]]; stack.push(newState2); break; case 3: return true; } } return true; }, "parse") }; var lexer = /* @__PURE__ */ (function() { var lexer2 = { EOF: 1, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (this.yy.parser) { this.yy.parser.parseError(str2, hash); } else { throw new Error(str2); } }, "parseError"), // resets the lexer, sets new input setInput: /* @__PURE__ */ __name(function(input, yy) { this.yy = yy || this.yy || {}; this._input = input; this._more = this._backtrack = this.done = false; 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 }; if (this.options.ranges) { this.yylloc.range = [0, 0]; } this.offset = 0; return this; }, "setInput"), // consumes and returns one char from the input input: /* @__PURE__ */ __name(function() { var ch = this._input[0]; this.yytext += ch; this.yyleng++; this.offset++; this.match += ch; this.matched += ch; var lines = ch.match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno++; this.yylloc.last_line++; } else { this.yylloc.last_column++; } if (this.options.ranges) { this.yylloc.range[1]++; } this._input = this._input.slice(1); return ch; }, "input"), // unshifts one char (or a string) into the input unput: /* @__PURE__ */ __name(function(ch) { var len = ch.length; var lines = ch.split(/(?:\r\n?|\n)/g); this._input = ch + this._input; this.yytext = this.yytext.substr(0, this.yytext.length - len); this.offset -= len; var oldLines = 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); if (lines.length - 1) { this.yylineno -= lines.length - 1; } var r2 = this.yylloc.range; this.yylloc = { first_line: this.yylloc.first_line, last_line: this.yylineno + 1, first_column: this.yylloc.first_column, last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len }; if (this.options.ranges) { this.yylloc.range = [r2[0], r2[0] + this.yyleng - len]; } this.yyleng = this.yytext.length; return this; }, "unput"), // When called from action, caches matched text and appends it on next action more: /* @__PURE__ */ __name(function() { this._more = true; return this; }, "more"), // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. reject: /* @__PURE__ */ __name(function() { if (this.options.backtrack_lexer) { this._backtrack = true; } 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"), // retain first n characters of the match less: /* @__PURE__ */ __name(function(n2) { this.unput(this.match.slice(n2)); }, "less"), // displays already matched input, i.e. for error messages pastInput: /* @__PURE__ */ __name(function() { var past = this.matched.substr(0, this.matched.length - this.match.length); return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); }, "pastInput"), // displays upcoming input, i.e. for error messages upcomingInput: /* @__PURE__ */ __name(function() { var next3 = this.match; if (next3.length < 20) { next3 += this._input.substr(0, 20 - next3.length); } return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, ""); }, "upcomingInput"), // displays the character position where the lexing error occurred, i.e. for error messages showPosition: /* @__PURE__ */ __name(function() { var pre = this.pastInput(); var c3 = new Array(pre.length + 1).join("-"); return pre + this.upcomingInput() + "\n" + c3 + "^"; }, "showPosition"), // test the lexed token: return FALSE when not a match, otherwise return token test_match: /* @__PURE__ */ __name(function(match2, indexed_rule) { var token2, lines, backup; if (this.options.backtrack_lexer) { backup = { 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 }; if (this.options.ranges) { backup.yylloc.range = this.yylloc.range.slice(0); } } lines = match2[0].match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno += lines.length; } this.yylloc = { first_line: this.yylloc.last_line, last_line: this.yylineno + 1, first_column: this.yylloc.last_column, last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; this.yyleng = this.yytext.length; if (this.options.ranges) { this.yylloc.range = [this.offset, this.offset += this.yyleng]; } this._more = false; this._backtrack = false; this._input = this._input.slice(match2[0].length); this.matched += match2[0]; token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); if (this.done && this._input) { this.done = false; } if (token2) { return token2; } else if (this._backtrack) { for (var k2 in backup) { this[k2] = backup[k2]; } return false; } return false; }, "test_match"), // return next match in input next: /* @__PURE__ */ __name(function() { if (this.done) { return this.EOF; } if (!this._input) { this.done = true; } var token2, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[index]); if (token2 !== false) { return token2; } return false; } if (this._input === "") { return this.EOF; } else { return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { text: "", token: null, line: this.yylineno }); } }, "next"), // return next match that has a token lex: /* @__PURE__ */ __name(function lex() { var r2 = this.next(); if (r2) { return r2; } else { return this.lex(); } }, "lex"), // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) begin: /* @__PURE__ */ __name(function begin(condition) { this.conditionStack.push(condition); }, "begin"), // pop the previously active lexer condition state off the condition stack popState: /* @__PURE__ */ __name(function popState() { var n2 = this.conditionStack.length - 1; if (n2 > 0) { return this.conditionStack.pop(); } else { return this.conditionStack[0]; } }, "popState"), // produce the lexer rule set which is active for the currently active lexer condition state _currentRules: /* @__PURE__ */ __name(function _currentRules() { if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; } else { return this.conditions["INITIAL"].rules; } }, "_currentRules"), // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available topState: /* @__PURE__ */ __name(function topState(n2) { n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0); if (n2 >= 0) { return this.conditionStack[n2]; } else { return "INITIAL"; } }, "topState"), // alias for begin(condition) pushState: /* @__PURE__ */ __name(function pushState(condition) { this.begin(condition); }, "pushState"), // return the number of states currently on the stack stateStackSize: /* @__PURE__ */ __name(function stateStackSize() { return this.conditionStack.length; }, "stateStackSize"), options: { "case-insensitive": true }, performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { var YYSTATE = YY_START; switch ($avoiding_name_collisions) { case 0: this.pushState("shapeData"); yy_.yytext = ""; return 24; break; case 1: this.pushState("shapeDataStr"); return 24; break; case 2: this.popState(); return 24; break; case 3: const re3 = /\n\s*/g; yy_.yytext = yy_.yytext.replace(re3, "
"); return 24; break; case 4: return 24; break; case 5: this.popState(); break; case 6: yy.getLogger().trace("Found comment", yy_.yytext); return 6; break; case 7: return 8; break; case 8: this.begin("CLASS"); break; case 9: this.popState(); return 17; break; case 10: this.popState(); break; case 11: yy.getLogger().trace("Begin icon"); this.begin("ICON"); break; case 12: yy.getLogger().trace("SPACELINE"); return 6; break; case 13: return 7; break; case 14: return 16; break; case 15: yy.getLogger().trace("end icon"); this.popState(); break; case 16: yy.getLogger().trace("Exploding node"); this.begin("NODE"); return 20; break; case 17: yy.getLogger().trace("Cloud"); this.begin("NODE"); return 20; break; case 18: yy.getLogger().trace("Explosion Bang"); this.begin("NODE"); return 20; break; case 19: yy.getLogger().trace("Cloud Bang"); this.begin("NODE"); return 20; break; case 20: this.begin("NODE"); return 20; break; case 21: this.begin("NODE"); return 20; break; case 22: this.begin("NODE"); return 20; break; case 23: this.begin("NODE"); return 20; break; case 24: return 13; break; case 25: return 23; break; case 26: return 11; break; case 27: this.begin("NSTR2"); break; case 28: return "NODE_DESCR"; break; case 29: this.popState(); break; case 30: yy.getLogger().trace("Starting NSTR"); this.begin("NSTR"); break; case 31: yy.getLogger().trace("description:", yy_.yytext); return "NODE_DESCR"; break; case 32: this.popState(); break; case 33: this.popState(); yy.getLogger().trace("node end ))"); return "NODE_DEND"; break; case 34: this.popState(); yy.getLogger().trace("node end )"); return "NODE_DEND"; break; case 35: this.popState(); yy.getLogger().trace("node end ...", yy_.yytext); return "NODE_DEND"; break; case 36: this.popState(); yy.getLogger().trace("node end (("); return "NODE_DEND"; break; case 37: this.popState(); yy.getLogger().trace("node end (-"); return "NODE_DEND"; break; case 38: this.popState(); yy.getLogger().trace("node end (-"); return "NODE_DEND"; break; case 39: this.popState(); yy.getLogger().trace("node end (("); return "NODE_DEND"; break; case 40: this.popState(); yy.getLogger().trace("node end (("); return "NODE_DEND"; break; case 41: yy.getLogger().trace("Long description:", yy_.yytext); return 21; break; case 42: yy.getLogger().trace("Long description:", yy_.yytext); return 21; break; } }, "anonymous"), rules: [/^(?:@\{)/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^\"]+)/i, /^(?:[^}^"]+)/i, /^(?:\})/i, /^(?:\s*%%.*)/i, /^(?:kanban\b)/i, /^(?::::)/i, /^(?:.+)/i, /^(?:\n)/i, /^(?:::icon\()/i, /^(?:[\s]+[\n])/i, /^(?:[\n]+)/i, /^(?:[^\)]+)/i, /^(?:\))/i, /^(?:-\))/i, /^(?:\(-)/i, /^(?:\)\))/i, /^(?:\))/i, /^(?:\(\()/i, /^(?:\{\{)/i, /^(?:\()/i, /^(?:\[)/i, /^(?:[\s]+)/i, /^(?:[^\(\[\n\)\{\}@]+)/i, /^(?:$)/i, /^(?:["][`])/i, /^(?:[^`"]+)/i, /^(?:[`]["])/i, /^(?:["])/i, /^(?:[^"]+)/i, /^(?:["])/i, /^(?:[\)]\))/i, /^(?:[\)])/i, /^(?:[\]])/i, /^(?:\}\})/i, /^(?:\(-)/i, /^(?:-\))/i, /^(?:\(\()/i, /^(?:\()/i, /^(?:[^\)\]\(\}]+)/i, /^(?:.+(?!\(\())/i], conditions: { "shapeDataEndBracket": { "rules": [], "inclusive": false }, "shapeDataStr": { "rules": [2, 3], "inclusive": false }, "shapeData": { "rules": [1, 4, 5], "inclusive": false }, "CLASS": { "rules": [9, 10], "inclusive": false }, "ICON": { "rules": [14, 15], "inclusive": false }, "NSTR2": { "rules": [28, 29], "inclusive": false }, "NSTR": { "rules": [31, 32], "inclusive": false }, "NODE": { "rules": [27, 30, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42], "inclusive": false }, "INITIAL": { "rules": [0, 6, 7, 8, 11, 12, 13, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26], "inclusive": true } } }; return lexer2; })(); parser24.lexer = lexer; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser24; parser24.Parser = Parser3; return new Parser3(); })(); parser17.parser = parser17; kanban_default = parser17; } }); // src/diagrams/kanban/kanbanDb.ts var nodes3, sections5, cnt2, elements, clear15, getSection, getSections5, getData, addNode, nodeType2, getType, setElementForId, decorateNode, type2Str, getLogger, getElementById2, db4, kanbanDb_default; var init_kanbanDb = __esm({ "src/diagrams/kanban/kanbanDb.ts"() { "use strict"; init_diagramAPI(); init_common(); init_logger(); init_defaultConfig(); init_js_yaml(); nodes3 = []; sections5 = []; cnt2 = 0; elements = {}; clear15 = /* @__PURE__ */ __name(() => { nodes3 = []; sections5 = []; cnt2 = 0; elements = {}; }, "clear"); getSection = /* @__PURE__ */ __name((level) => { if (nodes3.length === 0) { return null; } const sectionLevel = nodes3[0].level; let lastSection = null; for (let i2 = nodes3.length - 1; i2 >= 0; i2--) { if (nodes3[i2].level === sectionLevel && !lastSection) { lastSection = nodes3[i2]; } if (nodes3[i2].level < sectionLevel) { throw new Error('Items without section detected, found section ("' + nodes3[i2].label + '")'); } } if (level === lastSection?.level) { return null; } return lastSection; }, "getSection"); getSections5 = /* @__PURE__ */ __name(function() { return sections5; }, "getSections"); getData = /* @__PURE__ */ __name(function() { const edges3 = []; const _nodes = []; const sections6 = getSections5(); const conf5 = getConfig2(); for (const section of sections6) { const node2 = { id: section.id, label: sanitizeText(section.label ?? "", conf5), isGroup: true, ticket: section.ticket, shape: "kanbanSection", level: section.level, look: conf5.look }; _nodes.push(node2); const children2 = nodes3.filter((n2) => n2.parentId === section.id); for (const item of children2) { const childNode = { id: item.id, parentId: section.id, label: sanitizeText(item.label ?? "", conf5), isGroup: false, ticket: item?.ticket, priority: item?.priority, assigned: item?.assigned, icon: item?.icon, shape: "kanbanItem", level: item.level, rx: 5, ry: 5, cssStyles: ["text-align: left"] }; _nodes.push(childNode); } } return { nodes: _nodes, edges: edges3, other: {}, config: getConfig2() }; }, "getData"); addNode = /* @__PURE__ */ __name((level, id30, descr, type3, shapeData) => { const conf5 = getConfig2(); let padding2 = conf5.mindmap?.padding ?? defaultConfig_default.mindmap.padding; switch (type3) { case nodeType2.ROUNDED_RECT: case nodeType2.RECT: case nodeType2.HEXAGON: padding2 *= 2; } const node2 = { id: sanitizeText(id30, conf5) || "kbn" + cnt2++, level, label: sanitizeText(descr, conf5), width: conf5.mindmap?.maxNodeWidth ?? defaultConfig_default.mindmap.maxNodeWidth, padding: padding2, isGroup: false }; if (shapeData !== void 0) { let yamlData; if (!shapeData.includes("\n")) { yamlData = "{\n" + shapeData + "\n}"; } else { yamlData = shapeData + "\n"; } const doc = load(yamlData, { schema: JSON_SCHEMA }); if (doc.shape && (doc.shape !== doc.shape.toLowerCase() || doc.shape.includes("_"))) { throw new Error(`No such shape: ${doc.shape}. Shape names should be lowercase.`); } if (doc?.shape && doc.shape === "kanbanItem") { node2.shape = doc?.shape; } if (doc?.label) { node2.label = doc?.label; } if (doc?.icon) { node2.icon = doc?.icon.toString(); } if (doc?.assigned) { node2.assigned = doc?.assigned.toString(); } if (doc?.ticket) { node2.ticket = doc?.ticket.toString(); } if (doc?.priority) { node2.priority = doc?.priority; } } const section = getSection(level); if (section) { node2.parentId = section.id || "kbn" + cnt2++; } else { sections5.push(node2); } nodes3.push(node2); }, "addNode"); nodeType2 = { DEFAULT: 0, NO_BORDER: 0, ROUNDED_RECT: 1, RECT: 2, CIRCLE: 3, CLOUD: 4, BANG: 5, HEXAGON: 6 }; getType = /* @__PURE__ */ __name((startStr, endStr) => { log.debug("In get type", startStr, endStr); switch (startStr) { case "[": return nodeType2.RECT; case "(": return endStr === ")" ? nodeType2.ROUNDED_RECT : nodeType2.CLOUD; case "((": return nodeType2.CIRCLE; case ")": return nodeType2.CLOUD; case "))": return nodeType2.BANG; case "{{": return nodeType2.HEXAGON; default: return nodeType2.DEFAULT; } }, "getType"); setElementForId = /* @__PURE__ */ __name((id30, element3) => { elements[id30] = element3; }, "setElementForId"); decorateNode = /* @__PURE__ */ __name((decoration) => { if (!decoration) { return; } const config5 = getConfig2(); const node2 = nodes3[nodes3.length - 1]; if (decoration.icon) { node2.icon = sanitizeText(decoration.icon, config5); } if (decoration.class) { node2.cssClasses = sanitizeText(decoration.class, config5); } }, "decorateNode"); type2Str = /* @__PURE__ */ __name((type3) => { switch (type3) { case nodeType2.DEFAULT: return "no-border"; case nodeType2.RECT: return "rect"; case nodeType2.ROUNDED_RECT: return "rounded-rect"; case nodeType2.CIRCLE: return "circle"; case nodeType2.CLOUD: return "cloud"; case nodeType2.BANG: return "bang"; case nodeType2.HEXAGON: return "hexgon"; // cspell: disable-line default: return "no-border"; } }, "type2Str"); getLogger = /* @__PURE__ */ __name(() => log, "getLogger"); getElementById2 = /* @__PURE__ */ __name((id30) => elements[id30], "getElementById"); db4 = { clear: clear15, addNode, getSections: getSections5, getData, nodeType: nodeType2, getType, setElementForId, decorateNode, type2Str, getLogger, getElementById: getElementById2 }; kanbanDb_default = db4; } }); // src/diagrams/kanban/kanbanRenderer.ts var draw19, kanbanRenderer_default; var init_kanbanRenderer = __esm({ "src/diagrams/kanban/kanbanRenderer.ts"() { "use strict"; init_diagramAPI(); init_logger(); init_selectSvgElement(); init_setupGraphViewbox(); init_defaultConfig(); init_clusters(); init_nodes2(); draw19 = /* @__PURE__ */ __name(async (text4, id30, _version, diagObj) => { log.debug("Rendering kanban diagram\n" + text4); const db7 = diagObj.db; const data4Layout = db7.getData(); const conf5 = getConfig2(); conf5.htmlLabels = false; const svg2 = selectSvgElement(id30); const sectionsElem = svg2.append("g"); sectionsElem.attr("class", "sections"); const nodesElem = svg2.append("g"); nodesElem.attr("class", "items"); const sections6 = data4Layout.nodes.filter( // TODO: TypeScript 5.5 will infer this predicate automatically (node2) => node2.isGroup ); let cnt4 = 0; const padding2 = 10; const sectionObjects = []; let maxLabelHeight = 25; for (const section of sections6) { const WIDTH = conf5?.kanban?.sectionWidth || 200; cnt4 = cnt4 + 1; section.x = WIDTH * cnt4 + (cnt4 - 1) * padding2 / 2; section.width = WIDTH; section.y = 0; section.height = WIDTH * 3; section.rx = 5; section.ry = 5; section.cssClasses = section.cssClasses + " section-" + cnt4; const sectionObj = await insertCluster(sectionsElem, section); maxLabelHeight = Math.max(maxLabelHeight, sectionObj?.labelBBox?.height); sectionObjects.push(sectionObj); } let i2 = 0; for (const section of sections6) { const sectionObj = sectionObjects[i2]; i2 = i2 + 1; const WIDTH = conf5?.kanban?.sectionWidth || 200; const top2 = -WIDTH * 3 / 2 + maxLabelHeight; let y6 = top2; const sectionItems = data4Layout.nodes.filter((node2) => node2.parentId === section.id); for (const item of sectionItems) { if (item.isGroup) { throw new Error("Groups within groups are not allowed in Kanban diagrams"); } item.x = section.x; item.width = WIDTH - 1.5 * padding2; const nodeEl = await insertNode(nodesElem, item, { config: conf5 }); const bbox = nodeEl.node().getBBox(); item.y = y6 + bbox.height / 2; await positionNode(item); y6 = item.y + bbox.height / 2 + padding2 / 2; } const rect3 = sectionObj.cluster.select("rect"); const height2 = Math.max(y6 - top2 + 3 * padding2, 50) + (maxLabelHeight - 25); rect3.attr("height", height2); } setupGraphViewbox( void 0, svg2, conf5.mindmap?.padding ?? defaultConfig_default.kanban.padding, conf5.mindmap?.useMaxWidth ?? defaultConfig_default.kanban.useMaxWidth ); }, "draw"); kanbanRenderer_default = { draw: draw19 }; } }); // src/diagrams/kanban/styles.ts var genSections3, getStyles15, styles_default14; var init_styles14 = __esm({ "src/diagrams/kanban/styles.ts"() { "use strict"; init_dist(); init_globalStyles(); genSections3 = /* @__PURE__ */ __name((options2) => { let sections6 = ""; for (let i2 = 0; i2 < options2.THEME_COLOR_LIMIT; i2++) { options2["lineColor" + i2] = options2["lineColor" + i2] || options2["cScaleInv" + i2]; if (is_dark_default(options2["lineColor" + i2])) { options2["lineColor" + i2] = lighten_default(options2["lineColor" + i2], 20); } else { options2["lineColor" + i2] = darken_default(options2["lineColor" + i2], 20); } } const adjuster = /* @__PURE__ */ __name((color2, level) => options2.darkMode ? darken_default(color2, level) : lighten_default(color2, level), "adjuster"); for (let i2 = 0; i2 < options2.THEME_COLOR_LIMIT; i2++) { const sw = "" + (17 - 3 * i2); sections6 += ` .section-${i2 - 1} rect, .section-${i2 - 1} path, .section-${i2 - 1} circle, .section-${i2 - 1} polygon, .section-${i2 - 1} path { fill: ${adjuster(options2["cScale" + i2], 10)}; stroke: ${adjuster(options2["cScale" + i2], 10)}; } .section-${i2 - 1} text { fill: ${options2["cScaleLabel" + i2]}; } .node-icon-${i2 - 1} { font-size: 40px; color: ${options2["cScaleLabel" + i2]}; } .section-edge-${i2 - 1}{ stroke: ${options2["cScale" + i2]}; } .edge-depth-${i2 - 1}{ stroke-width: ${sw}; } .section-${i2 - 1} line { stroke: ${options2["cScaleInv" + i2]} ; stroke-width: 3; } .disabled, .disabled circle, .disabled text { fill: lightgray; } .disabled text { fill: #efefef; } .node rect, .node circle, .node ellipse, .node polygon, .node path { fill: ${options2.background}; stroke: ${options2.nodeBorder}; stroke-width: 1px; } .kanban-ticket-link { fill: ${options2.background}; stroke: ${options2.nodeBorder}; text-decoration: underline; } `; } return sections6; }, "genSections"); getStyles15 = /* @__PURE__ */ __name((options2) => ` .edge { stroke-width: 3; } ${genSections3(options2)} .section-root rect, .section-root path, .section-root circle, .section-root polygon { fill: ${options2.git0}; } .section-root text { fill: ${options2.gitBranchLabel0}; } .icon-container { height:100%; display: flex; justify-content: center; align-items: center; } .edge { fill: none; } .cluster-label, .label { color: ${options2.textColor}; fill: ${options2.textColor}; } .kanban-label { dy: 1em; alignment-baseline: middle; text-anchor: middle; dominant-baseline: middle; text-align: center; } ${getIconStyles()} `, "getStyles"); styles_default14 = getStyles15; } }); // src/diagrams/kanban/kanban-definition.ts var kanban_definition_exports = {}; __export(kanban_definition_exports, { diagram: () => diagram20 }); var diagram20; var init_kanban_definition = __esm({ "src/diagrams/kanban/kanban-definition.ts"() { "use strict"; init_kanban(); init_kanbanDb(); init_kanbanRenderer(); init_styles14(); diagram20 = { db: kanbanDb_default, renderer: kanbanRenderer_default, parser: kanban_default, styles: styles_default14 }; } }); // src/diagrams/sankey/parser/sankey.jison var parser18, sankey_default; var init_sankey = __esm({ "src/diagrams/sankey/parser/sankey.jison"() { "use strict"; parser18 = (function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) { for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ; return o3; }, "o"), $V0 = [1, 9], $V1 = [1, 10], $V2 = [1, 5, 10, 12]; var parser24 = { trace: /* @__PURE__ */ __name(function trace() { }, "trace"), yy: {}, symbols_: { "error": 2, "start": 3, "SANKEY": 4, "NEWLINE": 5, "csv": 6, "opt_eof": 7, "record": 8, "csv_tail": 9, "EOF": 10, "field[source]": 11, "COMMA": 12, "field[target]": 13, "field[value]": 14, "field": 15, "escaped": 16, "non_escaped": 17, "DQUOTE": 18, "ESCAPED_TEXT": 19, "NON_ESCAPED_TEXT": 20, "$accept": 0, "$end": 1 }, terminals_: { 2: "error", 4: "SANKEY", 5: "NEWLINE", 10: "EOF", 11: "field[source]", 12: "COMMA", 13: "field[target]", 14: "field[value]", 18: "DQUOTE", 19: "ESCAPED_TEXT", 20: "NON_ESCAPED_TEXT" }, productions_: [0, [3, 4], [6, 2], [9, 2], [9, 0], [7, 1], [7, 0], [8, 5], [15, 1], [15, 1], [16, 3], [17, 1]], performAction: /* @__PURE__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { var $0 = $$.length - 1; switch (yystate) { case 7: const source = yy.findOrCreateNode($$[$0 - 4].trim().replaceAll('""', '"')); const target = yy.findOrCreateNode($$[$0 - 2].trim().replaceAll('""', '"')); const value2 = parseFloat($$[$0].trim()); yy.addLink(source, target, value2); break; case 8: case 9: case 11: this.$ = $$[$0]; break; case 10: this.$ = $$[$0 - 1]; break; } }, "anonymous"), table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, { 5: [1, 3] }, { 6: 4, 8: 5, 15: 6, 16: 7, 17: 8, 18: $V0, 20: $V1 }, { 1: [2, 6], 7: 11, 10: [1, 12] }, o2($V1, [2, 4], { 9: 13, 5: [1, 14] }), { 12: [1, 15] }, o2($V2, [2, 8]), o2($V2, [2, 9]), { 19: [1, 16] }, o2($V2, [2, 11]), { 1: [2, 1] }, { 1: [2, 5] }, o2($V1, [2, 2]), { 6: 17, 8: 5, 15: 6, 16: 7, 17: 8, 18: $V0, 20: $V1 }, { 15: 18, 16: 7, 17: 8, 18: $V0, 20: $V1 }, { 18: [1, 19] }, o2($V1, [2, 3]), { 12: [1, 20] }, o2($V2, [2, 10]), { 15: 21, 16: 7, 17: 8, 18: $V0, 20: $V1 }, o2([1, 5, 10], [2, 7])], defaultActions: { 11: [2, 1], 12: [2, 5] }, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (hash.recoverable) { this.trace(str2); } else { var error3 = new Error(str2); error3.hash = hash; throw error3; } }, "parseError"), parse: /* @__PURE__ */ __name(function parse7(input) { var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1; var args = lstack.slice.call(arguments, 1); var lexer2 = Object.create(this.lexer); var sharedState = { yy: {} }; for (var k2 in this.yy) { if (Object.prototype.hasOwnProperty.call(this.yy, k2)) { sharedState.yy[k2] = this.yy[k2]; } } lexer2.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer2; sharedState.yy.parser = this; if (typeof lexer2.yylloc == "undefined") { lexer2.yylloc = {}; } var yyloc = lexer2.yylloc; lstack.push(yyloc); var ranges = lexer2.options && lexer2.options.ranges; if (typeof sharedState.yy.parseError === "function") { this.parseError = sharedState.yy.parseError; } else { this.parseError = Object.getPrototypeOf(this).parseError; } function popStack(n2) { stack.length = stack.length - 2 * n2; vstack.length = vstack.length - n2; lstack.length = lstack.length - n2; } __name(popStack, "popStack"); function lex() { var token2; token2 = tstack.pop() || lexer2.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex, "lex"); var symbol, preErrorSymbol, state3, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state3 = stack[stack.length - 1]; if (this.defaultActions[state3]) { action = this.defaultActions[state3]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex(); } action = table[state3] && table[state3][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state3]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer2.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; } else { errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); } this.parseError(errStr, { text: lexer2.match, token: this.terminals_[symbol] || symbol, line: lexer2.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state3 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer2.yytext); lstack.push(lexer2.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer2.yyleng; yytext = lexer2.yytext; yylineno = lexer2.yylineno; yyloc = lexer2.yylloc; if (recovering > 0) { recovering--; } } else { symbol = preErrorSymbol; preErrorSymbol = null; } break; case 2: len = this.productions_[action[1]][1]; yyval.$ = vstack[vstack.length - len]; yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; if (ranges) { yyval._$.range = [ lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1] ]; } r2 = this.performAction.apply(yyval, [ yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack ].concat(args)); if (typeof r2 !== "undefined") { return r2; } if (len) { stack = stack.slice(0, -1 * len * 2); vstack = vstack.slice(0, -1 * len); lstack = lstack.slice(0, -1 * len); } stack.push(this.productions_[action[1]][0]); vstack.push(yyval.$); lstack.push(yyval._$); newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]]; stack.push(newState2); break; case 3: return true; } } return true; }, "parse") }; var lexer = /* @__PURE__ */ (function() { var lexer2 = { EOF: 1, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (this.yy.parser) { this.yy.parser.parseError(str2, hash); } else { throw new Error(str2); } }, "parseError"), // resets the lexer, sets new input setInput: /* @__PURE__ */ __name(function(input, yy) { this.yy = yy || this.yy || {}; this._input = input; this._more = this._backtrack = this.done = false; 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 }; if (this.options.ranges) { this.yylloc.range = [0, 0]; } this.offset = 0; return this; }, "setInput"), // consumes and returns one char from the input input: /* @__PURE__ */ __name(function() { var ch = this._input[0]; this.yytext += ch; this.yyleng++; this.offset++; this.match += ch; this.matched += ch; var lines = ch.match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno++; this.yylloc.last_line++; } else { this.yylloc.last_column++; } if (this.options.ranges) { this.yylloc.range[1]++; } this._input = this._input.slice(1); return ch; }, "input"), // unshifts one char (or a string) into the input unput: /* @__PURE__ */ __name(function(ch) { var len = ch.length; var lines = ch.split(/(?:\r\n?|\n)/g); this._input = ch + this._input; this.yytext = this.yytext.substr(0, this.yytext.length - len); this.offset -= len; var oldLines = 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); if (lines.length - 1) { this.yylineno -= lines.length - 1; } var r2 = this.yylloc.range; this.yylloc = { first_line: this.yylloc.first_line, last_line: this.yylineno + 1, first_column: this.yylloc.first_column, last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len }; if (this.options.ranges) { this.yylloc.range = [r2[0], r2[0] + this.yyleng - len]; } this.yyleng = this.yytext.length; return this; }, "unput"), // When called from action, caches matched text and appends it on next action more: /* @__PURE__ */ __name(function() { this._more = true; return this; }, "more"), // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. reject: /* @__PURE__ */ __name(function() { if (this.options.backtrack_lexer) { this._backtrack = true; } 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"), // retain first n characters of the match less: /* @__PURE__ */ __name(function(n2) { this.unput(this.match.slice(n2)); }, "less"), // displays already matched input, i.e. for error messages pastInput: /* @__PURE__ */ __name(function() { var past = this.matched.substr(0, this.matched.length - this.match.length); return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); }, "pastInput"), // displays upcoming input, i.e. for error messages upcomingInput: /* @__PURE__ */ __name(function() { var next3 = this.match; if (next3.length < 20) { next3 += this._input.substr(0, 20 - next3.length); } return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, ""); }, "upcomingInput"), // displays the character position where the lexing error occurred, i.e. for error messages showPosition: /* @__PURE__ */ __name(function() { var pre = this.pastInput(); var c3 = new Array(pre.length + 1).join("-"); return pre + this.upcomingInput() + "\n" + c3 + "^"; }, "showPosition"), // test the lexed token: return FALSE when not a match, otherwise return token test_match: /* @__PURE__ */ __name(function(match2, indexed_rule) { var token2, lines, backup; if (this.options.backtrack_lexer) { backup = { 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 }; if (this.options.ranges) { backup.yylloc.range = this.yylloc.range.slice(0); } } lines = match2[0].match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno += lines.length; } this.yylloc = { first_line: this.yylloc.last_line, last_line: this.yylineno + 1, first_column: this.yylloc.last_column, last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; this.yyleng = this.yytext.length; if (this.options.ranges) { this.yylloc.range = [this.offset, this.offset += this.yyleng]; } this._more = false; this._backtrack = false; this._input = this._input.slice(match2[0].length); this.matched += match2[0]; token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); if (this.done && this._input) { this.done = false; } if (token2) { return token2; } else if (this._backtrack) { for (var k2 in backup) { this[k2] = backup[k2]; } return false; } return false; }, "test_match"), // return next match in input next: /* @__PURE__ */ __name(function() { if (this.done) { return this.EOF; } if (!this._input) { this.done = true; } var token2, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[index]); if (token2 !== false) { return token2; } return false; } if (this._input === "") { return this.EOF; } else { return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { text: "", token: null, line: this.yylineno }); } }, "next"), // return next match that has a token lex: /* @__PURE__ */ __name(function lex() { var r2 = this.next(); if (r2) { return r2; } else { return this.lex(); } }, "lex"), // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) begin: /* @__PURE__ */ __name(function begin(condition) { this.conditionStack.push(condition); }, "begin"), // pop the previously active lexer condition state off the condition stack popState: /* @__PURE__ */ __name(function popState() { var n2 = this.conditionStack.length - 1; if (n2 > 0) { return this.conditionStack.pop(); } else { return this.conditionStack[0]; } }, "popState"), // produce the lexer rule set which is active for the currently active lexer condition state _currentRules: /* @__PURE__ */ __name(function _currentRules() { if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; } else { return this.conditions["INITIAL"].rules; } }, "_currentRules"), // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available topState: /* @__PURE__ */ __name(function topState(n2) { n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0); if (n2 >= 0) { return this.conditionStack[n2]; } else { return "INITIAL"; } }, "topState"), // alias for begin(condition) pushState: /* @__PURE__ */ __name(function pushState(condition) { this.begin(condition); }, "pushState"), // return the number of states currently on the stack stateStackSize: /* @__PURE__ */ __name(function stateStackSize() { return this.conditionStack.length; }, "stateStackSize"), options: { "case-insensitive": true }, performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { var YYSTATE = YY_START; switch ($avoiding_name_collisions) { case 0: this.pushState("csv"); return 4; break; case 1: this.pushState("csv"); return 4; break; case 2: return 10; break; case 3: return 5; break; case 4: return 12; break; case 5: this.pushState("escaped_text"); return 18; break; case 6: return 20; break; case 7: this.popState("escaped_text"); return 18; break; case 8: return 19; break; } }, "anonymous"), rules: [/^(?:sankey-beta\b)/i, /^(?:sankey\b)/i, /^(?:$)/i, /^(?:((\u000D\u000A)|(\u000A)))/i, /^(?:(\u002C))/i, /^(?:(\u0022))/i, /^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i, /^(?:(\u0022)(?!(\u0022)))/i, /^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i], conditions: { "csv": { "rules": [2, 3, 4, 5, 6, 7, 8], "inclusive": false }, "escaped_text": { "rules": [7, 8], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8], "inclusive": true } } }; return lexer2; })(); parser24.lexer = lexer; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser24; parser24.Parser = Parser3; return new Parser3(); })(); parser18.parser = parser18; sankey_default = parser18; } }); // src/diagrams/sankey/sankeyDB.ts var links2, nodes4, nodesMap, clear16, SankeyLink, addLink, SankeyNode, findOrCreateNode, getNodes, getLinks2, getGraph, sankeyDB_default; var init_sankeyDB = __esm({ "src/diagrams/sankey/sankeyDB.ts"() { "use strict"; init_diagramAPI(); init_common(); init_commonDb(); links2 = []; nodes4 = []; nodesMap = /* @__PURE__ */ new Map(); clear16 = /* @__PURE__ */ __name(() => { links2 = []; nodes4 = []; nodesMap = /* @__PURE__ */ new Map(); clear(); }, "clear"); SankeyLink = class { constructor(source, target, value2 = 0) { this.source = source; this.target = target; this.value = value2; } static { __name(this, "SankeyLink"); } }; addLink = /* @__PURE__ */ __name((source, target, value2) => { links2.push(new SankeyLink(source, target, value2)); }, "addLink"); SankeyNode = class { constructor(ID) { this.ID = ID; } static { __name(this, "SankeyNode"); } }; findOrCreateNode = /* @__PURE__ */ __name((ID) => { ID = common_default.sanitizeText(ID, getConfig2()); let node2 = nodesMap.get(ID); if (node2 === void 0) { node2 = new SankeyNode(ID); nodesMap.set(ID, node2); nodes4.push(node2); } return node2; }, "findOrCreateNode"); getNodes = /* @__PURE__ */ __name(() => nodes4, "getNodes"); getLinks2 = /* @__PURE__ */ __name(() => links2, "getLinks"); getGraph = /* @__PURE__ */ __name(() => ({ nodes: nodes4.map((node2) => ({ id: node2.ID })), links: links2.map((link2) => ({ source: link2.source.ID, target: link2.target.ID, value: link2.value })) }), "getGraph"); sankeyDB_default = { nodesMap, getConfig: /* @__PURE__ */ __name(() => getConfig2().sankey, "getConfig"), getNodes, getLinks: getLinks2, getGraph, addLink, findOrCreateNode, getAccTitle, setAccTitle, getAccDescription, setAccDescription, getDiagramTitle, setDiagramTitle, clear: clear16 }; } }); // ../../node_modules/.pnpm/d3-array@2.12.1/node_modules/d3-array/src/max.js function max9(values2, valueof) { let max10; if (valueof === void 0) { for (const value2 of values2) { if (value2 != null && (max10 < value2 || max10 === void 0 && value2 >= value2)) { max10 = value2; } } } else { let index = -1; for (let value2 of values2) { if ((value2 = valueof(value2, ++index, values2)) != null && (max10 < value2 || max10 === void 0 && value2 >= value2)) { max10 = value2; } } } return max10; } var init_max3 = __esm({ "../../node_modules/.pnpm/d3-array@2.12.1/node_modules/d3-array/src/max.js"() { "use strict"; __name(max9, "max"); } }); // ../../node_modules/.pnpm/d3-array@2.12.1/node_modules/d3-array/src/min.js function min8(values2, valueof) { let min9; if (valueof === void 0) { for (const value2 of values2) { if (value2 != null && (min9 > value2 || min9 === void 0 && value2 >= value2)) { min9 = value2; } } } else { let index = -1; for (let value2 of values2) { if ((value2 = valueof(value2, ++index, values2)) != null && (min9 > value2 || min9 === void 0 && value2 >= value2)) { min9 = value2; } } } return min9; } var init_min3 = __esm({ "../../node_modules/.pnpm/d3-array@2.12.1/node_modules/d3-array/src/min.js"() { "use strict"; __name(min8, "min"); } }); // ../../node_modules/.pnpm/d3-array@2.12.1/node_modules/d3-array/src/sum.js function sum(values2, valueof) { let sum2 = 0; if (valueof === void 0) { for (let value2 of values2) { if (value2 = +value2) { sum2 += value2; } } } else { let index = -1; for (let value2 of values2) { if (value2 = +valueof(value2, ++index, values2)) { sum2 += value2; } } } return sum2; } var init_sum2 = __esm({ "../../node_modules/.pnpm/d3-array@2.12.1/node_modules/d3-array/src/sum.js"() { "use strict"; __name(sum, "sum"); } }); // ../../node_modules/.pnpm/d3-array@2.12.1/node_modules/d3-array/src/index.js var init_src33 = __esm({ "../../node_modules/.pnpm/d3-array@2.12.1/node_modules/d3-array/src/index.js"() { "use strict"; init_max3(); init_min3(); init_sum2(); } }); // ../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/align.js function targetDepth(d3) { return d3.target.depth; } function left2(node2) { return node2.depth; } function right2(node2, n2) { return n2 - 1 - node2.height; } function justify(node2, n2) { return node2.sourceLinks.length ? node2.depth : n2 - 1; } function center3(node2) { return node2.targetLinks.length ? node2.depth : node2.sourceLinks.length ? min8(node2.sourceLinks, targetDepth) - 1 : 0; } var init_align = __esm({ "../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/align.js"() { "use strict"; init_src33(); __name(targetDepth, "targetDepth"); __name(left2, "left"); __name(right2, "right"); __name(justify, "justify"); __name(center3, "center"); } }); // ../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/constant.js function constant2(x5) { return function() { return x5; }; } var init_constant9 = __esm({ "../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/constant.js"() { "use strict"; __name(constant2, "constant"); } }); // ../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/sankey.js function ascendingSourceBreadth(a2, b3) { return ascendingBreadth(a2.source, b3.source) || a2.index - b3.index; } function ascendingTargetBreadth(a2, b3) { return ascendingBreadth(a2.target, b3.target) || a2.index - b3.index; } function ascendingBreadth(a2, b3) { return a2.y0 - b3.y0; } function value(d3) { return d3.value; } function defaultId(d3) { return d3.index; } function defaultNodes(graph) { return graph.nodes; } function defaultLinks(graph) { return graph.links; } function find3(nodeById, id30) { const node2 = nodeById.get(id30); if (!node2) throw new Error("missing: " + id30); return node2; } function computeLinkBreadths({ nodes: nodes5 }) { for (const node2 of nodes5) { let y0 = node2.y0; let y1 = y0; for (const link2 of node2.sourceLinks) { link2.y0 = y0 + link2.width / 2; y0 += link2.width; } for (const link2 of node2.targetLinks) { link2.y1 = y1 + link2.width / 2; y1 += link2.width; } } } function Sankey() { let x0 = 0, y0 = 0, x1 = 1, y1 = 1; let dx = 24; let dy = 8, py; let id30 = defaultId; let align = justify; let sort3; let linkSort; let nodes5 = defaultNodes; let links3 = defaultLinks; let iterations = 6; function sankey() { const graph = { nodes: nodes5.apply(null, arguments), links: links3.apply(null, arguments) }; computeNodeLinks(graph); computeNodeValues(graph); computeNodeDepths(graph); computeNodeHeights(graph); computeNodeBreadths(graph); computeLinkBreadths(graph); return graph; } __name(sankey, "sankey"); sankey.update = function(graph) { computeLinkBreadths(graph); return graph; }; sankey.nodeId = function(_3) { return arguments.length ? (id30 = typeof _3 === "function" ? _3 : constant2(_3), sankey) : id30; }; sankey.nodeAlign = function(_3) { return arguments.length ? (align = typeof _3 === "function" ? _3 : constant2(_3), sankey) : align; }; sankey.nodeSort = function(_3) { return arguments.length ? (sort3 = _3, sankey) : sort3; }; sankey.nodeWidth = function(_3) { return arguments.length ? (dx = +_3, sankey) : dx; }; sankey.nodePadding = function(_3) { return arguments.length ? (dy = py = +_3, sankey) : dy; }; sankey.nodes = function(_3) { return arguments.length ? (nodes5 = typeof _3 === "function" ? _3 : constant2(_3), sankey) : nodes5; }; sankey.links = function(_3) { return arguments.length ? (links3 = typeof _3 === "function" ? _3 : constant2(_3), sankey) : links3; }; sankey.linkSort = function(_3) { return arguments.length ? (linkSort = _3, sankey) : linkSort; }; sankey.size = function(_3) { return arguments.length ? (x0 = y0 = 0, x1 = +_3[0], y1 = +_3[1], sankey) : [x1 - x0, y1 - y0]; }; sankey.extent = function(_3) { return arguments.length ? (x0 = +_3[0][0], x1 = +_3[1][0], y0 = +_3[0][1], y1 = +_3[1][1], sankey) : [[x0, y0], [x1, y1]]; }; sankey.iterations = function(_3) { return arguments.length ? (iterations = +_3, sankey) : iterations; }; function computeNodeLinks({ nodes: nodes6, links: links4 }) { for (const [i2, node2] of nodes6.entries()) { node2.index = i2; node2.sourceLinks = []; node2.targetLinks = []; } const nodeById = new Map(nodes6.map((d3, i2) => [id30(d3, i2, nodes6), d3])); for (const [i2, link2] of links4.entries()) { link2.index = i2; let { source, target } = link2; if (typeof source !== "object") source = link2.source = find3(nodeById, source); if (typeof target !== "object") target = link2.target = find3(nodeById, target); source.sourceLinks.push(link2); target.targetLinks.push(link2); } if (linkSort != null) { for (const { sourceLinks, targetLinks } of nodes6) { sourceLinks.sort(linkSort); targetLinks.sort(linkSort); } } } __name(computeNodeLinks, "computeNodeLinks"); function computeNodeValues({ nodes: nodes6 }) { for (const node2 of nodes6) { node2.value = node2.fixedValue === void 0 ? Math.max(sum(node2.sourceLinks, value), sum(node2.targetLinks, value)) : node2.fixedValue; } } __name(computeNodeValues, "computeNodeValues"); function computeNodeDepths({ nodes: nodes6 }) { const n2 = nodes6.length; let current = new Set(nodes6); let next3 = /* @__PURE__ */ new Set(); let x5 = 0; while (current.size) { for (const node2 of current) { node2.depth = x5; for (const { target } of node2.sourceLinks) { next3.add(target); } } if (++x5 > n2) throw new Error("circular link"); current = next3; next3 = /* @__PURE__ */ new Set(); } } __name(computeNodeDepths, "computeNodeDepths"); function computeNodeHeights({ nodes: nodes6 }) { const n2 = nodes6.length; let current = new Set(nodes6); let next3 = /* @__PURE__ */ new Set(); let x5 = 0; while (current.size) { for (const node2 of current) { node2.height = x5; for (const { source } of node2.targetLinks) { next3.add(source); } } if (++x5 > n2) throw new Error("circular link"); current = next3; next3 = /* @__PURE__ */ new Set(); } } __name(computeNodeHeights, "computeNodeHeights"); function computeNodeLayers({ nodes: nodes6 }) { const x5 = max9(nodes6, (d3) => d3.depth) + 1; const kx = (x1 - x0 - dx) / (x5 - 1); const columns = new Array(x5); for (const node2 of nodes6) { const i2 = Math.max(0, Math.min(x5 - 1, Math.floor(align.call(null, node2, x5)))); node2.layer = i2; node2.x0 = x0 + i2 * kx; node2.x1 = node2.x0 + dx; if (columns[i2]) columns[i2].push(node2); else columns[i2] = [node2]; } if (sort3) for (const column2 of columns) { column2.sort(sort3); } return columns; } __name(computeNodeLayers, "computeNodeLayers"); function initializeNodeBreadths(columns) { const ky = min8(columns, (c3) => (y1 - y0 - (c3.length - 1) * py) / sum(c3, value)); for (const nodes6 of columns) { let y6 = y0; for (const node2 of nodes6) { node2.y0 = y6; node2.y1 = y6 + node2.value * ky; y6 = node2.y1 + py; for (const link2 of node2.sourceLinks) { link2.width = link2.value * ky; } } y6 = (y1 - y6 + py) / (nodes6.length + 1); for (let i2 = 0; i2 < nodes6.length; ++i2) { const node2 = nodes6[i2]; node2.y0 += y6 * (i2 + 1); node2.y1 += y6 * (i2 + 1); } reorderLinks(nodes6); } } __name(initializeNodeBreadths, "initializeNodeBreadths"); function computeNodeBreadths(graph) { const columns = computeNodeLayers(graph); py = Math.min(dy, (y1 - y0) / (max9(columns, (c3) => c3.length) - 1)); initializeNodeBreadths(columns); for (let i2 = 0; i2 < iterations; ++i2) { const alpha = Math.pow(0.99, i2); const beta = Math.max(1 - alpha, (i2 + 1) / iterations); relaxRightToLeft(columns, alpha, beta); relaxLeftToRight(columns, alpha, beta); } } __name(computeNodeBreadths, "computeNodeBreadths"); function relaxLeftToRight(columns, alpha, beta) { for (let i2 = 1, n2 = columns.length; i2 < n2; ++i2) { const column2 = columns[i2]; for (const target of column2) { let y6 = 0; let w4 = 0; for (const { source, value: value2 } of target.targetLinks) { let v3 = value2 * (target.layer - source.layer); y6 += targetTop(source, target) * v3; w4 += v3; } if (!(w4 > 0)) continue; let dy2 = (y6 / w4 - target.y0) * alpha; target.y0 += dy2; target.y1 += dy2; reorderNodeLinks(target); } if (sort3 === void 0) column2.sort(ascendingBreadth); resolveCollisions(column2, beta); } } __name(relaxLeftToRight, "relaxLeftToRight"); function relaxRightToLeft(columns, alpha, beta) { for (let n2 = columns.length, i2 = n2 - 2; i2 >= 0; --i2) { const column2 = columns[i2]; for (const source of column2) { let y6 = 0; let w4 = 0; for (const { target, value: value2 } of source.sourceLinks) { let v3 = value2 * (target.layer - source.layer); y6 += sourceTop(source, target) * v3; w4 += v3; } if (!(w4 > 0)) continue; let dy2 = (y6 / w4 - source.y0) * alpha; source.y0 += dy2; source.y1 += dy2; reorderNodeLinks(source); } if (sort3 === void 0) column2.sort(ascendingBreadth); resolveCollisions(column2, beta); } } __name(relaxRightToLeft, "relaxRightToLeft"); function resolveCollisions(nodes6, alpha) { const i2 = nodes6.length >> 1; const subject = nodes6[i2]; resolveCollisionsBottomToTop(nodes6, subject.y0 - py, i2 - 1, alpha); resolveCollisionsTopToBottom(nodes6, subject.y1 + py, i2 + 1, alpha); resolveCollisionsBottomToTop(nodes6, y1, nodes6.length - 1, alpha); resolveCollisionsTopToBottom(nodes6, y0, 0, alpha); } __name(resolveCollisions, "resolveCollisions"); function resolveCollisionsTopToBottom(nodes6, y6, i2, alpha) { for (; i2 < nodes6.length; ++i2) { const node2 = nodes6[i2]; const dy2 = (y6 - node2.y0) * alpha; if (dy2 > 1e-6) node2.y0 += dy2, node2.y1 += dy2; y6 = node2.y1 + py; } } __name(resolveCollisionsTopToBottom, "resolveCollisionsTopToBottom"); function resolveCollisionsBottomToTop(nodes6, y6, i2, alpha) { for (; i2 >= 0; --i2) { const node2 = nodes6[i2]; const dy2 = (node2.y1 - y6) * alpha; if (dy2 > 1e-6) node2.y0 -= dy2, node2.y1 -= dy2; y6 = node2.y0 - py; } } __name(resolveCollisionsBottomToTop, "resolveCollisionsBottomToTop"); function reorderNodeLinks({ sourceLinks, targetLinks }) { if (linkSort === void 0) { for (const { source: { sourceLinks: sourceLinks2 } } of targetLinks) { sourceLinks2.sort(ascendingTargetBreadth); } for (const { target: { targetLinks: targetLinks2 } } of sourceLinks) { targetLinks2.sort(ascendingSourceBreadth); } } } __name(reorderNodeLinks, "reorderNodeLinks"); function reorderLinks(nodes6) { if (linkSort === void 0) { for (const { sourceLinks, targetLinks } of nodes6) { sourceLinks.sort(ascendingTargetBreadth); targetLinks.sort(ascendingSourceBreadth); } } } __name(reorderLinks, "reorderLinks"); function targetTop(source, target) { let y6 = source.y0 - (source.sourceLinks.length - 1) * py / 2; for (const { target: node2, width: width3 } of source.sourceLinks) { if (node2 === target) break; y6 += width3 + py; } for (const { source: node2, width: width3 } of target.targetLinks) { if (node2 === source) break; y6 -= width3; } return y6; } __name(targetTop, "targetTop"); function sourceTop(source, target) { let y6 = target.y0 - (target.targetLinks.length - 1) * py / 2; for (const { source: node2, width: width3 } of target.targetLinks) { if (node2 === source) break; y6 += width3 + py; } for (const { target: node2, width: width3 } of source.sourceLinks) { if (node2 === target) break; y6 -= width3; } return y6; } __name(sourceTop, "sourceTop"); return sankey; } var init_sankey2 = __esm({ "../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/sankey.js"() { "use strict"; init_src33(); init_align(); init_constant9(); __name(ascendingSourceBreadth, "ascendingSourceBreadth"); __name(ascendingTargetBreadth, "ascendingTargetBreadth"); __name(ascendingBreadth, "ascendingBreadth"); __name(value, "value"); __name(defaultId, "defaultId"); __name(defaultNodes, "defaultNodes"); __name(defaultLinks, "defaultLinks"); __name(find3, "find"); __name(computeLinkBreadths, "computeLinkBreadths"); __name(Sankey, "Sankey"); } }); // ../../node_modules/.pnpm/d3-path@1.0.9/node_modules/d3-path/src/path.js function Path2() { this._x0 = this._y0 = // start of current subpath this._x1 = this._y1 = null; this._ = ""; } function path3() { return new Path2(); } var pi3, tau3, epsilon5, tauEpsilon2, path_default2; var init_path4 = __esm({ "../../node_modules/.pnpm/d3-path@1.0.9/node_modules/d3-path/src/path.js"() { "use strict"; pi3 = Math.PI; tau3 = 2 * pi3; epsilon5 = 1e-6; tauEpsilon2 = tau3 - epsilon5; __name(Path2, "Path"); __name(path3, "path"); Path2.prototype = path3.prototype = { constructor: Path2, moveTo: /* @__PURE__ */ __name(function(x5, y6) { this._ += "M" + (this._x0 = this._x1 = +x5) + "," + (this._y0 = this._y1 = +y6); }, "moveTo"), closePath: /* @__PURE__ */ __name(function() { if (this._x1 !== null) { this._x1 = this._x0, this._y1 = this._y0; this._ += "Z"; } }, "closePath"), lineTo: /* @__PURE__ */ __name(function(x5, y6) { this._ += "L" + (this._x1 = +x5) + "," + (this._y1 = +y6); }, "lineTo"), quadraticCurveTo: /* @__PURE__ */ __name(function(x1, y1, x5, y6) { this._ += "Q" + +x1 + "," + +y1 + "," + (this._x1 = +x5) + "," + (this._y1 = +y6); }, "quadraticCurveTo"), bezierCurveTo: /* @__PURE__ */ __name(function(x1, y1, x22, y22, x5, y6) { this._ += "C" + +x1 + "," + +y1 + "," + +x22 + "," + +y22 + "," + (this._x1 = +x5) + "," + (this._y1 = +y6); }, "bezierCurveTo"), arcTo: /* @__PURE__ */ __name(function(x1, y1, x22, y22, r2) { x1 = +x1, y1 = +y1, x22 = +x22, y22 = +y22, r2 = +r2; var x0 = this._x1, y0 = this._y1, x21 = x22 - x1, y21 = y22 - y1, x01 = x0 - x1, y01 = y0 - y1, l01_2 = x01 * x01 + y01 * y01; if (r2 < 0) throw new Error("negative radius: " + r2); if (this._x1 === null) { this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1); } else if (!(l01_2 > epsilon5)) ; else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon5) || !r2) { this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1); } else { var x20 = x22 - x0, y20 = y22 - y0, l21_2 = x21 * x21 + y21 * y21, l20_2 = x20 * x20 + y20 * y20, l21 = Math.sqrt(l21_2), l01 = Math.sqrt(l01_2), l4 = r2 * Math.tan((pi3 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2), t01 = l4 / l01, t21 = l4 / l21; if (Math.abs(t01 - 1) > epsilon5) { this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01); } this._ += "A" + r2 + "," + r2 + ",0,0," + +(y01 * x20 > x01 * y20) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21); } }, "arcTo"), arc: /* @__PURE__ */ __name(function(x5, y6, r2, a0, a1, ccw) { x5 = +x5, y6 = +y6, r2 = +r2, ccw = !!ccw; var dx = r2 * Math.cos(a0), dy = r2 * Math.sin(a0), x0 = x5 + dx, y0 = y6 + dy, cw = 1 ^ ccw, da = ccw ? a0 - a1 : a1 - a0; if (r2 < 0) throw new Error("negative radius: " + r2); if (this._x1 === null) { this._ += "M" + x0 + "," + y0; } else if (Math.abs(this._x1 - x0) > epsilon5 || Math.abs(this._y1 - y0) > epsilon5) { this._ += "L" + x0 + "," + y0; } if (!r2) return; if (da < 0) da = da % tau3 + tau3; if (da > tauEpsilon2) { this._ += "A" + r2 + "," + r2 + ",0,1," + cw + "," + (x5 - dx) + "," + (y6 - dy) + "A" + r2 + "," + r2 + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0); } else if (da > epsilon5) { this._ += "A" + r2 + "," + r2 + ",0," + +(da >= pi3) + "," + cw + "," + (this._x1 = x5 + r2 * Math.cos(a1)) + "," + (this._y1 = y6 + r2 * Math.sin(a1)); } }, "arc"), rect: /* @__PURE__ */ __name(function(x5, y6, w4, h3) { this._ += "M" + (this._x0 = this._x1 = +x5) + "," + (this._y0 = this._y1 = +y6) + "h" + +w4 + "v" + +h3 + "h" + -w4 + "Z"; }, "rect"), toString: /* @__PURE__ */ __name(function() { return this._; }, "toString") }; path_default2 = path3; } }); // ../../node_modules/.pnpm/d3-path@1.0.9/node_modules/d3-path/src/index.js var init_src34 = __esm({ "../../node_modules/.pnpm/d3-path@1.0.9/node_modules/d3-path/src/index.js"() { "use strict"; init_path4(); } }); // ../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/constant.js function constant_default8(x5) { return /* @__PURE__ */ __name(function constant3() { return x5; }, "constant"); } var init_constant10 = __esm({ "../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/constant.js"() { "use strict"; __name(constant_default8, "default"); } }); // ../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/point.js function x4(p3) { return p3[0]; } function y5(p3) { return p3[1]; } var init_point2 = __esm({ "../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/point.js"() { "use strict"; __name(x4, "x"); __name(y5, "y"); } }); // ../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/array.js var slice3; var init_array4 = __esm({ "../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/array.js"() { "use strict"; slice3 = Array.prototype.slice; } }); // ../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/link/index.js function linkSource(d3) { return d3.source; } function linkTarget(d3) { return d3.target; } function link(curve) { var source = linkSource, target = linkTarget, x5 = x4, y6 = y5, context = null; function link2() { var buffer, argv = slice3.call(arguments), s2 = source.apply(this, argv), t4 = target.apply(this, argv); if (!context) context = buffer = path_default2(); curve(context, +x5.apply(this, (argv[0] = s2, argv)), +y6.apply(this, argv), +x5.apply(this, (argv[0] = t4, argv)), +y6.apply(this, argv)); if (buffer) return context = null, buffer + "" || null; } __name(link2, "link"); link2.source = function(_3) { return arguments.length ? (source = _3, link2) : source; }; link2.target = function(_3) { return arguments.length ? (target = _3, link2) : target; }; link2.x = function(_3) { return arguments.length ? (x5 = typeof _3 === "function" ? _3 : constant_default8(+_3), link2) : x5; }; link2.y = function(_3) { return arguments.length ? (y6 = typeof _3 === "function" ? _3 : constant_default8(+_3), link2) : y6; }; link2.context = function(_3) { return arguments.length ? (context = _3 == null ? null : _3, link2) : context; }; return link2; } function curveHorizontal(context, x0, y0, x1, y1) { context.moveTo(x0, y0); context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1); } function linkHorizontal() { return link(curveHorizontal); } var init_link = __esm({ "../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/link/index.js"() { "use strict"; init_src34(); init_array4(); init_constant10(); init_point2(); __name(linkSource, "linkSource"); __name(linkTarget, "linkTarget"); __name(link, "link"); __name(curveHorizontal, "curveHorizontal"); __name(linkHorizontal, "linkHorizontal"); } }); // ../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/index.js var init_src35 = __esm({ "../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/index.js"() { "use strict"; init_link(); } }); // ../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/sankeyLinkHorizontal.js function horizontalSource(d3) { return [d3.source.x1, d3.y0]; } function horizontalTarget(d3) { return [d3.target.x0, d3.y1]; } function sankeyLinkHorizontal_default() { return linkHorizontal().source(horizontalSource).target(horizontalTarget); } var init_sankeyLinkHorizontal = __esm({ "../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/sankeyLinkHorizontal.js"() { "use strict"; init_src35(); __name(horizontalSource, "horizontalSource"); __name(horizontalTarget, "horizontalTarget"); __name(sankeyLinkHorizontal_default, "default"); } }); // ../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/index.js var init_src36 = __esm({ "../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/index.js"() { "use strict"; init_sankey2(); init_align(); init_sankeyLinkHorizontal(); } }); // src/rendering-util/uid.ts var Uid; var init_uid = __esm({ "src/rendering-util/uid.ts"() { "use strict"; Uid = class _Uid { static { __name(this, "Uid"); } static { this.count = 0; } static next(name) { return new _Uid(name + ++_Uid.count); } constructor(id30) { this.id = id30; this.href = `#${id30}`; } toString() { return "url(" + this.href + ")"; } }; } }); // src/diagrams/sankey/sankeyRenderer.ts var alignmentsMap, draw20, sankeyRenderer_default; var init_sankeyRenderer = __esm({ "src/diagrams/sankey/sankeyRenderer.ts"() { "use strict"; init_diagramAPI(); init_src32(); init_src36(); init_setupGraphViewbox(); init_uid(); alignmentsMap = { left: left2, right: right2, center: center3, justify }; draw20 = /* @__PURE__ */ __name(function(text4, id30, _version, diagObj) { const { securityLevel, sankey: conf5 } = getConfig2(); const defaultSankeyConfig = defaultConfig2.sankey; let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = select_default2("#i" + id30); } const root3 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body"); const svg2 = securityLevel === "sandbox" ? root3.select(`[id="${id30}"]`) : select_default2(`[id="${id30}"]`); const width3 = conf5?.width ?? defaultSankeyConfig.width; const height2 = conf5?.height ?? defaultSankeyConfig.width; const useMaxWidth = conf5?.useMaxWidth ?? defaultSankeyConfig.useMaxWidth; const nodeAlignment = conf5?.nodeAlignment ?? defaultSankeyConfig.nodeAlignment; const prefix = conf5?.prefix ?? defaultSankeyConfig.prefix; const suffix = conf5?.suffix ?? defaultSankeyConfig.suffix; const showValues = conf5?.showValues ?? defaultSankeyConfig.showValues; const graph = diagObj.db.getGraph(); const nodeAlign = alignmentsMap[nodeAlignment]; const nodeWidth = 10; const sankey = Sankey().nodeId((d3) => d3.id).nodeWidth(nodeWidth).nodePadding(10 + (showValues ? 15 : 0)).nodeAlign(nodeAlign).extent([ [0, 0], [width3, height2] ]); sankey(graph); const colorScheme = ordinal(Tableau10_default); svg2.append("g").attr("class", "nodes").selectAll(".node").data(graph.nodes).join("g").attr("class", "node").attr("id", (d3) => (d3.uid = Uid.next("node-")).id).attr("transform", function(d3) { return "translate(" + d3.x0 + "," + d3.y0 + ")"; }).attr("x", (d3) => d3.x0).attr("y", (d3) => d3.y0).append("rect").attr("height", (d3) => { return d3.y1 - d3.y0; }).attr("width", (d3) => d3.x1 - d3.x0).attr("fill", (d3) => colorScheme(d3.id)); const getText = /* @__PURE__ */ __name(({ id: id31, value: value2 }) => { if (!showValues) { return id31; } return `${id31} ${prefix}${Math.round(value2 * 100) / 100}${suffix}`; }, "getText"); svg2.append("g").attr("class", "node-labels").attr("font-size", 14).selectAll("text").data(graph.nodes).join("text").attr("x", (d3) => d3.x0 < width3 / 2 ? d3.x1 + 6 : d3.x0 - 6).attr("y", (d3) => (d3.y1 + d3.y0) / 2).attr("dy", `${showValues ? "0" : "0.35"}em`).attr("text-anchor", (d3) => d3.x0 < width3 / 2 ? "start" : "end").text(getText); const link2 = svg2.append("g").attr("class", "links").attr("fill", "none").attr("stroke-opacity", 0.5).selectAll(".link").data(graph.links).join("g").attr("class", "link").style("mix-blend-mode", "multiply"); const linkColor = conf5?.linkColor ?? "gradient"; if (linkColor === "gradient") { const gradient = link2.append("linearGradient").attr("id", (d3) => (d3.uid = Uid.next("linearGradient-")).id).attr("gradientUnits", "userSpaceOnUse").attr("x1", (d3) => d3.source.x1).attr("x2", (d3) => d3.target.x0); gradient.append("stop").attr("offset", "0%").attr("stop-color", (d3) => colorScheme(d3.source.id)); gradient.append("stop").attr("offset", "100%").attr("stop-color", (d3) => colorScheme(d3.target.id)); } let coloring; switch (linkColor) { case "gradient": coloring = /* @__PURE__ */ __name((d3) => d3.uid, "coloring"); break; case "source": coloring = /* @__PURE__ */ __name((d3) => colorScheme(d3.source.id), "coloring"); break; case "target": coloring = /* @__PURE__ */ __name((d3) => colorScheme(d3.target.id), "coloring"); break; default: coloring = linkColor; } link2.append("path").attr("d", sankeyLinkHorizontal_default()).attr("stroke", coloring).attr("stroke-width", (d3) => Math.max(1, d3.width)); setupGraphViewbox(void 0, svg2, 0, useMaxWidth); }, "draw"); sankeyRenderer_default = { draw: draw20 }; } }); // src/diagrams/sankey/sankeyUtils.ts var prepareTextForParsing; var init_sankeyUtils = __esm({ "src/diagrams/sankey/sankeyUtils.ts"() { "use strict"; prepareTextForParsing = /* @__PURE__ */ __name((text4) => { const textToParse = text4.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g, "").replaceAll(/([\n\r])+/g, "\n").trim(); return textToParse; }, "prepareTextForParsing"); } }); // src/diagrams/sankey/styles.js var getStyles16, styles_default15; var init_styles15 = __esm({ "src/diagrams/sankey/styles.js"() { "use strict"; getStyles16 = /* @__PURE__ */ __name((options2) => `.label { font-family: ${options2.fontFamily}; }`, "getStyles"); styles_default15 = getStyles16; } }); // src/diagrams/sankey/sankeyDiagram.ts var sankeyDiagram_exports = {}; __export(sankeyDiagram_exports, { diagram: () => diagram21 }); var originalParse, diagram21; var init_sankeyDiagram = __esm({ "src/diagrams/sankey/sankeyDiagram.ts"() { "use strict"; init_sankey(); init_sankeyDB(); init_sankeyRenderer(); init_sankeyUtils(); init_styles15(); originalParse = sankey_default.parse.bind(sankey_default); sankey_default.parse = (text4) => originalParse(prepareTextForParsing(text4)); diagram21 = { styles: styles_default15, parser: sankey_default, db: sankeyDB_default, renderer: sankeyRenderer_default }; } }); // src/diagrams/packet/db.ts var DEFAULT_PACKET_CONFIG, PacketDB; var init_db = __esm({ "src/diagrams/packet/db.ts"() { "use strict"; init_config(); init_defaultConfig(); init_utils2(); init_commonDb(); DEFAULT_PACKET_CONFIG = defaultConfig_default.packet; PacketDB = class { constructor() { this.packet = []; this.setAccTitle = setAccTitle; this.getAccTitle = getAccTitle; this.setDiagramTitle = setDiagramTitle; this.getDiagramTitle = getDiagramTitle; this.getAccDescription = getAccDescription; this.setAccDescription = setAccDescription; } static { __name(this, "PacketDB"); } getConfig() { const config5 = cleanAndMerge({ ...DEFAULT_PACKET_CONFIG, ...getConfig().packet }); if (config5.showBits) { config5.paddingY += 10; } return config5; } getPacket() { return this.packet; } pushWord(word) { if (word.length > 0) { this.packet.push(word); } } clear() { clear(); this.packet = []; } }; } }); // src/diagrams/packet/parser.ts var maxPacketSize, populate16, getNextFittingBlock, parser19; var init_parser3 = __esm({ "src/diagrams/packet/parser.ts"() { "use strict"; init_mermaid_parser_core(); init_logger(); init_populateCommonDb(); init_db(); maxPacketSize = 1e4; populate16 = /* @__PURE__ */ __name((ast, db7) => { populateCommonDb(ast, db7); let lastBit = -1; let word = []; let row = 1; const { bitsPerRow } = db7.getConfig(); for (let { start: start3, end: end2, bits, label } of ast.blocks) { if (start3 !== void 0 && end2 !== void 0 && end2 < start3) { throw new Error(`Packet block ${start3} - ${end2} is invalid. End must be greater than start.`); } start3 ??= lastBit + 1; if (start3 !== lastBit + 1) { throw new Error( `Packet block ${start3} - ${end2 ?? start3} is not contiguous. It should start from ${lastBit + 1}.` ); } if (bits === 0) { throw new Error(`Packet block ${start3} is invalid. Cannot have a zero bit field.`); } end2 ??= start3 + (bits ?? 1) - 1; bits ??= end2 - start3 + 1; lastBit = end2; log.debug(`Packet block ${start3} - ${lastBit} with label ${label}`); while (word.length <= bitsPerRow + 1 && db7.getPacket().length < maxPacketSize) { const [block2, nextBlock] = getNextFittingBlock({ start: start3, end: end2, bits, label }, row, bitsPerRow); word.push(block2); if (block2.end + 1 === row * bitsPerRow) { db7.pushWord(word); word = []; row++; } if (!nextBlock) { break; } ({ start: start3, end: end2, bits, label } = nextBlock); } } db7.pushWord(word); }, "populate"); getNextFittingBlock = /* @__PURE__ */ __name((block2, row, bitsPerRow) => { if (block2.start === void 0) { throw new Error("start should have been set during first phase"); } if (block2.end === void 0) { throw new Error("end should have been set during first phase"); } if (block2.start > block2.end) { throw new Error(`Block start ${block2.start} is greater than block end ${block2.end}.`); } if (block2.end + 1 <= row * bitsPerRow) { return [block2, void 0]; } const rowEnd = row * bitsPerRow - 1; const rowStart = row * bitsPerRow; return [ { start: block2.start, end: rowEnd, label: block2.label, bits: rowEnd - block2.start }, { start: rowStart, end: block2.end, label: block2.label, bits: block2.end - rowStart } ]; }, "getNextFittingBlock"); parser19 = { // @ts-expect-error - PacketDB is not assignable to DiagramDB parser: { yy: void 0 }, parse: /* @__PURE__ */ __name(async (input) => { const ast = await parse3("packet", input); const db7 = parser19.parser?.yy; if (!(db7 instanceof PacketDB)) { throw new Error( "parser.parser?.yy was not a PacketDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues." ); } log.debug(ast); populate16(ast, db7); }, "parse") }; } }); // src/diagrams/packet/renderer.ts var draw21, drawWord, renderer6; var init_renderer = __esm({ "src/diagrams/packet/renderer.ts"() { "use strict"; init_selectSvgElement(); init_setupGraphViewbox(); draw21 = /* @__PURE__ */ __name((_text, id30, _version, diagram27) => { const db7 = diagram27.db; const config5 = db7.getConfig(); const { rowHeight, paddingY, bitWidth, bitsPerRow } = config5; const words = db7.getPacket(); const title2 = db7.getDiagramTitle(); const totalRowHeight = rowHeight + paddingY; const svgHeight = totalRowHeight * (words.length + 1) - (title2 ? 0 : rowHeight); const svgWidth = bitWidth * bitsPerRow + 2; const svg2 = selectSvgElement(id30); svg2.attr("viewbox", `0 0 ${svgWidth} ${svgHeight}`); configureSvgSize(svg2, svgHeight, svgWidth, config5.useMaxWidth); for (const [word, packet2] of words.entries()) { drawWord(svg2, packet2, word, config5); } svg2.append("text").text(title2).attr("x", svgWidth / 2).attr("y", svgHeight - totalRowHeight / 2).attr("dominant-baseline", "middle").attr("text-anchor", "middle").attr("class", "packetTitle"); }, "draw"); drawWord = /* @__PURE__ */ __name((svg2, word, rowNumber, { rowHeight, paddingX, paddingY, bitWidth, bitsPerRow, showBits }) => { const group2 = svg2.append("g"); const wordY = rowNumber * (rowHeight + paddingY) + paddingY; for (const block2 of word) { const blockX = block2.start % bitsPerRow * bitWidth + 1; const width3 = (block2.end - block2.start + 1) * bitWidth - paddingX; group2.append("rect").attr("x", blockX).attr("y", wordY).attr("width", width3).attr("height", rowHeight).attr("class", "packetBlock"); group2.append("text").attr("x", blockX + width3 / 2).attr("y", wordY + rowHeight / 2).attr("class", "packetLabel").attr("dominant-baseline", "middle").attr("text-anchor", "middle").text(block2.label); if (!showBits) { continue; } const isSingleBlock = block2.end === block2.start; const bitNumberY = wordY - 2; group2.append("text").attr("x", blockX + (isSingleBlock ? width3 / 2 : 0)).attr("y", bitNumberY).attr("class", "packetByte start").attr("dominant-baseline", "auto").attr("text-anchor", isSingleBlock ? "middle" : "start").text(block2.start); if (!isSingleBlock) { group2.append("text").attr("x", blockX + width3).attr("y", bitNumberY).attr("class", "packetByte end").attr("dominant-baseline", "auto").attr("text-anchor", "end").text(block2.end); } } }, "drawWord"); renderer6 = { draw: draw21 }; } }); // src/diagrams/packet/styles.ts var defaultPacketStyleOptions, styles2; var init_styles16 = __esm({ "src/diagrams/packet/styles.ts"() { "use strict"; init_utils2(); defaultPacketStyleOptions = { byteFontSize: "10px", startByteColor: "black", endByteColor: "black", labelColor: "black", labelFontSize: "12px", titleColor: "black", titleFontSize: "14px", blockStrokeColor: "black", blockStrokeWidth: "1", blockFillColor: "#efefef" }; styles2 = /* @__PURE__ */ __name(({ packet: packet2 } = {}) => { const options2 = cleanAndMerge(defaultPacketStyleOptions, packet2); return ` .packetByte { font-size: ${options2.byteFontSize}; } .packetByte.start { fill: ${options2.startByteColor}; } .packetByte.end { fill: ${options2.endByteColor}; } .packetLabel { fill: ${options2.labelColor}; font-size: ${options2.labelFontSize}; } .packetTitle { fill: ${options2.titleColor}; font-size: ${options2.titleFontSize}; } .packetBlock { stroke: ${options2.blockStrokeColor}; stroke-width: ${options2.blockStrokeWidth}; fill: ${options2.blockFillColor}; } `; }, "styles"); } }); // src/diagrams/packet/diagram.ts var diagram_exports = {}; __export(diagram_exports, { diagram: () => diagram22 }); var diagram22; var init_diagram = __esm({ "src/diagrams/packet/diagram.ts"() { "use strict"; init_db(); init_parser3(); init_renderer(); init_styles16(); diagram22 = { parser: parser19, get db() { return new PacketDB(); }, renderer: renderer6, styles: styles2 }; } }); // src/diagrams/radar/db.ts var defaultOptions, defaultRadarData, data4, DEFAULT_RADAR_CONFIG, getConfig5, getAxes, getCurves, getOptions2, setAxes, setCurves, computeCurveEntries, setOptions7, clear17, db5; var init_db2 = __esm({ "src/diagrams/radar/db.ts"() { "use strict"; init_config(); init_defaultConfig(); init_utils2(); init_commonDb(); defaultOptions = { showLegend: true, ticks: 5, max: null, min: 0, graticule: "circle" }; defaultRadarData = { axes: [], curves: [], options: defaultOptions }; data4 = structuredClone(defaultRadarData); DEFAULT_RADAR_CONFIG = defaultConfig_default.radar; getConfig5 = /* @__PURE__ */ __name(() => { const config5 = cleanAndMerge({ ...DEFAULT_RADAR_CONFIG, ...getConfig().radar }); return config5; }, "getConfig"); getAxes = /* @__PURE__ */ __name(() => data4.axes, "getAxes"); getCurves = /* @__PURE__ */ __name(() => data4.curves, "getCurves"); getOptions2 = /* @__PURE__ */ __name(() => data4.options, "getOptions"); setAxes = /* @__PURE__ */ __name((axes) => { data4.axes = axes.map((axis2) => { return { name: axis2.name, label: axis2.label ?? axis2.name }; }); }, "setAxes"); setCurves = /* @__PURE__ */ __name((curves) => { data4.curves = curves.map((curve) => { return { name: curve.name, label: curve.label ?? curve.name, entries: computeCurveEntries(curve.entries) }; }); }, "setCurves"); computeCurveEntries = /* @__PURE__ */ __name((entries2) => { if (entries2[0].axis == void 0) { return entries2.map((entry) => entry.value); } const axes = getAxes(); if (axes.length === 0) { throw new Error("Axes must be populated before curves for reference entries"); } return axes.map((axis2) => { const entry = entries2.find((entry2) => entry2.axis?.$refText === axis2.name); if (entry === void 0) { throw new Error("Missing entry for axis " + axis2.label); } return entry.value; }); }, "computeCurveEntries"); setOptions7 = /* @__PURE__ */ __name((options2) => { const optionMap = options2.reduce( (acc, option2) => { acc[option2.name] = option2; return acc; }, {} ); data4.options = { showLegend: optionMap.showLegend?.value ?? defaultOptions.showLegend, ticks: optionMap.ticks?.value ?? defaultOptions.ticks, max: optionMap.max?.value ?? defaultOptions.max, min: optionMap.min?.value ?? defaultOptions.min, graticule: optionMap.graticule?.value ?? defaultOptions.graticule }; }, "setOptions"); clear17 = /* @__PURE__ */ __name(() => { clear(); data4 = structuredClone(defaultRadarData); }, "clear"); db5 = { getAxes, getCurves, getOptions: getOptions2, setAxes, setCurves, setOptions: setOptions7, getConfig: getConfig5, clear: clear17, setAccTitle, getAccTitle, setDiagramTitle, getDiagramTitle, getAccDescription, setAccDescription }; } }); // src/diagrams/radar/parser.ts var populate17, parser20; var init_parser4 = __esm({ "src/diagrams/radar/parser.ts"() { "use strict"; init_mermaid_parser_core(); init_logger(); init_populateCommonDb(); init_db2(); populate17 = /* @__PURE__ */ __name((ast) => { populateCommonDb(ast, db5); const { axes, curves, options: options2 } = ast; db5.setAxes(axes); db5.setCurves(curves); db5.setOptions(options2); }, "populate"); parser20 = { parse: /* @__PURE__ */ __name(async (input) => { const ast = await parse3("radar", input); log.debug(ast); populate17(ast); }, "parse") }; } }); // src/diagrams/radar/renderer.ts function drawCurves(g2, axes, curves, minValue, maxValue, graticule, config5) { const numAxes = axes.length; const radius2 = Math.min(config5.width, config5.height) / 2; curves.forEach((curve, index) => { if (curve.entries.length !== numAxes) { return; } const points = curve.entries.map((entry, i2) => { const angle2 = 2 * Math.PI * i2 / numAxes - Math.PI / 2; const r2 = relativeRadius(entry, minValue, maxValue, radius2); const x5 = r2 * Math.cos(angle2); const y6 = r2 * Math.sin(angle2); return { x: x5, y: y6 }; }); if (graticule === "circle") { g2.append("path").attr("d", closedRoundCurve(points, config5.curveTension)).attr("class", `radarCurve-${index}`); } else if (graticule === "polygon") { g2.append("polygon").attr("points", points.map((p3) => `${p3.x},${p3.y}`).join(" ")).attr("class", `radarCurve-${index}`); } }); } function relativeRadius(value2, minValue, maxValue, radius2) { const clippedValue = Math.min(Math.max(value2, minValue), maxValue); return radius2 * (clippedValue - minValue) / (maxValue - minValue); } function closedRoundCurve(points, tension) { const numPoints = points.length; let d3 = `M${points[0].x},${points[0].y}`; for (let i2 = 0; i2 < numPoints; i2++) { const p0 = points[(i2 - 1 + numPoints) % numPoints]; const p1 = points[i2]; const p22 = points[(i2 + 1) % numPoints]; const p3 = points[(i2 + 2) % numPoints]; const cp1 = { x: p1.x + (p22.x - p0.x) * tension, y: p1.y + (p22.y - p0.y) * tension }; const cp2 = { x: p22.x - (p3.x - p1.x) * tension, y: p22.y - (p3.y - p1.y) * tension }; d3 += ` C${cp1.x},${cp1.y} ${cp2.x},${cp2.y} ${p22.x},${p22.y}`; } return `${d3} Z`; } function drawLegend(g2, curves, showLegend, config5) { if (!showLegend) { return; } const legendX = (config5.width / 2 + config5.marginRight) * 3 / 4; const legendY = -(config5.height / 2 + config5.marginTop) * 3 / 4; const lineHeight = 20; curves.forEach((curve, index) => { const itemGroup = g2.append("g").attr("transform", `translate(${legendX}, ${legendY + index * lineHeight})`); itemGroup.append("rect").attr("width", 12).attr("height", 12).attr("class", `radarLegendBox-${index}`); itemGroup.append("text").attr("x", 16).attr("y", 0).attr("class", "radarLegendText").text(curve.label); }); } var draw22, drawFrame, drawGraticule, drawAxes2, renderer7; var init_renderer2 = __esm({ "src/diagrams/radar/renderer.ts"() { "use strict"; init_selectSvgElement(); draw22 = /* @__PURE__ */ __name((_text, id30, _version, diagram27) => { const db7 = diagram27.db; const axes = db7.getAxes(); const curves = db7.getCurves(); const options2 = db7.getOptions(); const config5 = db7.getConfig(); const title2 = db7.getDiagramTitle(); const svg2 = selectSvgElement(id30); const g2 = drawFrame(svg2, config5); const maxValue = options2.max ?? Math.max(...curves.map((curve) => Math.max(...curve.entries))); const minValue = options2.min; const radius2 = Math.min(config5.width, config5.height) / 2; drawGraticule(g2, axes, radius2, options2.ticks, options2.graticule); drawAxes2(g2, axes, radius2, config5); drawCurves(g2, axes, curves, minValue, maxValue, options2.graticule, config5); drawLegend(g2, curves, options2.showLegend, config5); g2.append("text").attr("class", "radarTitle").text(title2).attr("x", 0).attr("y", -config5.height / 2 - config5.marginTop); }, "draw"); drawFrame = /* @__PURE__ */ __name((svg2, config5) => { const totalWidth = config5.width + config5.marginLeft + config5.marginRight; const totalHeight = config5.height + config5.marginTop + config5.marginBottom; const center4 = { x: config5.marginLeft + config5.width / 2, y: config5.marginTop + config5.height / 2 }; svg2.attr("viewbox", `0 0 ${totalWidth} ${totalHeight}`).attr("width", totalWidth).attr("height", totalHeight); return svg2.append("g").attr("transform", `translate(${center4.x}, ${center4.y})`); }, "drawFrame"); drawGraticule = /* @__PURE__ */ __name((g2, axes, radius2, ticks2, graticule) => { if (graticule === "circle") { for (let i2 = 0; i2 < ticks2; i2++) { const r2 = radius2 * (i2 + 1) / ticks2; g2.append("circle").attr("r", r2).attr("class", "radarGraticule"); } } else if (graticule === "polygon") { const numAxes = axes.length; for (let i2 = 0; i2 < ticks2; i2++) { const r2 = radius2 * (i2 + 1) / ticks2; const points = axes.map((_3, j3) => { const angle2 = 2 * j3 * Math.PI / numAxes - Math.PI / 2; const x5 = r2 * Math.cos(angle2); const y6 = r2 * Math.sin(angle2); return `${x5},${y6}`; }).join(" "); g2.append("polygon").attr("points", points).attr("class", "radarGraticule"); } } }, "drawGraticule"); drawAxes2 = /* @__PURE__ */ __name((g2, axes, radius2, config5) => { const numAxes = axes.length; for (let i2 = 0; i2 < numAxes; i2++) { const label = axes[i2].label; const angle2 = 2 * i2 * Math.PI / numAxes - Math.PI / 2; g2.append("line").attr("x1", 0).attr("y1", 0).attr("x2", radius2 * config5.axisScaleFactor * Math.cos(angle2)).attr("y2", radius2 * config5.axisScaleFactor * Math.sin(angle2)).attr("class", "radarAxisLine"); g2.append("text").text(label).attr("x", radius2 * config5.axisLabelFactor * Math.cos(angle2)).attr("y", radius2 * config5.axisLabelFactor * Math.sin(angle2)).attr("class", "radarAxisLabel"); } }, "drawAxes"); __name(drawCurves, "drawCurves"); __name(relativeRadius, "relativeRadius"); __name(closedRoundCurve, "closedRoundCurve"); __name(drawLegend, "drawLegend"); renderer7 = { draw: draw22 }; } }); // src/diagrams/radar/styles.ts var genIndexStyles, buildRadarStyleOptions, styles3; var init_styles17 = __esm({ "src/diagrams/radar/styles.ts"() { "use strict"; init_utils2(); init_theme_default(); init_config(); genIndexStyles = /* @__PURE__ */ __name((themeVariables, radarOptions) => { let sections6 = ""; for (let i2 = 0; i2 < themeVariables.THEME_COLOR_LIMIT; i2++) { const indexColor = themeVariables[`cScale${i2}`]; sections6 += ` .radarCurve-${i2} { color: ${indexColor}; fill: ${indexColor}; fill-opacity: ${radarOptions.curveOpacity}; stroke: ${indexColor}; stroke-width: ${radarOptions.curveStrokeWidth}; } .radarLegendBox-${i2} { fill: ${indexColor}; fill-opacity: ${radarOptions.curveOpacity}; stroke: ${indexColor}; } `; } return sections6; }, "genIndexStyles"); buildRadarStyleOptions = /* @__PURE__ */ __name((radar2) => { const defaultThemeVariables2 = getThemeVariables3(); const currentConfig2 = getConfig(); const themeVariables = cleanAndMerge(defaultThemeVariables2, currentConfig2.themeVariables); const radarOptions = cleanAndMerge(themeVariables.radar, radar2); return { themeVariables, radarOptions }; }, "buildRadarStyleOptions"); styles3 = /* @__PURE__ */ __name(({ radar: radar2 } = {}) => { const { themeVariables, radarOptions } = buildRadarStyleOptions(radar2); return ` .radarTitle { font-size: ${themeVariables.fontSize}; color: ${themeVariables.titleColor}; dominant-baseline: hanging; text-anchor: middle; } .radarAxisLine { stroke: ${radarOptions.axisColor}; stroke-width: ${radarOptions.axisStrokeWidth}; } .radarAxisLabel { dominant-baseline: middle; text-anchor: middle; font-size: ${radarOptions.axisLabelFontSize}px; color: ${radarOptions.axisColor}; } .radarGraticule { fill: ${radarOptions.graticuleColor}; fill-opacity: ${radarOptions.graticuleOpacity}; stroke: ${radarOptions.graticuleColor}; stroke-width: ${radarOptions.graticuleStrokeWidth}; } .radarLegendText { text-anchor: start; font-size: ${radarOptions.legendFontSize}px; dominant-baseline: hanging; } ${genIndexStyles(themeVariables, radarOptions)} `; }, "styles"); } }); // src/diagrams/radar/diagram.ts var diagram_exports2 = {}; __export(diagram_exports2, { diagram: () => diagram23 }); var diagram23; var init_diagram2 = __esm({ "src/diagrams/radar/diagram.ts"() { "use strict"; init_db2(); init_parser4(); init_renderer2(); init_styles17(); diagram23 = { parser: parser20, db: db5, renderer: renderer7, styles: styles3 }; } }); // src/diagrams/block/parser/block.jison var parser21, block_default; var init_block = __esm({ "src/diagrams/block/parser/block.jison"() { "use strict"; parser21 = (function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l4) { for (o3 = o3 || {}, l4 = k2.length; l4--; o3[k2[l4]] = v3) ; return o3; }, "o"), $V0 = [1, 15], $V1 = [1, 7], $V2 = [1, 13], $V3 = [1, 14], $V4 = [1, 19], $V5 = [1, 16], $V6 = [1, 17], $V7 = [1, 18], $V8 = [8, 30], $V9 = [8, 10, 21, 28, 29, 30, 31, 39, 43, 46], $Va = [1, 23], $Vb = [1, 24], $Vc = [8, 10, 15, 16, 21, 28, 29, 30, 31, 39, 43, 46], $Vd = [8, 10, 15, 16, 21, 27, 28, 29, 30, 31, 39, 43, 46], $Ve = [1, 49]; var parser24 = { trace: /* @__PURE__ */ __name(function trace() { }, "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__ */ __name(function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { var $0 = $$.length - 1; switch (yystate) { case 4: yy.getLogger().debug("Rule: separator (NL) "); break; case 5: yy.getLogger().debug("Rule: separator (Space) "); break; case 6: yy.getLogger().debug("Rule: separator (EOF) "); break; case 7: yy.getLogger().debug("Rule: hierarchy: ", $$[$0 - 1]); yy.setHierarchy($$[$0 - 1]); break; case 8: yy.getLogger().debug("Stop NL "); break; case 9: yy.getLogger().debug("Stop EOF "); break; case 10: yy.getLogger().debug("Stop NL2 "); break; case 11: yy.getLogger().debug("Stop EOF2 "); break; case 12: yy.getLogger().debug("Rule: statement: ", $$[$0]); typeof $$[$0].length === "number" ? this.$ = $$[$0] : this.$ = [$$[$0]]; break; case 13: yy.getLogger().debug("Rule: statement #2: ", $$[$0 - 1]); this.$ = [$$[$0 - 1]].concat($$[$0]); break; case 14: yy.getLogger().debug("Rule: link: ", $$[$0], yytext); this.$ = { edgeTypeStr: $$[$0], label: "" }; break; case 15: yy.getLogger().debug("Rule: LABEL link: ", $$[$0 - 3], $$[$0 - 1], $$[$0]); this.$ = { edgeTypeStr: $$[$0], label: $$[$0 - 1] }; break; case 18: const num = parseInt($$[$0]); const spaceId = yy.generateId(); this.$ = { id: spaceId, type: "space", label: "", width: num, children: [] }; break; case 23: yy.getLogger().debug("Rule: (nodeStatement link node) ", $$[$0 - 2], $$[$0 - 1], $$[$0], " typestr: ", $$[$0 - 1].edgeTypeStr); const edgeData2 = yy.edgeStrToEdgeData($$[$0 - 1].edgeTypeStr); this.$ = [ { id: $$[$0 - 2].id, label: $$[$0 - 2].label, type: $$[$0 - 2].type, directions: $$[$0 - 2].directions }, { id: $$[$0 - 2].id + "-" + $$[$0].id, start: $$[$0 - 2].id, end: $$[$0].id, label: $$[$0 - 1].label, type: "edge", directions: $$[$0].directions, arrowTypeEnd: edgeData2, arrowTypeStart: "arrow_open" }, { id: $$[$0].id, label: $$[$0].label, type: yy.typeStr2Type($$[$0].typeStr), directions: $$[$0].directions } ]; break; case 24: yy.getLogger().debug("Rule: nodeStatement (abc88 node size) ", $$[$0 - 1], $$[$0]); this.$ = { id: $$[$0 - 1].id, label: $$[$0 - 1].label, type: yy.typeStr2Type($$[$0 - 1].typeStr), directions: $$[$0 - 1].directions, widthInColumns: parseInt($$[$0], 10) }; break; case 25: yy.getLogger().debug("Rule: nodeStatement (node) ", $$[$0]); this.$ = { id: $$[$0].id, label: $$[$0].label, type: yy.typeStr2Type($$[$0].typeStr), directions: $$[$0].directions, widthInColumns: 1 }; break; case 26: yy.getLogger().debug("APA123", this ? this : "na"); yy.getLogger().debug("COLUMNS: ", $$[$0]); this.$ = { type: "column-setting", columns: $$[$0] === "auto" ? -1 : parseInt($$[$0]) }; break; case 27: yy.getLogger().debug("Rule: id-block statement : ", $$[$0 - 2], $$[$0 - 1]); const id210 = yy.generateId(); this.$ = { ...$$[$0 - 2], type: "composite", children: $$[$0 - 1] }; break; case 28: yy.getLogger().debug("Rule: blockStatement : ", $$[$0 - 2], $$[$0 - 1], $$[$0]); const id30 = yy.generateId(); this.$ = { id: id30, type: "composite", label: "", children: $$[$0 - 1] }; break; case 29: yy.getLogger().debug("Rule: node (NODE_ID separator): ", $$[$0]); this.$ = { id: $$[$0] }; break; case 30: yy.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ", $$[$0 - 1], $$[$0]); this.$ = { id: $$[$0 - 1], label: $$[$0].label, typeStr: $$[$0].typeStr, directions: $$[$0].directions }; break; case 31: yy.getLogger().debug("Rule: dirList: ", $$[$0]); this.$ = [$$[$0]]; break; case 32: yy.getLogger().debug("Rule: dirList: ", $$[$0 - 1], $$[$0]); this.$ = [$$[$0 - 1]].concat($$[$0]); break; case 33: yy.getLogger().debug("Rule: nodeShapeNLabel: ", $$[$0 - 2], $$[$0 - 1], $$[$0]); this.$ = { typeStr: $$[$0 - 2] + $$[$0], label: $$[$0 - 1] }; break; case 34: yy.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ", $$[$0 - 3], $$[$0 - 2], " #3:", $$[$0 - 1], $$[$0]); this.$ = { typeStr: $$[$0 - 3] + $$[$0], label: $$[$0 - 2], directions: $$[$0 - 1] }; break; case 35: case 36: this.$ = { type: "classDef", id: $$[$0 - 1].trim(), css: $$[$0].trim() }; break; case 37: this.$ = { type: "applyClass", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() }; break; case 38: this.$ = { type: "applyStyles", id: $$[$0 - 1].trim(), stylesStr: $$[$0].trim() }; break; } }, "anonymous"), table: [{ 9: 1, 10: [1, 2] }, { 1: [3] }, { 10: $V0, 11: 3, 13: 4, 19: 5, 20: 6, 21: $V1, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V2, 29: $V3, 31: $V4, 39: $V5, 43: $V6, 46: $V7 }, { 8: [1, 20] }, o2($V8, [2, 12], { 13: 4, 19: 5, 20: 6, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 11: 21, 10: $V0, 21: $V1, 28: $V2, 29: $V3, 31: $V4, 39: $V5, 43: $V6, 46: $V7 }), o2($V9, [2, 16], { 14: 22, 15: $Va, 16: $Vb }), o2($V9, [2, 17]), o2($V9, [2, 18]), o2($V9, [2, 19]), o2($V9, [2, 20]), o2($V9, [2, 21]), o2($V9, [2, 22]), o2($Vc, [2, 25], { 27: [1, 25] }), o2($V9, [2, 26]), { 19: 26, 26: 12, 31: $V4 }, { 10: $V0, 11: 27, 13: 4, 19: 5, 20: 6, 21: $V1, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V2, 29: $V3, 31: $V4, 39: $V5, 43: $V6, 46: $V7 }, { 40: [1, 28], 42: [1, 29] }, { 44: [1, 30] }, { 47: [1, 31] }, o2($Vd, [2, 29], { 32: 32, 35: [1, 33], 37: [1, 34] }), { 1: [2, 7] }, o2($V8, [2, 13]), { 26: 35, 31: $V4 }, { 31: [2, 14] }, { 17: [1, 36] }, o2($Vc, [2, 24]), { 10: $V0, 11: 37, 13: 4, 14: 22, 15: $Va, 16: $Vb, 19: 5, 20: 6, 21: $V1, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V2, 29: $V3, 31: $V4, 39: $V5, 43: $V6, 46: $V7 }, { 30: [1, 38] }, { 41: [1, 39] }, { 41: [1, 40] }, { 45: [1, 41] }, { 48: [1, 42] }, o2($Vd, [2, 30]), { 18: [1, 43] }, { 18: [1, 44] }, o2($Vc, [2, 23]), { 18: [1, 45] }, { 30: [1, 46] }, o2($V9, [2, 28]), o2($V9, [2, 35]), o2($V9, [2, 36]), o2($V9, [2, 37]), o2($V9, [2, 38]), { 36: [1, 47] }, { 33: 48, 34: $Ve }, { 15: [1, 50] }, o2($V9, [2, 27]), o2($Vd, [2, 33]), { 38: [1, 51] }, { 33: 52, 34: $Ve, 38: [2, 31] }, { 31: [2, 15] }, o2($Vd, [2, 34]), { 38: [2, 32] }], defaultActions: { 20: [2, 7], 23: [2, 14], 50: [2, 15], 52: [2, 32] }, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (hash.recoverable) { this.trace(str2); } else { var error3 = new Error(str2); error3.hash = hash; throw error3; } }, "parseError"), parse: /* @__PURE__ */ __name(function parse7(input) { var self2 = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF2 = 1; var args = lstack.slice.call(arguments, 1); var lexer2 = Object.create(this.lexer); var sharedState = { yy: {} }; for (var k2 in this.yy) { if (Object.prototype.hasOwnProperty.call(this.yy, k2)) { sharedState.yy[k2] = this.yy[k2]; } } lexer2.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer2; sharedState.yy.parser = this; if (typeof lexer2.yylloc == "undefined") { lexer2.yylloc = {}; } var yyloc = lexer2.yylloc; lstack.push(yyloc); var ranges = lexer2.options && lexer2.options.ranges; if (typeof sharedState.yy.parseError === "function") { this.parseError = sharedState.yy.parseError; } else { this.parseError = Object.getPrototypeOf(this).parseError; } function popStack(n2) { stack.length = stack.length - 2 * n2; vstack.length = vstack.length - n2; lstack.length = lstack.length - n2; } __name(popStack, "popStack"); function lex() { var token2; token2 = tstack.pop() || lexer2.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex, "lex"); var symbol, preErrorSymbol, state3, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state3 = stack[stack.length - 1]; if (this.defaultActions[state3]) { action = this.defaultActions[state3]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex(); } action = table[state3] && table[state3][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state3]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer2.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; } else { errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF2 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); } this.parseError(errStr, { text: lexer2.match, token: this.terminals_[symbol] || symbol, line: lexer2.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state3 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer2.yytext); lstack.push(lexer2.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer2.yyleng; yytext = lexer2.yytext; yylineno = lexer2.yylineno; yyloc = lexer2.yylloc; if (recovering > 0) { recovering--; } } else { symbol = preErrorSymbol; preErrorSymbol = null; } break; case 2: len = this.productions_[action[1]][1]; yyval.$ = vstack[vstack.length - len]; yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; if (ranges) { yyval._$.range = [ lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1] ]; } r2 = this.performAction.apply(yyval, [ yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack ].concat(args)); if (typeof r2 !== "undefined") { return r2; } if (len) { stack = stack.slice(0, -1 * len * 2); vstack = vstack.slice(0, -1 * len); lstack = lstack.slice(0, -1 * len); } stack.push(this.productions_[action[1]][0]); vstack.push(yyval.$); lstack.push(yyval._$); newState2 = table[stack[stack.length - 2]][stack[stack.length - 1]]; stack.push(newState2); break; case 3: return true; } } return true; }, "parse") }; var lexer = /* @__PURE__ */ (function() { var lexer2 = { EOF: 1, parseError: /* @__PURE__ */ __name(function parseError(str2, hash) { if (this.yy.parser) { this.yy.parser.parseError(str2, hash); } else { throw new Error(str2); } }, "parseError"), // resets the lexer, sets new input setInput: /* @__PURE__ */ __name(function(input, yy) { this.yy = yy || this.yy || {}; this._input = input; this._more = this._backtrack = this.done = false; 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 }; if (this.options.ranges) { this.yylloc.range = [0, 0]; } this.offset = 0; return this; }, "setInput"), // consumes and returns one char from the input input: /* @__PURE__ */ __name(function() { var ch = this._input[0]; this.yytext += ch; this.yyleng++; this.offset++; this.match += ch; this.matched += ch; var lines = ch.match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno++; this.yylloc.last_line++; } else { this.yylloc.last_column++; } if (this.options.ranges) { this.yylloc.range[1]++; } this._input = this._input.slice(1); return ch; }, "input"), // unshifts one char (or a string) into the input unput: /* @__PURE__ */ __name(function(ch) { var len = ch.length; var lines = ch.split(/(?:\r\n?|\n)/g); this._input = ch + this._input; this.yytext = this.yytext.substr(0, this.yytext.length - len); this.offset -= len; var oldLines = 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); if (lines.length - 1) { this.yylineno -= lines.length - 1; } var r2 = this.yylloc.range; this.yylloc = { first_line: this.yylloc.first_line, last_line: this.yylineno + 1, first_column: this.yylloc.first_column, last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len }; if (this.options.ranges) { this.yylloc.range = [r2[0], r2[0] + this.yyleng - len]; } this.yyleng = this.yytext.length; return this; }, "unput"), // When called from action, caches matched text and appends it on next action more: /* @__PURE__ */ __name(function() { this._more = true; return this; }, "more"), // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. reject: /* @__PURE__ */ __name(function() { if (this.options.backtrack_lexer) { this._backtrack = true; } 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"), // retain first n characters of the match less: /* @__PURE__ */ __name(function(n2) { this.unput(this.match.slice(n2)); }, "less"), // displays already matched input, i.e. for error messages pastInput: /* @__PURE__ */ __name(function() { var past = this.matched.substr(0, this.matched.length - this.match.length); return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); }, "pastInput"), // displays upcoming input, i.e. for error messages upcomingInput: /* @__PURE__ */ __name(function() { var next3 = this.match; if (next3.length < 20) { next3 += this._input.substr(0, 20 - next3.length); } return (next3.substr(0, 20) + (next3.length > 20 ? "..." : "")).replace(/\n/g, ""); }, "upcomingInput"), // displays the character position where the lexing error occurred, i.e. for error messages showPosition: /* @__PURE__ */ __name(function() { var pre = this.pastInput(); var c3 = new Array(pre.length + 1).join("-"); return pre + this.upcomingInput() + "\n" + c3 + "^"; }, "showPosition"), // test the lexed token: return FALSE when not a match, otherwise return token test_match: /* @__PURE__ */ __name(function(match2, indexed_rule) { var token2, lines, backup; if (this.options.backtrack_lexer) { backup = { 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 }; if (this.options.ranges) { backup.yylloc.range = this.yylloc.range.slice(0); } } lines = match2[0].match(/(?:\r\n?|\n).*/g); if (lines) { this.yylineno += lines.length; } this.yylloc = { first_line: this.yylloc.last_line, last_line: this.yylineno + 1, first_column: this.yylloc.last_column, last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; this.yyleng = this.yytext.length; if (this.options.ranges) { this.yylloc.range = [this.offset, this.offset += this.yyleng]; } this._more = false; this._backtrack = false; this._input = this._input.slice(match2[0].length); this.matched += match2[0]; token2 = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); if (this.done && this._input) { this.done = false; } if (token2) { return token2; } else if (this._backtrack) { for (var k2 in backup) { this[k2] = backup[k2]; } return false; } return false; }, "test_match"), // return next match in input next: /* @__PURE__ */ __name(function() { if (this.done) { return this.EOF; } if (!this._input) { this.done = true; } var token2, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[index]); if (token2 !== false) { return token2; } return false; } if (this._input === "") { return this.EOF; } else { return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { text: "", token: null, line: this.yylineno }); } }, "next"), // return next match that has a token lex: /* @__PURE__ */ __name(function lex() { var r2 = this.next(); if (r2) { return r2; } else { return this.lex(); } }, "lex"), // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) begin: /* @__PURE__ */ __name(function begin(condition) { this.conditionStack.push(condition); }, "begin"), // pop the previously active lexer condition state off the condition stack popState: /* @__PURE__ */ __name(function popState() { var n2 = this.conditionStack.length - 1; if (n2 > 0) { return this.conditionStack.pop(); } else { return this.conditionStack[0]; } }, "popState"), // produce the lexer rule set which is active for the currently active lexer condition state _currentRules: /* @__PURE__ */ __name(function _currentRules() { if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; } else { return this.conditions["INITIAL"].rules; } }, "_currentRules"), // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available topState: /* @__PURE__ */ __name(function topState(n2) { n2 = this.conditionStack.length - 1 - Math.abs(n2 || 0); if (n2 >= 0) { return this.conditionStack[n2]; } else { return "INITIAL"; } }, "topState"), // alias for begin(condition) pushState: /* @__PURE__ */ __name(function pushState(condition) { this.begin(condition); }, "pushState"), // return the number of states currently on the stack stateStackSize: /* @__PURE__ */ __name(function stateStackSize() { return this.conditionStack.length; }, "stateStackSize"), options: {}, performAction: /* @__PURE__ */ __name(function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { var YYSTATE = YY_START; switch ($avoiding_name_collisions) { case 0: yy.getLogger().debug("Found block-beta"); return 10; break; case 1: yy.getLogger().debug("Found id-block"); return 29; break; case 2: yy.getLogger().debug("Found block"); return 10; break; case 3: yy.getLogger().debug(".", yy_.yytext); break; case 4: yy.getLogger().debug("_", yy_.yytext); break; case 5: return 5; break; case 6: yy_.yytext = -1; return 28; break; case 7: yy_.yytext = yy_.yytext.replace(/columns\s+/, ""); yy.getLogger().debug("COLUMNS (LEX)", yy_.yytext); return 28; break; case 8: this.pushState("md_string"); break; case 9: return "MD_STR"; break; case 10: this.popState(); break; case 11: this.pushState("string"); break; case 12: yy.getLogger().debug("LEX: POPPING STR:", yy_.yytext); this.popState(); break; case 13: yy.getLogger().debug("LEX: STR end:", yy_.yytext); return "STR"; break; case 14: yy_.yytext = yy_.yytext.replace(/space\:/, ""); yy.getLogger().debug("SPACE NUM (LEX)", yy_.yytext); return 21; break; case 15: yy_.yytext = "1"; yy.getLogger().debug("COLUMNS (LEX)", yy_.yytext); return 21; break; case 16: return 42; break; case 17: return "LINKSTYLE"; break; case 18: return "INTERPOLATE"; break; case 19: this.pushState("CLASSDEF"); return 39; break; case 20: this.popState(); this.pushState("CLASSDEFID"); return "DEFAULT_CLASSDEF_ID"; break; case 21: this.popState(); this.pushState("CLASSDEFID"); return 40; break; case 22: this.popState(); return 41; break; case 23: this.pushState("CLASS"); return 43; break; case 24: this.popState(); this.pushState("CLASS_STYLE"); return 44; break; case 25: this.popState(); return 45; break; case 26: this.pushState("STYLE_STMNT"); return 46; break; case 27: this.popState(); this.pushState("STYLE_DEFINITION"); return 47; break; case 28: this.popState(); return 48; break; case 29: this.pushState("acc_title"); return "acc_title"; break; case 30: this.popState(); return "acc_title_value"; break; case 31: this.pushState("acc_descr"); return "acc_descr"; break; case 32: this.popState(); return "acc_descr_value"; break; case 33: this.pushState("acc_descr_multiline"); break; case 34: this.popState(); break; case 35: return "acc_descr_multiline_value"; break; case 36: return 30; break; case 37: this.popState(); yy.getLogger().debug("Lex: (("); return "NODE_DEND"; break; case 38: this.popState(); yy.getLogger().debug("Lex: (("); return "NODE_DEND"; break; case 39: this.popState(); yy.getLogger().debug("Lex: ))"); return "NODE_DEND"; break; case 40: this.popState(); yy.getLogger().debug("Lex: (("); return "NODE_DEND"; break; case 41: this.popState(); yy.getLogger().debug("Lex: (("); return "NODE_DEND"; break; case 42: this.popState(); yy.getLogger().debug("Lex: (-"); return "NODE_DEND"; break; case 43: this.popState(); yy.getLogger().debug("Lex: -)"); return "NODE_DEND"; break; case 44: this.popState(); yy.getLogger().debug("Lex: (("); return "NODE_DEND"; break; case 45: this.popState(); yy.getLogger().debug("Lex: ]]"); return "NODE_DEND"; break; case 46: this.popState(); yy.getLogger().debug("Lex: ("); return "NODE_DEND"; break; case 47: this.popState(); yy.getLogger().debug("Lex: ])"); return "NODE_DEND"; break; case 48: this.popState(); yy.getLogger().debug("Lex: /]"); return "NODE_DEND"; break; case 49: this.popState(); yy.getLogger().debug("Lex: /]"); return "NODE_DEND"; break; case 50: this.popState(); yy.getLogger().debug("Lex: )]"); return "NODE_DEND"; break; case 51: this.popState(); yy.getLogger().debug("Lex: )"); return "NODE_DEND"; break; case 52: this.popState(); yy.getLogger().debug("Lex: ]>"); return "NODE_DEND"; break; case 53: this.popState(); yy.getLogger().debug("Lex: ]"); return "NODE_DEND"; break; case 54: yy.getLogger().debug("Lexa: -)"); this.pushState("NODE"); return 35; break; case 55: yy.getLogger().debug("Lexa: (-"); this.pushState("NODE"); return 35; break; case 56: yy.getLogger().debug("Lexa: ))"); this.pushState("NODE"); return 35; break; case 57: yy.getLogger().debug("Lexa: )"); this.pushState("NODE"); return 35; break; case 58: yy.getLogger().debug("Lex: ((("); this.pushState("NODE"); return 35; break; case 59: yy.getLogger().debug("Lexa: )"); this.pushState("NODE"); return 35; break; case 60: yy.getLogger().debug("Lexa: )"); this.pushState("NODE"); return 35; break; case 61: yy.getLogger().debug("Lexa: )"); this.pushState("NODE"); return 35; break; case 62: yy.getLogger().debug("Lexc: >"); this.pushState("NODE"); return 35; break; case 63: yy.getLogger().debug("Lexa: (["); this.pushState("NODE"); return 35; break; case 64: yy.getLogger().debug("Lexa: )"); this.pushState("NODE"); return 35; break; case 65: this.pushState("NODE"); return 35; break; case 66: this.pushState("NODE"); return 35; break; case 67: this.pushState("NODE"); return 35; break; case 68: this.pushState("NODE"); return 35; break; case 69: this.pushState("NODE"); return 35; break; case 70: this.pushState("NODE"); return 35; break; case 71: this.pushState("NODE"); return 35; break; case 72: yy.getLogger().debug("Lexa: ["); this.pushState("NODE"); return 35; break; case 73: this.pushState("BLOCK_ARROW"); yy.getLogger().debug("LEX ARR START"); return 37; break; case 74: yy.getLogger().debug("Lex: NODE_ID", yy_.yytext); return 31; break; case 75: yy.getLogger().debug("Lex: EOF", yy_.yytext); return 8; break; case 76: this.pushState("md_string"); break; case 77: this.pushState("md_string"); break; case 78: return "NODE_DESCR"; break; case 79: this.popState(); break; case 80: yy.getLogger().debug("Lex: Starting string"); this.pushState("string"); break; case 81: yy.getLogger().debug("LEX ARR: Starting string"); this.pushState("string"); break; case 82: yy.getLogger().debug("LEX: NODE_DESCR:", yy_.yytext); return "NODE_DESCR"; break; case 83: yy.getLogger().debug("LEX POPPING"); this.popState(); break; case 84: yy.getLogger().debug("Lex: =>BAE"); this.pushState("ARROW_DIR"); break; case 85: yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); yy.getLogger().debug("Lex (right): dir:", yy_.yytext); return "DIR"; break; case 86: yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); yy.getLogger().debug("Lex (left):", yy_.yytext); return "DIR"; break; case 87: yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); yy.getLogger().debug("Lex (x):", yy_.yytext); return "DIR"; break; case 88: yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); yy.getLogger().debug("Lex (y):", yy_.yytext); return "DIR"; break; case 89: yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); yy.getLogger().debug("Lex (up):", yy_.yytext); return "DIR"; break; case 90: yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); yy.getLogger().debug("Lex (down):", yy_.yytext); return "DIR"; break; case 91: yy_.yytext = "]>"; yy.getLogger().debug("Lex (ARROW_DIR end):", yy_.yytext); this.popState(); this.popState(); return "BLOCK_ARROW_END"; break; case 92: yy.getLogger().debug("Lex: LINK", "#" + yy_.yytext + "#"); return 15; break; case 93: yy.getLogger().debug("Lex: LINK", yy_.yytext); return 15; break; case 94: yy.getLogger().debug("Lex: LINK", yy_.yytext); return 15; break; case 95: yy.getLogger().debug("Lex: LINK", yy_.yytext); return 15; break; case 96: yy.getLogger().debug("Lex: START_LINK", yy_.yytext); this.pushState("LLABEL"); return 16; break; case 97: yy.getLogger().debug("Lex: START_LINK", yy_.yytext); this.pushState("LLABEL"); return 16; break; case 98: yy.getLogger().debug("Lex: START_LINK", yy_.yytext); this.pushState("LLABEL"); return 16; break; case 99: this.pushState("md_string"); break; case 100: yy.getLogger().debug("Lex: Starting string"); this.pushState("string"); return "LINK_LABEL"; break; case 101: this.popState(); yy.getLogger().debug("Lex: LINK", "#" + yy_.yytext + "#"); return 15; break; case 102: this.popState(); yy.getLogger().debug("Lex: LINK", yy_.yytext); return 15; break; case 103: this.popState(); yy.getLogger().debug("Lex: LINK", yy_.yytext); return 15; break; case 104: yy.getLogger().debug("Lex: COLON", yy_.yytext); yy_.yytext = yy_.yytext.slice(1); return 27; break; } }, "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": false }, "STYLE_STMNT": { "rules": [27], "inclusive": false }, "CLASSDEFID": { "rules": [22], "inclusive": false }, "CLASSDEF": { "rules": [20, 21], "inclusive": false }, "CLASS_STYLE": { "rules": [25], "inclusive": false }, "CLASS": { "rules": [24], "inclusive": false }, "LLABEL": { "rules": [99, 100, 101, 102, 103], "inclusive": false }, "ARROW_DIR": { "rules": [85, 86, 87, 88, 89, 90, 91], "inclusive": false }, "BLOCK_ARROW": { "rules": [76, 81, 84], "inclusive": false }, "NODE": { "rules": [37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 77, 80], "inclusive": false }, "md_string": { "rules": [9, 10, 78, 79], "inclusive": false }, "space": { "rules": [], "inclusive": false }, "string": { "rules": [12, 13, 82, 83], "inclusive": false }, "acc_descr_multiline": { "rules": [34, 35], "inclusive": false }, "acc_descr": { "rules": [32], "inclusive": false }, "acc_title": { "rules": [30], "inclusive": false }, "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": true } } }; return lexer2; })(); parser24.lexer = lexer; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser24; parser24.Parser = Parser3; return new Parser3(); })(); parser21.parser = parser21; block_default = parser21; } }); // src/diagrams/block/blockDB.ts function typeStr2Type(typeStr) { log.debug("typeStr2Type", typeStr); switch (typeStr) { case "[]": return "square"; case "()": log.debug("we have a round"); return "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"; } } function edgeTypeStr2Type(typeStr) { log.debug("typeStr2Type", typeStr); switch (typeStr) { case "==": return "thick"; default: return "normal"; } } function edgeStrToEdgeData(typeStr) { switch (typeStr.replace(/^[\s-]+|[\s-]+$/g, "")) { case "x": return "arrow_cross"; case "o": return "arrow_circle"; case ">": return "arrow_point"; default: return ""; } } var blockDatabase, edgeList, edgeCount2, COLOR_KEYWORD, FILL_KEYWORD, BG_FILL, STYLECLASS_SEP, config4, classes2, sanitizeText5, addStyleClass, addStyle2Node, setCssClass, populateBlockDatabase, blocks, rootBlock, clear18, cnt3, generateId2, setHierarchy, getColumns, getBlocksFlat, getBlocks, getEdges, getBlock, setBlock, getLogger2, getClasses4, db6, blockDB_default; var init_blockDB = __esm({ "src/diagrams/block/blockDB.ts"() { "use strict"; init_clone2(); init_config(); init_diagramAPI(); init_logger(); init_common(); init_commonDb(); blockDatabase = /* @__PURE__ */ new Map(); edgeList = []; edgeCount2 = /* @__PURE__ */ new Map(); COLOR_KEYWORD = "color"; FILL_KEYWORD = "fill"; BG_FILL = "bgFill"; STYLECLASS_SEP = ","; config4 = getConfig2(); classes2 = /* @__PURE__ */ new Map(); sanitizeText5 = /* @__PURE__ */ __name((txt) => common_default.sanitizeText(txt, config4), "sanitizeText"); addStyleClass = /* @__PURE__ */ __name(function(id30, styleAttributes = "") { let foundClass = classes2.get(id30); if (!foundClass) { foundClass = { id: id30, styles: [], textStyles: [] }; classes2.set(id30, foundClass); } if (styleAttributes !== void 0 && styleAttributes !== null) { styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => { const fixedAttrib = attrib.replace(/([^;]*);/, "$1").trim(); if (RegExp(COLOR_KEYWORD).exec(attrib)) { const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL); const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD); foundClass.textStyles.push(newStyle2); } foundClass.styles.push(fixedAttrib); }); } }, "addStyleClass"); addStyle2Node = /* @__PURE__ */ __name(function(id30, styles4 = "") { const foundBlock = blockDatabase.get(id30); if (styles4 !== void 0 && styles4 !== null) { foundBlock.styles = styles4.split(STYLECLASS_SEP); } }, "addStyle2Node"); setCssClass = /* @__PURE__ */ __name(function(itemIds, cssClassName) { itemIds.split(",").forEach(function(id30) { let foundBlock = blockDatabase.get(id30); if (foundBlock === void 0) { const trimmedId = id30.trim(); foundBlock = { id: trimmedId, type: "na", children: [] }; blockDatabase.set(trimmedId, foundBlock); } if (!foundBlock.classes) { foundBlock.classes = []; } foundBlock.classes.push(cssClassName); }); }, "setCssClass"); populateBlockDatabase = /* @__PURE__ */ __name((_blockList, parent4) => { const blockList = _blockList.flat(); const children2 = []; const columnSettingBlock = blockList.find((b3) => b3?.type === "column-setting"); const column2 = columnSettingBlock?.columns ?? -1; for (const block2 of blockList) { if (typeof column2 === "number" && column2 > 0 && block2.type !== "column-setting" && typeof block2.widthInColumns === "number" && block2.widthInColumns > column2) { log.warn( `Block ${block2.id} width ${block2.widthInColumns} exceeds configured column width ${column2}` ); } if (block2.label) { block2.label = sanitizeText5(block2.label); } if (block2.type === "classDef") { addStyleClass(block2.id, block2.css); continue; } if (block2.type === "applyClass") { setCssClass(block2.id, block2?.styleClass ?? ""); continue; } if (block2.type === "applyStyles") { if (block2?.stylesStr) { addStyle2Node(block2.id, block2?.stylesStr); } continue; } if (block2.type === "column-setting") { parent4.columns = block2.columns ?? -1; } else if (block2.type === "edge") { const count2 = (edgeCount2.get(block2.id) ?? 0) + 1; edgeCount2.set(block2.id, count2); block2.id = count2 + "-" + block2.id; edgeList.push(block2); } else { if (!block2.label) { if (block2.type === "composite") { block2.label = ""; } else { block2.label = block2.id; } } const existingBlock = blockDatabase.get(block2.id); if (existingBlock === void 0) { blockDatabase.set(block2.id, block2); } else { if (block2.type !== "na") { existingBlock.type = block2.type; } if (block2.label !== block2.id) { existingBlock.label = block2.label; } } if (block2.children) { populateBlockDatabase(block2.children, block2); } if (block2.type === "space") { const w4 = block2.width ?? 1; for (let j3 = 0; j3 < w4; j3++) { const newBlock = clone_default2(block2); newBlock.id = newBlock.id + "-" + j3; blockDatabase.set(newBlock.id, newBlock); children2.push(newBlock); } } else if (existingBlock === void 0) { children2.push(block2); } } } parent4.children = children2; }, "populateBlockDatabase"); blocks = []; rootBlock = { id: "root", type: "composite", children: [], columns: -1 }; clear18 = /* @__PURE__ */ __name(() => { log.debug("Clear called"); clear(); rootBlock = { id: "root", type: "composite", children: [], columns: -1 }; blockDatabase = /* @__PURE__ */ new Map([["root", rootBlock]]); blocks = []; classes2 = /* @__PURE__ */ new Map(); edgeList = []; edgeCount2 = /* @__PURE__ */ new Map(); }, "clear"); __name(typeStr2Type, "typeStr2Type"); __name(edgeTypeStr2Type, "edgeTypeStr2Type"); __name(edgeStrToEdgeData, "edgeStrToEdgeData"); cnt3 = 0; generateId2 = /* @__PURE__ */ __name(() => { cnt3++; return "id-" + Math.random().toString(36).substr(2, 12) + "-" + cnt3; }, "generateId"); setHierarchy = /* @__PURE__ */ __name((block2) => { rootBlock.children = block2; populateBlockDatabase(block2, rootBlock); blocks = rootBlock.children; }, "setHierarchy"); getColumns = /* @__PURE__ */ __name((blockId) => { const block2 = blockDatabase.get(blockId); if (!block2) { return -1; } if (block2.columns) { return block2.columns; } if (!block2.children) { return -1; } return block2.children.length; }, "getColumns"); getBlocksFlat = /* @__PURE__ */ __name(() => { return [...blockDatabase.values()]; }, "getBlocksFlat"); getBlocks = /* @__PURE__ */ __name(() => { return blocks || []; }, "getBlocks"); getEdges = /* @__PURE__ */ __name(() => { return edgeList; }, "getEdges"); getBlock = /* @__PURE__ */ __name((id30) => { return blockDatabase.get(id30); }, "getBlock"); setBlock = /* @__PURE__ */ __name((block2) => { blockDatabase.set(block2.id, block2); }, "setBlock"); getLogger2 = /* @__PURE__ */ __name(() => log, "getLogger"); getClasses4 = /* @__PURE__ */ __name(function() { return classes2; }, "getClasses"); db6 = { getConfig: /* @__PURE__ */ __name(() => getConfig().block, "getConfig"), typeStr2Type, edgeTypeStr2Type, edgeStrToEdgeData, getLogger: getLogger2, getBlocksFlat, getBlocks, getEdges, setHierarchy, getBlock, setBlock, getColumns, getClasses: getClasses4, clear: clear18, generateId: generateId2 }; blockDB_default = db6; } }); // src/diagrams/block/styles.ts var fade3, getStyles17, styles_default16; var init_styles18 = __esm({ "src/diagrams/block/styles.ts"() { "use strict"; init_dist(); init_globalStyles(); fade3 = /* @__PURE__ */ __name((color2, opacity) => { const channel2 = channel_default2; const r2 = channel2(color2, "r"); const g2 = channel2(color2, "g"); const b3 = channel2(color2, "b"); return rgba_default(r2, g2, b3, opacity); }, "fade"); getStyles17 = /* @__PURE__ */ __name((options2) => `.label { font-family: ${options2.fontFamily}; color: ${options2.nodeTextColor || options2.textColor}; } .cluster-label text { fill: ${options2.titleColor}; } .cluster-label span,p { color: ${options2.titleColor}; } .label text,span,p { fill: ${options2.nodeTextColor || options2.textColor}; color: ${options2.nodeTextColor || options2.textColor}; } .node rect, .node circle, .node ellipse, .node polygon, .node path { fill: ${options2.mainBkg}; stroke: ${options2.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: ${options2.arrowheadColor}; } .edgePath .path { stroke: ${options2.lineColor}; stroke-width: 2.0px; } .flowchart-link { stroke: ${options2.lineColor}; fill: none; } .edgeLabel { background-color: ${options2.edgeLabelBackground}; rect { opacity: 0.5; background-color: ${options2.edgeLabelBackground}; fill: ${options2.edgeLabelBackground}; } text-align: center; } /* For html labels only */ .labelBkg { background-color: ${fade3(options2.edgeLabelBackground, 0.5)}; // background-color: } .node .cluster { // fill: ${fade3(options2.mainBkg, 0.5)}; fill: ${fade3(options2.clusterBkg, 0.5)}; stroke: ${fade3(options2.clusterBorder, 0.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: ${options2.titleColor}; } .cluster span,p { color: ${options2.titleColor}; } /* .cluster div { color: ${options2.titleColor}; } */ div.mermaidTooltip { position: absolute; text-align: center; max-width: 200px; padding: 2px; font-family: ${options2.fontFamily}; font-size: 12px; background: ${options2.tertiaryColor}; border: 1px solid ${options2.border2}; border-radius: 2px; pointer-events: none; z-index: 100; } .flowchartTitleText { text-anchor: middle; font-size: 18px; fill: ${options2.textColor}; } ${getIconStyles()} `, "getStyles"); styles_default16 = getStyles17; } }); // src/dagre-wrapper/markers.js var insertMarkers3, extension4, composition2, aggregation2, dependency2, lollipop2, point7, circle4, cross2, barb2, markers2, markers_default2; var init_markers2 = __esm({ "src/dagre-wrapper/markers.js"() { "use strict"; init_logger(); insertMarkers3 = /* @__PURE__ */ __name((elem, markerArray, type3, id30) => { markerArray.forEach((markerName) => { markers2[markerName](elem, type3, id30); }); }, "insertMarkers"); extension4 = /* @__PURE__ */ __name((elem, type3, id30) => { log.trace("Making markers for ", id30); elem.append("defs").append("marker").attr("id", id30 + "_" + type3 + "-extensionStart").attr("class", "marker extension " + type3).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"); elem.append("defs").append("marker").attr("id", id30 + "_" + type3 + "-extensionEnd").attr("class", "marker extension " + type3).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"); composition2 = /* @__PURE__ */ __name((elem, type3, id30) => { elem.append("defs").append("marker").attr("id", id30 + "_" + type3 + "-compositionStart").attr("class", "marker composition " + type3).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"); elem.append("defs").append("marker").attr("id", id30 + "_" + type3 + "-compositionEnd").attr("class", "marker composition " + type3).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"); aggregation2 = /* @__PURE__ */ __name((elem, type3, id30) => { elem.append("defs").append("marker").attr("id", id30 + "_" + type3 + "-aggregationStart").attr("class", "marker aggregation " + type3).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"); elem.append("defs").append("marker").attr("id", id30 + "_" + type3 + "-aggregationEnd").attr("class", "marker aggregation " + type3).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"); dependency2 = /* @__PURE__ */ __name((elem, type3, id30) => { elem.append("defs").append("marker").attr("id", id30 + "_" + type3 + "-dependencyStart").attr("class", "marker dependency " + type3).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"); elem.append("defs").append("marker").attr("id", id30 + "_" + type3 + "-dependencyEnd").attr("class", "marker dependency " + type3).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"); lollipop2 = /* @__PURE__ */ __name((elem, type3, id30) => { elem.append("defs").append("marker").attr("id", id30 + "_" + type3 + "-lollipopStart").attr("class", "marker lollipop " + type3).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); elem.append("defs").append("marker").attr("id", id30 + "_" + type3 + "-lollipopEnd").attr("class", "marker lollipop " + type3).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"); point7 = /* @__PURE__ */ __name((elem, type3, id30) => { elem.append("marker").attr("id", id30 + "_" + type3 + "-pointEnd").attr("class", "marker " + type3).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"); elem.append("marker").attr("id", id30 + "_" + type3 + "-pointStart").attr("class", "marker " + type3).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"); circle4 = /* @__PURE__ */ __name((elem, type3, id30) => { elem.append("marker").attr("id", id30 + "_" + type3 + "-circleEnd").attr("class", "marker " + type3).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"); elem.append("marker").attr("id", id30 + "_" + type3 + "-circleStart").attr("class", "marker " + type3).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"); cross2 = /* @__PURE__ */ __name((elem, type3, id30) => { elem.append("marker").attr("id", id30 + "_" + type3 + "-crossEnd").attr("class", "marker cross " + type3).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"); elem.append("marker").attr("id", id30 + "_" + type3 + "-crossStart").attr("class", "marker cross " + type3).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"); barb2 = /* @__PURE__ */ __name((elem, type3, id30) => { elem.append("defs").append("marker").attr("id", id30 + "_" + type3 + "-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"); markers2 = { extension: extension4, composition: composition2, aggregation: aggregation2, dependency: dependency2, lollipop: lollipop2, point: point7, circle: circle4, cross: cross2, barb: barb2 }; markers_default2 = insertMarkers3; } }); // src/diagrams/block/layout.ts function calculateBlockPosition(columns, position5) { if (columns === 0 || !Number.isInteger(columns)) { throw new Error("Columns must be an integer !== 0."); } if (position5 < 0 || !Number.isInteger(position5)) { throw new Error("Position must be a non-negative integer." + position5); } if (columns < 0) { return { px: position5, py: 0 }; } if (columns === 1) { return { px: 0, py: position5 }; } const px = position5 % columns; const py = Math.floor(position5 / columns); return { px, py }; } function setBlockSizes(block2, db7, siblingWidth = 0, siblingHeight = 0) { log.debug( "setBlockSizes abc95 (start)", block2.id, block2?.size?.x, "block width =", block2?.size, "siblingWidth", siblingWidth ); if (!block2?.size?.width) { block2.size = { width: siblingWidth, height: siblingHeight, x: 0, y: 0 }; } let maxWidth2 = 0; let maxHeight = 0; if (block2.children?.length > 0) { for (const child of block2.children) { setBlockSizes(child, db7); } const childSize = getMaxChildSize(block2); maxWidth2 = childSize.width; maxHeight = childSize.height; log.debug("setBlockSizes abc95 maxWidth of", block2.id, ":s children is ", maxWidth2, maxHeight); for (const child of block2.children) { if (child.size) { log.debug( `abc95 Setting size of children of ${block2.id} id=${child.id} ${maxWidth2} ${maxHeight} ${JSON.stringify(child.size)}` ); child.size.width = maxWidth2 * (child.widthInColumns ?? 1) + padding * ((child.widthInColumns ?? 1) - 1); child.size.height = maxHeight; child.size.x = 0; child.size.y = 0; log.debug( `abc95 updating size of ${block2.id} children child:${child.id} maxWidth:${maxWidth2} maxHeight:${maxHeight}` ); } } for (const child of block2.children) { setBlockSizes(child, db7, maxWidth2, maxHeight); } const columns = block2.columns ?? -1; let numItems = 0; for (const child of block2.children) { numItems += child.widthInColumns ?? 1; } let xSize = block2.children.length; if (columns > 0 && columns < numItems) { xSize = columns; } const ySize = Math.ceil(numItems / xSize); let width3 = xSize * (maxWidth2 + padding) + padding; let height2 = ySize * (maxHeight + padding) + padding; if (width3 < siblingWidth) { log.debug( `Detected to small sibling: abc95 ${block2.id} siblingWidth ${siblingWidth} siblingHeight ${siblingHeight} width ${width3}` ); width3 = siblingWidth; height2 = siblingHeight; const childWidth = (siblingWidth - xSize * padding - padding) / xSize; const childHeight = (siblingHeight - ySize * padding - padding) / ySize; log.debug("Size indata abc88", block2.id, "childWidth", childWidth, "maxWidth", maxWidth2); log.debug("Size indata abc88", block2.id, "childHeight", childHeight, "maxHeight", maxHeight); log.debug("Size indata abc88 xSize", xSize, "padding", padding); for (const child of block2.children) { if (child.size) { child.size.width = childWidth; child.size.height = childHeight; child.size.x = 0; child.size.y = 0; } } } log.debug( `abc95 (finale calc) ${block2.id} xSize ${xSize} ySize ${ySize} columns ${columns}${block2.children.length} width=${Math.max(width3, block2.size?.width || 0)}` ); if (width3 < (block2?.size?.width || 0)) { width3 = block2?.size?.width || 0; const num = columns > 0 ? Math.min(block2.children.length, columns) : block2.children.length; if (num > 0) { const childWidth = (width3 - num * padding - padding) / num; log.debug("abc95 (growing to fit) width", block2.id, width3, block2.size?.width, childWidth); for (const child of block2.children) { if (child.size) { child.size.width = childWidth; } } } } block2.size = { width: width3, height: height2, x: 0, y: 0 }; } log.debug( "setBlockSizes abc94 (done)", block2.id, block2?.size?.x, block2?.size?.width, block2?.size?.y, block2?.size?.height ); } function layoutBlocks(block2, db7) { log.debug( `abc85 layout blocks (=>layoutBlocks) ${block2.id} x: ${block2?.size?.x} y: ${block2?.size?.y} width: ${block2?.size?.width}` ); const columns = block2.columns ?? -1; log.debug("layoutBlocks columns abc95", block2.id, "=>", columns, block2); if (block2.children && // find max width of children block2.children.length > 0) { const width3 = block2?.children[0]?.size?.width ?? 0; const widthOfChildren = block2.children.length * width3 + (block2.children.length - 1) * padding; log.debug("widthOfChildren 88", widthOfChildren, "posX"); let columnPos = 0; log.debug("abc91 block?.size?.x", block2.id, block2?.size?.x); let startingPosX = block2?.size?.x ? block2?.size?.x + (-block2?.size?.width / 2 || 0) : -padding; let rowPos = 0; for (const child of block2.children) { const parent4 = block2; if (!child.size) { continue; } const { width: width4, height: height2 } = child.size; const { px, py } = calculateBlockPosition(columns, columnPos); if (py != rowPos) { rowPos = py; startingPosX = block2?.size?.x ? block2?.size?.x + (-block2?.size?.width / 2 || 0) : -padding; log.debug("New row in layout for block", block2.id, " and child ", child.id, rowPos); } log.debug( `abc89 layout blocks (child) id: ${child.id} Pos: ${columnPos} (px, py) ${px},${py} (${parent4?.size?.x},${parent4?.size?.y}) parent: ${parent4.id} width: ${width4}${padding}` ); if (parent4.size) { const halfWidth = width4 / 2; child.size.x = startingPosX + padding + halfWidth; log.debug( `abc91 layout blocks (calc) px, pyid:${child.id} startingPos=X${startingPosX} new startingPosX${child.size.x} ${halfWidth} padding=${padding} width=${width4} halfWidth=${halfWidth} => x:${child.size.x} y:${child.size.y} ${child.widthInColumns} (width * (child?.w || 1)) / 2 ${width4 * (child?.widthInColumns ?? 1) / 2}` ); startingPosX = child.size.x + halfWidth; child.size.y = parent4.size.y - parent4.size.height / 2 + py * (height2 + padding) + height2 / 2 + padding; log.debug( `abc88 layout blocks (calc) px, pyid:${child.id}startingPosX${startingPosX}${padding}${halfWidth}=>x:${child.size.x}y:${child.size.y}${child.widthInColumns}(width * (child?.w || 1)) / 2${width4 * (child?.widthInColumns ?? 1) / 2}` ); } if (child.children) { layoutBlocks(child, db7); } let columnsFilled = child?.widthInColumns ?? 1; if (columns > 0) { columnsFilled = Math.min(columnsFilled, columns - columnPos % columns); } columnPos += columnsFilled; log.debug("abc88 columnsPos", child, columnPos); } } log.debug( `layout blocks (<==layoutBlocks) ${block2.id} x: ${block2?.size?.x} y: ${block2?.size?.y} width: ${block2?.size?.width}` ); } function findBounds(block2, { minX, minY, maxX, maxY } = { minX: 0, minY: 0, maxX: 0, maxY: 0 }) { if (block2.size && block2.id !== "root") { const { x: x5, y: y6, width: width3, height: height2 } = block2.size; if (x5 - width3 / 2 < minX) { minX = x5 - width3 / 2; } if (y6 - height2 / 2 < minY) { minY = y6 - height2 / 2; } if (x5 + width3 / 2 > maxX) { maxX = x5 + width3 / 2; } if (y6 + height2 / 2 > maxY) { maxY = y6 + height2 / 2; } } if (block2.children) { for (const child of block2.children) { ({ minX, minY, maxX, maxY } = findBounds(child, { minX, minY, maxX, maxY })); } } return { minX, minY, maxX, maxY }; } function layout5(db7) { const root3 = db7.getBlock("root"); if (!root3) { return; } setBlockSizes(root3, db7, 0, 0); layoutBlocks(root3, db7); log.debug("getBlocks", JSON.stringify(root3, null, 2)); const { minX, minY, maxX, maxY } = findBounds(root3); const height2 = maxY - minY; const width3 = maxX - minX; return { x: minX, y: minY, width: width3, height: height2 }; } var padding, getMaxChildSize; var init_layout3 = __esm({ "src/diagrams/block/layout.ts"() { "use strict"; init_logger(); init_diagramAPI(); padding = getConfig2()?.block?.padding ?? 8; __name(calculateBlockPosition, "calculateBlockPosition"); getMaxChildSize = /* @__PURE__ */ __name((block2) => { let maxWidth2 = 0; let maxHeight = 0; for (const child of block2.children) { const { width: width3, height: height2, x: x5, y: y6 } = child.size ?? { width: 0, height: 0, x: 0, y: 0 }; log.debug( "getMaxChildSize abc95 child:", child.id, "width:", width3, "height:", height2, "x:", x5, "y:", y6, child.type ); if (child.type === "space") { continue; } if (width3 > maxWidth2) { maxWidth2 = width3 / (block2.widthInColumns ?? 1); } if (height2 > maxHeight) { maxHeight = height2; } } return { width: maxWidth2, height: maxHeight }; }, "getMaxChildSize"); __name(setBlockSizes, "setBlockSizes"); __name(layoutBlocks, "layoutBlocks"); __name(findBounds, "findBounds"); __name(layout5, "layout"); } }); // src/dagre-wrapper/createLabel.js function applyStyle3(dom, styleFn) { if (styleFn) { dom.attr("style", styleFn); } } function addHtmlLabel2(node2, config5) { const fo = select_default2(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); const div = fo.append("xhtml:div"); const label = node2.label; const labelClass = node2.isNode ? "nodeLabel" : "edgeLabel"; const span = div.append("span"); span.html(sanitizeText(label, config5)); applyStyle3(span, node2.labelStyle); span.attr("class", labelClass); applyStyle3(div, node2.labelStyle); div.style("display", "inline-block"); div.style("white-space", "nowrap"); div.attr("xmlns", "http://www.w3.org/1999/xhtml"); return fo.node(); } var createLabel2, createLabel_default2; var init_createLabel2 = __esm({ "src/dagre-wrapper/createLabel.js"() { "use strict"; init_src32(); init_diagramAPI(); init_common(); init_logger(); init_createText(); init_utils2(); __name(applyStyle3, "applyStyle"); __name(addHtmlLabel2, "addHtmlLabel"); createLabel2 = /* @__PURE__ */ __name(async (_vertexText, style3, isTitle, isNode2) => { let vertexText = _vertexText || ""; if (typeof vertexText === "object") { vertexText = vertexText[0]; } const config5 = getConfig2(); if (evaluate(config5.flowchart.htmlLabels)) { vertexText = vertexText.replace(/\\n|\n/g, "
"); log.debug("vertexText" + vertexText); const label = await replaceIconSubstring(decodeEntities(vertexText)); const node2 = { isNode: isNode2, label, labelStyle: style3.replace("fill:", "color:") }; let vertexNode = addHtmlLabel2(node2, config5); return vertexNode; } else { const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); svgLabel.setAttribute("style", style3.replace("color:", "fill:")); let rows = []; if (typeof vertexText === "string") { rows = vertexText.split(/\\n|\n|/gi); } else if (Array.isArray(vertexText)) { rows = vertexText; } else { rows = []; } for (const row of rows) { const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); tspan.setAttribute("dy", "1em"); tspan.setAttribute("x", "0"); if (isTitle) { tspan.setAttribute("class", "title-row"); } else { tspan.setAttribute("class", "row"); } tspan.textContent = row.trim(); svgLabel.appendChild(tspan); } return svgLabel; } }, "createLabel"); createLabel_default2 = createLabel2; } }); // src/dagre-wrapper/edgeMarker.ts var addEdgeMarkers2, arrowTypesMap2, addEdgeMarker2; var init_edgeMarker2 = __esm({ "src/dagre-wrapper/edgeMarker.ts"() { "use strict"; init_logger(); addEdgeMarkers2 = /* @__PURE__ */ __name((svgPath, edge, url, id30, diagramType) => { if (edge.arrowTypeStart) { addEdgeMarker2(svgPath, "start", edge.arrowTypeStart, url, id30, diagramType); } if (edge.arrowTypeEnd) { addEdgeMarker2(svgPath, "end", edge.arrowTypeEnd, url, id30, diagramType); } }, "addEdgeMarkers"); arrowTypesMap2 = { arrow_cross: "cross", arrow_point: "point", arrow_barb: "barb", arrow_circle: "circle", aggregation: "aggregation", extension: "extension", composition: "composition", dependency: "dependency", lollipop: "lollipop" }; addEdgeMarker2 = /* @__PURE__ */ __name((svgPath, position5, arrowType, url, id30, diagramType) => { const endMarkerType = arrowTypesMap2[arrowType]; if (!endMarkerType) { log.warn(`Unknown arrow type: ${arrowType}`); return; } const suffix = position5 === "start" ? "Start" : "End"; svgPath.attr(`marker-${position5}`, `url(${url}#${id30}_${diagramType}-${endMarkerType}${suffix})`); }, "addEdgeMarker"); } }); // src/dagre-wrapper/edges.js function setTerminalWidth2(fo, value2) { if (getConfig2().flowchart.htmlLabels && fo) { fo.style.width = value2.length * 9 + "px"; fo.style.height = "12px"; } } var edgeLabels2, terminalLabels2, insertEdgeLabel2, positionEdgeLabel2, outsideNode2, intersection3, cutPathAtIntersect2, insertEdge2; var init_edges2 = __esm({ "src/dagre-wrapper/edges.js"() { "use strict"; init_logger(); init_createLabel2(); init_createText(); init_src32(); init_diagramAPI(); init_utils2(); init_common(); init_lineWithOffset(); init_subGraphTitleMargins(); init_edgeMarker2(); edgeLabels2 = {}; terminalLabels2 = {}; insertEdgeLabel2 = /* @__PURE__ */ __name(async (elem, edge) => { const config5 = getConfig2(); const useHtmlLabels = evaluate(config5.flowchart.htmlLabels); const labelElement = edge.labelType === "markdown" ? createText( elem, edge.label, { style: edge.labelStyle, useHtmlLabels, addSvgBackground: true }, config5 ) : await createLabel_default2(edge.label, edge.labelStyle); const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); const label = edgeLabel.insert("g").attr("class", "label"); label.node().appendChild(labelElement); let bbox = labelElement.getBBox(); if (useHtmlLabels) { const div = labelElement.children[0]; const dv = select_default2(labelElement); bbox = div.getBoundingClientRect(); dv.attr("width", bbox.width); dv.attr("height", bbox.height); } label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); edgeLabels2[edge.id] = edgeLabel; edge.width = bbox.width; edge.height = bbox.height; let fo; if (edge.startLabelLeft) { const startLabelElement = await createLabel_default2(edge.startLabelLeft, edge.labelStyle); const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); const inner2 = startEdgeLabelLeft.insert("g").attr("class", "inner"); fo = inner2.node().appendChild(startLabelElement); const slBox = startLabelElement.getBBox(); inner2.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); if (!terminalLabels2[edge.id]) { terminalLabels2[edge.id] = {}; } terminalLabels2[edge.id].startLeft = startEdgeLabelLeft; setTerminalWidth2(fo, edge.startLabelLeft); } if (edge.startLabelRight) { const startLabelElement = await createLabel_default2(edge.startLabelRight, edge.labelStyle); const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); const inner2 = startEdgeLabelRight.insert("g").attr("class", "inner"); fo = startEdgeLabelRight.node().appendChild(startLabelElement); inner2.node().appendChild(startLabelElement); const slBox = startLabelElement.getBBox(); inner2.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); if (!terminalLabels2[edge.id]) { terminalLabels2[edge.id] = {}; } terminalLabels2[edge.id].startRight = startEdgeLabelRight; setTerminalWidth2(fo, edge.startLabelRight); } if (edge.endLabelLeft) { const endLabelElement = await createLabel_default2(edge.endLabelLeft, edge.labelStyle); const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); const inner2 = endEdgeLabelLeft.insert("g").attr("class", "inner"); fo = inner2.node().appendChild(endLabelElement); const slBox = endLabelElement.getBBox(); inner2.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); endEdgeLabelLeft.node().appendChild(endLabelElement); if (!terminalLabels2[edge.id]) { terminalLabels2[edge.id] = {}; } terminalLabels2[edge.id].endLeft = endEdgeLabelLeft; setTerminalWidth2(fo, edge.endLabelLeft); } if (edge.endLabelRight) { const endLabelElement = await createLabel_default2(edge.endLabelRight, edge.labelStyle); const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); const inner2 = endEdgeLabelRight.insert("g").attr("class", "inner"); fo = inner2.node().appendChild(endLabelElement); const slBox = endLabelElement.getBBox(); inner2.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); endEdgeLabelRight.node().appendChild(endLabelElement); if (!terminalLabels2[edge.id]) { terminalLabels2[edge.id] = {}; } terminalLabels2[edge.id].endRight = endEdgeLabelRight; setTerminalWidth2(fo, edge.endLabelRight); } return labelElement; }, "insertEdgeLabel"); __name(setTerminalWidth2, "setTerminalWidth"); positionEdgeLabel2 = /* @__PURE__ */ __name((edge, paths) => { log.debug("Moving label abc88 ", edge.id, edge.label, edgeLabels2[edge.id], paths); let path4 = paths.updatedPath ? paths.updatedPath : paths.originalPath; const siteConfig2 = getConfig2(); const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig2); if (edge.label) { const el = edgeLabels2[edge.id]; let x5 = edge.x; let y6 = edge.y; if (path4) { const pos = utils_default2.calcLabelPosition(path4); log.debug( "Moving label " + edge.label + " from (", x5, ",", y6, ") to (", pos.x, ",", pos.y, ") abc88" ); if (paths.updatedPath) { x5 = pos.x; y6 = pos.y; } } el.attr("transform", `translate(${x5}, ${y6 + subGraphTitleTotalMargin / 2})`); } if (edge.startLabelLeft) { const el = terminalLabels2[edge.id].startLeft; let x5 = edge.x; let y6 = edge.y; if (path4) { const pos = utils_default2.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path4); x5 = pos.x; y6 = pos.y; } el.attr("transform", `translate(${x5}, ${y6})`); } if (edge.startLabelRight) { const el = terminalLabels2[edge.id].startRight; let x5 = edge.x; let y6 = edge.y; if (path4) { const pos = utils_default2.calcTerminalLabelPosition( edge.arrowTypeStart ? 10 : 0, "start_right", path4 ); x5 = pos.x; y6 = pos.y; } el.attr("transform", `translate(${x5}, ${y6})`); } if (edge.endLabelLeft) { const el = terminalLabels2[edge.id].endLeft; let x5 = edge.x; let y6 = edge.y; if (path4) { const pos = utils_default2.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path4); x5 = pos.x; y6 = pos.y; } el.attr("transform", `translate(${x5}, ${y6})`); } if (edge.endLabelRight) { const el = terminalLabels2[edge.id].endRight; let x5 = edge.x; let y6 = edge.y; if (path4) { const pos = utils_default2.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path4); x5 = pos.x; y6 = pos.y; } el.attr("transform", `translate(${x5}, ${y6})`); } }, "positionEdgeLabel"); outsideNode2 = /* @__PURE__ */ __name((node2, point8) => { const x5 = node2.x; const y6 = node2.y; const dx = Math.abs(point8.x - x5); const dy = Math.abs(point8.y - y6); const w4 = node2.width / 2; const h3 = node2.height / 2; if (dx >= w4 || dy >= h3) { return true; } return false; }, "outsideNode"); intersection3 = /* @__PURE__ */ __name((node2, outsidePoint, insidePoint) => { log.debug(`intersection calc abc89: outsidePoint: ${JSON.stringify(outsidePoint)} insidePoint : ${JSON.stringify(insidePoint)} node : x:${node2.x} y:${node2.y} w:${node2.width} h:${node2.height}`); const x5 = node2.x; const y6 = node2.y; const dx = Math.abs(x5 - insidePoint.x); const w4 = node2.width / 2; let r2 = insidePoint.x < outsidePoint.x ? w4 - dx : w4 + dx; const h3 = node2.height / 2; const Q3 = Math.abs(outsidePoint.y - insidePoint.y); const R3 = Math.abs(outsidePoint.x - insidePoint.x); if (Math.abs(y6 - outsidePoint.y) * w4 > Math.abs(x5 - outsidePoint.x) * h3) { let q3 = insidePoint.y < outsidePoint.y ? outsidePoint.y - h3 - y6 : y6 - h3 - outsidePoint.y; r2 = R3 * q3 / Q3; const res = { x: insidePoint.x < outsidePoint.x ? insidePoint.x + r2 : insidePoint.x - R3 + r2, y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q3 - q3 : insidePoint.y - Q3 + q3 }; if (r2 === 0) { res.x = outsidePoint.x; res.y = outsidePoint.y; } if (R3 === 0) { res.x = outsidePoint.x; } if (Q3 === 0) { res.y = outsidePoint.y; } log.debug(`abc89 topp/bott calc, Q ${Q3}, q ${q3}, R ${R3}, r ${r2}`, res); return res; } else { if (insidePoint.x < outsidePoint.x) { r2 = outsidePoint.x - w4 - x5; } else { r2 = x5 - w4 - outsidePoint.x; } let q3 = Q3 * r2 / R3; let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R3 - r2 : insidePoint.x - R3 + r2; let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q3 : insidePoint.y - q3; log.debug(`sides calc abc89, Q ${Q3}, q ${q3}, R ${R3}, r ${r2}`, { _x, _y }); if (r2 === 0) { _x = outsidePoint.x; _y = outsidePoint.y; } if (R3 === 0) { _x = outsidePoint.x; } if (Q3 === 0) { _y = outsidePoint.y; } return { x: _x, y: _y }; } }, "intersection"); cutPathAtIntersect2 = /* @__PURE__ */ __name((_points, boundaryNode) => { log.debug("abc88 cutPathAtIntersect", _points, boundaryNode); let points = []; let lastPointOutside = _points[0]; let isInside = false; _points.forEach((point8) => { if (!outsideNode2(boundaryNode, point8) && !isInside) { const inter = intersection3(boundaryNode, lastPointOutside, point8); let pointPresent = false; points.forEach((p3) => { pointPresent = pointPresent || p3.x === inter.x && p3.y === inter.y; }); if (!points.some((e3) => e3.x === inter.x && e3.y === inter.y)) { points.push(inter); } isInside = true; } else { lastPointOutside = point8; if (!isInside) { points.push(point8); } } }); return points; }, "cutPathAtIntersect"); insertEdge2 = /* @__PURE__ */ __name(function(elem, e3, edge, clusterDb2, diagramType, graph, id30) { let points = edge.points; log.debug("abc88 InsertEdge: edge=", edge, "e=", e3); let pointsHasChanged = false; const tail = graph.node(e3.v); var head2 = graph.node(e3.w); if (head2?.intersect && tail?.intersect) { points = points.slice(1, edge.points.length - 1); points.unshift(tail.intersect(points[0])); points.push(head2.intersect(points[points.length - 1])); } if (edge.toCluster) { log.debug("to cluster abc88", clusterDb2[edge.toCluster]); points = cutPathAtIntersect2(edge.points, clusterDb2[edge.toCluster].node); pointsHasChanged = true; } if (edge.fromCluster) { log.debug("from cluster abc88", clusterDb2[edge.fromCluster]); points = cutPathAtIntersect2(points.reverse(), clusterDb2[edge.fromCluster].node).reverse(); pointsHasChanged = true; } const lineData = points.filter((p3) => !Number.isNaN(p3.y)); let curve = basis_default2; if (edge.curve && (diagramType === "graph" || diagramType === "flowchart")) { curve = edge.curve; } const { x: x5, y: y6 } = getLineFunctionsWithOffset(edge); const lineFunction = line_default().x(x5).y(y6).curve(curve); let strokeClasses; switch (edge.thickness) { case "normal": strokeClasses = "edge-thickness-normal"; break; case "thick": strokeClasses = "edge-thickness-thick"; break; case "invisible": strokeClasses = "edge-thickness-thick"; break; default: strokeClasses = ""; } switch (edge.pattern) { case "solid": strokeClasses += " edge-pattern-solid"; break; case "dotted": strokeClasses += " edge-pattern-dotted"; break; case "dashed": strokeClasses += " edge-pattern-dashed"; break; } const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); let url = ""; if (getConfig2().flowchart.arrowMarkerAbsolute || getConfig2().state.arrowMarkerAbsolute) { url = getUrl(true); } addEdgeMarkers2(svgPath, edge, url, id30, diagramType); let paths = {}; if (pointsHasChanged) { paths.updatedPath = points; } paths.originalPath = edge.points; return paths; }, "insertEdge"); } }); // src/dagre-wrapper/blockArrowHelper.ts var expandAndDeduplicateDirections, getArrowPoints; var init_blockArrowHelper = __esm({ "src/dagre-wrapper/blockArrowHelper.ts"() { "use strict"; expandAndDeduplicateDirections = /* @__PURE__ */ __name((directions) => { const uniqueDirections = /* @__PURE__ */ new Set(); for (const direction of directions) { switch (direction) { case "x": uniqueDirections.add("right"); uniqueDirections.add("left"); break; case "y": uniqueDirections.add("up"); uniqueDirections.add("down"); break; default: uniqueDirections.add(direction); break; } } return uniqueDirections; }, "expandAndDeduplicateDirections"); getArrowPoints = /* @__PURE__ */ __name((duplicatedDirections, bbox, node2) => { const directions = expandAndDeduplicateDirections(duplicatedDirections); const f2 = 2; const height2 = bbox.height + 2 * node2.padding; const midpoint3 = height2 / f2; const width3 = bbox.width + 2 * midpoint3 + node2.padding; const padding2 = node2.padding / 2; if (directions.has("right") && directions.has("left") && directions.has("up") && directions.has("down")) { return [ // Bottom { x: 0, y: 0 }, { x: midpoint3, y: 0 }, { x: width3 / 2, y: 2 * padding2 }, { x: width3 - midpoint3, y: 0 }, { x: width3, y: 0 }, // Right { x: width3, y: -height2 / 3 }, { x: width3 + 2 * padding2, y: -height2 / 2 }, { x: width3, y: -2 * height2 / 3 }, { x: width3, y: -height2 }, // Top { x: width3 - midpoint3, y: -height2 }, { x: width3 / 2, y: -height2 - 2 * padding2 }, { x: midpoint3, y: -height2 }, // Left { x: 0, y: -height2 }, { x: 0, y: -2 * height2 / 3 }, { x: -2 * padding2, y: -height2 / 2 }, { x: 0, y: -height2 / 3 } ]; } if (directions.has("right") && directions.has("left") && directions.has("up")) { return [ { x: midpoint3, y: 0 }, { x: width3 - midpoint3, y: 0 }, { x: width3, y: -height2 / 2 }, { x: width3 - midpoint3, y: -height2 }, { x: midpoint3, y: -height2 }, { x: 0, y: -height2 / 2 } ]; } if (directions.has("right") && directions.has("left") && directions.has("down")) { return [ { x: 0, y: 0 }, { x: midpoint3, y: -height2 }, { x: width3 - midpoint3, y: -height2 }, { x: width3, y: 0 } ]; } if (directions.has("right") && directions.has("up") && directions.has("down")) { return [ { x: 0, y: 0 }, { x: width3, y: -midpoint3 }, { x: width3, y: -height2 + midpoint3 }, { x: 0, y: -height2 } ]; } if (directions.has("left") && directions.has("up") && directions.has("down")) { return [ { x: width3, y: 0 }, { x: 0, y: -midpoint3 }, { x: 0, y: -height2 + midpoint3 }, { x: width3, y: -height2 } ]; } if (directions.has("right") && directions.has("left")) { return [ { x: midpoint3, y: 0 }, { x: midpoint3, y: -padding2 }, { x: width3 - midpoint3, y: -padding2 }, { x: width3 - midpoint3, y: 0 }, { x: width3, y: -height2 / 2 }, { x: width3 - midpoint3, y: -height2 }, { x: width3 - midpoint3, y: -height2 + padding2 }, { x: midpoint3, y: -height2 + padding2 }, { x: midpoint3, y: -height2 }, { x: 0, y: -height2 / 2 } ]; } if (directions.has("up") && directions.has("down")) { return [ // Bottom center { x: width3 / 2, y: 0 }, // Left pont of bottom arrow { x: 0, y: -padding2 }, { x: midpoint3, y: -padding2 }, // Left top over vertical section { x: midpoint3, y: -height2 + padding2 }, { x: 0, y: -height2 + padding2 }, // Top of arrow { x: width3 / 2, y: -height2 }, { x: width3, y: -height2 + padding2 }, // Top of right vertical bar { x: width3 - midpoint3, y: -height2 + padding2 }, { x: width3 - midpoint3, y: -padding2 }, { x: width3, y: -padding2 } ]; } if (directions.has("right") && directions.has("up")) { return [ { x: 0, y: 0 }, { x: width3, y: -midpoint3 }, { x: 0, y: -height2 } ]; } if (directions.has("right") && directions.has("down")) { return [ { x: 0, y: 0 }, { x: width3, y: 0 }, { x: 0, y: -height2 } ]; } if (directions.has("left") && directions.has("up")) { return [ { x: width3, y: 0 }, { x: 0, y: -midpoint3 }, { x: width3, y: -height2 } ]; } if (directions.has("left") && directions.has("down")) { return [ { x: width3, y: 0 }, { x: 0, y: 0 }, { x: width3, y: -height2 } ]; } if (directions.has("right")) { return [ { x: midpoint3, y: -padding2 }, { x: midpoint3, y: -padding2 }, { x: width3 - midpoint3, y: -padding2 }, { x: width3 - midpoint3, y: 0 }, { x: width3, y: -height2 / 2 }, { x: width3 - midpoint3, y: -height2 }, { x: width3 - midpoint3, y: -height2 + padding2 }, // top left corner of arrow { x: midpoint3, y: -height2 + padding2 }, { x: midpoint3, y: -height2 + padding2 } ]; } if (directions.has("left")) { return [ { x: midpoint3, y: 0 }, { x: midpoint3, y: -padding2 }, // Two points, the right corners { x: width3 - midpoint3, y: -padding2 }, { x: width3 - midpoint3, y: -height2 + padding2 }, { x: midpoint3, y: -height2 + padding2 }, { x: midpoint3, y: -height2 }, { x: 0, y: -height2 / 2 } ]; } if (directions.has("up")) { return [ // Bottom center { x: midpoint3, y: -padding2 }, // Left top over vertical section { x: midpoint3, y: -height2 + padding2 }, { x: 0, y: -height2 + padding2 }, // Top of arrow { x: width3 / 2, y: -height2 }, { x: width3, y: -height2 + padding2 }, // Top of right vertical bar { x: width3 - midpoint3, y: -height2 + padding2 }, { x: width3 - midpoint3, y: -padding2 } ]; } if (directions.has("down")) { return [ // Bottom center { x: width3 / 2, y: 0 }, // Left pont of bottom arrow { x: 0, y: -padding2 }, { x: midpoint3, y: -padding2 }, // Left top over vertical section { x: midpoint3, y: -height2 + padding2 }, { x: width3 - midpoint3, y: -height2 + padding2 }, { x: width3 - midpoint3, y: -padding2 }, { x: width3, y: -padding2 } ]; } return [{ x: 0, y: 0 }]; }, "getArrowPoints"); } }); // src/dagre-wrapper/intersect/intersect-node.js function intersectNode2(node2, point8) { return node2.intersect(point8); } var intersect_node_default2; var init_intersect_node2 = __esm({ "src/dagre-wrapper/intersect/intersect-node.js"() { "use strict"; __name(intersectNode2, "intersectNode"); intersect_node_default2 = intersectNode2; } }); // src/dagre-wrapper/intersect/intersect-ellipse.js function intersectEllipse2(node2, rx, ry, point8) { var cx = node2.x; var cy = node2.y; var px = cx - point8.x; var py = cy - point8.y; var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); var dx = Math.abs(rx * ry * px / det); if (point8.x < cx) { dx = -dx; } var dy = Math.abs(rx * ry * py / det); if (point8.y < cy) { dy = -dy; } return { x: cx + dx, y: cy + dy }; } var intersect_ellipse_default2; var init_intersect_ellipse2 = __esm({ "src/dagre-wrapper/intersect/intersect-ellipse.js"() { "use strict"; __name(intersectEllipse2, "intersectEllipse"); intersect_ellipse_default2 = intersectEllipse2; } }); // src/dagre-wrapper/intersect/intersect-circle.js function intersectCircle2(node2, rx, point8) { return intersect_ellipse_default2(node2, rx, rx, point8); } var intersect_circle_default2; var init_intersect_circle2 = __esm({ "src/dagre-wrapper/intersect/intersect-circle.js"() { "use strict"; init_intersect_ellipse2(); __name(intersectCircle2, "intersectCircle"); intersect_circle_default2 = intersectCircle2; } }); // src/dagre-wrapper/intersect/intersect-line.js function intersectLine2(p1, p22, q1, q22) { var a1, a2, b1, b22, c1, c22; var r1, r2, r3, r4; var denom, offset, num; var x5, y6; a1 = p22.y - p1.y; b1 = p1.x - p22.x; c1 = p22.x * p1.y - p1.x * p22.y; r3 = a1 * q1.x + b1 * q1.y + c1; r4 = a1 * q22.x + b1 * q22.y + c1; if (r3 !== 0 && r4 !== 0 && sameSign2(r3, r4)) { return; } a2 = q22.y - q1.y; b22 = q1.x - q22.x; c22 = q22.x * q1.y - q1.x * q22.y; r1 = a2 * p1.x + b22 * p1.y + c22; r2 = a2 * p22.x + b22 * p22.y + c22; if (r1 !== 0 && r2 !== 0 && sameSign2(r1, r2)) { return; } denom = a1 * b22 - a2 * b1; if (denom === 0) { return; } offset = Math.abs(denom / 2); num = b1 * c22 - b22 * c1; x5 = num < 0 ? (num - offset) / denom : (num + offset) / denom; num = a2 * c1 - a1 * c22; y6 = num < 0 ? (num - offset) / denom : (num + offset) / denom; return { x: x5, y: y6 }; } function sameSign2(r1, r2) { return r1 * r2 > 0; } var intersect_line_default2; var init_intersect_line2 = __esm({ "src/dagre-wrapper/intersect/intersect-line.js"() { "use strict"; __name(intersectLine2, "intersectLine"); __name(sameSign2, "sameSign"); intersect_line_default2 = intersectLine2; } }); // src/dagre-wrapper/intersect/intersect-polygon.js function intersectPolygon2(node2, polyPoints, point8) { var x1 = node2.x; var y1 = node2.y; var intersections = []; var minX = Number.POSITIVE_INFINITY; var minY = Number.POSITIVE_INFINITY; if (typeof polyPoints.forEach === "function") { polyPoints.forEach(function(entry) { minX = Math.min(minX, entry.x); minY = Math.min(minY, entry.y); }); } else { minX = Math.min(minX, polyPoints.x); minY = Math.min(minY, polyPoints.y); } var left3 = x1 - node2.width / 2 - minX; var top2 = y1 - node2.height / 2 - minY; for (var i2 = 0; i2 < polyPoints.length; i2++) { var p1 = polyPoints[i2]; var p22 = polyPoints[i2 < polyPoints.length - 1 ? i2 + 1 : 0]; var intersect3 = intersect_line_default2( node2, point8, { x: left3 + p1.x, y: top2 + p1.y }, { x: left3 + p22.x, y: top2 + p22.y } ); if (intersect3) { intersections.push(intersect3); } } if (!intersections.length) { return node2; } if (intersections.length > 1) { intersections.sort(function(p3, q3) { var pdx = p3.x - point8.x; var pdy = p3.y - point8.y; var distp = Math.sqrt(pdx * pdx + pdy * pdy); var qdx = q3.x - point8.x; var qdy = q3.y - point8.y; var distq = Math.sqrt(qdx * qdx + qdy * qdy); return distp < distq ? -1 : distp === distq ? 0 : 1; }); } return intersections[0]; } var intersect_polygon_default2; var init_intersect_polygon2 = __esm({ "src/dagre-wrapper/intersect/intersect-polygon.js"() { "use strict"; init_intersect_line2(); intersect_polygon_default2 = intersectPolygon2; __name(intersectPolygon2, "intersectPolygon"); } }); // src/dagre-wrapper/intersect/intersect-rect.js var intersectRect3, intersect_rect_default2; var init_intersect_rect2 = __esm({ "src/dagre-wrapper/intersect/intersect-rect.js"() { "use strict"; intersectRect3 = /* @__PURE__ */ __name((node2, point8) => { var x5 = node2.x; var y6 = node2.y; var dx = point8.x - x5; var dy = point8.y - y6; var w4 = node2.width / 2; var h3 = node2.height / 2; var sx, sy; if (Math.abs(dy) * w4 > Math.abs(dx) * h3) { if (dy < 0) { h3 = -h3; } sx = dy === 0 ? 0 : h3 * dx / dy; sy = h3; } else { if (dx < 0) { w4 = -w4; } sx = w4; sy = dx === 0 ? 0 : w4 * dy / dx; } return { x: x5 + sx, y: y6 + sy }; }, "intersectRect"); intersect_rect_default2 = intersectRect3; } }); // src/dagre-wrapper/intersect/index.js var intersect_default2; var init_intersect2 = __esm({ "src/dagre-wrapper/intersect/index.js"() { "use strict"; init_intersect_node2(); init_intersect_circle2(); init_intersect_ellipse2(); init_intersect_polygon2(); init_intersect_rect2(); intersect_default2 = { node: intersect_node_default2, circle: intersect_circle_default2, ellipse: intersect_ellipse_default2, polygon: intersect_polygon_default2, rect: intersect_rect_default2 }; } }); // src/dagre-wrapper/shapes/util.js function insertPolygonShape2(parent4, w4, h3, points) { return parent4.insert("polygon", ":first-child").attr( "points", points.map(function(d3) { return d3.x + "," + d3.y; }).join(" ") ).attr("class", "label-container").attr("transform", "translate(" + -w4 / 2 + "," + h3 / 2 + ")"); } var labelHelper2, updateNodeBounds2; var init_util4 = __esm({ "src/dagre-wrapper/shapes/util.js"() { "use strict"; init_createLabel2(); init_createText(); init_diagramAPI(); init_src32(); init_common(); init_utils2(); labelHelper2 = /* @__PURE__ */ __name(async (parent4, node2, _classes, isNode2) => { const config5 = getConfig2(); let classes3; const useHtmlLabels = node2.useHtmlLabels || evaluate(config5.flowchart.htmlLabels); if (!_classes) { classes3 = "node default"; } else { classes3 = _classes; } const shapeSvg = parent4.insert("g").attr("class", classes3).attr("id", node2.domId || node2.id); const label = shapeSvg.insert("g").attr("class", "label").attr("style", node2.labelStyle); let labelText; if (node2.labelText === void 0) { labelText = ""; } else { labelText = typeof node2.labelText === "string" ? node2.labelText : node2.labelText[0]; } const textNode = label.node(); let text4; if (node2.labelType === "markdown") { text4 = createText( label, sanitizeText(decodeEntities(labelText), config5), { useHtmlLabels, width: node2.width || config5.flowchart.wrappingWidth, classes: "markdown-node-label" }, config5 ); } else { text4 = textNode.appendChild( await createLabel_default2( sanitizeText(decodeEntities(labelText), config5), node2.labelStyle, false, isNode2 ) ); } let bbox = text4.getBBox(); const halfPadding = node2.padding / 2; if (evaluate(config5.flowchart.htmlLabels)) { const div = text4.children[0]; const dv = select_default2(text4); const images = div.getElementsByTagName("img"); if (images) { const noImgText = labelText.replace(/]*>/g, "").trim() === ""; await Promise.all( [...images].map( (img) => new Promise((res) => { function setupImage() { img.style.display = "flex"; img.style.flexDirection = "column"; if (noImgText) { const bodyFontSize = config5.fontSize ? config5.fontSize : window.getComputedStyle(document.body).fontSize; const enlargingFactor = 5; const width3 = parseInt(bodyFontSize, 10) * enlargingFactor + "px"; img.style.minWidth = width3; img.style.maxWidth = width3; } else { img.style.width = "100%"; } res(img); } __name(setupImage, "setupImage"); setTimeout(() => { if (img.complete) { setupImage(); } }); img.addEventListener("error", setupImage); img.addEventListener("load", setupImage); }) ) ); } bbox = div.getBoundingClientRect(); dv.attr("width", bbox.width); dv.attr("height", bbox.height); } if (useHtmlLabels) { label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); } else { label.attr("transform", "translate(0, " + -bbox.height / 2 + ")"); } if (node2.centerLabel) { label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); } label.insert("rect", ":first-child"); return { shapeSvg, bbox, halfPadding, label }; }, "labelHelper"); updateNodeBounds2 = /* @__PURE__ */ __name((node2, element3) => { const bbox = element3.node().getBBox(); node2.width = bbox.width; node2.height = bbox.height; }, "updateNodeBounds"); __name(insertPolygonShape2, "insertPolygonShape"); } }); // src/dagre-wrapper/shapes/note.js var note2, note_default; var init_note2 = __esm({ "src/dagre-wrapper/shapes/note.js"() { "use strict"; init_util4(); init_logger(); init_diagramAPI(); init_intersect2(); note2 = /* @__PURE__ */ __name(async (parent4, node2) => { const useHtmlLabels = node2.useHtmlLabels || getConfig2().flowchart.htmlLabels; if (!useHtmlLabels) { node2.centerLabel = true; } const { shapeSvg, bbox, halfPadding } = await labelHelper2( parent4, node2, "node " + node2.classes, true ); log.info("Classes = ", node2.classes); const rect3 = shapeSvg.insert("rect", ":first-child"); rect3.attr("rx", node2.rx).attr("ry", node2.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node2.padding).attr("height", bbox.height + node2.padding); updateNodeBounds2(node2, rect3); node2.intersect = function(point8) { return intersect_default2.rect(node2, point8); }; return shapeSvg; }, "note"); note_default = note2; } }); // src/dagre-wrapper/nodes.js function applyNodePropertyBorders(rect3, borders, totalWidth, totalHeight) { const strokeDashArray = []; const addBorder = /* @__PURE__ */ __name((length2) => { strokeDashArray.push(length2, 0); }, "addBorder"); const skipBorder = /* @__PURE__ */ __name((length2) => { strokeDashArray.push(0, length2); }, "skipBorder"); if (borders.includes("t")) { log.debug("add top border"); addBorder(totalWidth); } else { skipBorder(totalWidth); } if (borders.includes("r")) { log.debug("add right border"); addBorder(totalHeight); } else { skipBorder(totalHeight); } if (borders.includes("b")) { log.debug("add bottom border"); addBorder(totalWidth); } else { skipBorder(totalWidth); } if (borders.includes("l")) { log.debug("add left border"); addBorder(totalHeight); } else { skipBorder(totalHeight); } rect3.attr("stroke-dasharray", strokeDashArray.join(" ")); } var formatClass, getClassesFromNode, question2, choice2, hexagon2, block_arrow, rect_left_inv_arrow2, lean_right2, lean_left2, trapezoid2, inv_trapezoid2, rect_right_inv_arrow, cylinder2, rect2, composite, labelRect2, rectWithTitle2, stadium2, circle5, doublecircle2, subroutine2, start2, forkJoin2, end, class_box, shapes3, nodeElems2, insertNode2, positionNode2; var init_nodes3 = __esm({ "src/dagre-wrapper/nodes.js"() { "use strict"; init_src32(); init_diagramAPI(); init_common(); init_logger(); init_blockArrowHelper(); init_createLabel2(); init_intersect2(); init_note2(); init_util4(); formatClass = /* @__PURE__ */ __name((str2) => { if (str2) { return " " + str2; } return ""; }, "formatClass"); getClassesFromNode = /* @__PURE__ */ __name((node2, otherClasses) => { return `${otherClasses ? otherClasses : "node default"}${formatClass(node2.classes)} ${formatClass( node2.class )}`; }, "getClassesFromNode"); question2 = /* @__PURE__ */ __name(async (parent4, node2) => { const { shapeSvg, bbox } = await labelHelper2( parent4, node2, getClassesFromNode(node2, void 0), true ); const w4 = bbox.width + node2.padding; const h3 = bbox.height + node2.padding; const s2 = w4 + h3; const points = [ { x: s2 / 2, y: 0 }, { x: s2, y: -s2 / 2 }, { x: s2 / 2, y: -s2 }, { x: 0, y: -s2 / 2 } ]; log.info("Question main (Circle)"); const questionElem = insertPolygonShape2(shapeSvg, s2, s2, points); questionElem.attr("style", node2.style); updateNodeBounds2(node2, questionElem); node2.intersect = function(point8) { log.warn("Intersect called"); return intersect_default2.polygon(node2, points, point8); }; return shapeSvg; }, "question"); choice2 = /* @__PURE__ */ __name((parent4, node2) => { const shapeSvg = parent4.insert("g").attr("class", "node default").attr("id", node2.domId || node2.id); const s2 = 28; const points = [ { x: 0, y: s2 / 2 }, { x: s2 / 2, y: 0 }, { x: 0, y: -s2 / 2 }, { x: -s2 / 2, y: 0 } ]; const choice3 = shapeSvg.insert("polygon", ":first-child").attr( "points", points.map(function(d3) { return d3.x + "," + d3.y; }).join(" ") ); choice3.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); node2.width = 28; node2.height = 28; node2.intersect = function(point8) { return intersect_default2.circle(node2, 14, point8); }; return shapeSvg; }, "choice"); hexagon2 = /* @__PURE__ */ __name(async (parent4, node2) => { const { shapeSvg, bbox } = await labelHelper2( parent4, node2, getClassesFromNode(node2, void 0), true ); const f2 = 4; const h3 = bbox.height + node2.padding; const m3 = h3 / f2; const w4 = bbox.width + 2 * m3 + node2.padding; const points = [ { x: m3, y: 0 }, { x: w4 - m3, y: 0 }, { x: w4, y: -h3 / 2 }, { x: w4 - m3, y: -h3 }, { x: m3, y: -h3 }, { x: 0, y: -h3 / 2 } ]; const hex2 = insertPolygonShape2(shapeSvg, w4, h3, points); hex2.attr("style", node2.style); updateNodeBounds2(node2, hex2); node2.intersect = function(point8) { return intersect_default2.polygon(node2, points, point8); }; return shapeSvg; }, "hexagon"); block_arrow = /* @__PURE__ */ __name(async (parent4, node2) => { const { shapeSvg, bbox } = await labelHelper2(parent4, node2, void 0, true); const f2 = 2; const h3 = bbox.height + 2 * node2.padding; const m3 = h3 / f2; const w4 = bbox.width + 2 * m3 + node2.padding; const points = getArrowPoints(node2.directions, bbox, node2); const blockArrow = insertPolygonShape2(shapeSvg, w4, h3, points); blockArrow.attr("style", node2.style); updateNodeBounds2(node2, blockArrow); node2.intersect = function(point8) { return intersect_default2.polygon(node2, points, point8); }; return shapeSvg; }, "block_arrow"); rect_left_inv_arrow2 = /* @__PURE__ */ __name(async (parent4, node2) => { const { shapeSvg, bbox } = await labelHelper2( parent4, node2, getClassesFromNode(node2, void 0), true ); const w4 = bbox.width + node2.padding; const h3 = bbox.height + node2.padding; const points = [ { x: -h3 / 2, y: 0 }, { x: w4, y: 0 }, { x: w4, y: -h3 }, { x: -h3 / 2, y: -h3 }, { x: 0, y: -h3 / 2 } ]; const el = insertPolygonShape2(shapeSvg, w4, h3, points); el.attr("style", node2.style); node2.width = w4 + h3; node2.height = h3; node2.intersect = function(point8) { return intersect_default2.polygon(node2, points, point8); }; return shapeSvg; }, "rect_left_inv_arrow"); lean_right2 = /* @__PURE__ */ __name(async (parent4, node2) => { const { shapeSvg, bbox } = await labelHelper2(parent4, node2, getClassesFromNode(node2), true); const w4 = bbox.width + node2.padding; const h3 = bbox.height + node2.padding; const points = [ { x: -2 * h3 / 6, y: 0 }, { x: w4 - h3 / 6, y: 0 }, { x: w4 + 2 * h3 / 6, y: -h3 }, { x: h3 / 6, y: -h3 } ]; const el = insertPolygonShape2(shapeSvg, w4, h3, points); el.attr("style", node2.style); updateNodeBounds2(node2, el); node2.intersect = function(point8) { return intersect_default2.polygon(node2, points, point8); }; return shapeSvg; }, "lean_right"); lean_left2 = /* @__PURE__ */ __name(async (parent4, node2) => { const { shapeSvg, bbox } = await labelHelper2( parent4, node2, getClassesFromNode(node2, void 0), true ); const w4 = bbox.width + node2.padding; const h3 = bbox.height + node2.padding; const points = [ { x: 2 * h3 / 6, y: 0 }, { x: w4 + h3 / 6, y: 0 }, { x: w4 - 2 * h3 / 6, y: -h3 }, { x: -h3 / 6, y: -h3 } ]; const el = insertPolygonShape2(shapeSvg, w4, h3, points); el.attr("style", node2.style); updateNodeBounds2(node2, el); node2.intersect = function(point8) { return intersect_default2.polygon(node2, points, point8); }; return shapeSvg; }, "lean_left"); trapezoid2 = /* @__PURE__ */ __name(async (parent4, node2) => { const { shapeSvg, bbox } = await labelHelper2( parent4, node2, getClassesFromNode(node2, void 0), true ); const w4 = bbox.width + node2.padding; const h3 = bbox.height + node2.padding; const points = [ { x: -2 * h3 / 6, y: 0 }, { x: w4 + 2 * h3 / 6, y: 0 }, { x: w4 - h3 / 6, y: -h3 }, { x: h3 / 6, y: -h3 } ]; const el = insertPolygonShape2(shapeSvg, w4, h3, points); el.attr("style", node2.style); updateNodeBounds2(node2, el); node2.intersect = function(point8) { return intersect_default2.polygon(node2, points, point8); }; return shapeSvg; }, "trapezoid"); inv_trapezoid2 = /* @__PURE__ */ __name(async (parent4, node2) => { const { shapeSvg, bbox } = await labelHelper2( parent4, node2, getClassesFromNode(node2, void 0), true ); const w4 = bbox.width + node2.padding; const h3 = bbox.height + node2.padding; const points = [ { x: h3 / 6, y: 0 }, { x: w4 - h3 / 6, y: 0 }, { x: w4 + 2 * h3 / 6, y: -h3 }, { x: -2 * h3 / 6, y: -h3 } ]; const el = insertPolygonShape2(shapeSvg, w4, h3, points); el.attr("style", node2.style); updateNodeBounds2(node2, el); node2.intersect = function(point8) { return intersect_default2.polygon(node2, points, point8); }; return shapeSvg; }, "inv_trapezoid"); rect_right_inv_arrow = /* @__PURE__ */ __name(async (parent4, node2) => { const { shapeSvg, bbox } = await labelHelper2( parent4, node2, getClassesFromNode(node2, void 0), true ); const w4 = bbox.width + node2.padding; const h3 = bbox.height + node2.padding; const points = [ { x: 0, y: 0 }, { x: w4 + h3 / 2, y: 0 }, { x: w4, y: -h3 / 2 }, { x: w4 + h3 / 2, y: -h3 }, { x: 0, y: -h3 } ]; const el = insertPolygonShape2(shapeSvg, w4, h3, points); el.attr("style", node2.style); updateNodeBounds2(node2, el); node2.intersect = function(point8) { return intersect_default2.polygon(node2, points, point8); }; return shapeSvg; }, "rect_right_inv_arrow"); cylinder2 = /* @__PURE__ */ __name(async (parent4, node2) => { const { shapeSvg, bbox } = await labelHelper2( parent4, node2, getClassesFromNode(node2, void 0), true ); const w4 = bbox.width + node2.padding; const rx = w4 / 2; const ry = rx / (2.5 + w4 / 50); const h3 = bbox.height + ry + node2.padding; const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w4 + " 0 a " + rx + "," + ry + " 0,0,0 " + -w4 + " 0 l 0," + h3 + " a " + rx + "," + ry + " 0,0,0 " + w4 + " 0 l 0," + -h3; const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node2.style).attr("d", shape).attr("transform", "translate(" + -w4 / 2 + "," + -(h3 / 2 + ry) + ")"); updateNodeBounds2(node2, el); node2.intersect = function(point8) { const pos = intersect_default2.rect(node2, point8); const x5 = pos.x - node2.x; if (rx != 0 && (Math.abs(x5) < node2.width / 2 || Math.abs(x5) == node2.width / 2 && Math.abs(pos.y - node2.y) > node2.height / 2 - ry)) { let y6 = ry * ry * (1 - x5 * x5 / (rx * rx)); if (y6 != 0) { y6 = Math.sqrt(y6); } y6 = ry - y6; if (point8.y - node2.y > 0) { y6 = -y6; } pos.y += y6; } return pos; }; return shapeSvg; }, "cylinder"); rect2 = /* @__PURE__ */ __name(async (parent4, node2) => { const { shapeSvg, bbox, halfPadding } = await labelHelper2( parent4, node2, "node " + node2.classes + " " + node2.class, true ); const rect3 = shapeSvg.insert("rect", ":first-child"); const totalWidth = node2.positioned ? node2.width : bbox.width + node2.padding; const totalHeight = node2.positioned ? node2.height : bbox.height + node2.padding; const x5 = node2.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; const y6 = node2.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; rect3.attr("class", "basic label-container").attr("style", node2.style).attr("rx", node2.rx).attr("ry", node2.ry).attr("x", x5).attr("y", y6).attr("width", totalWidth).attr("height", totalHeight); if (node2.props) { const propKeys = new Set(Object.keys(node2.props)); if (node2.props.borders) { applyNodePropertyBorders(rect3, node2.props.borders, totalWidth, totalHeight); propKeys.delete("borders"); } propKeys.forEach((propKey) => { log.warn(`Unknown node property ${propKey}`); }); } updateNodeBounds2(node2, rect3); node2.intersect = function(point8) { return intersect_default2.rect(node2, point8); }; return shapeSvg; }, "rect"); composite = /* @__PURE__ */ __name(async (parent4, node2) => { const { shapeSvg, bbox, halfPadding } = await labelHelper2( parent4, node2, "node " + node2.classes, true ); const rect3 = shapeSvg.insert("rect", ":first-child"); const totalWidth = node2.positioned ? node2.width : bbox.width + node2.padding; const totalHeight = node2.positioned ? node2.height : bbox.height + node2.padding; const x5 = node2.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; const y6 = node2.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; rect3.attr("class", "basic cluster composite label-container").attr("style", node2.style).attr("rx", node2.rx).attr("ry", node2.ry).attr("x", x5).attr("y", y6).attr("width", totalWidth).attr("height", totalHeight); if (node2.props) { const propKeys = new Set(Object.keys(node2.props)); if (node2.props.borders) { applyNodePropertyBorders(rect3, node2.props.borders, totalWidth, totalHeight); propKeys.delete("borders"); } propKeys.forEach((propKey) => { log.warn(`Unknown node property ${propKey}`); }); } updateNodeBounds2(node2, rect3); node2.intersect = function(point8) { return intersect_default2.rect(node2, point8); }; return shapeSvg; }, "composite"); labelRect2 = /* @__PURE__ */ __name(async (parent4, node2) => { const { shapeSvg } = await labelHelper2(parent4, node2, "label", true); log.trace("Classes = ", node2.class); const rect3 = shapeSvg.insert("rect", ":first-child"); const totalWidth = 0; const totalHeight = 0; rect3.attr("width", totalWidth).attr("height", totalHeight); shapeSvg.attr("class", "label edgeLabel"); if (node2.props) { const propKeys = new Set(Object.keys(node2.props)); if (node2.props.borders) { applyNodePropertyBorders(rect3, node2.props.borders, totalWidth, totalHeight); propKeys.delete("borders"); } propKeys.forEach((propKey) => { log.warn(`Unknown node property ${propKey}`); }); } updateNodeBounds2(node2, rect3); node2.intersect = function(point8) { return intersect_default2.rect(node2, point8); }; return shapeSvg; }, "labelRect"); __name(applyNodePropertyBorders, "applyNodePropertyBorders"); rectWithTitle2 = /* @__PURE__ */ __name(async (parent4, node2) => { let classes3; if (!node2.classes) { classes3 = "node default"; } else { classes3 = "node " + node2.classes; } const shapeSvg = parent4.insert("g").attr("class", classes3).attr("id", node2.domId || node2.id); const rect3 = shapeSvg.insert("rect", ":first-child"); const innerLine = shapeSvg.insert("line"); const label = shapeSvg.insert("g").attr("class", "label"); const text22 = node2.labelText.flat ? node2.labelText.flat() : node2.labelText; let title2 = ""; if (typeof text22 === "object") { title2 = text22[0]; } else { title2 = text22; } log.info("Label text abc79", title2, text22, typeof text22 === "object"); const text4 = label.node().appendChild(await createLabel_default2(title2, node2.labelStyle, true, true)); let bbox = { width: 0, height: 0 }; if (evaluate(getConfig2().flowchart.htmlLabels)) { const div = text4.children[0]; const dv = select_default2(text4); bbox = div.getBoundingClientRect(); dv.attr("width", bbox.width); dv.attr("height", bbox.height); } log.info("Text 2", text22); const textRows = text22.slice(1, text22.length); let titleBox = text4.getBBox(); const descr = label.node().appendChild( await createLabel_default2( textRows.join ? textRows.join("
") : textRows, node2.labelStyle, true, true ) ); if (evaluate(getConfig2().flowchart.htmlLabels)) { const div = descr.children[0]; const dv = select_default2(descr); bbox = div.getBoundingClientRect(); dv.attr("width", bbox.width); dv.attr("height", bbox.height); } const halfPadding = node2.padding / 2; select_default2(descr).attr( "transform", "translate( " + // (titleBox.width - bbox.width) / 2 + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" ); select_default2(text4).attr( "transform", "translate( " + // (titleBox.width - bbox.width) / 2 + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", 0)" ); bbox = label.node().getBBox(); label.attr( "transform", "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" ); rect3.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node2.padding).attr("height", bbox.height + node2.padding); innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); updateNodeBounds2(node2, rect3); node2.intersect = function(point8) { return intersect_default2.rect(node2, point8); }; return shapeSvg; }, "rectWithTitle"); stadium2 = /* @__PURE__ */ __name(async (parent4, node2) => { const { shapeSvg, bbox } = await labelHelper2( parent4, node2, getClassesFromNode(node2, void 0), true ); const h3 = bbox.height + node2.padding; const w4 = bbox.width + h3 / 4 + node2.padding; const rect3 = shapeSvg.insert("rect", ":first-child").attr("style", node2.style).attr("rx", h3 / 2).attr("ry", h3 / 2).attr("x", -w4 / 2).attr("y", -h3 / 2).attr("width", w4).attr("height", h3); updateNodeBounds2(node2, rect3); node2.intersect = function(point8) { return intersect_default2.rect(node2, point8); }; return shapeSvg; }, "stadium"); circle5 = /* @__PURE__ */ __name(async (parent4, node2) => { const { shapeSvg, bbox, halfPadding } = await labelHelper2( parent4, node2, getClassesFromNode(node2, void 0), true ); const circle6 = shapeSvg.insert("circle", ":first-child"); circle6.attr("style", node2.style).attr("rx", node2.rx).attr("ry", node2.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node2.padding).attr("height", bbox.height + node2.padding); log.info("Circle main"); updateNodeBounds2(node2, circle6); node2.intersect = function(point8) { log.info("Circle intersect", node2, bbox.width / 2 + halfPadding, point8); return intersect_default2.circle(node2, bbox.width / 2 + halfPadding, point8); }; return shapeSvg; }, "circle"); doublecircle2 = /* @__PURE__ */ __name(async (parent4, node2) => { const { shapeSvg, bbox, halfPadding } = await labelHelper2( parent4, node2, getClassesFromNode(node2, void 0), true ); const gap = 5; const circleGroup = shapeSvg.insert("g", ":first-child"); const outerCircle = circleGroup.insert("circle"); const innerCircle = circleGroup.insert("circle"); circleGroup.attr("class", node2.class); outerCircle.attr("style", node2.style).attr("rx", node2.rx).attr("ry", node2.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node2.padding + gap * 2).attr("height", bbox.height + node2.padding + gap * 2); innerCircle.attr("style", node2.style).attr("rx", node2.rx).attr("ry", node2.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node2.padding).attr("height", bbox.height + node2.padding); log.info("DoubleCircle main"); updateNodeBounds2(node2, outerCircle); node2.intersect = function(point8) { log.info("DoubleCircle intersect", node2, bbox.width / 2 + halfPadding + gap, point8); return intersect_default2.circle(node2, bbox.width / 2 + halfPadding + gap, point8); }; return shapeSvg; }, "doublecircle"); subroutine2 = /* @__PURE__ */ __name(async (parent4, node2) => { const { shapeSvg, bbox } = await labelHelper2( parent4, node2, getClassesFromNode(node2, void 0), true ); const w4 = bbox.width + node2.padding; const h3 = bbox.height + node2.padding; const points = [ { x: 0, y: 0 }, { x: w4, y: 0 }, { x: w4, y: -h3 }, { x: 0, y: -h3 }, { x: 0, y: 0 }, { x: -8, y: 0 }, { x: w4 + 8, y: 0 }, { x: w4 + 8, y: -h3 }, { x: -8, y: -h3 }, { x: -8, y: 0 } ]; const el = insertPolygonShape2(shapeSvg, w4, h3, points); el.attr("style", node2.style); updateNodeBounds2(node2, el); node2.intersect = function(point8) { return intersect_default2.polygon(node2, points, point8); }; return shapeSvg; }, "subroutine"); start2 = /* @__PURE__ */ __name((parent4, node2) => { const shapeSvg = parent4.insert("g").attr("class", "node default").attr("id", node2.domId || node2.id); const circle6 = shapeSvg.insert("circle", ":first-child"); circle6.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); updateNodeBounds2(node2, circle6); node2.intersect = function(point8) { return intersect_default2.circle(node2, 7, point8); }; return shapeSvg; }, "start"); forkJoin2 = /* @__PURE__ */ __name((parent4, node2, dir2) => { const shapeSvg = parent4.insert("g").attr("class", "node default").attr("id", node2.domId || node2.id); let width3 = 70; let height2 = 10; if (dir2 === "LR") { width3 = 10; height2 = 70; } const shape = shapeSvg.append("rect").attr("x", -1 * width3 / 2).attr("y", -1 * height2 / 2).attr("width", width3).attr("height", height2).attr("class", "fork-join"); updateNodeBounds2(node2, shape); node2.height = node2.height + node2.padding / 2; node2.width = node2.width + node2.padding / 2; node2.intersect = function(point8) { return intersect_default2.rect(node2, point8); }; return shapeSvg; }, "forkJoin"); end = /* @__PURE__ */ __name((parent4, node2) => { const shapeSvg = parent4.insert("g").attr("class", "node default").attr("id", node2.domId || node2.id); const innerCircle = shapeSvg.insert("circle", ":first-child"); const circle6 = shapeSvg.insert("circle", ":first-child"); circle6.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); updateNodeBounds2(node2, circle6); node2.intersect = function(point8) { return intersect_default2.circle(node2, 7, point8); }; return shapeSvg; }, "end"); class_box = /* @__PURE__ */ __name(async (parent4, node2) => { const halfPadding = node2.padding / 2; const rowPadding = 4; const lineHeight = 8; let classes3; if (!node2.classes) { classes3 = "node default"; } else { classes3 = "node " + node2.classes; } const shapeSvg = parent4.insert("g").attr("class", classes3).attr("id", node2.domId || node2.id); const rect3 = shapeSvg.insert("rect", ":first-child"); const topLine = shapeSvg.insert("line"); const bottomLine = shapeSvg.insert("line"); let maxWidth2 = 0; let maxHeight = rowPadding; const labelContainer = shapeSvg.insert("g").attr("class", "label"); let verticalPos = 0; const hasInterface = node2.classData.annotations?.[0]; const interfaceLabelText = node2.classData.annotations[0] ? "\xAB" + node2.classData.annotations[0] + "\xBB" : ""; const interfaceLabel = labelContainer.node().appendChild(await createLabel_default2(interfaceLabelText, node2.labelStyle, true, true)); let interfaceBBox = interfaceLabel.getBBox(); if (evaluate(getConfig2().flowchart.htmlLabels)) { const div = interfaceLabel.children[0]; const dv = select_default2(interfaceLabel); interfaceBBox = div.getBoundingClientRect(); dv.attr("width", interfaceBBox.width); dv.attr("height", interfaceBBox.height); } if (node2.classData.annotations[0]) { maxHeight += interfaceBBox.height + rowPadding; maxWidth2 += interfaceBBox.width; } let classTitleString = node2.classData.label; if (node2.classData.type !== void 0 && node2.classData.type !== "") { if (getConfig2().flowchart.htmlLabels) { classTitleString += "<" + node2.classData.type + ">"; } else { classTitleString += "<" + node2.classData.type + ">"; } } const classTitleLabel = labelContainer.node().appendChild(await createLabel_default2(classTitleString, node2.labelStyle, true, true)); select_default2(classTitleLabel).attr("class", "classTitle"); let classTitleBBox = classTitleLabel.getBBox(); if (evaluate(getConfig2().flowchart.htmlLabels)) { const div = classTitleLabel.children[0]; const dv = select_default2(classTitleLabel); classTitleBBox = div.getBoundingClientRect(); dv.attr("width", classTitleBBox.width); dv.attr("height", classTitleBBox.height); } maxHeight += classTitleBBox.height + rowPadding; if (classTitleBBox.width > maxWidth2) { maxWidth2 = classTitleBBox.width; } const classAttributes = []; node2.classData.members.forEach(async (member) => { const parsedInfo = member.getDisplayDetails(); let parsedText = parsedInfo.displayText; if (getConfig2().flowchart.htmlLabels) { parsedText = parsedText.replace(//g, ">"); } const lbl = labelContainer.node().appendChild( await createLabel_default2( parsedText, parsedInfo.cssStyle ? parsedInfo.cssStyle : node2.labelStyle, true, true ) ); let bbox = lbl.getBBox(); if (evaluate(getConfig2().flowchart.htmlLabels)) { const div = lbl.children[0]; const dv = select_default2(lbl); bbox = div.getBoundingClientRect(); dv.attr("width", bbox.width); dv.attr("height", bbox.height); } if (bbox.width > maxWidth2) { maxWidth2 = bbox.width; } maxHeight += bbox.height + rowPadding; classAttributes.push(lbl); }); maxHeight += lineHeight; const classMethods = []; node2.classData.methods.forEach(async (member) => { const parsedInfo = member.getDisplayDetails(); let displayText = parsedInfo.displayText; if (getConfig2().flowchart.htmlLabels) { displayText = displayText.replace(//g, ">"); } const lbl = labelContainer.node().appendChild( await createLabel_default2( displayText, parsedInfo.cssStyle ? parsedInfo.cssStyle : node2.labelStyle, true, true ) ); let bbox = lbl.getBBox(); if (evaluate(getConfig2().flowchart.htmlLabels)) { const div = lbl.children[0]; const dv = select_default2(lbl); bbox = div.getBoundingClientRect(); dv.attr("width", bbox.width); dv.attr("height", bbox.height); } if (bbox.width > maxWidth2) { maxWidth2 = bbox.width; } maxHeight += bbox.height + rowPadding; classMethods.push(lbl); }); maxHeight += lineHeight; if (hasInterface) { let diffX2 = (maxWidth2 - interfaceBBox.width) / 2; select_default2(interfaceLabel).attr( "transform", "translate( " + (-1 * maxWidth2 / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" ); verticalPos = interfaceBBox.height + rowPadding; } let diffX = (maxWidth2 - classTitleBBox.width) / 2; select_default2(classTitleLabel).attr( "transform", "translate( " + (-1 * maxWidth2 / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" ); verticalPos += classTitleBBox.height + rowPadding; topLine.attr("class", "divider").attr("x1", -maxWidth2 / 2 - halfPadding).attr("x2", maxWidth2 / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); verticalPos += lineHeight; classAttributes.forEach((lbl) => { select_default2(lbl).attr( "transform", "translate( " + -maxWidth2 / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" ); const memberBBox = lbl?.getBBox(); verticalPos += (memberBBox?.height ?? 0) + rowPadding; }); verticalPos += lineHeight; bottomLine.attr("class", "divider").attr("x1", -maxWidth2 / 2 - halfPadding).attr("x2", maxWidth2 / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); verticalPos += lineHeight; classMethods.forEach((lbl) => { select_default2(lbl).attr( "transform", "translate( " + -maxWidth2 / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" ); const memberBBox = lbl?.getBBox(); verticalPos += (memberBBox?.height ?? 0) + rowPadding; }); rect3.attr("style", node2.style).attr("class", "outer title-state").attr("x", -maxWidth2 / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth2 + node2.padding).attr("height", maxHeight + node2.padding); updateNodeBounds2(node2, rect3); node2.intersect = function(point8) { return intersect_default2.rect(node2, point8); }; return shapeSvg; }, "class_box"); shapes3 = { rhombus: question2, composite, question: question2, rect: rect2, labelRect: labelRect2, rectWithTitle: rectWithTitle2, choice: choice2, circle: circle5, doublecircle: doublecircle2, stadium: stadium2, hexagon: hexagon2, block_arrow, rect_left_inv_arrow: rect_left_inv_arrow2, lean_right: lean_right2, lean_left: lean_left2, trapezoid: trapezoid2, inv_trapezoid: inv_trapezoid2, rect_right_inv_arrow, cylinder: cylinder2, start: start2, end, note: note_default, subroutine: subroutine2, fork: forkJoin2, join: forkJoin2, class_box }; nodeElems2 = {}; insertNode2 = /* @__PURE__ */ __name(async (elem, node2, renderOptions) => { let newEl; let el; if (node2.link) { let target; if (getConfig2().securityLevel === "sandbox") { target = "_top"; } else if (node2.linkTarget) { target = node2.linkTarget || "_blank"; } newEl = elem.insert("svg:a").attr("xlink:href", node2.link).attr("target", target); el = await shapes3[node2.shape](newEl, node2, renderOptions); } else { el = await shapes3[node2.shape](elem, node2, renderOptions); newEl = el; } if (node2.tooltip) { el.attr("title", node2.tooltip); } if (node2.class) { el.attr("class", "node default " + node2.class); } nodeElems2[node2.id] = newEl; if (node2.haveCallback) { nodeElems2[node2.id].attr("class", nodeElems2[node2.id].attr("class") + " clickable"); } return newEl; }, "insertNode"); positionNode2 = /* @__PURE__ */ __name((node2) => { const el = nodeElems2[node2.id]; log.trace( "Transforming node", node2.diff, node2, "translate(" + (node2.x - node2.width / 2 - 5) + ", " + node2.width / 2 + ")" ); const padding2 = 8; const diff2 = node2.diff || 0; if (node2.clusterNode) { el.attr( "transform", "translate(" + (node2.x + diff2 - node2.width / 2) + ", " + (node2.y - node2.height / 2 - padding2) + ")" ); } else { el.attr("transform", "translate(" + node2.x + ", " + node2.y + ")"); } return diff2; }, "positionNode"); } }); // src/diagrams/block/renderHelpers.ts function getNodeFromBlock(block2, db7, positioned = false) { const vertex = block2; let classStr = "default"; if ((vertex?.classes?.length || 0) > 0) { classStr = (vertex?.classes ?? []).join(" "); } classStr = classStr + " flowchart-label"; let radius2 = 0; let shape = ""; let padding2; switch (vertex.type) { case "round": radius2 = 5; shape = "rect"; break; case "composite": radius2 = 0; shape = "composite"; padding2 = 0; break; case "square": shape = "rect"; break; case "diamond": shape = "question"; break; case "hexagon": shape = "hexagon"; break; case "block_arrow": shape = "block_arrow"; break; case "odd": shape = "rect_left_inv_arrow"; break; case "lean_right": shape = "lean_right"; break; case "lean_left": shape = "lean_left"; break; case "trapezoid": shape = "trapezoid"; break; case "inv_trapezoid": shape = "inv_trapezoid"; break; case "rect_left_inv_arrow": shape = "rect_left_inv_arrow"; break; case "circle": shape = "circle"; break; case "ellipse": shape = "ellipse"; break; case "stadium": shape = "stadium"; break; case "subroutine": shape = "subroutine"; break; case "cylinder": shape = "cylinder"; break; case "group": shape = "rect"; break; case "doublecircle": shape = "doublecircle"; break; default: shape = "rect"; } const styles4 = getStylesFromArray(vertex?.styles ?? []); const vertexText = vertex.label; const bounds4 = vertex.size ?? { width: 0, height: 0, x: 0, y: 0 }; const node2 = { labelStyle: styles4.labelStyle, shape, labelText: vertexText, rx: radius2, ry: radius2, class: classStr, style: styles4.style, id: vertex.id, directions: vertex.directions, width: bounds4.width, height: bounds4.height, x: bounds4.x, y: bounds4.y, positioned, intersect: void 0, type: vertex.type, padding: padding2 ?? getConfig()?.block?.padding ?? 0 }; return node2; } async function calculateBlockSize(elem, block2, db7) { const node2 = getNodeFromBlock(block2, db7, false); if (node2.type === "group") { return; } const config5 = getConfig(); const nodeEl = await insertNode2(elem, node2, { config: config5 }); const boundingBox3 = nodeEl.node().getBBox(); const obj = db7.getBlock(node2.id); obj.size = { width: boundingBox3.width, height: boundingBox3.height, x: 0, y: 0, node: nodeEl }; db7.setBlock(obj); nodeEl.remove(); } async function insertBlockPositioned(elem, block2, db7) { const node2 = getNodeFromBlock(block2, db7, true); const obj = db7.getBlock(node2.id); if (obj.type !== "space") { const config5 = getConfig(); await insertNode2(elem, node2, { config: config5 }); block2.intersect = node2?.intersect; positionNode2(node2); } } async function performOperations(elem, blocks2, db7, operation) { for (const block2 of blocks2) { await operation(elem, block2, db7); if (block2.children) { await performOperations(elem, block2.children, db7, operation); } } } async function calculateBlockSizes(elem, blocks2, db7) { await performOperations(elem, blocks2, db7, calculateBlockSize); } async function insertBlocks(elem, blocks2, db7) { await performOperations(elem, blocks2, db7, insertBlockPositioned); } async function insertEdges(elem, edges3, blocks2, db7, id30) { const g2 = new Graph({ multigraph: true, compound: true }); g2.setGraph({ rankdir: "TB", nodesep: 10, ranksep: 10, marginx: 8, marginy: 8 }); for (const block2 of blocks2) { if (block2.size) { g2.setNode(block2.id, { width: block2.size.width, height: block2.size.height, intersect: block2.intersect }); } } for (const edge of edges3) { if (edge.start && edge.end) { const startBlock = db7.getBlock(edge.start); const endBlock = db7.getBlock(edge.end); if (startBlock?.size && endBlock?.size) { const start3 = startBlock.size; const end2 = endBlock.size; const points = [ { x: start3.x, y: start3.y }, { x: start3.x + (end2.x - start3.x) / 2, y: start3.y + (end2.y - start3.y) / 2 }, { x: end2.x, y: end2.y } ]; insertEdge2( elem, { v: edge.start, w: edge.end, name: edge.id }, { ...edge, arrowTypeEnd: edge.arrowTypeEnd, arrowTypeStart: edge.arrowTypeStart, points, classes: "edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1" }, void 0, "block", g2, id30 ); if (edge.label) { await insertEdgeLabel2(elem, { ...edge, label: edge.label, labelStyle: "stroke: #333; stroke-width: 1.5px;fill:none;", arrowTypeEnd: edge.arrowTypeEnd, arrowTypeStart: edge.arrowTypeStart, points, classes: "edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1" }); positionEdgeLabel2( { ...edge, x: points[1].x, y: points[1].y }, { originalPath: points } ); } } } } } var init_renderHelpers = __esm({ "src/diagrams/block/renderHelpers.ts"() { "use strict"; init_graphlib(); init_config(); init_edges2(); init_nodes3(); init_utils2(); __name(getNodeFromBlock, "getNodeFromBlock"); __name(calculateBlockSize, "calculateBlockSize"); __name(insertBlockPositioned, "insertBlockPositioned"); __name(performOperations, "performOperations"); __name(calculateBlockSizes, "calculateBlockSizes"); __name(insertBlocks, "insertBlocks"); __name(insertEdges, "insertEdges"); } }); // src/diagrams/block/blockRenderer.ts var getClasses5, draw23, blockRenderer_default; var init_blockRenderer = __esm({ "src/diagrams/block/blockRenderer.ts"() { "use strict"; init_src32(); init_config(); init_markers2(); init_logger(); init_setupGraphViewbox(); init_layout3(); init_renderHelpers(); getClasses5 = /* @__PURE__ */ __name(function(text4, diagObj) { return diagObj.db.getClasses(); }, "getClasses"); draw23 = /* @__PURE__ */ __name(async function(text4, id30, _version, diagObj) { const { securityLevel, block: conf5 } = getConfig(); const db7 = diagObj.db; let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = select_default2("#i" + id30); } const root3 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body"); const svg2 = securityLevel === "sandbox" ? root3.select(`[id="${id30}"]`) : select_default2(`[id="${id30}"]`); const markers3 = ["point", "circle", "cross"]; markers_default2(svg2, markers3, diagObj.type, id30); const bl = db7.getBlocks(); const blArr = db7.getBlocksFlat(); const edges3 = db7.getEdges(); const nodes5 = svg2.insert("g").attr("class", "block"); await calculateBlockSizes(nodes5, bl, db7); const bounds4 = layout5(db7); await insertBlocks(nodes5, bl, db7); await insertEdges(nodes5, edges3, blArr, db7, id30); if (bounds4) { const bounds22 = bounds4; const magicFactor = Math.max(1, Math.round(0.125 * (bounds22.width / bounds22.height))); const height2 = bounds22.height + magicFactor + 10; const width3 = bounds22.width + 10; const { useMaxWidth } = conf5; configureSvgSize(svg2, height2, width3, !!useMaxWidth); log.debug("Here Bounds", bounds4, bounds22); svg2.attr( "viewBox", `${bounds22.x - 5} ${bounds22.y - 5} ${bounds22.width + 10} ${bounds22.height + 10}` ); } }, "draw"); blockRenderer_default = { draw: draw23, getClasses: getClasses5 }; } }); // src/diagrams/block/blockDiagram.ts var blockDiagram_exports = {}; __export(blockDiagram_exports, { diagram: () => diagram24 }); var diagram24; var init_blockDiagram = __esm({ "src/diagrams/block/blockDiagram.ts"() { "use strict"; init_block(); init_blockDB(); init_styles18(); init_blockRenderer(); diagram24 = { parser: block_default, db: blockDB_default, renderer: blockRenderer_default, styles: styles_default16 }; } }); // src/diagrams/architecture/architectureTypes.ts var ArchitectureDirectionName, ArchitectureDirectionArrow, ArchitectureDirectionArrowShift, getOppositeArchitectureDirection, isArchitectureDirection, isArchitectureDirectionX, isArchitectureDirectionY, isArchitectureDirectionXY, isArchitecturePairXY, isValidArchitectureDirectionPair, getArchitectureDirectionPair, shiftPositionByArchitectureDirectionPair, getArchitectureDirectionXYFactors, getArchitectureDirectionAlignment, isArchitectureService, isArchitectureJunction, edgeData, nodeData; var init_architectureTypes = __esm({ "src/diagrams/architecture/architectureTypes.ts"() { "use strict"; ArchitectureDirectionName = { L: "left", R: "right", T: "top", B: "bottom" }; ArchitectureDirectionArrow = { L: /* @__PURE__ */ __name((scale2) => `${scale2},${scale2 / 2} 0,${scale2} 0,0`, "L"), R: /* @__PURE__ */ __name((scale2) => `0,${scale2 / 2} ${scale2},0 ${scale2},${scale2}`, "R"), T: /* @__PURE__ */ __name((scale2) => `0,0 ${scale2},0 ${scale2 / 2},${scale2}`, "T"), B: /* @__PURE__ */ __name((scale2) => `${scale2 / 2},0 ${scale2},${scale2} 0,${scale2}`, "B") }; ArchitectureDirectionArrowShift = { L: /* @__PURE__ */ __name((orig, arrowSize) => orig - arrowSize + 2, "L"), R: /* @__PURE__ */ __name((orig, _arrowSize) => orig - 2, "R"), T: /* @__PURE__ */ __name((orig, arrowSize) => orig - arrowSize + 2, "T"), B: /* @__PURE__ */ __name((orig, _arrowSize) => orig - 2, "B") }; getOppositeArchitectureDirection = /* @__PURE__ */ __name(function(x5) { if (isArchitectureDirectionX(x5)) { return x5 === "L" ? "R" : "L"; } else { return x5 === "T" ? "B" : "T"; } }, "getOppositeArchitectureDirection"); isArchitectureDirection = /* @__PURE__ */ __name(function(x5) { const temp = x5; return temp === "L" || temp === "R" || temp === "T" || temp === "B"; }, "isArchitectureDirection"); isArchitectureDirectionX = /* @__PURE__ */ __name(function(x5) { const temp = x5; return temp === "L" || temp === "R"; }, "isArchitectureDirectionX"); isArchitectureDirectionY = /* @__PURE__ */ __name(function(x5) { const temp = x5; return temp === "T" || temp === "B"; }, "isArchitectureDirectionY"); isArchitectureDirectionXY = /* @__PURE__ */ __name(function(a2, b3) { const aX_bY = isArchitectureDirectionX(a2) && isArchitectureDirectionY(b3); const aY_bX = isArchitectureDirectionY(a2) && isArchitectureDirectionX(b3); return aX_bY || aY_bX; }, "isArchitectureDirectionXY"); isArchitecturePairXY = /* @__PURE__ */ __name(function(pair) { const lhs = pair[0]; const rhs = pair[1]; const aX_bY = isArchitectureDirectionX(lhs) && isArchitectureDirectionY(rhs); const aY_bX = isArchitectureDirectionY(lhs) && isArchitectureDirectionX(rhs); return aX_bY || aY_bX; }, "isArchitecturePairXY"); isValidArchitectureDirectionPair = /* @__PURE__ */ __name(function(x5) { return x5 !== "LL" && x5 !== "RR" && x5 !== "TT" && x5 !== "BB"; }, "isValidArchitectureDirectionPair"); getArchitectureDirectionPair = /* @__PURE__ */ __name(function(sourceDir, targetDir) { const pair = `${sourceDir}${targetDir}`; return isValidArchitectureDirectionPair(pair) ? pair : void 0; }, "getArchitectureDirectionPair"); shiftPositionByArchitectureDirectionPair = /* @__PURE__ */ __name(function([x5, y6], pair) { const lhs = pair[0]; const rhs = pair[1]; if (isArchitectureDirectionX(lhs)) { if (isArchitectureDirectionY(rhs)) { return [x5 + (lhs === "L" ? -1 : 1), y6 + (rhs === "T" ? 1 : -1)]; } else { return [x5 + (lhs === "L" ? -1 : 1), y6]; } } else { if (isArchitectureDirectionX(rhs)) { return [x5 + (rhs === "L" ? 1 : -1), y6 + (lhs === "T" ? 1 : -1)]; } else { return [x5, y6 + (lhs === "T" ? 1 : -1)]; } } }, "shiftPositionByArchitectureDirectionPair"); getArchitectureDirectionXYFactors = /* @__PURE__ */ __name(function(pair) { if (pair === "LT" || pair === "TL") { return [1, 1]; } else if (pair === "BL" || pair === "LB") { return [1, -1]; } else if (pair === "BR" || pair === "RB") { return [-1, -1]; } else { return [-1, 1]; } }, "getArchitectureDirectionXYFactors"); getArchitectureDirectionAlignment = /* @__PURE__ */ __name(function(a2, b3) { if (isArchitectureDirectionXY(a2, b3)) { return "bend"; } else if (isArchitectureDirectionX(a2)) { return "horizontal"; } return "vertical"; }, "getArchitectureDirectionAlignment"); isArchitectureService = /* @__PURE__ */ __name(function(x5) { const temp = x5; return temp.type === "service"; }, "isArchitectureService"); isArchitectureJunction = /* @__PURE__ */ __name(function(x5) { const temp = x5; return temp.type === "junction"; }, "isArchitectureJunction"); edgeData = /* @__PURE__ */ __name((edge) => { return edge.data(); }, "edgeData"); nodeData = /* @__PURE__ */ __name((node2) => { return node2.data(); }, "nodeData"); } }); // src/diagrams/architecture/architectureDb.ts var DEFAULT_ARCHITECTURE_CONFIG, ArchitectureDB; var init_architectureDb = __esm({ "src/diagrams/architecture/architectureDb.ts"() { "use strict"; init_config(); init_defaultConfig(); init_utils2(); init_commonDb(); init_architectureTypes(); DEFAULT_ARCHITECTURE_CONFIG = defaultConfig_default.architecture; ArchitectureDB = class { constructor() { this.nodes = {}; this.groups = {}; this.edges = []; this.registeredIds = {}; this.elements = {}; this.setAccTitle = setAccTitle; this.getAccTitle = getAccTitle; this.setDiagramTitle = setDiagramTitle; this.getDiagramTitle = getDiagramTitle; this.getAccDescription = getAccDescription; this.setAccDescription = setAccDescription; this.clear(); } static { __name(this, "ArchitectureDB"); } clear() { this.nodes = {}; this.groups = {}; this.edges = []; this.registeredIds = {}; this.dataStructures = void 0; this.elements = {}; clear(); } addService({ id: id30, icon: icon2, in: parent4, title: title2, iconText }) { if (this.registeredIds[id30] !== void 0) { throw new Error( `The service id [${id30}] is already in use by another ${this.registeredIds[id30]}` ); } if (parent4 !== void 0) { if (id30 === parent4) { throw new Error(`The service [${id30}] cannot be placed within itself`); } if (this.registeredIds[parent4] === void 0) { throw new Error( `The service [${id30}]'s parent does not exist. Please make sure the parent is created before this service` ); } if (this.registeredIds[parent4] === "node") { throw new Error(`The service [${id30}]'s parent is not a group`); } } this.registeredIds[id30] = "node"; this.nodes[id30] = { id: id30, type: "service", icon: icon2, iconText, title: title2, edges: [], in: parent4 }; } getServices() { return Object.values(this.nodes).filter(isArchitectureService); } addJunction({ id: id30, in: parent4 }) { this.registeredIds[id30] = "node"; this.nodes[id30] = { id: id30, type: "junction", edges: [], in: parent4 }; } getJunctions() { return Object.values(this.nodes).filter(isArchitectureJunction); } getNodes() { return Object.values(this.nodes); } getNode(id30) { return this.nodes[id30] ?? null; } addGroup({ id: id30, icon: icon2, in: parent4, title: title2 }) { if (this.registeredIds?.[id30] !== void 0) { throw new Error( `The group id [${id30}] is already in use by another ${this.registeredIds[id30]}` ); } if (parent4 !== void 0) { if (id30 === parent4) { throw new Error(`The group [${id30}] cannot be placed within itself`); } if (this.registeredIds?.[parent4] === void 0) { throw new Error( `The group [${id30}]'s parent does not exist. Please make sure the parent is created before this group` ); } if (this.registeredIds?.[parent4] === "node") { throw new Error(`The group [${id30}]'s parent is not a group`); } } this.registeredIds[id30] = "group"; this.groups[id30] = { id: id30, icon: icon2, title: title2, in: parent4 }; } getGroups() { return Object.values(this.groups); } addEdge({ lhsId, rhsId, lhsDir, rhsDir, lhsInto, rhsInto, lhsGroup, rhsGroup, title: title2 }) { if (!isArchitectureDirection(lhsDir)) { throw new Error( `Invalid direction given for left hand side of edge ${lhsId}--${rhsId}. Expected (L,R,T,B) got ${String(lhsDir)}` ); } if (!isArchitectureDirection(rhsDir)) { throw new Error( `Invalid direction given for right hand side of edge ${lhsId}--${rhsId}. Expected (L,R,T,B) got ${String(rhsDir)}` ); } if (this.nodes[lhsId] === void 0 && this.groups[lhsId] === void 0) { throw new Error( `The left-hand id [${lhsId}] does not yet exist. Please create the service/group before declaring an edge to it.` ); } if (this.nodes[rhsId] === void 0 && this.groups[rhsId] === void 0) { throw new Error( `The right-hand id [${rhsId}] does not yet exist. Please create the service/group before declaring an edge to it.` ); } const lhsGroupId = this.nodes[lhsId].in; const rhsGroupId = this.nodes[rhsId].in; if (lhsGroup && lhsGroupId && rhsGroupId && lhsGroupId == rhsGroupId) { throw new Error( `The left-hand id [${lhsId}] is modified to traverse the group boundary, but the edge does not pass through two groups.` ); } if (rhsGroup && lhsGroupId && rhsGroupId && lhsGroupId == rhsGroupId) { throw new Error( `The right-hand id [${rhsId}] is modified to traverse the group boundary, but the edge does not pass through two groups.` ); } const edge = { lhsId, lhsDir, lhsInto, lhsGroup, rhsId, rhsDir, rhsInto, rhsGroup, title: title2 }; this.edges.push(edge); if (this.nodes[lhsId] && this.nodes[rhsId]) { this.nodes[lhsId].edges.push(this.edges[this.edges.length - 1]); this.nodes[rhsId].edges.push(this.edges[this.edges.length - 1]); } } getEdges() { return this.edges; } /** * Returns the current diagram's adjacency list, spatial map, & group alignments. * If they have not been created, run the algorithms to generate them. * @returns */ getDataStructures() { if (this.dataStructures === void 0) { const groupAlignments = {}; const adjList = Object.entries(this.nodes).reduce((prevOuter, [id30, service]) => { prevOuter[id30] = service.edges.reduce((prevInner, edge) => { const lhsGroupId = this.getNode(edge.lhsId)?.in; const rhsGroupId = this.getNode(edge.rhsId)?.in; if (lhsGroupId && rhsGroupId && lhsGroupId !== rhsGroupId) { const alignment = getArchitectureDirectionAlignment(edge.lhsDir, edge.rhsDir); if (alignment !== "bend") { groupAlignments[lhsGroupId] ??= {}; groupAlignments[lhsGroupId][rhsGroupId] = alignment; groupAlignments[rhsGroupId] ??= {}; groupAlignments[rhsGroupId][lhsGroupId] = alignment; } } if (edge.lhsId === id30) { const pair = getArchitectureDirectionPair(edge.lhsDir, edge.rhsDir); if (pair) { prevInner[pair] = edge.rhsId; } } else { const pair = getArchitectureDirectionPair(edge.rhsDir, edge.lhsDir); if (pair) { prevInner[pair] = edge.lhsId; } } return prevInner; }, {}); return prevOuter; }, {}); const firstId = Object.keys(adjList)[0]; const visited = { [firstId]: 1 }; const notVisited = Object.keys(adjList).reduce( (prev2, id30) => id30 === firstId ? prev2 : { ...prev2, [id30]: 1 }, {} ); const BFS = /* @__PURE__ */ __name((startingId) => { const spatialMap = { [startingId]: [0, 0] }; const queue = [startingId]; while (queue.length > 0) { const id30 = queue.shift(); if (id30) { visited[id30] = 1; delete notVisited[id30]; const adj = adjList[id30]; const [posX, posY] = spatialMap[id30]; Object.entries(adj).forEach(([dir2, rhsId]) => { if (!visited[rhsId]) { spatialMap[rhsId] = shiftPositionByArchitectureDirectionPair( [posX, posY], dir2 ); queue.push(rhsId); } }); } } return spatialMap; }, "BFS"); const spatialMaps = [BFS(firstId)]; while (Object.keys(notVisited).length > 0) { spatialMaps.push(BFS(Object.keys(notVisited)[0])); } this.dataStructures = { adjList, spatialMaps, groupAlignments }; } return this.dataStructures; } setElementForId(id30, element3) { this.elements[id30] = element3; } getElementById(id30) { return this.elements[id30]; } getConfig() { return cleanAndMerge({ ...DEFAULT_ARCHITECTURE_CONFIG, ...getConfig().architecture }); } getConfigField(field) { return this.getConfig()[field]; } }; } }); // src/diagrams/architecture/architectureParser.ts var populateDb2, parser22; var init_architectureParser = __esm({ "src/diagrams/architecture/architectureParser.ts"() { "use strict"; init_mermaid_parser_core(); init_logger(); init_populateCommonDb(); init_architectureDb(); populateDb2 = /* @__PURE__ */ __name((ast, db7) => { populateCommonDb(ast, db7); ast.groups.map((group2) => db7.addGroup(group2)); ast.services.map((service) => db7.addService({ ...service, type: "service" })); ast.junctions.map((service) => db7.addJunction({ ...service, type: "junction" })); ast.edges.map((edge) => db7.addEdge(edge)); }, "populateDb"); parser22 = { parser: { // @ts-expect-error - ArchitectureDB is not assignable to DiagramDB yy: void 0 }, parse: /* @__PURE__ */ __name(async (input) => { const ast = await parse3("architecture", input); log.debug(ast); const db7 = parser22.parser?.yy; if (!(db7 instanceof ArchitectureDB)) { throw new Error( "parser.parser?.yy was not a ArchitectureDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues." ); } populateDb2(ast, db7); }, "parse") }; } }); // src/diagrams/architecture/architectureStyles.ts var getStyles18, architectureStyles_default; var init_architectureStyles = __esm({ "src/diagrams/architecture/architectureStyles.ts"() { "use strict"; getStyles18 = /* @__PURE__ */ __name((options2) => ` .edge { stroke-width: ${options2.archEdgeWidth}; stroke: ${options2.archEdgeColor}; fill: none; } .arrow { fill: ${options2.archEdgeArrowColor}; } .node-bkg { fill: none; stroke: ${options2.archGroupBorderColor}; stroke-width: ${options2.archGroupBorderWidth}; stroke-dasharray: 8; } .node-icon-text { display: flex; align-items: center; } .node-icon-text > div { color: #fff; margin: 1px; height: fit-content; text-align: center; overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; } `, "getStyles"); architectureStyles_default = getStyles18; } }); // ../../node_modules/.pnpm/layout-base@2.0.1/node_modules/layout-base/layout-base.js var require_layout_base2 = __commonJS({ "../../node_modules/.pnpm/layout-base@2.0.1/node_modules/layout-base/layout-base.js"(exports2, module2) { "use strict"; (/* @__PURE__ */ __name((function webpackUniversalModuleDefinition(root3, factory) { if (typeof exports2 === "object" && typeof module2 === "object") module2.exports = factory(); else if (typeof define === "function" && define.amd) define([], factory); else if (typeof exports2 === "object") exports2["layoutBase"] = factory(); else root3["layoutBase"] = factory(); }), "webpackUniversalModuleDefinition"))(exports2, function() { return ( /******/ (function(modules2) { var installedModules = {}; function __webpack_require__(moduleId) { if (installedModules[moduleId]) { return installedModules[moduleId].exports; } var module3 = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; modules2[moduleId].call(module3.exports, module3, module3.exports, __webpack_require__); module3.l = true; return module3.exports; } __name(__webpack_require__, "__webpack_require__"); __webpack_require__.m = modules2; __webpack_require__.c = installedModules; __webpack_require__.i = function(value2) { return value2; }; __webpack_require__.d = function(exports3, name, getter) { if (!__webpack_require__.o(exports3, name)) { Object.defineProperty(exports3, name, { /******/ configurable: false, /******/ enumerable: true, /******/ get: getter /******/ }); } }; __webpack_require__.n = function(module3) { var getter = module3 && module3.__esModule ? ( /******/ /* @__PURE__ */ __name(function getDefault() { return module3["default"]; }, "getDefault") ) : ( /******/ /* @__PURE__ */ __name(function getModuleExports() { return module3; }, "getModuleExports") ); __webpack_require__.d(getter, "a", getter); return getter; }; __webpack_require__.o = function(object3, property2) { return Object.prototype.hasOwnProperty.call(object3, property2); }; __webpack_require__.p = ""; return __webpack_require__(__webpack_require__.s = 28); })([ /* 0 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function LayoutConstants() { } __name(LayoutConstants, "LayoutConstants"); LayoutConstants.QUALITY = 1; LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED = false; LayoutConstants.DEFAULT_INCREMENTAL = false; LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT = true; LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT = false; LayoutConstants.DEFAULT_ANIMATION_PERIOD = 50; LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = false; LayoutConstants.DEFAULT_GRAPH_MARGIN = 15; LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = false; LayoutConstants.SIMPLE_NODE_SIZE = 40; LayoutConstants.SIMPLE_NODE_HALF_SIZE = LayoutConstants.SIMPLE_NODE_SIZE / 2; LayoutConstants.EMPTY_COMPOUND_NODE_SIZE = 40; LayoutConstants.MIN_EDGE_LENGTH = 1; LayoutConstants.WORLD_BOUNDARY = 1e6; LayoutConstants.INITIAL_WORLD_BOUNDARY = LayoutConstants.WORLD_BOUNDARY / 1e3; LayoutConstants.WORLD_CENTER_X = 1200; LayoutConstants.WORLD_CENTER_Y = 900; module3.exports = LayoutConstants; }), /* 1 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var LGraphObject = __webpack_require__(2); var IGeometry = __webpack_require__(8); var IMath = __webpack_require__(9); function LEdge(source, target, vEdge) { LGraphObject.call(this, vEdge); this.isOverlapingSourceAndTarget = false; this.vGraphObject = vEdge; this.bendpoints = []; this.source = source; this.target = target; } __name(LEdge, "LEdge"); LEdge.prototype = Object.create(LGraphObject.prototype); for (var prop in LGraphObject) { LEdge[prop] = LGraphObject[prop]; } LEdge.prototype.getSource = function() { return this.source; }; LEdge.prototype.getTarget = function() { return this.target; }; LEdge.prototype.isInterGraph = function() { return this.isInterGraph; }; LEdge.prototype.getLength = function() { return this.length; }; LEdge.prototype.isOverlapingSourceAndTarget = function() { return this.isOverlapingSourceAndTarget; }; LEdge.prototype.getBendpoints = function() { return this.bendpoints; }; LEdge.prototype.getLca = function() { return this.lca; }; LEdge.prototype.getSourceInLca = function() { return this.sourceInLca; }; LEdge.prototype.getTargetInLca = function() { return this.targetInLca; }; LEdge.prototype.getOtherEnd = function(node2) { if (this.source === node2) { return this.target; } else if (this.target === node2) { return this.source; } else { throw "Node is not incident with this edge"; } }; LEdge.prototype.getOtherEndInGraph = function(node2, graph) { var otherEnd = this.getOtherEnd(node2); var root3 = graph.getGraphManager().getRoot(); while (true) { if (otherEnd.getOwner() == graph) { return otherEnd; } if (otherEnd.getOwner() == root3) { break; } otherEnd = otherEnd.getOwner().getParent(); } return null; }; LEdge.prototype.updateLength = function() { var clipPointCoordinates = new Array(4); this.isOverlapingSourceAndTarget = IGeometry.getIntersection(this.target.getRect(), this.source.getRect(), clipPointCoordinates); if (!this.isOverlapingSourceAndTarget) { this.lengthX = clipPointCoordinates[0] - clipPointCoordinates[2]; this.lengthY = clipPointCoordinates[1] - clipPointCoordinates[3]; if (Math.abs(this.lengthX) < 1) { this.lengthX = IMath.sign(this.lengthX); } if (Math.abs(this.lengthY) < 1) { this.lengthY = IMath.sign(this.lengthY); } this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY); } }; LEdge.prototype.updateLengthSimple = function() { this.lengthX = this.target.getCenterX() - this.source.getCenterX(); this.lengthY = this.target.getCenterY() - this.source.getCenterY(); if (Math.abs(this.lengthX) < 1) { this.lengthX = IMath.sign(this.lengthX); } if (Math.abs(this.lengthY) < 1) { this.lengthY = IMath.sign(this.lengthY); } this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY); }; module3.exports = LEdge; }), /* 2 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function LGraphObject(vGraphObject) { this.vGraphObject = vGraphObject; } __name(LGraphObject, "LGraphObject"); module3.exports = LGraphObject; }), /* 3 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var LGraphObject = __webpack_require__(2); var Integer = __webpack_require__(10); var RectangleD = __webpack_require__(13); var LayoutConstants = __webpack_require__(0); var RandomSeed = __webpack_require__(16); var PointD = __webpack_require__(5); function LNode(gm, loc, size4, vNode) { if (size4 == null && vNode == null) { vNode = loc; } LGraphObject.call(this, vNode); if (gm.graphManager != null) gm = gm.graphManager; this.estimatedSize = Integer.MIN_VALUE; this.inclusionTreeDepth = Integer.MAX_VALUE; this.vGraphObject = vNode; this.edges = []; this.graphManager = gm; if (size4 != null && loc != null) this.rect = new RectangleD(loc.x, loc.y, size4.width, size4.height); else this.rect = new RectangleD(); } __name(LNode, "LNode"); LNode.prototype = Object.create(LGraphObject.prototype); for (var prop in LGraphObject) { LNode[prop] = LGraphObject[prop]; } LNode.prototype.getEdges = function() { return this.edges; }; LNode.prototype.getChild = function() { return this.child; }; LNode.prototype.getOwner = function() { return this.owner; }; LNode.prototype.getWidth = function() { return this.rect.width; }; LNode.prototype.setWidth = function(width3) { this.rect.width = width3; }; LNode.prototype.getHeight = function() { return this.rect.height; }; LNode.prototype.setHeight = function(height2) { this.rect.height = height2; }; LNode.prototype.getCenterX = function() { return this.rect.x + this.rect.width / 2; }; LNode.prototype.getCenterY = function() { return this.rect.y + this.rect.height / 2; }; LNode.prototype.getCenter = function() { return new PointD(this.rect.x + this.rect.width / 2, this.rect.y + this.rect.height / 2); }; LNode.prototype.getLocation = function() { return new PointD(this.rect.x, this.rect.y); }; LNode.prototype.getRect = function() { return this.rect; }; LNode.prototype.getDiagonal = function() { return Math.sqrt(this.rect.width * this.rect.width + this.rect.height * this.rect.height); }; LNode.prototype.getHalfTheDiagonal = function() { return Math.sqrt(this.rect.height * this.rect.height + this.rect.width * this.rect.width) / 2; }; LNode.prototype.setRect = function(upperLeft, dimension) { this.rect.x = upperLeft.x; this.rect.y = upperLeft.y; this.rect.width = dimension.width; this.rect.height = dimension.height; }; LNode.prototype.setCenter = function(cx, cy) { this.rect.x = cx - this.rect.width / 2; this.rect.y = cy - this.rect.height / 2; }; LNode.prototype.setLocation = function(x5, y6) { this.rect.x = x5; this.rect.y = y6; }; LNode.prototype.moveBy = function(dx, dy) { this.rect.x += dx; this.rect.y += dy; }; LNode.prototype.getEdgeListToNode = function(to) { var edgeList2 = []; var edge; var self2 = this; self2.edges.forEach(function(edge2) { if (edge2.target == to) { if (edge2.source != self2) throw "Incorrect edge source!"; edgeList2.push(edge2); } }); return edgeList2; }; LNode.prototype.getEdgesBetween = function(other) { var edgeList2 = []; var edge; var self2 = this; self2.edges.forEach(function(edge2) { if (!(edge2.source == self2 || edge2.target == self2)) throw "Incorrect edge source and/or target"; if (edge2.target == other || edge2.source == other) { edgeList2.push(edge2); } }); return edgeList2; }; LNode.prototype.getNeighborsList = function() { var neighbors = /* @__PURE__ */ new Set(); var self2 = this; self2.edges.forEach(function(edge) { if (edge.source == self2) { neighbors.add(edge.target); } else { if (edge.target != self2) { throw "Incorrect incidency!"; } neighbors.add(edge.source); } }); return neighbors; }; LNode.prototype.withChildren = function() { var withNeighborsList = /* @__PURE__ */ new Set(); var childNode; var children2; withNeighborsList.add(this); if (this.child != null) { var nodes5 = this.child.getNodes(); for (var i2 = 0; i2 < nodes5.length; i2++) { childNode = nodes5[i2]; children2 = childNode.withChildren(); children2.forEach(function(node2) { withNeighborsList.add(node2); }); } } return withNeighborsList; }; LNode.prototype.getNoOfChildren = function() { var noOfChildren = 0; var childNode; if (this.child == null) { noOfChildren = 1; } else { var nodes5 = this.child.getNodes(); for (var i2 = 0; i2 < nodes5.length; i2++) { childNode = nodes5[i2]; noOfChildren += childNode.getNoOfChildren(); } } if (noOfChildren == 0) { noOfChildren = 1; } return noOfChildren; }; LNode.prototype.getEstimatedSize = function() { if (this.estimatedSize == Integer.MIN_VALUE) { throw "assert failed"; } return this.estimatedSize; }; LNode.prototype.calcEstimatedSize = function() { if (this.child == null) { return this.estimatedSize = (this.rect.width + this.rect.height) / 2; } else { this.estimatedSize = this.child.calcEstimatedSize(); this.rect.width = this.estimatedSize; this.rect.height = this.estimatedSize; return this.estimatedSize; } }; LNode.prototype.scatter = function() { var randomCenterX; var randomCenterY; var minX = -LayoutConstants.INITIAL_WORLD_BOUNDARY; var maxX = LayoutConstants.INITIAL_WORLD_BOUNDARY; randomCenterX = LayoutConstants.WORLD_CENTER_X + RandomSeed.nextDouble() * (maxX - minX) + minX; var minY = -LayoutConstants.INITIAL_WORLD_BOUNDARY; var maxY = LayoutConstants.INITIAL_WORLD_BOUNDARY; randomCenterY = LayoutConstants.WORLD_CENTER_Y + RandomSeed.nextDouble() * (maxY - minY) + minY; this.rect.x = randomCenterX; this.rect.y = randomCenterY; }; LNode.prototype.updateBounds = function() { if (this.getChild() == null) { throw "assert failed"; } if (this.getChild().getNodes().length != 0) { var childGraph = this.getChild(); childGraph.updateBounds(true); this.rect.x = childGraph.getLeft(); this.rect.y = childGraph.getTop(); this.setWidth(childGraph.getRight() - childGraph.getLeft()); this.setHeight(childGraph.getBottom() - childGraph.getTop()); if (LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS) { var width3 = childGraph.getRight() - childGraph.getLeft(); var height2 = childGraph.getBottom() - childGraph.getTop(); if (this.labelWidth) { if (this.labelPosHorizontal == "left") { this.rect.x -= this.labelWidth; this.setWidth(width3 + this.labelWidth); } else if (this.labelPosHorizontal == "center" && this.labelWidth > width3) { this.rect.x -= (this.labelWidth - width3) / 2; this.setWidth(this.labelWidth); } else if (this.labelPosHorizontal == "right") { this.setWidth(width3 + this.labelWidth); } } if (this.labelHeight) { if (this.labelPosVertical == "top") { this.rect.y -= this.labelHeight; this.setHeight(height2 + this.labelHeight); } else if (this.labelPosVertical == "center" && this.labelHeight > height2) { this.rect.y -= (this.labelHeight - height2) / 2; this.setHeight(this.labelHeight); } else if (this.labelPosVertical == "bottom") { this.setHeight(height2 + this.labelHeight); } } } } }; LNode.prototype.getInclusionTreeDepth = function() { if (this.inclusionTreeDepth == Integer.MAX_VALUE) { throw "assert failed"; } return this.inclusionTreeDepth; }; LNode.prototype.transform = function(trans) { var left3 = this.rect.x; if (left3 > LayoutConstants.WORLD_BOUNDARY) { left3 = LayoutConstants.WORLD_BOUNDARY; } else if (left3 < -LayoutConstants.WORLD_BOUNDARY) { left3 = -LayoutConstants.WORLD_BOUNDARY; } var top2 = this.rect.y; if (top2 > LayoutConstants.WORLD_BOUNDARY) { top2 = LayoutConstants.WORLD_BOUNDARY; } else if (top2 < -LayoutConstants.WORLD_BOUNDARY) { top2 = -LayoutConstants.WORLD_BOUNDARY; } var leftTop = new PointD(left3, top2); var vLeftTop = trans.inverseTransformPoint(leftTop); this.setLocation(vLeftTop.x, vLeftTop.y); }; LNode.prototype.getLeft = function() { return this.rect.x; }; LNode.prototype.getRight = function() { return this.rect.x + this.rect.width; }; LNode.prototype.getTop = function() { return this.rect.y; }; LNode.prototype.getBottom = function() { return this.rect.y + this.rect.height; }; LNode.prototype.getParent = function() { if (this.owner == null) { return null; } return this.owner.getParent(); }; module3.exports = LNode; }), /* 4 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var LayoutConstants = __webpack_require__(0); function FDLayoutConstants() { } __name(FDLayoutConstants, "FDLayoutConstants"); for (var prop in LayoutConstants) { FDLayoutConstants[prop] = LayoutConstants[prop]; } FDLayoutConstants.MAX_ITERATIONS = 2500; FDLayoutConstants.DEFAULT_EDGE_LENGTH = 50; FDLayoutConstants.DEFAULT_SPRING_STRENGTH = 0.45; FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = 4500; FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = 0.4; FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = 1; FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = 3.8; FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = 1.5; FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION = true; FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION = true; FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = 0.3; FDLayoutConstants.COOLING_ADAPTATION_FACTOR = 0.33; FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT = 1e3; FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT = 5e3; FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL = 100; FDLayoutConstants.MAX_NODE_DISPLACEMENT = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL * 3; FDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10; FDLayoutConstants.CONVERGENCE_CHECK_PERIOD = 100; FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = 0.1; FDLayoutConstants.MIN_EDGE_LENGTH = 1; FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD = 10; module3.exports = FDLayoutConstants; }), /* 5 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function PointD(x5, y6) { if (x5 == null && y6 == null) { this.x = 0; this.y = 0; } else { this.x = x5; this.y = y6; } } __name(PointD, "PointD"); PointD.prototype.getX = function() { return this.x; }; PointD.prototype.getY = function() { return this.y; }; PointD.prototype.setX = function(x5) { this.x = x5; }; PointD.prototype.setY = function(y6) { this.y = y6; }; PointD.prototype.getDifference = function(pt) { return new DimensionD(this.x - pt.x, this.y - pt.y); }; PointD.prototype.getCopy = function() { return new PointD(this.x, this.y); }; PointD.prototype.translate = function(dim) { this.x += dim.width; this.y += dim.height; return this; }; module3.exports = PointD; }), /* 6 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var LGraphObject = __webpack_require__(2); var Integer = __webpack_require__(10); var LayoutConstants = __webpack_require__(0); var LGraphManager = __webpack_require__(7); var LNode = __webpack_require__(3); var LEdge = __webpack_require__(1); var RectangleD = __webpack_require__(13); var Point3 = __webpack_require__(12); var LinkedList = __webpack_require__(11); function LGraph(parent4, obj2, vGraph) { LGraphObject.call(this, vGraph); this.estimatedSize = Integer.MIN_VALUE; this.margin = LayoutConstants.DEFAULT_GRAPH_MARGIN; this.edges = []; this.nodes = []; this.isConnected = false; this.parent = parent4; if (obj2 != null && obj2 instanceof LGraphManager) { this.graphManager = obj2; } else if (obj2 != null && obj2 instanceof Layout) { this.graphManager = obj2.graphManager; } } __name(LGraph, "LGraph"); LGraph.prototype = Object.create(LGraphObject.prototype); for (var prop in LGraphObject) { LGraph[prop] = LGraphObject[prop]; } LGraph.prototype.getNodes = function() { return this.nodes; }; LGraph.prototype.getEdges = function() { return this.edges; }; LGraph.prototype.getGraphManager = function() { return this.graphManager; }; LGraph.prototype.getParent = function() { return this.parent; }; LGraph.prototype.getLeft = function() { return this.left; }; LGraph.prototype.getRight = function() { return this.right; }; LGraph.prototype.getTop = function() { return this.top; }; LGraph.prototype.getBottom = function() { return this.bottom; }; LGraph.prototype.isConnected = function() { return this.isConnected; }; LGraph.prototype.add = function(obj1, sourceNode, targetNode) { if (sourceNode == null && targetNode == null) { var newNode = obj1; if (this.graphManager == null) { throw "Graph has no graph mgr!"; } if (this.getNodes().indexOf(newNode) > -1) { throw "Node already in graph!"; } newNode.owner = this; this.getNodes().push(newNode); return newNode; } else { var newEdge = obj1; if (!(this.getNodes().indexOf(sourceNode) > -1 && this.getNodes().indexOf(targetNode) > -1)) { throw "Source or target not in graph!"; } if (!(sourceNode.owner == targetNode.owner && sourceNode.owner == this)) { throw "Both owners must be this graph!"; } if (sourceNode.owner != targetNode.owner) { return null; } newEdge.source = sourceNode; newEdge.target = targetNode; newEdge.isInterGraph = false; this.getEdges().push(newEdge); sourceNode.edges.push(newEdge); if (targetNode != sourceNode) { targetNode.edges.push(newEdge); } return newEdge; } }; LGraph.prototype.remove = function(obj) { var node2 = obj; if (obj instanceof LNode) { if (node2 == null) { throw "Node is null!"; } if (!(node2.owner != null && node2.owner == this)) { throw "Owner graph is invalid!"; } if (this.graphManager == null) { throw "Owner graph manager is invalid!"; } var edgesToBeRemoved = node2.edges.slice(); var edge; var s2 = edgesToBeRemoved.length; for (var i2 = 0; i2 < s2; i2++) { edge = edgesToBeRemoved[i2]; if (edge.isInterGraph) { this.graphManager.remove(edge); } else { edge.source.owner.remove(edge); } } var index = this.nodes.indexOf(node2); if (index == -1) { throw "Node not in owner node list!"; } this.nodes.splice(index, 1); } else if (obj instanceof LEdge) { var edge = obj; if (edge == null) { throw "Edge is null!"; } if (!(edge.source != null && edge.target != null)) { throw "Source and/or target is null!"; } if (!(edge.source.owner != null && edge.target.owner != null && edge.source.owner == this && edge.target.owner == this)) { throw "Source and/or target owner is invalid!"; } var sourceIndex = edge.source.edges.indexOf(edge); var targetIndex = edge.target.edges.indexOf(edge); if (!(sourceIndex > -1 && targetIndex > -1)) { throw "Source and/or target doesn't know this edge!"; } edge.source.edges.splice(sourceIndex, 1); if (edge.target != edge.source) { edge.target.edges.splice(targetIndex, 1); } var index = edge.source.owner.getEdges().indexOf(edge); if (index == -1) { throw "Not in owner's edge list!"; } edge.source.owner.getEdges().splice(index, 1); } }; LGraph.prototype.updateLeftTop = function() { var top2 = Integer.MAX_VALUE; var left3 = Integer.MAX_VALUE; var nodeTop; var nodeLeft; var margin; var nodes5 = this.getNodes(); var s2 = nodes5.length; for (var i2 = 0; i2 < s2; i2++) { var lNode = nodes5[i2]; nodeTop = lNode.getTop(); nodeLeft = lNode.getLeft(); if (top2 > nodeTop) { top2 = nodeTop; } if (left3 > nodeLeft) { left3 = nodeLeft; } } if (top2 == Integer.MAX_VALUE) { return null; } if (nodes5[0].getParent().paddingLeft != void 0) { margin = nodes5[0].getParent().paddingLeft; } else { margin = this.margin; } this.left = left3 - margin; this.top = top2 - margin; return new Point3(this.left, this.top); }; LGraph.prototype.updateBounds = function(recursive) { var left3 = Integer.MAX_VALUE; var right3 = -Integer.MAX_VALUE; var top2 = Integer.MAX_VALUE; var bottom2 = -Integer.MAX_VALUE; var nodeLeft; var nodeRight; var nodeTop; var nodeBottom; var margin; var nodes5 = this.nodes; var s2 = nodes5.length; for (var i2 = 0; i2 < s2; i2++) { var lNode = nodes5[i2]; if (recursive && lNode.child != null) { lNode.updateBounds(); } nodeLeft = lNode.getLeft(); nodeRight = lNode.getRight(); nodeTop = lNode.getTop(); nodeBottom = lNode.getBottom(); if (left3 > nodeLeft) { left3 = nodeLeft; } if (right3 < nodeRight) { right3 = nodeRight; } if (top2 > nodeTop) { top2 = nodeTop; } if (bottom2 < nodeBottom) { bottom2 = nodeBottom; } } var boundingRect = new RectangleD(left3, top2, right3 - left3, bottom2 - top2); if (left3 == Integer.MAX_VALUE) { this.left = this.parent.getLeft(); this.right = this.parent.getRight(); this.top = this.parent.getTop(); this.bottom = this.parent.getBottom(); } if (nodes5[0].getParent().paddingLeft != void 0) { margin = nodes5[0].getParent().paddingLeft; } else { margin = this.margin; } this.left = boundingRect.x - margin; this.right = boundingRect.x + boundingRect.width + margin; this.top = boundingRect.y - margin; this.bottom = boundingRect.y + boundingRect.height + margin; }; LGraph.calculateBounds = function(nodes5) { var left3 = Integer.MAX_VALUE; var right3 = -Integer.MAX_VALUE; var top2 = Integer.MAX_VALUE; var bottom2 = -Integer.MAX_VALUE; var nodeLeft; var nodeRight; var nodeTop; var nodeBottom; var s2 = nodes5.length; for (var i2 = 0; i2 < s2; i2++) { var lNode = nodes5[i2]; nodeLeft = lNode.getLeft(); nodeRight = lNode.getRight(); nodeTop = lNode.getTop(); nodeBottom = lNode.getBottom(); if (left3 > nodeLeft) { left3 = nodeLeft; } if (right3 < nodeRight) { right3 = nodeRight; } if (top2 > nodeTop) { top2 = nodeTop; } if (bottom2 < nodeBottom) { bottom2 = nodeBottom; } } var boundingRect = new RectangleD(left3, top2, right3 - left3, bottom2 - top2); return boundingRect; }; LGraph.prototype.getInclusionTreeDepth = function() { if (this == this.graphManager.getRoot()) { return 1; } else { return this.parent.getInclusionTreeDepth(); } }; LGraph.prototype.getEstimatedSize = function() { if (this.estimatedSize == Integer.MIN_VALUE) { throw "assert failed"; } return this.estimatedSize; }; LGraph.prototype.calcEstimatedSize = function() { var size4 = 0; var nodes5 = this.nodes; var s2 = nodes5.length; for (var i2 = 0; i2 < s2; i2++) { var lNode = nodes5[i2]; size4 += lNode.calcEstimatedSize(); } if (size4 == 0) { this.estimatedSize = LayoutConstants.EMPTY_COMPOUND_NODE_SIZE; } else { this.estimatedSize = size4 / Math.sqrt(this.nodes.length); } return this.estimatedSize; }; LGraph.prototype.updateConnected = function() { var self2 = this; if (this.nodes.length == 0) { this.isConnected = true; return; } var queue = new LinkedList(); var visited = /* @__PURE__ */ new Set(); var currentNode = this.nodes[0]; var neighborEdges; var currentNeighbor; var childrenOfNode = currentNode.withChildren(); childrenOfNode.forEach(function(node2) { queue.push(node2); visited.add(node2); }); while (queue.length !== 0) { currentNode = queue.shift(); neighborEdges = currentNode.getEdges(); var size4 = neighborEdges.length; for (var i2 = 0; i2 < size4; i2++) { var neighborEdge = neighborEdges[i2]; currentNeighbor = neighborEdge.getOtherEndInGraph(currentNode, this); if (currentNeighbor != null && !visited.has(currentNeighbor)) { var childrenOfNeighbor = currentNeighbor.withChildren(); childrenOfNeighbor.forEach(function(node2) { queue.push(node2); visited.add(node2); }); } } } this.isConnected = false; if (visited.size >= this.nodes.length) { var noOfVisitedInThisGraph = 0; visited.forEach(function(visitedNode) { if (visitedNode.owner == self2) { noOfVisitedInThisGraph++; } }); if (noOfVisitedInThisGraph == this.nodes.length) { this.isConnected = true; } } }; module3.exports = LGraph; }), /* 7 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var LGraph; var LEdge = __webpack_require__(1); function LGraphManager(layout6) { LGraph = __webpack_require__(6); this.layout = layout6; this.graphs = []; this.edges = []; } __name(LGraphManager, "LGraphManager"); LGraphManager.prototype.addRoot = function() { var ngraph = this.layout.newGraph(); var nnode = this.layout.newNode(null); var root3 = this.add(ngraph, nnode); this.setRootGraph(root3); return this.rootGraph; }; LGraphManager.prototype.add = function(newGraph, parentNode, newEdge, sourceNode, targetNode) { if (newEdge == null && sourceNode == null && targetNode == null) { if (newGraph == null) { throw "Graph is null!"; } if (parentNode == null) { throw "Parent node is null!"; } if (this.graphs.indexOf(newGraph) > -1) { throw "Graph already in this graph mgr!"; } this.graphs.push(newGraph); if (newGraph.parent != null) { throw "Already has a parent!"; } if (parentNode.child != null) { throw "Already has a child!"; } newGraph.parent = parentNode; parentNode.child = newGraph; return newGraph; } else { targetNode = newEdge; sourceNode = parentNode; newEdge = newGraph; var sourceGraph = sourceNode.getOwner(); var targetGraph = targetNode.getOwner(); if (!(sourceGraph != null && sourceGraph.getGraphManager() == this)) { throw "Source not in this graph mgr!"; } if (!(targetGraph != null && targetGraph.getGraphManager() == this)) { throw "Target not in this graph mgr!"; } if (sourceGraph == targetGraph) { newEdge.isInterGraph = false; return sourceGraph.add(newEdge, sourceNode, targetNode); } else { newEdge.isInterGraph = true; newEdge.source = sourceNode; newEdge.target = targetNode; if (this.edges.indexOf(newEdge) > -1) { throw "Edge already in inter-graph edge list!"; } this.edges.push(newEdge); if (!(newEdge.source != null && newEdge.target != null)) { throw "Edge source and/or target is null!"; } if (!(newEdge.source.edges.indexOf(newEdge) == -1 && newEdge.target.edges.indexOf(newEdge) == -1)) { throw "Edge already in source and/or target incidency list!"; } newEdge.source.edges.push(newEdge); newEdge.target.edges.push(newEdge); return newEdge; } } }; LGraphManager.prototype.remove = function(lObj) { if (lObj instanceof LGraph) { var graph = lObj; if (graph.getGraphManager() != this) { throw "Graph not in this graph mgr"; } if (!(graph == this.rootGraph || graph.parent != null && graph.parent.graphManager == this)) { throw "Invalid parent node!"; } var edgesToBeRemoved = []; edgesToBeRemoved = edgesToBeRemoved.concat(graph.getEdges()); var edge; var s2 = edgesToBeRemoved.length; for (var i2 = 0; i2 < s2; i2++) { edge = edgesToBeRemoved[i2]; graph.remove(edge); } var nodesToBeRemoved = []; nodesToBeRemoved = nodesToBeRemoved.concat(graph.getNodes()); var node2; s2 = nodesToBeRemoved.length; for (var i2 = 0; i2 < s2; i2++) { node2 = nodesToBeRemoved[i2]; graph.remove(node2); } if (graph == this.rootGraph) { this.setRootGraph(null); } var index = this.graphs.indexOf(graph); this.graphs.splice(index, 1); graph.parent = null; } else if (lObj instanceof LEdge) { edge = lObj; if (edge == null) { throw "Edge is null!"; } if (!edge.isInterGraph) { throw "Not an inter-graph edge!"; } if (!(edge.source != null && edge.target != null)) { throw "Source and/or target is null!"; } if (!(edge.source.edges.indexOf(edge) != -1 && edge.target.edges.indexOf(edge) != -1)) { throw "Source and/or target doesn't know this edge!"; } var index = edge.source.edges.indexOf(edge); edge.source.edges.splice(index, 1); index = edge.target.edges.indexOf(edge); edge.target.edges.splice(index, 1); if (!(edge.source.owner != null && edge.source.owner.getGraphManager() != null)) { throw "Edge owner graph or owner graph manager is null!"; } if (edge.source.owner.getGraphManager().edges.indexOf(edge) == -1) { throw "Not in owner graph manager's edge list!"; } var index = edge.source.owner.getGraphManager().edges.indexOf(edge); edge.source.owner.getGraphManager().edges.splice(index, 1); } }; LGraphManager.prototype.updateBounds = function() { this.rootGraph.updateBounds(true); }; LGraphManager.prototype.getGraphs = function() { return this.graphs; }; LGraphManager.prototype.getAllNodes = function() { if (this.allNodes == null) { var nodeList = []; var graphs = this.getGraphs(); var s2 = graphs.length; for (var i2 = 0; i2 < s2; i2++) { nodeList = nodeList.concat(graphs[i2].getNodes()); } this.allNodes = nodeList; } return this.allNodes; }; LGraphManager.prototype.resetAllNodes = function() { this.allNodes = null; }; LGraphManager.prototype.resetAllEdges = function() { this.allEdges = null; }; LGraphManager.prototype.resetAllNodesToApplyGravitation = function() { this.allNodesToApplyGravitation = null; }; LGraphManager.prototype.getAllEdges = function() { if (this.allEdges == null) { var edgeList2 = []; var graphs = this.getGraphs(); var s2 = graphs.length; for (var i2 = 0; i2 < graphs.length; i2++) { edgeList2 = edgeList2.concat(graphs[i2].getEdges()); } edgeList2 = edgeList2.concat(this.edges); this.allEdges = edgeList2; } return this.allEdges; }; LGraphManager.prototype.getAllNodesToApplyGravitation = function() { return this.allNodesToApplyGravitation; }; LGraphManager.prototype.setAllNodesToApplyGravitation = function(nodeList) { if (this.allNodesToApplyGravitation != null) { throw "assert failed"; } this.allNodesToApplyGravitation = nodeList; }; LGraphManager.prototype.getRoot = function() { return this.rootGraph; }; LGraphManager.prototype.setRootGraph = function(graph) { if (graph.getGraphManager() != this) { throw "Root not in this graph mgr!"; } this.rootGraph = graph; if (graph.parent == null) { graph.parent = this.layout.newNode("Root node"); } }; LGraphManager.prototype.getLayout = function() { return this.layout; }; LGraphManager.prototype.isOneAncestorOfOther = function(firstNode, secondNode) { if (!(firstNode != null && secondNode != null)) { throw "assert failed"; } if (firstNode == secondNode) { return true; } var ownerGraph = firstNode.getOwner(); var parentNode; do { parentNode = ownerGraph.getParent(); if (parentNode == null) { break; } if (parentNode == secondNode) { return true; } ownerGraph = parentNode.getOwner(); if (ownerGraph == null) { break; } } while (true); ownerGraph = secondNode.getOwner(); do { parentNode = ownerGraph.getParent(); if (parentNode == null) { break; } if (parentNode == firstNode) { return true; } ownerGraph = parentNode.getOwner(); if (ownerGraph == null) { break; } } while (true); return false; }; LGraphManager.prototype.calcLowestCommonAncestors = function() { var edge; var sourceNode; var targetNode; var sourceAncestorGraph; var targetAncestorGraph; var edges3 = this.getAllEdges(); var s2 = edges3.length; for (var i2 = 0; i2 < s2; i2++) { edge = edges3[i2]; sourceNode = edge.source; targetNode = edge.target; edge.lca = null; edge.sourceInLca = sourceNode; edge.targetInLca = targetNode; if (sourceNode == targetNode) { edge.lca = sourceNode.getOwner(); continue; } sourceAncestorGraph = sourceNode.getOwner(); while (edge.lca == null) { edge.targetInLca = targetNode; targetAncestorGraph = targetNode.getOwner(); while (edge.lca == null) { if (targetAncestorGraph == sourceAncestorGraph) { edge.lca = targetAncestorGraph; break; } if (targetAncestorGraph == this.rootGraph) { break; } if (edge.lca != null) { throw "assert failed"; } edge.targetInLca = targetAncestorGraph.getParent(); targetAncestorGraph = edge.targetInLca.getOwner(); } if (sourceAncestorGraph == this.rootGraph) { break; } if (edge.lca == null) { edge.sourceInLca = sourceAncestorGraph.getParent(); sourceAncestorGraph = edge.sourceInLca.getOwner(); } } if (edge.lca == null) { throw "assert failed"; } } }; LGraphManager.prototype.calcLowestCommonAncestor = function(firstNode, secondNode) { if (firstNode == secondNode) { return firstNode.getOwner(); } var firstOwnerGraph = firstNode.getOwner(); do { if (firstOwnerGraph == null) { break; } var secondOwnerGraph = secondNode.getOwner(); do { if (secondOwnerGraph == null) { break; } if (secondOwnerGraph == firstOwnerGraph) { return secondOwnerGraph; } secondOwnerGraph = secondOwnerGraph.getParent().getOwner(); } while (true); firstOwnerGraph = firstOwnerGraph.getParent().getOwner(); } while (true); return firstOwnerGraph; }; LGraphManager.prototype.calcInclusionTreeDepths = function(graph, depth) { if (graph == null && depth == null) { graph = this.rootGraph; depth = 1; } var node2; var nodes5 = graph.getNodes(); var s2 = nodes5.length; for (var i2 = 0; i2 < s2; i2++) { node2 = nodes5[i2]; node2.inclusionTreeDepth = depth; if (node2.child != null) { this.calcInclusionTreeDepths(node2.child, depth + 1); } } }; LGraphManager.prototype.includesInvalidEdge = function() { var edge; var edgesToRemove = []; var s2 = this.edges.length; for (var i2 = 0; i2 < s2; i2++) { edge = this.edges[i2]; if (this.isOneAncestorOfOther(edge.source, edge.target)) { edgesToRemove.push(edge); } } for (var i2 = 0; i2 < edgesToRemove.length; i2++) { this.remove(edgesToRemove[i2]); } return false; }; module3.exports = LGraphManager; }), /* 8 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var Point3 = __webpack_require__(12); function IGeometry() { } __name(IGeometry, "IGeometry"); IGeometry.calcSeparationAmount = function(rectA, rectB, overlapAmount, separationBuffer) { if (!rectA.intersects(rectB)) { throw "assert failed"; } var directions = new Array(2); this.decideDirectionsForOverlappingNodes(rectA, rectB, directions); overlapAmount[0] = Math.min(rectA.getRight(), rectB.getRight()) - Math.max(rectA.x, rectB.x); overlapAmount[1] = Math.min(rectA.getBottom(), rectB.getBottom()) - Math.max(rectA.y, rectB.y); if (rectA.getX() <= rectB.getX() && rectA.getRight() >= rectB.getRight()) { overlapAmount[0] += Math.min(rectB.getX() - rectA.getX(), rectA.getRight() - rectB.getRight()); } else if (rectB.getX() <= rectA.getX() && rectB.getRight() >= rectA.getRight()) { overlapAmount[0] += Math.min(rectA.getX() - rectB.getX(), rectB.getRight() - rectA.getRight()); } if (rectA.getY() <= rectB.getY() && rectA.getBottom() >= rectB.getBottom()) { overlapAmount[1] += Math.min(rectB.getY() - rectA.getY(), rectA.getBottom() - rectB.getBottom()); } else if (rectB.getY() <= rectA.getY() && rectB.getBottom() >= rectA.getBottom()) { overlapAmount[1] += Math.min(rectA.getY() - rectB.getY(), rectB.getBottom() - rectA.getBottom()); } var slope = Math.abs((rectB.getCenterY() - rectA.getCenterY()) / (rectB.getCenterX() - rectA.getCenterX())); if (rectB.getCenterY() === rectA.getCenterY() && rectB.getCenterX() === rectA.getCenterX()) { slope = 1; } var moveByY = slope * overlapAmount[0]; var moveByX = overlapAmount[1] / slope; if (overlapAmount[0] < moveByX) { moveByX = overlapAmount[0]; } else { moveByY = overlapAmount[1]; } overlapAmount[0] = -1 * directions[0] * (moveByX / 2 + separationBuffer); overlapAmount[1] = -1 * directions[1] * (moveByY / 2 + separationBuffer); }; IGeometry.decideDirectionsForOverlappingNodes = function(rectA, rectB, directions) { if (rectA.getCenterX() < rectB.getCenterX()) { directions[0] = -1; } else { directions[0] = 1; } if (rectA.getCenterY() < rectB.getCenterY()) { directions[1] = -1; } else { directions[1] = 1; } }; IGeometry.getIntersection2 = function(rectA, rectB, result) { var p1x = rectA.getCenterX(); var p1y = rectA.getCenterY(); var p2x = rectB.getCenterX(); var p2y = rectB.getCenterY(); if (rectA.intersects(rectB)) { result[0] = p1x; result[1] = p1y; result[2] = p2x; result[3] = p2y; return true; } var topLeftAx = rectA.getX(); var topLeftAy = rectA.getY(); var topRightAx = rectA.getRight(); var bottomLeftAx = rectA.getX(); var bottomLeftAy = rectA.getBottom(); var bottomRightAx = rectA.getRight(); var halfWidthA = rectA.getWidthHalf(); var halfHeightA = rectA.getHeightHalf(); var topLeftBx = rectB.getX(); var topLeftBy = rectB.getY(); var topRightBx = rectB.getRight(); var bottomLeftBx = rectB.getX(); var bottomLeftBy = rectB.getBottom(); var bottomRightBx = rectB.getRight(); var halfWidthB = rectB.getWidthHalf(); var halfHeightB = rectB.getHeightHalf(); var clipPointAFound = false; var clipPointBFound = false; if (p1x === p2x) { if (p1y > p2y) { result[0] = p1x; result[1] = topLeftAy; result[2] = p2x; result[3] = bottomLeftBy; return false; } else if (p1y < p2y) { result[0] = p1x; result[1] = bottomLeftAy; result[2] = p2x; result[3] = topLeftBy; return false; } else { } } else if (p1y === p2y) { if (p1x > p2x) { result[0] = topLeftAx; result[1] = p1y; result[2] = topRightBx; result[3] = p2y; return false; } else if (p1x < p2x) { result[0] = topRightAx; result[1] = p1y; result[2] = topLeftBx; result[3] = p2y; return false; } else { } } else { var slopeA = rectA.height / rectA.width; var slopeB = rectB.height / rectB.width; var slopePrime = (p2y - p1y) / (p2x - p1x); var cardinalDirectionA = void 0; var cardinalDirectionB = void 0; var tempPointAx = void 0; var tempPointAy = void 0; var tempPointBx = void 0; var tempPointBy = void 0; if (-slopeA === slopePrime) { if (p1x > p2x) { result[0] = bottomLeftAx; result[1] = bottomLeftAy; clipPointAFound = true; } else { result[0] = topRightAx; result[1] = topLeftAy; clipPointAFound = true; } } else if (slopeA === slopePrime) { if (p1x > p2x) { result[0] = topLeftAx; result[1] = topLeftAy; clipPointAFound = true; } else { result[0] = bottomRightAx; result[1] = bottomLeftAy; clipPointAFound = true; } } if (-slopeB === slopePrime) { if (p2x > p1x) { result[2] = bottomLeftBx; result[3] = bottomLeftBy; clipPointBFound = true; } else { result[2] = topRightBx; result[3] = topLeftBy; clipPointBFound = true; } } else if (slopeB === slopePrime) { if (p2x > p1x) { result[2] = topLeftBx; result[3] = topLeftBy; clipPointBFound = true; } else { result[2] = bottomRightBx; result[3] = bottomLeftBy; clipPointBFound = true; } } if (clipPointAFound && clipPointBFound) { return false; } if (p1x > p2x) { if (p1y > p2y) { cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 4); cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 2); } else { cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 3); cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 1); } } else { if (p1y > p2y) { cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 1); cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 3); } else { cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 2); cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 4); } } if (!clipPointAFound) { switch (cardinalDirectionA) { case 1: tempPointAy = topLeftAy; tempPointAx = p1x + -halfHeightA / slopePrime; result[0] = tempPointAx; result[1] = tempPointAy; break; case 2: tempPointAx = bottomRightAx; tempPointAy = p1y + halfWidthA * slopePrime; result[0] = tempPointAx; result[1] = tempPointAy; break; case 3: tempPointAy = bottomLeftAy; tempPointAx = p1x + halfHeightA / slopePrime; result[0] = tempPointAx; result[1] = tempPointAy; break; case 4: tempPointAx = bottomLeftAx; tempPointAy = p1y + -halfWidthA * slopePrime; result[0] = tempPointAx; result[1] = tempPointAy; break; } } if (!clipPointBFound) { switch (cardinalDirectionB) { case 1: tempPointBy = topLeftBy; tempPointBx = p2x + -halfHeightB / slopePrime; result[2] = tempPointBx; result[3] = tempPointBy; break; case 2: tempPointBx = bottomRightBx; tempPointBy = p2y + halfWidthB * slopePrime; result[2] = tempPointBx; result[3] = tempPointBy; break; case 3: tempPointBy = bottomLeftBy; tempPointBx = p2x + halfHeightB / slopePrime; result[2] = tempPointBx; result[3] = tempPointBy; break; case 4: tempPointBx = bottomLeftBx; tempPointBy = p2y + -halfWidthB * slopePrime; result[2] = tempPointBx; result[3] = tempPointBy; break; } } } return false; }; IGeometry.getCardinalDirection = function(slope, slopePrime, line2) { if (slope > slopePrime) { return line2; } else { return 1 + line2 % 4; } }; IGeometry.getIntersection = function(s1, s2, f1, f2) { if (f2 == null) { return this.getIntersection2(s1, s2, f1); } var x1 = s1.x; var y1 = s1.y; var x22 = s2.x; var y22 = s2.y; var x32 = f1.x; var y32 = f1.y; var x42 = f2.x; var y42 = f2.y; var x5 = void 0, y6 = void 0; var a1 = void 0, a2 = void 0, b1 = void 0, b22 = void 0, c1 = void 0, c22 = void 0; var denom = void 0; a1 = y22 - y1; b1 = x1 - x22; c1 = x22 * y1 - x1 * y22; a2 = y42 - y32; b22 = x32 - x42; c22 = x42 * y32 - x32 * y42; denom = a1 * b22 - a2 * b1; if (denom === 0) { return null; } x5 = (b1 * c22 - b22 * c1) / denom; y6 = (a2 * c1 - a1 * c22) / denom; return new Point3(x5, y6); }; IGeometry.angleOfVector = function(Cx, Cy, Nx, Ny) { var C_angle = void 0; if (Cx !== Nx) { C_angle = Math.atan((Ny - Cy) / (Nx - Cx)); if (Nx < Cx) { C_angle += Math.PI; } else if (Ny < Cy) { C_angle += this.TWO_PI; } } else if (Ny < Cy) { C_angle = this.ONE_AND_HALF_PI; } else { C_angle = this.HALF_PI; } return C_angle; }; IGeometry.doIntersect = function(p1, p22, p3, p4) { var a2 = p1.x; var b3 = p1.y; var c3 = p22.x; var d3 = p22.y; var p5 = p3.x; var q3 = p3.y; var r2 = p4.x; var s2 = p4.y; var det = (c3 - a2) * (s2 - q3) - (r2 - p5) * (d3 - b3); if (det === 0) { return false; } else { var lambda = ((s2 - q3) * (r2 - a2) + (p5 - r2) * (s2 - b3)) / det; var gamma2 = ((b3 - d3) * (r2 - a2) + (c3 - a2) * (s2 - b3)) / det; return 0 < lambda && lambda < 1 && 0 < gamma2 && gamma2 < 1; } }; IGeometry.findCircleLineIntersections = function(Ex, Ey, Lx, Ly, Cx, Cy, r2) { var a2 = (Lx - Ex) * (Lx - Ex) + (Ly - Ey) * (Ly - Ey); var b3 = 2 * ((Ex - Cx) * (Lx - Ex) + (Ey - Cy) * (Ly - Ey)); var c3 = (Ex - Cx) * (Ex - Cx) + (Ey - Cy) * (Ey - Cy) - r2 * r2; var disc = b3 * b3 - 4 * a2 * c3; if (disc >= 0) { var t13 = (-b3 + Math.sqrt(b3 * b3 - 4 * a2 * c3)) / (2 * a2); var t22 = (-b3 - Math.sqrt(b3 * b3 - 4 * a2 * c3)) / (2 * a2); var intersections = null; if (t13 >= 0 && t13 <= 1) { return [t13]; } if (t22 >= 0 && t22 <= 1) { return [t22]; } return intersections; } else return null; }; IGeometry.HALF_PI = 0.5 * Math.PI; IGeometry.ONE_AND_HALF_PI = 1.5 * Math.PI; IGeometry.TWO_PI = 2 * Math.PI; IGeometry.THREE_PI = 3 * Math.PI; module3.exports = IGeometry; }), /* 9 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function IMath() { } __name(IMath, "IMath"); IMath.sign = function(value2) { if (value2 > 0) { return 1; } else if (value2 < 0) { return -1; } else { return 0; } }; IMath.floor = function(value2) { return value2 < 0 ? Math.ceil(value2) : Math.floor(value2); }; IMath.ceil = function(value2) { return value2 < 0 ? Math.floor(value2) : Math.ceil(value2); }; module3.exports = IMath; }), /* 10 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function Integer() { } __name(Integer, "Integer"); Integer.MAX_VALUE = 2147483647; Integer.MIN_VALUE = -2147483648; module3.exports = Integer; }), /* 11 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var _createClass2 = /* @__PURE__ */ (function() { function defineProperties(target, props) { for (var i2 = 0; i2 < props.length; i2++) { var descriptor = props[i2]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } __name(defineProperties, "defineProperties"); return function(Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); function _classCallCheck2(instance2, Constructor) { if (!(instance2 instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } __name(_classCallCheck2, "_classCallCheck"); var nodeFrom = /* @__PURE__ */ __name(function nodeFrom2(value2) { return { value: value2, next: null, prev: null }; }, "nodeFrom"); var add3 = /* @__PURE__ */ __name(function add4(prev2, node2, next3, list) { if (prev2 !== null) { prev2.next = node2; } else { list.head = node2; } if (next3 !== null) { next3.prev = node2; } else { list.tail = node2; } node2.prev = prev2; node2.next = next3; list.length++; return node2; }, "add"); var _remove = /* @__PURE__ */ __name(function _remove2(node2, list) { var prev2 = node2.prev, next3 = node2.next; if (prev2 !== null) { prev2.next = next3; } else { list.head = next3; } if (next3 !== null) { next3.prev = prev2; } else { list.tail = prev2; } node2.prev = node2.next = null; list.length--; return node2; }, "_remove"); var LinkedList = (function() { function LinkedList2(vals) { var _this = this; _classCallCheck2(this, LinkedList2); this.length = 0; this.head = null; this.tail = null; if (vals != null) { vals.forEach(function(v3) { return _this.push(v3); }); } } __name(LinkedList2, "LinkedList"); _createClass2(LinkedList2, [{ key: "size", value: /* @__PURE__ */ __name(function size4() { return this.length; }, "size") }, { key: "insertBefore", value: /* @__PURE__ */ __name(function insertBefore(val, otherNode) { return add3(otherNode.prev, nodeFrom(val), otherNode, this); }, "insertBefore") }, { key: "insertAfter", value: /* @__PURE__ */ __name(function insertAfter(val, otherNode) { return add3(otherNode, nodeFrom(val), otherNode.next, this); }, "insertAfter") }, { key: "insertNodeBefore", value: /* @__PURE__ */ __name(function insertNodeBefore(newNode, otherNode) { return add3(otherNode.prev, newNode, otherNode, this); }, "insertNodeBefore") }, { key: "insertNodeAfter", value: /* @__PURE__ */ __name(function insertNodeAfter(newNode, otherNode) { return add3(otherNode, newNode, otherNode.next, this); }, "insertNodeAfter") }, { key: "push", value: /* @__PURE__ */ __name(function push3(val) { return add3(this.tail, nodeFrom(val), null, this); }, "push") }, { key: "unshift", value: /* @__PURE__ */ __name(function unshift(val) { return add3(null, nodeFrom(val), this.head, this); }, "unshift") }, { key: "remove", value: /* @__PURE__ */ __name(function remove3(node2) { return _remove(node2, this); }, "remove") }, { key: "pop", value: /* @__PURE__ */ __name(function pop() { return _remove(this.tail, this).value; }, "pop") }, { key: "popNode", value: /* @__PURE__ */ __name(function popNode() { return _remove(this.tail, this); }, "popNode") }, { key: "shift", value: /* @__PURE__ */ __name(function shift2() { return _remove(this.head, this).value; }, "shift") }, { key: "shiftNode", value: /* @__PURE__ */ __name(function shiftNode() { return _remove(this.head, this); }, "shiftNode") }, { key: "get_object_at", value: /* @__PURE__ */ __name(function get_object_at(index) { if (index <= this.length()) { var i2 = 1; var current = this.head; while (i2 < index) { current = current.next; i2++; } return current.value; } }, "get_object_at") }, { key: "set_object_at", value: /* @__PURE__ */ __name(function set_object_at(index, value2) { if (index <= this.length()) { var i2 = 1; var current = this.head; while (i2 < index) { current = current.next; i2++; } current.value = value2; } }, "set_object_at") }]); return LinkedList2; })(); module3.exports = LinkedList; }), /* 12 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function Point3(x5, y6, p3) { this.x = null; this.y = null; if (x5 == null && y6 == null && p3 == null) { this.x = 0; this.y = 0; } else if (typeof x5 == "number" && typeof y6 == "number" && p3 == null) { this.x = x5; this.y = y6; } else if (x5.constructor.name == "Point" && y6 == null && p3 == null) { p3 = x5; this.x = p3.x; this.y = p3.y; } } __name(Point3, "Point"); Point3.prototype.getX = function() { return this.x; }; Point3.prototype.getY = function() { return this.y; }; Point3.prototype.getLocation = function() { return new Point3(this.x, this.y); }; Point3.prototype.setLocation = function(x5, y6, p3) { if (x5.constructor.name == "Point" && y6 == null && p3 == null) { p3 = x5; this.setLocation(p3.x, p3.y); } else if (typeof x5 == "number" && typeof y6 == "number" && p3 == null) { if (parseInt(x5) == x5 && parseInt(y6) == y6) { this.move(x5, y6); } else { this.x = Math.floor(x5 + 0.5); this.y = Math.floor(y6 + 0.5); } } }; Point3.prototype.move = function(x5, y6) { this.x = x5; this.y = y6; }; Point3.prototype.translate = function(dx, dy) { this.x += dx; this.y += dy; }; Point3.prototype.equals = function(obj) { if (obj.constructor.name == "Point") { var pt = obj; return this.x == pt.x && this.y == pt.y; } return this == obj; }; Point3.prototype.toString = function() { return new Point3().constructor.name + "[x=" + this.x + ",y=" + this.y + "]"; }; module3.exports = Point3; }), /* 13 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function RectangleD(x5, y6, width3, height2) { this.x = 0; this.y = 0; this.width = 0; this.height = 0; if (x5 != null && y6 != null && width3 != null && height2 != null) { this.x = x5; this.y = y6; this.width = width3; this.height = height2; } } __name(RectangleD, "RectangleD"); RectangleD.prototype.getX = function() { return this.x; }; RectangleD.prototype.setX = function(x5) { this.x = x5; }; RectangleD.prototype.getY = function() { return this.y; }; RectangleD.prototype.setY = function(y6) { this.y = y6; }; RectangleD.prototype.getWidth = function() { return this.width; }; RectangleD.prototype.setWidth = function(width3) { this.width = width3; }; RectangleD.prototype.getHeight = function() { return this.height; }; RectangleD.prototype.setHeight = function(height2) { this.height = height2; }; RectangleD.prototype.getRight = function() { return this.x + this.width; }; RectangleD.prototype.getBottom = function() { return this.y + this.height; }; RectangleD.prototype.intersects = function(a2) { if (this.getRight() < a2.x) { return false; } if (this.getBottom() < a2.y) { return false; } if (a2.getRight() < this.x) { return false; } if (a2.getBottom() < this.y) { return false; } return true; }; RectangleD.prototype.getCenterX = function() { return this.x + this.width / 2; }; RectangleD.prototype.getMinX = function() { return this.getX(); }; RectangleD.prototype.getMaxX = function() { return this.getX() + this.width; }; RectangleD.prototype.getCenterY = function() { return this.y + this.height / 2; }; RectangleD.prototype.getMinY = function() { return this.getY(); }; RectangleD.prototype.getMaxY = function() { return this.getY() + this.height; }; RectangleD.prototype.getWidthHalf = function() { return this.width / 2; }; RectangleD.prototype.getHeightHalf = function() { return this.height / 2; }; module3.exports = RectangleD; }), /* 14 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var _typeof2 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { return typeof obj; } : function(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; function UniqueIDGeneretor() { } __name(UniqueIDGeneretor, "UniqueIDGeneretor"); UniqueIDGeneretor.lastID = 0; UniqueIDGeneretor.createID = function(obj) { if (UniqueIDGeneretor.isPrimitive(obj)) { return obj; } if (obj.uniqueID != null) { return obj.uniqueID; } obj.uniqueID = UniqueIDGeneretor.getString(); UniqueIDGeneretor.lastID++; return obj.uniqueID; }; UniqueIDGeneretor.getString = function(id30) { if (id30 == null) id30 = UniqueIDGeneretor.lastID; return "Object#" + id30; }; UniqueIDGeneretor.isPrimitive = function(arg) { var type3 = typeof arg === "undefined" ? "undefined" : _typeof2(arg); return arg == null || type3 != "object" && type3 != "function"; }; module3.exports = UniqueIDGeneretor; }), /* 15 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function _toConsumableArray2(arr) { if (Array.isArray(arr)) { for (var i2 = 0, arr2 = Array(arr.length); i2 < arr.length; i2++) { arr2[i2] = arr[i2]; } return arr2; } else { return Array.from(arr); } } __name(_toConsumableArray2, "_toConsumableArray"); var LayoutConstants = __webpack_require__(0); var LGraphManager = __webpack_require__(7); var LNode = __webpack_require__(3); var LEdge = __webpack_require__(1); var LGraph = __webpack_require__(6); var PointD = __webpack_require__(5); var Transform2 = __webpack_require__(17); var Emitter4 = __webpack_require__(29); function Layout2(isRemoteUse) { Emitter4.call(this); this.layoutQuality = LayoutConstants.QUALITY; this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; this.incremental = LayoutConstants.DEFAULT_INCREMENTAL; this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT; this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT; this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD; this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES; this.edgeToDummyNodes = /* @__PURE__ */ new Map(); this.graphManager = new LGraphManager(this); this.isLayoutFinished = false; this.isSubLayout = false; this.isRemoteUse = false; if (isRemoteUse != null) { this.isRemoteUse = isRemoteUse; } } __name(Layout2, "Layout"); Layout2.RANDOM_SEED = 1; Layout2.prototype = Object.create(Emitter4.prototype); Layout2.prototype.getGraphManager = function() { return this.graphManager; }; Layout2.prototype.getAllNodes = function() { return this.graphManager.getAllNodes(); }; Layout2.prototype.getAllEdges = function() { return this.graphManager.getAllEdges(); }; Layout2.prototype.getAllNodesToApplyGravitation = function() { return this.graphManager.getAllNodesToApplyGravitation(); }; Layout2.prototype.newGraphManager = function() { var gm = new LGraphManager(this); this.graphManager = gm; return gm; }; Layout2.prototype.newGraph = function(vGraph) { return new LGraph(null, this.graphManager, vGraph); }; Layout2.prototype.newNode = function(vNode) { return new LNode(this.graphManager, vNode); }; Layout2.prototype.newEdge = function(vEdge) { return new LEdge(null, null, vEdge); }; Layout2.prototype.checkLayoutSuccess = function() { return this.graphManager.getRoot() == null || this.graphManager.getRoot().getNodes().length == 0 || this.graphManager.includesInvalidEdge(); }; Layout2.prototype.runLayout = function() { this.isLayoutFinished = false; if (this.tilingPreLayout) { this.tilingPreLayout(); } this.initParameters(); var isLayoutSuccessfull; if (this.checkLayoutSuccess()) { isLayoutSuccessfull = false; } else { isLayoutSuccessfull = this.layout(); } if (LayoutConstants.ANIMATE === "during") { return false; } if (isLayoutSuccessfull) { if (!this.isSubLayout) { this.doPostLayout(); } } if (this.tilingPostLayout) { this.tilingPostLayout(); } this.isLayoutFinished = true; return isLayoutSuccessfull; }; Layout2.prototype.doPostLayout = function() { if (!this.incremental) { this.transform(); } this.update(); }; Layout2.prototype.update2 = function() { if (this.createBendsAsNeeded) { this.createBendpointsFromDummyNodes(); this.graphManager.resetAllEdges(); } if (!this.isRemoteUse) { var edge; var allEdges = this.graphManager.getAllEdges(); for (var i2 = 0; i2 < allEdges.length; i2++) { edge = allEdges[i2]; } var node2; var nodes5 = this.graphManager.getRoot().getNodes(); for (var i2 = 0; i2 < nodes5.length; i2++) { node2 = nodes5[i2]; } this.update(this.graphManager.getRoot()); } }; Layout2.prototype.update = function(obj) { if (obj == null) { this.update2(); } else if (obj instanceof LNode) { var node2 = obj; if (node2.getChild() != null) { var nodes5 = node2.getChild().getNodes(); for (var i2 = 0; i2 < nodes5.length; i2++) { update(nodes5[i2]); } } if (node2.vGraphObject != null) { var vNode = node2.vGraphObject; vNode.update(node2); } } else if (obj instanceof LEdge) { var edge = obj; if (edge.vGraphObject != null) { var vEdge = edge.vGraphObject; vEdge.update(edge); } } else if (obj instanceof LGraph) { var graph = obj; if (graph.vGraphObject != null) { var vGraph = graph.vGraphObject; vGraph.update(graph); } } }; Layout2.prototype.initParameters = function() { if (!this.isSubLayout) { this.layoutQuality = LayoutConstants.QUALITY; this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT; this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD; this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT; this.incremental = LayoutConstants.DEFAULT_INCREMENTAL; this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES; } if (this.animationDuringLayout) { this.animationOnLayout = false; } }; Layout2.prototype.transform = function(newLeftTop) { if (newLeftTop == void 0) { this.transform(new PointD(0, 0)); } else { var trans = new Transform2(); var leftTop = this.graphManager.getRoot().updateLeftTop(); if (leftTop != null) { trans.setWorldOrgX(newLeftTop.x); trans.setWorldOrgY(newLeftTop.y); trans.setDeviceOrgX(leftTop.x); trans.setDeviceOrgY(leftTop.y); var nodes5 = this.getAllNodes(); var node2; for (var i2 = 0; i2 < nodes5.length; i2++) { node2 = nodes5[i2]; node2.transform(trans); } } } }; Layout2.prototype.positionNodesRandomly = function(graph) { if (graph == void 0) { this.positionNodesRandomly(this.getGraphManager().getRoot()); this.getGraphManager().getRoot().updateBounds(true); } else { var lNode; var childGraph; var nodes5 = graph.getNodes(); for (var i2 = 0; i2 < nodes5.length; i2++) { lNode = nodes5[i2]; childGraph = lNode.getChild(); if (childGraph == null) { lNode.scatter(); } else if (childGraph.getNodes().length == 0) { lNode.scatter(); } else { this.positionNodesRandomly(childGraph); lNode.updateBounds(); } } } }; Layout2.prototype.getFlatForest = function() { var flatForest = []; var isForest = true; var allNodes = this.graphManager.getRoot().getNodes(); var isFlat = true; for (var i2 = 0; i2 < allNodes.length; i2++) { if (allNodes[i2].getChild() != null) { isFlat = false; } } if (!isFlat) { return flatForest; } var visited = /* @__PURE__ */ new Set(); var toBeVisited = []; var parents3 = /* @__PURE__ */ new Map(); var unProcessedNodes = []; unProcessedNodes = unProcessedNodes.concat(allNodes); while (unProcessedNodes.length > 0 && isForest) { toBeVisited.push(unProcessedNodes[0]); while (toBeVisited.length > 0 && isForest) { var currentNode = toBeVisited[0]; toBeVisited.splice(0, 1); visited.add(currentNode); var neighborEdges = currentNode.getEdges(); for (var i2 = 0; i2 < neighborEdges.length; i2++) { var currentNeighbor = neighborEdges[i2].getOtherEnd(currentNode); if (parents3.get(currentNode) != currentNeighbor) { if (!visited.has(currentNeighbor)) { toBeVisited.push(currentNeighbor); parents3.set(currentNeighbor, currentNode); } else { isForest = false; break; } } } } if (!isForest) { flatForest = []; } else { var temp = [].concat(_toConsumableArray2(visited)); flatForest.push(temp); for (var i2 = 0; i2 < temp.length; i2++) { var value2 = temp[i2]; var index = unProcessedNodes.indexOf(value2); if (index > -1) { unProcessedNodes.splice(index, 1); } } visited = /* @__PURE__ */ new Set(); parents3 = /* @__PURE__ */ new Map(); } } return flatForest; }; Layout2.prototype.createDummyNodesForBendpoints = function(edge) { var dummyNodes = []; var prev2 = edge.source; var graph = this.graphManager.calcLowestCommonAncestor(edge.source, edge.target); for (var i2 = 0; i2 < edge.bendpoints.length; i2++) { var dummyNode = this.newNode(null); dummyNode.setRect(new Point(0, 0), new Dimension(1, 1)); graph.add(dummyNode); var dummyEdge = this.newEdge(null); this.graphManager.add(dummyEdge, prev2, dummyNode); dummyNodes.add(dummyNode); prev2 = dummyNode; } var dummyEdge = this.newEdge(null); this.graphManager.add(dummyEdge, prev2, edge.target); this.edgeToDummyNodes.set(edge, dummyNodes); if (edge.isInterGraph()) { this.graphManager.remove(edge); } else { graph.remove(edge); } return dummyNodes; }; Layout2.prototype.createBendpointsFromDummyNodes = function() { var edges3 = []; edges3 = edges3.concat(this.graphManager.getAllEdges()); edges3 = [].concat(_toConsumableArray2(this.edgeToDummyNodes.keys())).concat(edges3); for (var k2 = 0; k2 < edges3.length; k2++) { var lEdge = edges3[k2]; if (lEdge.bendpoints.length > 0) { var path4 = this.edgeToDummyNodes.get(lEdge); for (var i2 = 0; i2 < path4.length; i2++) { var dummyNode = path4[i2]; var p3 = new PointD(dummyNode.getCenterX(), dummyNode.getCenterY()); var ebp = lEdge.bendpoints.get(i2); ebp.x = p3.x; ebp.y = p3.y; dummyNode.getOwner().remove(dummyNode); } this.graphManager.add(lEdge, lEdge.source, lEdge.target); } } }; Layout2.transform = function(sliderValue, defaultValue, minDiv, maxMul) { if (minDiv != void 0 && maxMul != void 0) { var value2 = defaultValue; if (sliderValue <= 50) { var minValue = defaultValue / minDiv; value2 -= (defaultValue - minValue) / 50 * (50 - sliderValue); } else { var maxValue = defaultValue * maxMul; value2 += (maxValue - defaultValue) / 50 * (sliderValue - 50); } return value2; } else { var a2, b3; if (sliderValue <= 50) { a2 = 9 * defaultValue / 500; b3 = defaultValue / 10; } else { a2 = 9 * defaultValue / 50; b3 = -8 * defaultValue; } return a2 * sliderValue + b3; } }; Layout2.findCenterOfTree = function(nodes5) { var list = []; list = list.concat(nodes5); var removedNodes = []; var remainingDegrees = /* @__PURE__ */ new Map(); var foundCenter = false; var centerNode = null; if (list.length == 1 || list.length == 2) { foundCenter = true; centerNode = list[0]; } for (var i2 = 0; i2 < list.length; i2++) { var node2 = list[i2]; var degree = node2.getNeighborsList().size; remainingDegrees.set(node2, node2.getNeighborsList().size); if (degree == 1) { removedNodes.push(node2); } } var tempList = []; tempList = tempList.concat(removedNodes); while (!foundCenter) { var tempList2 = []; tempList2 = tempList2.concat(tempList); tempList = []; for (var i2 = 0; i2 < list.length; i2++) { var node2 = list[i2]; var index = list.indexOf(node2); if (index >= 0) { list.splice(index, 1); } var neighbours = node2.getNeighborsList(); neighbours.forEach(function(neighbour) { if (removedNodes.indexOf(neighbour) < 0) { var otherDegree = remainingDegrees.get(neighbour); var newDegree = otherDegree - 1; if (newDegree == 1) { tempList.push(neighbour); } remainingDegrees.set(neighbour, newDegree); } }); } removedNodes = removedNodes.concat(tempList); if (list.length == 1 || list.length == 2) { foundCenter = true; centerNode = list[0]; } } return centerNode; }; Layout2.prototype.setGraphManager = function(gm) { this.graphManager = gm; }; module3.exports = Layout2; }), /* 16 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function RandomSeed() { } __name(RandomSeed, "RandomSeed"); RandomSeed.seed = 1; RandomSeed.x = 0; RandomSeed.nextDouble = function() { RandomSeed.x = Math.sin(RandomSeed.seed++) * 1e4; return RandomSeed.x - Math.floor(RandomSeed.x); }; module3.exports = RandomSeed; }), /* 17 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var PointD = __webpack_require__(5); function Transform2(x5, y6) { this.lworldOrgX = 0; this.lworldOrgY = 0; this.ldeviceOrgX = 0; this.ldeviceOrgY = 0; this.lworldExtX = 1; this.lworldExtY = 1; this.ldeviceExtX = 1; this.ldeviceExtY = 1; } __name(Transform2, "Transform"); Transform2.prototype.getWorldOrgX = function() { return this.lworldOrgX; }; Transform2.prototype.setWorldOrgX = function(wox) { this.lworldOrgX = wox; }; Transform2.prototype.getWorldOrgY = function() { return this.lworldOrgY; }; Transform2.prototype.setWorldOrgY = function(woy) { this.lworldOrgY = woy; }; Transform2.prototype.getWorldExtX = function() { return this.lworldExtX; }; Transform2.prototype.setWorldExtX = function(wex) { this.lworldExtX = wex; }; Transform2.prototype.getWorldExtY = function() { return this.lworldExtY; }; Transform2.prototype.setWorldExtY = function(wey) { this.lworldExtY = wey; }; Transform2.prototype.getDeviceOrgX = function() { return this.ldeviceOrgX; }; Transform2.prototype.setDeviceOrgX = function(dox) { this.ldeviceOrgX = dox; }; Transform2.prototype.getDeviceOrgY = function() { return this.ldeviceOrgY; }; Transform2.prototype.setDeviceOrgY = function(doy) { this.ldeviceOrgY = doy; }; Transform2.prototype.getDeviceExtX = function() { return this.ldeviceExtX; }; Transform2.prototype.setDeviceExtX = function(dex) { this.ldeviceExtX = dex; }; Transform2.prototype.getDeviceExtY = function() { return this.ldeviceExtY; }; Transform2.prototype.setDeviceExtY = function(dey) { this.ldeviceExtY = dey; }; Transform2.prototype.transformX = function(x5) { var xDevice = 0; var worldExtX = this.lworldExtX; if (worldExtX != 0) { xDevice = this.ldeviceOrgX + (x5 - this.lworldOrgX) * this.ldeviceExtX / worldExtX; } return xDevice; }; Transform2.prototype.transformY = function(y6) { var yDevice = 0; var worldExtY = this.lworldExtY; if (worldExtY != 0) { yDevice = this.ldeviceOrgY + (y6 - this.lworldOrgY) * this.ldeviceExtY / worldExtY; } return yDevice; }; Transform2.prototype.inverseTransformX = function(x5) { var xWorld = 0; var deviceExtX = this.ldeviceExtX; if (deviceExtX != 0) { xWorld = this.lworldOrgX + (x5 - this.ldeviceOrgX) * this.lworldExtX / deviceExtX; } return xWorld; }; Transform2.prototype.inverseTransformY = function(y6) { var yWorld = 0; var deviceExtY = this.ldeviceExtY; if (deviceExtY != 0) { yWorld = this.lworldOrgY + (y6 - this.ldeviceOrgY) * this.lworldExtY / deviceExtY; } return yWorld; }; Transform2.prototype.inverseTransformPoint = function(inPoint) { var outPoint = new PointD(this.inverseTransformX(inPoint.x), this.inverseTransformY(inPoint.y)); return outPoint; }; module3.exports = Transform2; }), /* 18 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function _toConsumableArray2(arr) { if (Array.isArray(arr)) { for (var i2 = 0, arr2 = Array(arr.length); i2 < arr.length; i2++) { arr2[i2] = arr[i2]; } return arr2; } else { return Array.from(arr); } } __name(_toConsumableArray2, "_toConsumableArray"); var Layout2 = __webpack_require__(15); var FDLayoutConstants = __webpack_require__(4); var LayoutConstants = __webpack_require__(0); var IGeometry = __webpack_require__(8); var IMath = __webpack_require__(9); function FDLayout() { Layout2.call(this); this.useSmartIdealEdgeLengthCalculation = FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION; this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH; this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH; this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR; this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR; this.displacementThresholdPerNode = 3 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100; this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; this.initialCoolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; this.totalDisplacement = 0; this.oldTotalDisplacement = 0; this.maxIterations = FDLayoutConstants.MAX_ITERATIONS; } __name(FDLayout, "FDLayout"); FDLayout.prototype = Object.create(Layout2.prototype); for (var prop in Layout2) { FDLayout[prop] = Layout2[prop]; } FDLayout.prototype.initParameters = function() { Layout2.prototype.initParameters.call(this, arguments); this.totalIterations = 0; this.notAnimatedIterations = 0; this.useFRGridVariant = FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION; this.grid = []; }; FDLayout.prototype.calcIdealEdgeLengths = function() { var edge; var originalIdealLength; var lcaDepth; var source; var target; var sizeOfSourceInLca; var sizeOfTargetInLca; var allEdges = this.getGraphManager().getAllEdges(); for (var i2 = 0; i2 < allEdges.length; i2++) { edge = allEdges[i2]; originalIdealLength = edge.idealLength; if (edge.isInterGraph) { source = edge.getSource(); target = edge.getTarget(); sizeOfSourceInLca = edge.getSourceInLca().getEstimatedSize(); sizeOfTargetInLca = edge.getTargetInLca().getEstimatedSize(); if (this.useSmartIdealEdgeLengthCalculation) { edge.idealLength += sizeOfSourceInLca + sizeOfTargetInLca - 2 * LayoutConstants.SIMPLE_NODE_SIZE; } lcaDepth = edge.getLca().getInclusionTreeDepth(); edge.idealLength += originalIdealLength * FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR * (source.getInclusionTreeDepth() + target.getInclusionTreeDepth() - 2 * lcaDepth); } } }; FDLayout.prototype.initSpringEmbedder = function() { var s2 = this.getAllNodes().length; if (this.incremental) { if (s2 > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) { this.coolingFactor = Math.max(this.coolingFactor * FDLayoutConstants.COOLING_ADAPTATION_FACTOR, this.coolingFactor - (s2 - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * this.coolingFactor * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR)); } this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL; } else { if (s2 > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) { this.coolingFactor = Math.max(FDLayoutConstants.COOLING_ADAPTATION_FACTOR, 1 - (s2 - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR)); } else { this.coolingFactor = 1; } this.initialCoolingFactor = this.coolingFactor; this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT; } this.maxIterations = Math.max(this.getAllNodes().length * 5, this.maxIterations); this.displacementThresholdPerNode = 3 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100; this.totalDisplacementThreshold = this.displacementThresholdPerNode * this.getAllNodes().length; this.repulsionRange = this.calcRepulsionRange(); }; FDLayout.prototype.calcSpringForces = function() { var lEdges = this.getAllEdges(); var edge; for (var i2 = 0; i2 < lEdges.length; i2++) { edge = lEdges[i2]; this.calcSpringForce(edge, edge.idealLength); } }; FDLayout.prototype.calcRepulsionForces = function() { var gridUpdateAllowed = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true; var forceToNodeSurroundingUpdate = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; var i2, j3; var nodeA, nodeB; var lNodes = this.getAllNodes(); var processedNodeSet; if (this.useFRGridVariant) { if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed) { this.updateGrid(); } processedNodeSet = /* @__PURE__ */ new Set(); for (i2 = 0; i2 < lNodes.length; i2++) { nodeA = lNodes[i2]; this.calculateRepulsionForceOfANode(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate); processedNodeSet.add(nodeA); } } else { for (i2 = 0; i2 < lNodes.length; i2++) { nodeA = lNodes[i2]; for (j3 = i2 + 1; j3 < lNodes.length; j3++) { nodeB = lNodes[j3]; if (nodeA.getOwner() != nodeB.getOwner()) { continue; } this.calcRepulsionForce(nodeA, nodeB); } } } }; FDLayout.prototype.calcGravitationalForces = function() { var node2; var lNodes = this.getAllNodesToApplyGravitation(); for (var i2 = 0; i2 < lNodes.length; i2++) { node2 = lNodes[i2]; this.calcGravitationalForce(node2); } }; FDLayout.prototype.moveNodes = function() { var lNodes = this.getAllNodes(); var node2; for (var i2 = 0; i2 < lNodes.length; i2++) { node2 = lNodes[i2]; node2.move(); } }; FDLayout.prototype.calcSpringForce = function(edge, idealLength) { var sourceNode = edge.getSource(); var targetNode = edge.getTarget(); var length2; var springForce; var springForceX; var springForceY; if (this.uniformLeafNodeSizes && sourceNode.getChild() == null && targetNode.getChild() == null) { edge.updateLengthSimple(); } else { edge.updateLength(); if (edge.isOverlapingSourceAndTarget) { return; } } length2 = edge.getLength(); if (length2 == 0) return; springForce = edge.edgeElasticity * (length2 - idealLength); springForceX = springForce * (edge.lengthX / length2); springForceY = springForce * (edge.lengthY / length2); sourceNode.springForceX += springForceX; sourceNode.springForceY += springForceY; targetNode.springForceX -= springForceX; targetNode.springForceY -= springForceY; }; FDLayout.prototype.calcRepulsionForce = function(nodeA, nodeB) { var rectA = nodeA.getRect(); var rectB = nodeB.getRect(); var overlapAmount = new Array(2); var clipPoints = new Array(4); var distanceX; var distanceY; var distanceSquared; var distance2; var repulsionForce; var repulsionForceX; var repulsionForceY; if (rectA.intersects(rectB)) { IGeometry.calcSeparationAmount(rectA, rectB, overlapAmount, FDLayoutConstants.DEFAULT_EDGE_LENGTH / 2); repulsionForceX = 2 * overlapAmount[0]; repulsionForceY = 2 * overlapAmount[1]; var childrenConstant = nodeA.noOfChildren * nodeB.noOfChildren / (nodeA.noOfChildren + nodeB.noOfChildren); nodeA.repulsionForceX -= childrenConstant * repulsionForceX; nodeA.repulsionForceY -= childrenConstant * repulsionForceY; nodeB.repulsionForceX += childrenConstant * repulsionForceX; nodeB.repulsionForceY += childrenConstant * repulsionForceY; } else { if (this.uniformLeafNodeSizes && nodeA.getChild() == null && nodeB.getChild() == null) { distanceX = rectB.getCenterX() - rectA.getCenterX(); distanceY = rectB.getCenterY() - rectA.getCenterY(); } else { IGeometry.getIntersection(rectA, rectB, clipPoints); distanceX = clipPoints[2] - clipPoints[0]; distanceY = clipPoints[3] - clipPoints[1]; } if (Math.abs(distanceX) < FDLayoutConstants.MIN_REPULSION_DIST) { distanceX = IMath.sign(distanceX) * FDLayoutConstants.MIN_REPULSION_DIST; } if (Math.abs(distanceY) < FDLayoutConstants.MIN_REPULSION_DIST) { distanceY = IMath.sign(distanceY) * FDLayoutConstants.MIN_REPULSION_DIST; } distanceSquared = distanceX * distanceX + distanceY * distanceY; distance2 = Math.sqrt(distanceSquared); repulsionForce = (nodeA.nodeRepulsion / 2 + nodeB.nodeRepulsion / 2) * nodeA.noOfChildren * nodeB.noOfChildren / distanceSquared; repulsionForceX = repulsionForce * distanceX / distance2; repulsionForceY = repulsionForce * distanceY / distance2; nodeA.repulsionForceX -= repulsionForceX; nodeA.repulsionForceY -= repulsionForceY; nodeB.repulsionForceX += repulsionForceX; nodeB.repulsionForceY += repulsionForceY; } }; FDLayout.prototype.calcGravitationalForce = function(node2) { var ownerGraph; var ownerCenterX; var ownerCenterY; var distanceX; var distanceY; var absDistanceX; var absDistanceY; var estimatedSize; ownerGraph = node2.getOwner(); ownerCenterX = (ownerGraph.getRight() + ownerGraph.getLeft()) / 2; ownerCenterY = (ownerGraph.getTop() + ownerGraph.getBottom()) / 2; distanceX = node2.getCenterX() - ownerCenterX; distanceY = node2.getCenterY() - ownerCenterY; absDistanceX = Math.abs(distanceX) + node2.getWidth() / 2; absDistanceY = Math.abs(distanceY) + node2.getHeight() / 2; if (node2.getOwner() == this.graphManager.getRoot()) { estimatedSize = ownerGraph.getEstimatedSize() * this.gravityRangeFactor; if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) { node2.gravitationForceX = -this.gravityConstant * distanceX; node2.gravitationForceY = -this.gravityConstant * distanceY; } } else { estimatedSize = ownerGraph.getEstimatedSize() * this.compoundGravityRangeFactor; if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) { node2.gravitationForceX = -this.gravityConstant * distanceX * this.compoundGravityConstant; node2.gravitationForceY = -this.gravityConstant * distanceY * this.compoundGravityConstant; } } }; FDLayout.prototype.isConverged = function() { var converged; var oscilating = false; if (this.totalIterations > this.maxIterations / 3) { oscilating = Math.abs(this.totalDisplacement - this.oldTotalDisplacement) < 2; } converged = this.totalDisplacement < this.totalDisplacementThreshold; this.oldTotalDisplacement = this.totalDisplacement; return converged || oscilating; }; FDLayout.prototype.animate = function() { if (this.animationDuringLayout && !this.isSubLayout) { if (this.notAnimatedIterations == this.animationPeriod) { this.update(); this.notAnimatedIterations = 0; } else { this.notAnimatedIterations++; } } }; FDLayout.prototype.calcNoOfChildrenForAllNodes = function() { var node2; var allNodes = this.graphManager.getAllNodes(); for (var i2 = 0; i2 < allNodes.length; i2++) { node2 = allNodes[i2]; node2.noOfChildren = node2.getNoOfChildren(); } }; FDLayout.prototype.calcGrid = function(graph) { var sizeX = 0; var sizeY = 0; sizeX = parseInt(Math.ceil((graph.getRight() - graph.getLeft()) / this.repulsionRange)); sizeY = parseInt(Math.ceil((graph.getBottom() - graph.getTop()) / this.repulsionRange)); var grid = new Array(sizeX); for (var i2 = 0; i2 < sizeX; i2++) { grid[i2] = new Array(sizeY); } for (var i2 = 0; i2 < sizeX; i2++) { for (var j3 = 0; j3 < sizeY; j3++) { grid[i2][j3] = new Array(); } } return grid; }; FDLayout.prototype.addNodeToGrid = function(v3, left3, top2) { var startX2 = 0; var finishX = 0; var startY2 = 0; var finishY = 0; startX2 = parseInt(Math.floor((v3.getRect().x - left3) / this.repulsionRange)); finishX = parseInt(Math.floor((v3.getRect().width + v3.getRect().x - left3) / this.repulsionRange)); startY2 = parseInt(Math.floor((v3.getRect().y - top2) / this.repulsionRange)); finishY = parseInt(Math.floor((v3.getRect().height + v3.getRect().y - top2) / this.repulsionRange)); for (var i2 = startX2; i2 <= finishX; i2++) { for (var j3 = startY2; j3 <= finishY; j3++) { this.grid[i2][j3].push(v3); v3.setGridCoordinates(startX2, finishX, startY2, finishY); } } }; FDLayout.prototype.updateGrid = function() { var i2; var nodeA; var lNodes = this.getAllNodes(); this.grid = this.calcGrid(this.graphManager.getRoot()); for (i2 = 0; i2 < lNodes.length; i2++) { nodeA = lNodes[i2]; this.addNodeToGrid(nodeA, this.graphManager.getRoot().getLeft(), this.graphManager.getRoot().getTop()); } }; FDLayout.prototype.calculateRepulsionForceOfANode = function(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate) { if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed || forceToNodeSurroundingUpdate) { var surrounding = /* @__PURE__ */ new Set(); nodeA.surrounding = new Array(); var nodeB; var grid = this.grid; for (var i2 = nodeA.startX - 1; i2 < nodeA.finishX + 2; i2++) { for (var j3 = nodeA.startY - 1; j3 < nodeA.finishY + 2; j3++) { if (!(i2 < 0 || j3 < 0 || i2 >= grid.length || j3 >= grid[0].length)) { for (var k2 = 0; k2 < grid[i2][j3].length; k2++) { nodeB = grid[i2][j3][k2]; if (nodeA.getOwner() != nodeB.getOwner() || nodeA == nodeB) { continue; } if (!processedNodeSet.has(nodeB) && !surrounding.has(nodeB)) { var distanceX = Math.abs(nodeA.getCenterX() - nodeB.getCenterX()) - (nodeA.getWidth() / 2 + nodeB.getWidth() / 2); var distanceY = Math.abs(nodeA.getCenterY() - nodeB.getCenterY()) - (nodeA.getHeight() / 2 + nodeB.getHeight() / 2); if (distanceX <= this.repulsionRange && distanceY <= this.repulsionRange) { surrounding.add(nodeB); } } } } } } nodeA.surrounding = [].concat(_toConsumableArray2(surrounding)); } for (i2 = 0; i2 < nodeA.surrounding.length; i2++) { this.calcRepulsionForce(nodeA, nodeA.surrounding[i2]); } }; FDLayout.prototype.calcRepulsionRange = function() { return 0; }; module3.exports = FDLayout; }), /* 19 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var LEdge = __webpack_require__(1); var FDLayoutConstants = __webpack_require__(4); function FDLayoutEdge(source, target, vEdge) { LEdge.call(this, source, target, vEdge); this.idealLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH; this.edgeElasticity = FDLayoutConstants.DEFAULT_SPRING_STRENGTH; } __name(FDLayoutEdge, "FDLayoutEdge"); FDLayoutEdge.prototype = Object.create(LEdge.prototype); for (var prop in LEdge) { FDLayoutEdge[prop] = LEdge[prop]; } module3.exports = FDLayoutEdge; }), /* 20 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var LNode = __webpack_require__(3); var FDLayoutConstants = __webpack_require__(4); function FDLayoutNode(gm, loc, size4, vNode) { LNode.call(this, gm, loc, size4, vNode); this.nodeRepulsion = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH; this.springForceX = 0; this.springForceY = 0; this.repulsionForceX = 0; this.repulsionForceY = 0; this.gravitationForceX = 0; this.gravitationForceY = 0; this.displacementX = 0; this.displacementY = 0; this.startX = 0; this.finishX = 0; this.startY = 0; this.finishY = 0; this.surrounding = []; } __name(FDLayoutNode, "FDLayoutNode"); FDLayoutNode.prototype = Object.create(LNode.prototype); for (var prop in LNode) { FDLayoutNode[prop] = LNode[prop]; } FDLayoutNode.prototype.setGridCoordinates = function(_startX, _finishX, _startY, _finishY) { this.startX = _startX; this.finishX = _finishX; this.startY = _startY; this.finishY = _finishY; }; module3.exports = FDLayoutNode; }), /* 21 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function DimensionD2(width3, height2) { this.width = 0; this.height = 0; if (width3 !== null && height2 !== null) { this.height = height2; this.width = width3; } } __name(DimensionD2, "DimensionD"); DimensionD2.prototype.getWidth = function() { return this.width; }; DimensionD2.prototype.setWidth = function(width3) { this.width = width3; }; DimensionD2.prototype.getHeight = function() { return this.height; }; DimensionD2.prototype.setHeight = function(height2) { this.height = height2; }; module3.exports = DimensionD2; }), /* 22 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var UniqueIDGeneretor = __webpack_require__(14); function HashMap() { this.map = {}; this.keys = []; } __name(HashMap, "HashMap"); HashMap.prototype.put = function(key, value2) { var theId = UniqueIDGeneretor.createID(key); if (!this.contains(theId)) { this.map[theId] = value2; this.keys.push(key); } }; HashMap.prototype.contains = function(key) { var theId = UniqueIDGeneretor.createID(key); return this.map[key] != null; }; HashMap.prototype.get = function(key) { var theId = UniqueIDGeneretor.createID(key); return this.map[theId]; }; HashMap.prototype.keySet = function() { return this.keys; }; module3.exports = HashMap; }), /* 23 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var UniqueIDGeneretor = __webpack_require__(14); function HashSet() { this.set = {}; } __name(HashSet, "HashSet"); ; HashSet.prototype.add = function(obj) { var theId = UniqueIDGeneretor.createID(obj); if (!this.contains(theId)) this.set[theId] = obj; }; HashSet.prototype.remove = function(obj) { delete this.set[UniqueIDGeneretor.createID(obj)]; }; HashSet.prototype.clear = function() { this.set = {}; }; HashSet.prototype.contains = function(obj) { return this.set[UniqueIDGeneretor.createID(obj)] == obj; }; HashSet.prototype.isEmpty = function() { return this.size() === 0; }; HashSet.prototype.size = function() { return Object.keys(this.set).length; }; HashSet.prototype.addAllTo = function(list) { var keys2 = Object.keys(this.set); var length2 = keys2.length; for (var i2 = 0; i2 < length2; i2++) { list.push(this.set[keys2[i2]]); } }; HashSet.prototype.size = function() { return Object.keys(this.set).length; }; HashSet.prototype.addAll = function(list) { var s2 = list.length; for (var i2 = 0; i2 < s2; i2++) { var v3 = list[i2]; this.add(v3); } }; module3.exports = HashSet; }), /* 24 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function Matrix() { } __name(Matrix, "Matrix"); Matrix.multMat = function(array1, array22) { var result = []; for (var i2 = 0; i2 < array1.length; i2++) { result[i2] = []; for (var j3 = 0; j3 < array22[0].length; j3++) { result[i2][j3] = 0; for (var k2 = 0; k2 < array1[0].length; k2++) { result[i2][j3] += array1[i2][k2] * array22[k2][j3]; } } } return result; }; Matrix.transpose = function(array4) { var result = []; for (var i2 = 0; i2 < array4[0].length; i2++) { result[i2] = []; for (var j3 = 0; j3 < array4.length; j3++) { result[i2][j3] = array4[j3][i2]; } } return result; }; Matrix.multCons = function(array4, constant3) { var result = []; for (var i2 = 0; i2 < array4.length; i2++) { result[i2] = array4[i2] * constant3; } return result; }; Matrix.minusOp = function(array1, array22) { var result = []; for (var i2 = 0; i2 < array1.length; i2++) { result[i2] = array1[i2] - array22[i2]; } return result; }; Matrix.dotProduct = function(array1, array22) { var product = 0; for (var i2 = 0; i2 < array1.length; i2++) { product += array1[i2] * array22[i2]; } return product; }; Matrix.mag = function(array4) { return Math.sqrt(this.dotProduct(array4, array4)); }; Matrix.normalize = function(array4) { var result = []; var magnitude = this.mag(array4); for (var i2 = 0; i2 < array4.length; i2++) { result[i2] = array4[i2] / magnitude; } return result; }; Matrix.multGamma = function(array4) { var result = []; var sum2 = 0; for (var i2 = 0; i2 < array4.length; i2++) { sum2 += array4[i2]; } sum2 *= -1 / array4.length; for (var _i = 0; _i < array4.length; _i++) { result[_i] = sum2 + array4[_i]; } return result; }; Matrix.multL = function(array4, C3, INV) { var result = []; var temp1 = []; var temp2 = []; for (var i2 = 0; i2 < C3[0].length; i2++) { var sum2 = 0; for (var j3 = 0; j3 < C3.length; j3++) { sum2 += -0.5 * C3[j3][i2] * array4[j3]; } temp1[i2] = sum2; } for (var _i2 = 0; _i2 < INV.length; _i2++) { var _sum = 0; for (var _j = 0; _j < INV.length; _j++) { _sum += INV[_i2][_j] * temp1[_j]; } temp2[_i2] = _sum; } for (var _i3 = 0; _i3 < C3.length; _i3++) { var _sum2 = 0; for (var _j2 = 0; _j2 < C3[0].length; _j2++) { _sum2 += C3[_i3][_j2] * temp2[_j2]; } result[_i3] = _sum2; } return result; }; module3.exports = Matrix; }), /* 25 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var _createClass2 = /* @__PURE__ */ (function() { function defineProperties(target, props) { for (var i2 = 0; i2 < props.length; i2++) { var descriptor = props[i2]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } __name(defineProperties, "defineProperties"); return function(Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); function _classCallCheck2(instance2, Constructor) { if (!(instance2 instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } __name(_classCallCheck2, "_classCallCheck"); var LinkedList = __webpack_require__(11); var Quicksort = (function() { function Quicksort2(A2, compareFunction) { _classCallCheck2(this, Quicksort2); if (compareFunction !== null || compareFunction !== void 0) this.compareFunction = this._defaultCompareFunction; var length2 = void 0; if (A2 instanceof LinkedList) length2 = A2.size(); else length2 = A2.length; this._quicksort(A2, 0, length2 - 1); } __name(Quicksort2, "Quicksort"); _createClass2(Quicksort2, [{ key: "_quicksort", value: /* @__PURE__ */ __name(function _quicksort(A2, p3, r2) { if (p3 < r2) { var q3 = this._partition(A2, p3, r2); this._quicksort(A2, p3, q3); this._quicksort(A2, q3 + 1, r2); } }, "_quicksort") }, { key: "_partition", value: /* @__PURE__ */ __name(function _partition(A2, p3, r2) { var x5 = this._get(A2, p3); var i2 = p3; var j3 = r2; while (true) { while (this.compareFunction(x5, this._get(A2, j3))) { j3--; } while (this.compareFunction(this._get(A2, i2), x5)) { i2++; } if (i2 < j3) { this._swap(A2, i2, j3); i2++; j3--; } else return j3; } }, "_partition") }, { key: "_get", value: /* @__PURE__ */ __name(function _get(object3, index) { if (object3 instanceof LinkedList) return object3.get_object_at(index); else return object3[index]; }, "_get") }, { key: "_set", value: /* @__PURE__ */ __name(function _set(object3, index, value2) { if (object3 instanceof LinkedList) object3.set_object_at(index, value2); else object3[index] = value2; }, "_set") }, { key: "_swap", value: /* @__PURE__ */ __name(function _swap(A2, i2, j3) { var temp = this._get(A2, i2); this._set(A2, i2, this._get(A2, j3)); this._set(A2, j3, temp); }, "_swap") }, { key: "_defaultCompareFunction", value: /* @__PURE__ */ __name(function _defaultCompareFunction(a2, b3) { return b3 > a2; }, "_defaultCompareFunction") }]); return Quicksort2; })(); module3.exports = Quicksort; }), /* 26 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function SVD() { } __name(SVD, "SVD"); ; SVD.svd = function(A2) { this.U = null; this.V = null; this.s = null; this.m = 0; this.n = 0; this.m = A2.length; this.n = A2[0].length; var nu = Math.min(this.m, this.n); this.s = (function(s2) { var a2 = []; while (s2-- > 0) { a2.push(0); } return a2; })(Math.min(this.m + 1, this.n)); this.U = (function(dims) { var allocate = /* @__PURE__ */ __name(function allocate2(dims2) { if (dims2.length == 0) { return 0; } else { var array4 = []; for (var i3 = 0; i3 < dims2[0]; i3++) { array4.push(allocate2(dims2.slice(1))); } return array4; } }, "allocate"); return allocate(dims); })([this.m, nu]); this.V = (function(dims) { var allocate = /* @__PURE__ */ __name(function allocate2(dims2) { if (dims2.length == 0) { return 0; } else { var array4 = []; for (var i3 = 0; i3 < dims2[0]; i3++) { array4.push(allocate2(dims2.slice(1))); } return array4; } }, "allocate"); return allocate(dims); })([this.n, this.n]); var e3 = (function(s2) { var a2 = []; while (s2-- > 0) { a2.push(0); } return a2; })(this.n); var work = (function(s2) { var a2 = []; while (s2-- > 0) { a2.push(0); } return a2; })(this.m); var wantu = true; var wantv = true; var nct = Math.min(this.m - 1, this.n); var nrt = Math.max(0, Math.min(this.n - 2, this.m)); for (var k2 = 0; k2 < Math.max(nct, nrt); k2++) { if (k2 < nct) { this.s[k2] = 0; for (var i2 = k2; i2 < this.m; i2++) { this.s[k2] = SVD.hypot(this.s[k2], A2[i2][k2]); } ; if (this.s[k2] !== 0) { if (A2[k2][k2] < 0) { this.s[k2] = -this.s[k2]; } for (var _i = k2; _i < this.m; _i++) { A2[_i][k2] /= this.s[k2]; } ; A2[k2][k2] += 1; } this.s[k2] = -this.s[k2]; } for (var j3 = k2 + 1; j3 < this.n; j3++) { if (/* @__PURE__ */ (function(lhs, rhs) { return lhs && rhs; })(k2 < nct, this.s[k2] !== 0)) { var t4 = 0; for (var _i2 = k2; _i2 < this.m; _i2++) { t4 += A2[_i2][k2] * A2[_i2][j3]; } ; t4 = -t4 / A2[k2][k2]; for (var _i3 = k2; _i3 < this.m; _i3++) { A2[_i3][j3] += t4 * A2[_i3][k2]; } ; } e3[j3] = A2[k2][j3]; } ; if (/* @__PURE__ */ (function(lhs, rhs) { return lhs && rhs; })(wantu, k2 < nct)) { for (var _i4 = k2; _i4 < this.m; _i4++) { this.U[_i4][k2] = A2[_i4][k2]; } ; } if (k2 < nrt) { e3[k2] = 0; for (var _i5 = k2 + 1; _i5 < this.n; _i5++) { e3[k2] = SVD.hypot(e3[k2], e3[_i5]); } ; if (e3[k2] !== 0) { if (e3[k2 + 1] < 0) { e3[k2] = -e3[k2]; } for (var _i6 = k2 + 1; _i6 < this.n; _i6++) { e3[_i6] /= e3[k2]; } ; e3[k2 + 1] += 1; } e3[k2] = -e3[k2]; if (/* @__PURE__ */ (function(lhs, rhs) { return lhs && rhs; })(k2 + 1 < this.m, e3[k2] !== 0)) { for (var _i7 = k2 + 1; _i7 < this.m; _i7++) { work[_i7] = 0; } ; for (var _j = k2 + 1; _j < this.n; _j++) { for (var _i8 = k2 + 1; _i8 < this.m; _i8++) { work[_i8] += e3[_j] * A2[_i8][_j]; } ; } ; for (var _j2 = k2 + 1; _j2 < this.n; _j2++) { var _t = -e3[_j2] / e3[k2 + 1]; for (var _i9 = k2 + 1; _i9 < this.m; _i9++) { A2[_i9][_j2] += _t * work[_i9]; } ; } ; } if (wantv) { for (var _i10 = k2 + 1; _i10 < this.n; _i10++) { this.V[_i10][k2] = e3[_i10]; } ; } } } ; var p3 = Math.min(this.n, this.m + 1); if (nct < this.n) { this.s[nct] = A2[nct][nct]; } if (this.m < p3) { this.s[p3 - 1] = 0; } if (nrt + 1 < p3) { e3[nrt] = A2[nrt][p3 - 1]; } e3[p3 - 1] = 0; if (wantu) { for (var _j3 = nct; _j3 < nu; _j3++) { for (var _i11 = 0; _i11 < this.m; _i11++) { this.U[_i11][_j3] = 0; } ; this.U[_j3][_j3] = 1; } ; for (var _k = nct - 1; _k >= 0; _k--) { if (this.s[_k] !== 0) { for (var _j4 = _k + 1; _j4 < nu; _j4++) { var _t2 = 0; for (var _i12 = _k; _i12 < this.m; _i12++) { _t2 += this.U[_i12][_k] * this.U[_i12][_j4]; } ; _t2 = -_t2 / this.U[_k][_k]; for (var _i13 = _k; _i13 < this.m; _i13++) { this.U[_i13][_j4] += _t2 * this.U[_i13][_k]; } ; } ; for (var _i14 = _k; _i14 < this.m; _i14++) { this.U[_i14][_k] = -this.U[_i14][_k]; } ; this.U[_k][_k] = 1 + this.U[_k][_k]; for (var _i15 = 0; _i15 < _k - 1; _i15++) { this.U[_i15][_k] = 0; } ; } else { for (var _i16 = 0; _i16 < this.m; _i16++) { this.U[_i16][_k] = 0; } ; this.U[_k][_k] = 1; } } ; } if (wantv) { for (var _k2 = this.n - 1; _k2 >= 0; _k2--) { if (/* @__PURE__ */ (function(lhs, rhs) { return lhs && rhs; })(_k2 < nrt, e3[_k2] !== 0)) { for (var _j5 = _k2 + 1; _j5 < nu; _j5++) { var _t3 = 0; for (var _i17 = _k2 + 1; _i17 < this.n; _i17++) { _t3 += this.V[_i17][_k2] * this.V[_i17][_j5]; } ; _t3 = -_t3 / this.V[_k2 + 1][_k2]; for (var _i18 = _k2 + 1; _i18 < this.n; _i18++) { this.V[_i18][_j5] += _t3 * this.V[_i18][_k2]; } ; } ; } for (var _i19 = 0; _i19 < this.n; _i19++) { this.V[_i19][_k2] = 0; } ; this.V[_k2][_k2] = 1; } ; } var pp = p3 - 1; var iter = 0; var eps = Math.pow(2, -52); var tiny = Math.pow(2, -966); while (p3 > 0) { var _k3 = void 0; var kase = void 0; for (_k3 = p3 - 2; _k3 >= -1; _k3--) { if (_k3 === -1) { break; } if (Math.abs(e3[_k3]) <= tiny + eps * (Math.abs(this.s[_k3]) + Math.abs(this.s[_k3 + 1]))) { e3[_k3] = 0; break; } } ; if (_k3 === p3 - 2) { kase = 4; } else { var ks = void 0; for (ks = p3 - 1; ks >= _k3; ks--) { if (ks === _k3) { break; } var _t4 = (ks !== p3 ? Math.abs(e3[ks]) : 0) + (ks !== _k3 + 1 ? Math.abs(e3[ks - 1]) : 0); if (Math.abs(this.s[ks]) <= tiny + eps * _t4) { this.s[ks] = 0; break; } } ; if (ks === _k3) { kase = 3; } else if (ks === p3 - 1) { kase = 1; } else { kase = 2; _k3 = ks; } } _k3++; switch (kase) { case 1: { var f2 = e3[p3 - 2]; e3[p3 - 2] = 0; for (var _j6 = p3 - 2; _j6 >= _k3; _j6--) { var _t5 = SVD.hypot(this.s[_j6], f2); var cs = this.s[_j6] / _t5; var sn = f2 / _t5; this.s[_j6] = _t5; if (_j6 !== _k3) { f2 = -sn * e3[_j6 - 1]; e3[_j6 - 1] = cs * e3[_j6 - 1]; } if (wantv) { for (var _i20 = 0; _i20 < this.n; _i20++) { _t5 = cs * this.V[_i20][_j6] + sn * this.V[_i20][p3 - 1]; this.V[_i20][p3 - 1] = -sn * this.V[_i20][_j6] + cs * this.V[_i20][p3 - 1]; this.V[_i20][_j6] = _t5; } ; } } ; } ; break; case 2: { var _f = e3[_k3 - 1]; e3[_k3 - 1] = 0; for (var _j7 = _k3; _j7 < p3; _j7++) { var _t6 = SVD.hypot(this.s[_j7], _f); var _cs = this.s[_j7] / _t6; var _sn = _f / _t6; this.s[_j7] = _t6; _f = -_sn * e3[_j7]; e3[_j7] = _cs * e3[_j7]; if (wantu) { for (var _i21 = 0; _i21 < this.m; _i21++) { _t6 = _cs * this.U[_i21][_j7] + _sn * this.U[_i21][_k3 - 1]; this.U[_i21][_k3 - 1] = -_sn * this.U[_i21][_j7] + _cs * this.U[_i21][_k3 - 1]; this.U[_i21][_j7] = _t6; } ; } } ; } ; break; case 3: { var scale2 = Math.max(Math.max(Math.max(Math.max(Math.abs(this.s[p3 - 1]), Math.abs(this.s[p3 - 2])), Math.abs(e3[p3 - 2])), Math.abs(this.s[_k3])), Math.abs(e3[_k3])); var sp = this.s[p3 - 1] / scale2; var spm1 = this.s[p3 - 2] / scale2; var epm1 = e3[p3 - 2] / scale2; var sk = this.s[_k3] / scale2; var ek = e3[_k3] / scale2; var b3 = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2; var c3 = sp * epm1 * (sp * epm1); var shift2 = 0; if (/* @__PURE__ */ (function(lhs, rhs) { return lhs || rhs; })(b3 !== 0, c3 !== 0)) { shift2 = Math.sqrt(b3 * b3 + c3); if (b3 < 0) { shift2 = -shift2; } shift2 = c3 / (b3 + shift2); } var _f2 = (sk + sp) * (sk - sp) + shift2; var g2 = sk * ek; for (var _j8 = _k3; _j8 < p3 - 1; _j8++) { var _t7 = SVD.hypot(_f2, g2); var _cs2 = _f2 / _t7; var _sn2 = g2 / _t7; if (_j8 !== _k3) { e3[_j8 - 1] = _t7; } _f2 = _cs2 * this.s[_j8] + _sn2 * e3[_j8]; e3[_j8] = _cs2 * e3[_j8] - _sn2 * this.s[_j8]; g2 = _sn2 * this.s[_j8 + 1]; this.s[_j8 + 1] = _cs2 * this.s[_j8 + 1]; if (wantv) { for (var _i22 = 0; _i22 < this.n; _i22++) { _t7 = _cs2 * this.V[_i22][_j8] + _sn2 * this.V[_i22][_j8 + 1]; this.V[_i22][_j8 + 1] = -_sn2 * this.V[_i22][_j8] + _cs2 * this.V[_i22][_j8 + 1]; this.V[_i22][_j8] = _t7; } ; } _t7 = SVD.hypot(_f2, g2); _cs2 = _f2 / _t7; _sn2 = g2 / _t7; this.s[_j8] = _t7; _f2 = _cs2 * e3[_j8] + _sn2 * this.s[_j8 + 1]; this.s[_j8 + 1] = -_sn2 * e3[_j8] + _cs2 * this.s[_j8 + 1]; g2 = _sn2 * e3[_j8 + 1]; e3[_j8 + 1] = _cs2 * e3[_j8 + 1]; if (wantu && _j8 < this.m - 1) { for (var _i23 = 0; _i23 < this.m; _i23++) { _t7 = _cs2 * this.U[_i23][_j8] + _sn2 * this.U[_i23][_j8 + 1]; this.U[_i23][_j8 + 1] = -_sn2 * this.U[_i23][_j8] + _cs2 * this.U[_i23][_j8 + 1]; this.U[_i23][_j8] = _t7; } ; } } ; e3[p3 - 2] = _f2; iter = iter + 1; } ; break; case 4: { if (this.s[_k3] <= 0) { this.s[_k3] = this.s[_k3] < 0 ? -this.s[_k3] : 0; if (wantv) { for (var _i24 = 0; _i24 <= pp; _i24++) { this.V[_i24][_k3] = -this.V[_i24][_k3]; } ; } } while (_k3 < pp) { if (this.s[_k3] >= this.s[_k3 + 1]) { break; } var _t8 = this.s[_k3]; this.s[_k3] = this.s[_k3 + 1]; this.s[_k3 + 1] = _t8; if (wantv && _k3 < this.n - 1) { for (var _i25 = 0; _i25 < this.n; _i25++) { _t8 = this.V[_i25][_k3 + 1]; this.V[_i25][_k3 + 1] = this.V[_i25][_k3]; this.V[_i25][_k3] = _t8; } ; } if (wantu && _k3 < this.m - 1) { for (var _i26 = 0; _i26 < this.m; _i26++) { _t8 = this.U[_i26][_k3 + 1]; this.U[_i26][_k3 + 1] = this.U[_i26][_k3]; this.U[_i26][_k3] = _t8; } ; } _k3++; } ; iter = 0; p3--; } ; break; } } ; var result = { U: this.U, V: this.V, S: this.s }; return result; }; SVD.hypot = function(a2, b3) { var r2 = void 0; if (Math.abs(a2) > Math.abs(b3)) { r2 = b3 / a2; r2 = Math.abs(a2) * Math.sqrt(1 + r2 * r2); } else if (b3 != 0) { r2 = a2 / b3; r2 = Math.abs(b3) * Math.sqrt(1 + r2 * r2); } else { r2 = 0; } return r2; }; module3.exports = SVD; }), /* 27 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var _createClass2 = /* @__PURE__ */ (function() { function defineProperties(target, props) { for (var i2 = 0; i2 < props.length; i2++) { var descriptor = props[i2]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } __name(defineProperties, "defineProperties"); return function(Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); function _classCallCheck2(instance2, Constructor) { if (!(instance2 instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } __name(_classCallCheck2, "_classCallCheck"); var NeedlemanWunsch = (function() { function NeedlemanWunsch2(sequence1, sequence2) { var match_score = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 1; var mismatch_penalty = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : -1; var gap_penalty = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : -1; _classCallCheck2(this, NeedlemanWunsch2); this.sequence1 = sequence1; this.sequence2 = sequence2; this.match_score = match_score; this.mismatch_penalty = mismatch_penalty; this.gap_penalty = gap_penalty; this.iMax = sequence1.length + 1; this.jMax = sequence2.length + 1; this.grid = new Array(this.iMax); for (var i2 = 0; i2 < this.iMax; i2++) { this.grid[i2] = new Array(this.jMax); for (var j3 = 0; j3 < this.jMax; j3++) { this.grid[i2][j3] = 0; } } this.tracebackGrid = new Array(this.iMax); for (var _i = 0; _i < this.iMax; _i++) { this.tracebackGrid[_i] = new Array(this.jMax); for (var _j = 0; _j < this.jMax; _j++) { this.tracebackGrid[_i][_j] = [null, null, null]; } } this.alignments = []; this.score = -1; this.computeGrids(); } __name(NeedlemanWunsch2, "NeedlemanWunsch"); _createClass2(NeedlemanWunsch2, [{ key: "getScore", value: /* @__PURE__ */ __name(function getScore() { return this.score; }, "getScore") }, { key: "getAlignments", value: /* @__PURE__ */ __name(function getAlignments2() { return this.alignments; }, "getAlignments") // Main dynamic programming procedure }, { key: "computeGrids", value: /* @__PURE__ */ __name(function computeGrids() { for (var j3 = 1; j3 < this.jMax; j3++) { this.grid[0][j3] = this.grid[0][j3 - 1] + this.gap_penalty; this.tracebackGrid[0][j3] = [false, false, true]; } for (var i2 = 1; i2 < this.iMax; i2++) { this.grid[i2][0] = this.grid[i2 - 1][0] + this.gap_penalty; this.tracebackGrid[i2][0] = [false, true, false]; } for (var _i2 = 1; _i2 < this.iMax; _i2++) { for (var _j2 = 1; _j2 < this.jMax; _j2++) { var diag = void 0; if (this.sequence1[_i2 - 1] === this.sequence2[_j2 - 1]) diag = this.grid[_i2 - 1][_j2 - 1] + this.match_score; else diag = this.grid[_i2 - 1][_j2 - 1] + this.mismatch_penalty; var up = this.grid[_i2 - 1][_j2] + this.gap_penalty; var left3 = this.grid[_i2][_j2 - 1] + this.gap_penalty; var maxOf = [diag, up, left3]; var indices = this.arrayAllMaxIndexes(maxOf); this.grid[_i2][_j2] = maxOf[indices[0]]; this.tracebackGrid[_i2][_j2] = [indices.includes(0), indices.includes(1), indices.includes(2)]; } } this.score = this.grid[this.iMax - 1][this.jMax - 1]; }, "computeGrids") // Gets all possible valid sequence combinations }, { key: "alignmentTraceback", value: /* @__PURE__ */ __name(function alignmentTraceback() { var inProcessAlignments = []; inProcessAlignments.push({ pos: [this.sequence1.length, this.sequence2.length], seq1: "", seq2: "" }); while (inProcessAlignments[0]) { var current = inProcessAlignments[0]; var directions = this.tracebackGrid[current.pos[0]][current.pos[1]]; if (directions[0]) { inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1] - 1], seq1: this.sequence1[current.pos[0] - 1] + current.seq1, seq2: this.sequence2[current.pos[1] - 1] + current.seq2 }); } if (directions[1]) { inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1]], seq1: this.sequence1[current.pos[0] - 1] + current.seq1, seq2: "-" + current.seq2 }); } if (directions[2]) { inProcessAlignments.push({ pos: [current.pos[0], current.pos[1] - 1], seq1: "-" + current.seq1, seq2: this.sequence2[current.pos[1] - 1] + current.seq2 }); } if (current.pos[0] === 0 && current.pos[1] === 0) this.alignments.push({ sequence1: current.seq1, sequence2: current.seq2 }); inProcessAlignments.shift(); } return this.alignments; }, "alignmentTraceback") // Helper Functions }, { key: "getAllIndexes", value: /* @__PURE__ */ __name(function getAllIndexes(arr, val) { var indexes = [], i2 = -1; while ((i2 = arr.indexOf(val, i2 + 1)) !== -1) { indexes.push(i2); } return indexes; }, "getAllIndexes") }, { key: "arrayAllMaxIndexes", value: /* @__PURE__ */ __name(function arrayAllMaxIndexes(array4) { return this.getAllIndexes(array4, Math.max.apply(null, array4)); }, "arrayAllMaxIndexes") }]); return NeedlemanWunsch2; })(); module3.exports = NeedlemanWunsch; }), /* 28 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; var layoutBase = /* @__PURE__ */ __name(function layoutBase2() { return; }, "layoutBase"); layoutBase.FDLayout = __webpack_require__(18); layoutBase.FDLayoutConstants = __webpack_require__(4); layoutBase.FDLayoutEdge = __webpack_require__(19); layoutBase.FDLayoutNode = __webpack_require__(20); layoutBase.DimensionD = __webpack_require__(21); layoutBase.HashMap = __webpack_require__(22); layoutBase.HashSet = __webpack_require__(23); layoutBase.IGeometry = __webpack_require__(8); layoutBase.IMath = __webpack_require__(9); layoutBase.Integer = __webpack_require__(10); layoutBase.Point = __webpack_require__(12); layoutBase.PointD = __webpack_require__(5); layoutBase.RandomSeed = __webpack_require__(16); layoutBase.RectangleD = __webpack_require__(13); layoutBase.Transform = __webpack_require__(17); layoutBase.UniqueIDGeneretor = __webpack_require__(14); layoutBase.Quicksort = __webpack_require__(25); layoutBase.LinkedList = __webpack_require__(11); layoutBase.LGraphObject = __webpack_require__(2); layoutBase.LGraph = __webpack_require__(6); layoutBase.LEdge = __webpack_require__(1); layoutBase.LGraphManager = __webpack_require__(7); layoutBase.LNode = __webpack_require__(3); layoutBase.Layout = __webpack_require__(15); layoutBase.LayoutConstants = __webpack_require__(0); layoutBase.NeedlemanWunsch = __webpack_require__(27); layoutBase.Matrix = __webpack_require__(24); layoutBase.SVD = __webpack_require__(26); module3.exports = layoutBase; }), /* 29 */ /***/ (function(module3, exports3, __webpack_require__) { "use strict"; function Emitter4() { this.listeners = []; } __name(Emitter4, "Emitter"); var p3 = Emitter4.prototype; p3.addListener = function(event3, callback) { this.listeners.push({ event: event3, callback }); }; p3.removeListener = function(event3, callback) { for (var i2 = this.listeners.length; i2 >= 0; i2--) { var l4 = this.listeners[i2]; if (l4.event === event3 && l4.callback === callback) { this.listeners.splice(i2, 1); } } }; p3.emit = function(event3, data5) { for (var i2 = 0; i2 < this.listeners.length; i2++) { var l4 = this.listeners[i2]; if (event3 === l4.event) { l4.callback(data5); } } }; module3.exports = Emitter4; }) /******/ ]) ); }); } }); // ../../node_modules/.pnpm/cose-base@2.2.0/node_modules/cose-base/cose-base.js var require_cose_base2 = __commonJS({ "../../node_modules/.pnpm/cose-base@2.2.0/node_modules/cose-base/cose-base.js"(exports2, module2) { "use strict"; (/* @__PURE__ */ __name((function webpackUniversalModuleDefinition(root3, factory) { if (typeof exports2 === "object" && typeof module2 === "object") module2.exports = factory(require_layout_base2()); else if (typeof define === "function" && define.amd) define(["layout-base"], factory); else if (typeof exports2 === "object") exports2["coseBase"] = factory(require_layout_base2()); else root3["coseBase"] = factory(root3["layoutBase"]); }), "webpackUniversalModuleDefinition"))(exports2, function(__WEBPACK_EXTERNAL_MODULE__551__) { return ( /******/ (() => { "use strict"; var __webpack_modules__ = { /***/ 45: ( /***/ ((module3, __unused_webpack_exports, __webpack_require__2) => { var coseBase = {}; coseBase.layoutBase = __webpack_require__2(551); coseBase.CoSEConstants = __webpack_require__2(806); coseBase.CoSEEdge = __webpack_require__2(767); coseBase.CoSEGraph = __webpack_require__2(880); coseBase.CoSEGraphManager = __webpack_require__2(578); coseBase.CoSELayout = __webpack_require__2(765); coseBase.CoSENode = __webpack_require__2(991); coseBase.ConstraintHandler = __webpack_require__2(902); module3.exports = coseBase; }) ), /***/ 806: ( /***/ ((module3, __unused_webpack_exports, __webpack_require__2) => { var FDLayoutConstants = __webpack_require__2(551).FDLayoutConstants; function CoSEConstants() { } __name(CoSEConstants, "CoSEConstants"); for (var prop in FDLayoutConstants) { CoSEConstants[prop] = FDLayoutConstants[prop]; } CoSEConstants.DEFAULT_USE_MULTI_LEVEL_SCALING = false; CoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH; CoSEConstants.DEFAULT_COMPONENT_SEPERATION = 60; CoSEConstants.TILE = true; CoSEConstants.TILING_PADDING_VERTICAL = 10; CoSEConstants.TILING_PADDING_HORIZONTAL = 10; CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = true; CoSEConstants.ENFORCE_CONSTRAINTS = true; CoSEConstants.APPLY_LAYOUT = true; CoSEConstants.RELAX_MOVEMENT_ON_CONSTRAINTS = true; CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = true; CoSEConstants.PURE_INCREMENTAL = CoSEConstants.DEFAULT_INCREMENTAL; module3.exports = CoSEConstants; }) ), /***/ 767: ( /***/ ((module3, __unused_webpack_exports, __webpack_require__2) => { var FDLayoutEdge = __webpack_require__2(551).FDLayoutEdge; function CoSEEdge(source, target, vEdge) { FDLayoutEdge.call(this, source, target, vEdge); } __name(CoSEEdge, "CoSEEdge"); CoSEEdge.prototype = Object.create(FDLayoutEdge.prototype); for (var prop in FDLayoutEdge) { CoSEEdge[prop] = FDLayoutEdge[prop]; } module3.exports = CoSEEdge; }) ), /***/ 880: ( /***/ ((module3, __unused_webpack_exports, __webpack_require__2) => { var LGraph = __webpack_require__2(551).LGraph; function CoSEGraph(parent4, graphMgr, vGraph) { LGraph.call(this, parent4, graphMgr, vGraph); } __name(CoSEGraph, "CoSEGraph"); CoSEGraph.prototype = Object.create(LGraph.prototype); for (var prop in LGraph) { CoSEGraph[prop] = LGraph[prop]; } module3.exports = CoSEGraph; }) ), /***/ 578: ( /***/ ((module3, __unused_webpack_exports, __webpack_require__2) => { var LGraphManager = __webpack_require__2(551).LGraphManager; function CoSEGraphManager(layout6) { LGraphManager.call(this, layout6); } __name(CoSEGraphManager, "CoSEGraphManager"); CoSEGraphManager.prototype = Object.create(LGraphManager.prototype); for (var prop in LGraphManager) { CoSEGraphManager[prop] = LGraphManager[prop]; } module3.exports = CoSEGraphManager; }) ), /***/ 765: ( /***/ ((module3, __unused_webpack_exports, __webpack_require__2) => { var FDLayout = __webpack_require__2(551).FDLayout; var CoSEGraphManager = __webpack_require__2(578); var CoSEGraph = __webpack_require__2(880); var CoSENode = __webpack_require__2(991); var CoSEEdge = __webpack_require__2(767); var CoSEConstants = __webpack_require__2(806); var ConstraintHandler = __webpack_require__2(902); var FDLayoutConstants = __webpack_require__2(551).FDLayoutConstants; var LayoutConstants = __webpack_require__2(551).LayoutConstants; var Point3 = __webpack_require__2(551).Point; var PointD = __webpack_require__2(551).PointD; var DimensionD2 = __webpack_require__2(551).DimensionD; var Layout2 = __webpack_require__2(551).Layout; var Integer = __webpack_require__2(551).Integer; var IGeometry = __webpack_require__2(551).IGeometry; var LGraph = __webpack_require__2(551).LGraph; var Transform2 = __webpack_require__2(551).Transform; var LinkedList = __webpack_require__2(551).LinkedList; function CoSELayout() { FDLayout.call(this); this.toBeTiled = {}; this.constraints = {}; } __name(CoSELayout, "CoSELayout"); CoSELayout.prototype = Object.create(FDLayout.prototype); for (var prop in FDLayout) { CoSELayout[prop] = FDLayout[prop]; } CoSELayout.prototype.newGraphManager = function() { var gm = new CoSEGraphManager(this); this.graphManager = gm; return gm; }; CoSELayout.prototype.newGraph = function(vGraph) { return new CoSEGraph(null, this.graphManager, vGraph); }; CoSELayout.prototype.newNode = function(vNode) { return new CoSENode(this.graphManager, vNode); }; CoSELayout.prototype.newEdge = function(vEdge) { return new CoSEEdge(null, null, vEdge); }; CoSELayout.prototype.initParameters = function() { FDLayout.prototype.initParameters.call(this, arguments); if (!this.isSubLayout) { if (CoSEConstants.DEFAULT_EDGE_LENGTH < 10) { this.idealEdgeLength = 10; } else { this.idealEdgeLength = CoSEConstants.DEFAULT_EDGE_LENGTH; } this.useSmartIdealEdgeLengthCalculation = CoSEConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION; this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH; this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH; this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR; this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR; this.prunedNodesAll = []; this.growTreeIterations = 0; this.afterGrowthIterations = 0; this.isTreeGrowing = false; this.isGrowthFinished = false; } }; CoSELayout.prototype.initSpringEmbedder = function() { FDLayout.prototype.initSpringEmbedder.call(this); this.coolingCycle = 0; this.maxCoolingCycle = this.maxIterations / FDLayoutConstants.CONVERGENCE_CHECK_PERIOD; this.finalTemperature = 0.04; this.coolingAdjuster = 1; }; CoSELayout.prototype.layout = function() { var createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; if (createBendsAsNeeded) { this.createBendpoints(); this.graphManager.resetAllEdges(); } this.level = 0; return this.classicLayout(); }; CoSELayout.prototype.classicLayout = function() { this.nodesWithGravity = this.calculateNodesToApplyGravitationTo(); this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity); this.calcNoOfChildrenForAllNodes(); this.graphManager.calcLowestCommonAncestors(); this.graphManager.calcInclusionTreeDepths(); this.graphManager.getRoot().calcEstimatedSize(); this.calcIdealEdgeLengths(); if (!this.incremental) { var forest = this.getFlatForest(); if (forest.length > 0) { this.positionNodesRadially(forest); } else { this.reduceTrees(); this.graphManager.resetAllNodesToApplyGravitation(); var allNodes = new Set(this.getAllNodes()); var intersection4 = this.nodesWithGravity.filter(function(x5) { return allNodes.has(x5); }); this.graphManager.setAllNodesToApplyGravitation(intersection4); this.positionNodesRandomly(); } } else { if (CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL) { this.reduceTrees(); this.graphManager.resetAllNodesToApplyGravitation(); var allNodes = new Set(this.getAllNodes()); var intersection4 = this.nodesWithGravity.filter(function(x5) { return allNodes.has(x5); }); this.graphManager.setAllNodesToApplyGravitation(intersection4); } } if (Object.keys(this.constraints).length > 0) { ConstraintHandler.handleConstraints(this); this.initConstraintVariables(); } this.initSpringEmbedder(); if (CoSEConstants.APPLY_LAYOUT) { this.runSpringEmbedder(); } return true; }; CoSELayout.prototype.tick = function() { this.totalIterations++; if (this.totalIterations === this.maxIterations && !this.isTreeGrowing && !this.isGrowthFinished) { if (this.prunedNodesAll.length > 0) { this.isTreeGrowing = true; } else { return true; } } if (this.totalIterations % FDLayoutConstants.CONVERGENCE_CHECK_PERIOD == 0 && !this.isTreeGrowing && !this.isGrowthFinished) { if (this.isConverged()) { if (this.prunedNodesAll.length > 0) { this.isTreeGrowing = true; } else { return true; } } this.coolingCycle++; if (this.layoutQuality == 0) { this.coolingAdjuster = this.coolingCycle; } else if (this.layoutQuality == 1) { this.coolingAdjuster = this.coolingCycle / 3; } this.coolingFactor = Math.max(this.initialCoolingFactor - Math.pow(this.coolingCycle, Math.log(100 * (this.initialCoolingFactor - this.finalTemperature)) / Math.log(this.maxCoolingCycle)) / 100 * this.coolingAdjuster, this.finalTemperature); this.animationPeriod = Math.ceil(this.initialAnimationPeriod * Math.sqrt(this.coolingFactor)); } if (this.isTreeGrowing) { if (this.growTreeIterations % 10 == 0) { if (this.prunedNodesAll.length > 0) { this.graphManager.updateBounds(); this.updateGrid(); this.growTree(this.prunedNodesAll); this.graphManager.resetAllNodesToApplyGravitation(); var allNodes = new Set(this.getAllNodes()); var intersection4 = this.nodesWithGravity.filter(function(x5) { return allNodes.has(x5); }); this.graphManager.setAllNodesToApplyGravitation(intersection4); this.graphManager.updateBounds(); this.updateGrid(); if (CoSEConstants.PURE_INCREMENTAL) this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL / 2; else this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; } else { this.isTreeGrowing = false; this.isGrowthFinished = true; } } this.growTreeIterations++; } if (this.isGrowthFinished) { if (this.isConverged()) { return true; } if (this.afterGrowthIterations % 10 == 0) { this.graphManager.updateBounds(); this.updateGrid(); } if (CoSEConstants.PURE_INCREMENTAL) this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL / 2 * ((100 - this.afterGrowthIterations) / 100); else this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL * ((100 - this.afterGrowthIterations) / 100); this.afterGrowthIterations++; } var gridUpdateAllowed = !this.isTreeGrowing && !this.isGrowthFinished; var forceToNodeSurroundingUpdate = this.growTreeIterations % 10 == 1 && this.isTreeGrowing || this.afterGrowthIterations % 10 == 1 && this.isGrowthFinished; this.totalDisplacement = 0; this.graphManager.updateBounds(); this.calcSpringForces(); this.calcRepulsionForces(gridUpdateAllowed, forceToNodeSurroundingUpdate); this.calcGravitationalForces(); this.moveNodes(); this.animate(); return false; }; CoSELayout.prototype.getPositionsData = function() { var allNodes = this.graphManager.getAllNodes(); var pData = {}; for (var i2 = 0; i2 < allNodes.length; i2++) { var rect3 = allNodes[i2].rect; var id30 = allNodes[i2].id; pData[id30] = { id: id30, x: rect3.getCenterX(), y: rect3.getCenterY(), w: rect3.width, h: rect3.height }; } return pData; }; CoSELayout.prototype.runSpringEmbedder = function() { this.initialAnimationPeriod = 25; this.animationPeriod = this.initialAnimationPeriod; var layoutEnded = false; if (FDLayoutConstants.ANIMATE === "during") { this.emit("layoutstarted"); } else { while (!layoutEnded) { layoutEnded = this.tick(); } this.graphManager.updateBounds(); } }; CoSELayout.prototype.moveNodes = function() { var lNodes = this.getAllNodes(); var node2; for (var i2 = 0; i2 < lNodes.length; i2++) { node2 = lNodes[i2]; node2.calculateDisplacement(); } if (Object.keys(this.constraints).length > 0) { this.updateDisplacements(); } for (var i2 = 0; i2 < lNodes.length; i2++) { node2 = lNodes[i2]; node2.move(); } }; CoSELayout.prototype.initConstraintVariables = function() { var self2 = this; this.idToNodeMap = /* @__PURE__ */ new Map(); this.fixedNodeSet = /* @__PURE__ */ new Set(); var allNodes = this.graphManager.getAllNodes(); for (var i2 = 0; i2 < allNodes.length; i2++) { var node2 = allNodes[i2]; this.idToNodeMap.set(node2.id, node2); } var calculateCompoundWeight = /* @__PURE__ */ __name(function calculateCompoundWeight2(compoundNode) { var nodes5 = compoundNode.getChild().getNodes(); var node3; var fixedNodeWeight2 = 0; for (var i3 = 0; i3 < nodes5.length; i3++) { node3 = nodes5[i3]; if (node3.getChild() == null) { if (self2.fixedNodeSet.has(node3.id)) { fixedNodeWeight2 += 100; } } else { fixedNodeWeight2 += calculateCompoundWeight2(node3); } } return fixedNodeWeight2; }, "calculateCompoundWeight"); if (this.constraints.fixedNodeConstraint) { this.constraints.fixedNodeConstraint.forEach(function(nodeData2) { self2.fixedNodeSet.add(nodeData2.nodeId); }); var allNodes = this.graphManager.getAllNodes(); var node2; for (var i2 = 0; i2 < allNodes.length; i2++) { node2 = allNodes[i2]; if (node2.getChild() != null) { var fixedNodeWeight = calculateCompoundWeight(node2); if (fixedNodeWeight > 0) { node2.fixedNodeWeight = fixedNodeWeight; } } } } if (this.constraints.relativePlacementConstraint) { var nodeToDummyForVerticalAlignment = /* @__PURE__ */ new Map(); var nodeToDummyForHorizontalAlignment = /* @__PURE__ */ new Map(); this.dummyToNodeForVerticalAlignment = /* @__PURE__ */ new Map(); this.dummyToNodeForHorizontalAlignment = /* @__PURE__ */ new Map(); this.fixedNodesOnHorizontal = /* @__PURE__ */ new Set(); this.fixedNodesOnVertical = /* @__PURE__ */ new Set(); this.fixedNodeSet.forEach(function(nodeId) { self2.fixedNodesOnHorizontal.add(nodeId); self2.fixedNodesOnVertical.add(nodeId); }); if (this.constraints.alignmentConstraint) { if (this.constraints.alignmentConstraint.vertical) { var verticalAlignment2 = this.constraints.alignmentConstraint.vertical; for (var i2 = 0; i2 < verticalAlignment2.length; i2++) { this.dummyToNodeForVerticalAlignment.set("dummy" + i2, []); verticalAlignment2[i2].forEach(function(nodeId) { nodeToDummyForVerticalAlignment.set(nodeId, "dummy" + i2); self2.dummyToNodeForVerticalAlignment.get("dummy" + i2).push(nodeId); if (self2.fixedNodeSet.has(nodeId)) { self2.fixedNodesOnHorizontal.add("dummy" + i2); } }); } } if (this.constraints.alignmentConstraint.horizontal) { var horizontalAlignment = this.constraints.alignmentConstraint.horizontal; for (var i2 = 0; i2 < horizontalAlignment.length; i2++) { this.dummyToNodeForHorizontalAlignment.set("dummy" + i2, []); horizontalAlignment[i2].forEach(function(nodeId) { nodeToDummyForHorizontalAlignment.set(nodeId, "dummy" + i2); self2.dummyToNodeForHorizontalAlignment.get("dummy" + i2).push(nodeId); if (self2.fixedNodeSet.has(nodeId)) { self2.fixedNodesOnVertical.add("dummy" + i2); } }); } } } if (CoSEConstants.RELAX_MOVEMENT_ON_CONSTRAINTS) { this.shuffle = function(array4) { var j3, x5, i3; for (i3 = array4.length - 1; i3 >= 2 * array4.length / 3; i3--) { j3 = Math.floor(Math.random() * (i3 + 1)); x5 = array4[i3]; array4[i3] = array4[j3]; array4[j3] = x5; } return array4; }; this.nodesInRelativeHorizontal = []; this.nodesInRelativeVertical = []; this.nodeToRelativeConstraintMapHorizontal = /* @__PURE__ */ new Map(); this.nodeToRelativeConstraintMapVertical = /* @__PURE__ */ new Map(); this.nodeToTempPositionMapHorizontal = /* @__PURE__ */ new Map(); this.nodeToTempPositionMapVertical = /* @__PURE__ */ new Map(); this.constraints.relativePlacementConstraint.forEach(function(constraint) { if (constraint.left) { var nodeIdLeft = nodeToDummyForVerticalAlignment.has(constraint.left) ? nodeToDummyForVerticalAlignment.get(constraint.left) : constraint.left; var nodeIdRight = nodeToDummyForVerticalAlignment.has(constraint.right) ? nodeToDummyForVerticalAlignment.get(constraint.right) : constraint.right; if (!self2.nodesInRelativeHorizontal.includes(nodeIdLeft)) { self2.nodesInRelativeHorizontal.push(nodeIdLeft); self2.nodeToRelativeConstraintMapHorizontal.set(nodeIdLeft, []); if (self2.dummyToNodeForVerticalAlignment.has(nodeIdLeft)) { self2.nodeToTempPositionMapHorizontal.set(nodeIdLeft, self2.idToNodeMap.get(self2.dummyToNodeForVerticalAlignment.get(nodeIdLeft)[0]).getCenterX()); } else { self2.nodeToTempPositionMapHorizontal.set(nodeIdLeft, self2.idToNodeMap.get(nodeIdLeft).getCenterX()); } } if (!self2.nodesInRelativeHorizontal.includes(nodeIdRight)) { self2.nodesInRelativeHorizontal.push(nodeIdRight); self2.nodeToRelativeConstraintMapHorizontal.set(nodeIdRight, []); if (self2.dummyToNodeForVerticalAlignment.has(nodeIdRight)) { self2.nodeToTempPositionMapHorizontal.set(nodeIdRight, self2.idToNodeMap.get(self2.dummyToNodeForVerticalAlignment.get(nodeIdRight)[0]).getCenterX()); } else { self2.nodeToTempPositionMapHorizontal.set(nodeIdRight, self2.idToNodeMap.get(nodeIdRight).getCenterX()); } } self2.nodeToRelativeConstraintMapHorizontal.get(nodeIdLeft).push({ right: nodeIdRight, gap: constraint.gap }); self2.nodeToRelativeConstraintMapHorizontal.get(nodeIdRight).push({ left: nodeIdLeft, gap: constraint.gap }); } else { var nodeIdTop = nodeToDummyForHorizontalAlignment.has(constraint.top) ? nodeToDummyForHorizontalAlignment.get(constraint.top) : constraint.top; var nodeIdBottom = nodeToDummyForHorizontalAlignment.has(constraint.bottom) ? nodeToDummyForHorizontalAlignment.get(constraint.bottom) : constraint.bottom; if (!self2.nodesInRelativeVertical.includes(nodeIdTop)) { self2.nodesInRelativeVertical.push(nodeIdTop); self2.nodeToRelativeConstraintMapVertical.set(nodeIdTop, []); if (self2.dummyToNodeForHorizontalAlignment.has(nodeIdTop)) { self2.nodeToTempPositionMapVertical.set(nodeIdTop, self2.idToNodeMap.get(self2.dummyToNodeForHorizontalAlignment.get(nodeIdTop)[0]).getCenterY()); } else { self2.nodeToTempPositionMapVertical.set(nodeIdTop, self2.idToNodeMap.get(nodeIdTop).getCenterY()); } } if (!self2.nodesInRelativeVertical.includes(nodeIdBottom)) { self2.nodesInRelativeVertical.push(nodeIdBottom); self2.nodeToRelativeConstraintMapVertical.set(nodeIdBottom, []); if (self2.dummyToNodeForHorizontalAlignment.has(nodeIdBottom)) { self2.nodeToTempPositionMapVertical.set(nodeIdBottom, self2.idToNodeMap.get(self2.dummyToNodeForHorizontalAlignment.get(nodeIdBottom)[0]).getCenterY()); } else { self2.nodeToTempPositionMapVertical.set(nodeIdBottom, self2.idToNodeMap.get(nodeIdBottom).getCenterY()); } } self2.nodeToRelativeConstraintMapVertical.get(nodeIdTop).push({ bottom: nodeIdBottom, gap: constraint.gap }); self2.nodeToRelativeConstraintMapVertical.get(nodeIdBottom).push({ top: nodeIdTop, gap: constraint.gap }); } }); } else { var subGraphOnHorizontal = /* @__PURE__ */ new Map(); var subGraphOnVertical = /* @__PURE__ */ new Map(); this.constraints.relativePlacementConstraint.forEach(function(constraint) { if (constraint.left) { var left3 = nodeToDummyForVerticalAlignment.has(constraint.left) ? nodeToDummyForVerticalAlignment.get(constraint.left) : constraint.left; var right3 = nodeToDummyForVerticalAlignment.has(constraint.right) ? nodeToDummyForVerticalAlignment.get(constraint.right) : constraint.right; if (subGraphOnHorizontal.has(left3)) { subGraphOnHorizontal.get(left3).push(right3); } else { subGraphOnHorizontal.set(left3, [right3]); } if (subGraphOnHorizontal.has(right3)) { subGraphOnHorizontal.get(right3).push(left3); } else { subGraphOnHorizontal.set(right3, [left3]); } } else { var top2 = nodeToDummyForHorizontalAlignment.has(constraint.top) ? nodeToDummyForHorizontalAlignment.get(constraint.top) : constraint.top; var bottom2 = nodeToDummyForHorizontalAlignment.has(constraint.bottom) ? nodeToDummyForHorizontalAlignment.get(constraint.bottom) : constraint.bottom; if (subGraphOnVertical.has(top2)) { subGraphOnVertical.get(top2).push(bottom2); } else { subGraphOnVertical.set(top2, [bottom2]); } if (subGraphOnVertical.has(bottom2)) { subGraphOnVertical.get(bottom2).push(top2); } else { subGraphOnVertical.set(bottom2, [top2]); } } }); var constructComponents = /* @__PURE__ */ __name(function constructComponents2(graph, fixedNodes) { var components3 = []; var isFixed = []; var queue = new LinkedList(); var visited = /* @__PURE__ */ new Set(); var count2 = 0; graph.forEach(function(value2, key) { if (!visited.has(key)) { components3[count2] = []; isFixed[count2] = false; var currentNode = key; queue.push(currentNode); visited.add(currentNode); components3[count2].push(currentNode); while (queue.length != 0) { currentNode = queue.shift(); if (fixedNodes.has(currentNode)) { isFixed[count2] = true; } var neighbors = graph.get(currentNode); neighbors.forEach(function(neighbor) { if (!visited.has(neighbor)) { queue.push(neighbor); visited.add(neighbor); components3[count2].push(neighbor); } }); } count2++; } }); return { components: components3, isFixed }; }, "constructComponents"); var resultOnHorizontal = constructComponents(subGraphOnHorizontal, self2.fixedNodesOnHorizontal); this.componentsOnHorizontal = resultOnHorizontal.components; this.fixedComponentsOnHorizontal = resultOnHorizontal.isFixed; var resultOnVertical = constructComponents(subGraphOnVertical, self2.fixedNodesOnVertical); this.componentsOnVertical = resultOnVertical.components; this.fixedComponentsOnVertical = resultOnVertical.isFixed; } } }; CoSELayout.prototype.updateDisplacements = function() { var self2 = this; if (this.constraints.fixedNodeConstraint) { this.constraints.fixedNodeConstraint.forEach(function(nodeData2) { var fixedNode = self2.idToNodeMap.get(nodeData2.nodeId); fixedNode.displacementX = 0; fixedNode.displacementY = 0; }); } if (this.constraints.alignmentConstraint) { if (this.constraints.alignmentConstraint.vertical) { var allVerticalAlignments = this.constraints.alignmentConstraint.vertical; for (var i2 = 0; i2 < allVerticalAlignments.length; i2++) { var totalDisplacementX = 0; for (var j3 = 0; j3 < allVerticalAlignments[i2].length; j3++) { if (this.fixedNodeSet.has(allVerticalAlignments[i2][j3])) { totalDisplacementX = 0; break; } totalDisplacementX += this.idToNodeMap.get(allVerticalAlignments[i2][j3]).displacementX; } var averageDisplacementX = totalDisplacementX / allVerticalAlignments[i2].length; for (var j3 = 0; j3 < allVerticalAlignments[i2].length; j3++) { this.idToNodeMap.get(allVerticalAlignments[i2][j3]).displacementX = averageDisplacementX; } } } if (this.constraints.alignmentConstraint.horizontal) { var allHorizontalAlignments = this.constraints.alignmentConstraint.horizontal; for (var i2 = 0; i2 < allHorizontalAlignments.length; i2++) { var totalDisplacementY = 0; for (var j3 = 0; j3 < allHorizontalAlignments[i2].length; j3++) { if (this.fixedNodeSet.has(allHorizontalAlignments[i2][j3])) { totalDisplacementY = 0; break; } totalDisplacementY += this.idToNodeMap.get(allHorizontalAlignments[i2][j3]).displacementY; } var averageDisplacementY = totalDisplacementY / allHorizontalAlignments[i2].length; for (var j3 = 0; j3 < allHorizontalAlignments[i2].length; j3++) { this.idToNodeMap.get(allHorizontalAlignments[i2][j3]).displacementY = averageDisplacementY; } } } } if (this.constraints.relativePlacementConstraint) { if (CoSEConstants.RELAX_MOVEMENT_ON_CONSTRAINTS) { if (this.totalIterations % 10 == 0) { this.shuffle(this.nodesInRelativeHorizontal); this.shuffle(this.nodesInRelativeVertical); } this.nodesInRelativeHorizontal.forEach(function(nodeId) { if (!self2.fixedNodesOnHorizontal.has(nodeId)) { var displacement = 0; if (self2.dummyToNodeForVerticalAlignment.has(nodeId)) { displacement = self2.idToNodeMap.get(self2.dummyToNodeForVerticalAlignment.get(nodeId)[0]).displacementX; } else { displacement = self2.idToNodeMap.get(nodeId).displacementX; } self2.nodeToRelativeConstraintMapHorizontal.get(nodeId).forEach(function(constraint) { if (constraint.right) { var diff2 = self2.nodeToTempPositionMapHorizontal.get(constraint.right) - self2.nodeToTempPositionMapHorizontal.get(nodeId) - displacement; if (diff2 < constraint.gap) { displacement -= constraint.gap - diff2; } } else { var diff2 = self2.nodeToTempPositionMapHorizontal.get(nodeId) - self2.nodeToTempPositionMapHorizontal.get(constraint.left) + displacement; if (diff2 < constraint.gap) { displacement += constraint.gap - diff2; } } }); self2.nodeToTempPositionMapHorizontal.set(nodeId, self2.nodeToTempPositionMapHorizontal.get(nodeId) + displacement); if (self2.dummyToNodeForVerticalAlignment.has(nodeId)) { self2.dummyToNodeForVerticalAlignment.get(nodeId).forEach(function(nodeId2) { self2.idToNodeMap.get(nodeId2).displacementX = displacement; }); } else { self2.idToNodeMap.get(nodeId).displacementX = displacement; } } }); this.nodesInRelativeVertical.forEach(function(nodeId) { if (!self2.fixedNodesOnHorizontal.has(nodeId)) { var displacement = 0; if (self2.dummyToNodeForHorizontalAlignment.has(nodeId)) { displacement = self2.idToNodeMap.get(self2.dummyToNodeForHorizontalAlignment.get(nodeId)[0]).displacementY; } else { displacement = self2.idToNodeMap.get(nodeId).displacementY; } self2.nodeToRelativeConstraintMapVertical.get(nodeId).forEach(function(constraint) { if (constraint.bottom) { var diff2 = self2.nodeToTempPositionMapVertical.get(constraint.bottom) - self2.nodeToTempPositionMapVertical.get(nodeId) - displacement; if (diff2 < constraint.gap) { displacement -= constraint.gap - diff2; } } else { var diff2 = self2.nodeToTempPositionMapVertical.get(nodeId) - self2.nodeToTempPositionMapVertical.get(constraint.top) + displacement; if (diff2 < constraint.gap) { displacement += constraint.gap - diff2; } } }); self2.nodeToTempPositionMapVertical.set(nodeId, self2.nodeToTempPositionMapVertical.get(nodeId) + displacement); if (self2.dummyToNodeForHorizontalAlignment.has(nodeId)) { self2.dummyToNodeForHorizontalAlignment.get(nodeId).forEach(function(nodeId2) { self2.idToNodeMap.get(nodeId2).displacementY = displacement; }); } else { self2.idToNodeMap.get(nodeId).displacementY = displacement; } } }); } else { for (var i2 = 0; i2 < this.componentsOnHorizontal.length; i2++) { var component2 = this.componentsOnHorizontal[i2]; if (this.fixedComponentsOnHorizontal[i2]) { for (var j3 = 0; j3 < component2.length; j3++) { if (this.dummyToNodeForVerticalAlignment.has(component2[j3])) { this.dummyToNodeForVerticalAlignment.get(component2[j3]).forEach(function(nodeId) { self2.idToNodeMap.get(nodeId).displacementX = 0; }); } else { this.idToNodeMap.get(component2[j3]).displacementX = 0; } } } else { var sum2 = 0; var count2 = 0; for (var j3 = 0; j3 < component2.length; j3++) { if (this.dummyToNodeForVerticalAlignment.has(component2[j3])) { var actualNodes = this.dummyToNodeForVerticalAlignment.get(component2[j3]); sum2 += actualNodes.length * this.idToNodeMap.get(actualNodes[0]).displacementX; count2 += actualNodes.length; } else { sum2 += this.idToNodeMap.get(component2[j3]).displacementX; count2++; } } var averageDisplacement = sum2 / count2; for (var j3 = 0; j3 < component2.length; j3++) { if (this.dummyToNodeForVerticalAlignment.has(component2[j3])) { this.dummyToNodeForVerticalAlignment.get(component2[j3]).forEach(function(nodeId) { self2.idToNodeMap.get(nodeId).displacementX = averageDisplacement; }); } else { this.idToNodeMap.get(component2[j3]).displacementX = averageDisplacement; } } } } for (var i2 = 0; i2 < this.componentsOnVertical.length; i2++) { var component2 = this.componentsOnVertical[i2]; if (this.fixedComponentsOnVertical[i2]) { for (var j3 = 0; j3 < component2.length; j3++) { if (this.dummyToNodeForHorizontalAlignment.has(component2[j3])) { this.dummyToNodeForHorizontalAlignment.get(component2[j3]).forEach(function(nodeId) { self2.idToNodeMap.get(nodeId).displacementY = 0; }); } else { this.idToNodeMap.get(component2[j3]).displacementY = 0; } } } else { var sum2 = 0; var count2 = 0; for (var j3 = 0; j3 < component2.length; j3++) { if (this.dummyToNodeForHorizontalAlignment.has(component2[j3])) { var actualNodes = this.dummyToNodeForHorizontalAlignment.get(component2[j3]); sum2 += actualNodes.length * this.idToNodeMap.get(actualNodes[0]).displacementY; count2 += actualNodes.length; } else { sum2 += this.idToNodeMap.get(component2[j3]).displacementY; count2++; } } var averageDisplacement = sum2 / count2; for (var j3 = 0; j3 < component2.length; j3++) { if (this.dummyToNodeForHorizontalAlignment.has(component2[j3])) { this.dummyToNodeForHorizontalAlignment.get(component2[j3]).forEach(function(nodeId) { self2.idToNodeMap.get(nodeId).displacementY = averageDisplacement; }); } else { this.idToNodeMap.get(component2[j3]).displacementY = averageDisplacement; } } } } } } }; CoSELayout.prototype.calculateNodesToApplyGravitationTo = function() { var nodeList = []; var graph; var graphs = this.graphManager.getGraphs(); var size4 = graphs.length; var i2; for (i2 = 0; i2 < size4; i2++) { graph = graphs[i2]; graph.updateConnected(); if (!graph.isConnected) { nodeList = nodeList.concat(graph.getNodes()); } } return nodeList; }; CoSELayout.prototype.createBendpoints = function() { var edges3 = []; edges3 = edges3.concat(this.graphManager.getAllEdges()); var visited = /* @__PURE__ */ new Set(); var i2; for (i2 = 0; i2 < edges3.length; i2++) { var edge = edges3[i2]; if (!visited.has(edge)) { var source = edge.getSource(); var target = edge.getTarget(); if (source == target) { edge.getBendpoints().push(new PointD()); edge.getBendpoints().push(new PointD()); this.createDummyNodesForBendpoints(edge); visited.add(edge); } else { var edgeList2 = []; edgeList2 = edgeList2.concat(source.getEdgeListToNode(target)); edgeList2 = edgeList2.concat(target.getEdgeListToNode(source)); if (!visited.has(edgeList2[0])) { if (edgeList2.length > 1) { var k2; for (k2 = 0; k2 < edgeList2.length; k2++) { var multiEdge = edgeList2[k2]; multiEdge.getBendpoints().push(new PointD()); this.createDummyNodesForBendpoints(multiEdge); } } edgeList2.forEach(function(edge2) { visited.add(edge2); }); } } } if (visited.size == edges3.length) { break; } } }; CoSELayout.prototype.positionNodesRadially = function(forest) { var currentStartingPoint = new Point3(0, 0); var numberOfColumns = Math.ceil(Math.sqrt(forest.length)); var height2 = 0; var currentY = 0; var currentX = 0; var point8 = new PointD(0, 0); for (var i2 = 0; i2 < forest.length; i2++) { if (i2 % numberOfColumns == 0) { currentX = 0; currentY = height2; if (i2 != 0) { currentY += CoSEConstants.DEFAULT_COMPONENT_SEPERATION; } height2 = 0; } var tree = forest[i2]; var centerNode = Layout2.findCenterOfTree(tree); currentStartingPoint.x = currentX; currentStartingPoint.y = currentY; point8 = CoSELayout.radialLayout(tree, centerNode, currentStartingPoint); if (point8.y > height2) { height2 = Math.floor(point8.y); } currentX = Math.floor(point8.x + CoSEConstants.DEFAULT_COMPONENT_SEPERATION); } this.transform(new PointD(LayoutConstants.WORLD_CENTER_X - point8.x / 2, LayoutConstants.WORLD_CENTER_Y - point8.y / 2)); }; CoSELayout.radialLayout = function(tree, centerNode, startingPoint) { var radialSep = Math.max(this.maxDiagonalInTree(tree), CoSEConstants.DEFAULT_RADIAL_SEPARATION); CoSELayout.branchRadialLayout(centerNode, null, 0, 359, 0, radialSep); var bounds4 = LGraph.calculateBounds(tree); var transform8 = new Transform2(); transform8.setDeviceOrgX(bounds4.getMinX()); transform8.setDeviceOrgY(bounds4.getMinY()); transform8.setWorldOrgX(startingPoint.x); transform8.setWorldOrgY(startingPoint.y); for (var i2 = 0; i2 < tree.length; i2++) { var node2 = tree[i2]; node2.transform(transform8); } var bottomRight = new PointD(bounds4.getMaxX(), bounds4.getMaxY()); return transform8.inverseTransformPoint(bottomRight); }; CoSELayout.branchRadialLayout = function(node2, parentOfNode, startAngle, endAngle, distance2, radialSeparation) { var halfInterval = (endAngle - startAngle + 1) / 2; if (halfInterval < 0) { halfInterval += 180; } var nodeAngle = (halfInterval + startAngle) % 360; var teta = nodeAngle * IGeometry.TWO_PI / 360; var cos_teta = Math.cos(teta); var x_ = distance2 * Math.cos(teta); var y_ = distance2 * Math.sin(teta); node2.setCenter(x_, y_); var neighborEdges = []; neighborEdges = neighborEdges.concat(node2.getEdges()); var childCount = neighborEdges.length; if (parentOfNode != null) { childCount--; } var branchCount = 0; var incEdgesCount = neighborEdges.length; var startIndex; var edges3 = node2.getEdgesBetween(parentOfNode); while (edges3.length > 1) { var temp = edges3[0]; edges3.splice(0, 1); var index = neighborEdges.indexOf(temp); if (index >= 0) { neighborEdges.splice(index, 1); } incEdgesCount--; childCount--; } if (parentOfNode != null) { startIndex = (neighborEdges.indexOf(edges3[0]) + 1) % incEdgesCount; } else { startIndex = 0; } var stepAngle = Math.abs(endAngle - startAngle) / childCount; for (var i2 = startIndex; branchCount != childCount; i2 = ++i2 % incEdgesCount) { var currentNeighbor = neighborEdges[i2].getOtherEnd(node2); if (currentNeighbor == parentOfNode) { continue; } var childStartAngle = (startAngle + branchCount * stepAngle) % 360; var childEndAngle = (childStartAngle + stepAngle) % 360; CoSELayout.branchRadialLayout(currentNeighbor, node2, childStartAngle, childEndAngle, distance2 + radialSeparation, radialSeparation); branchCount++; } }; CoSELayout.maxDiagonalInTree = function(tree) { var maxDiagonal = Integer.MIN_VALUE; for (var i2 = 0; i2 < tree.length; i2++) { var node2 = tree[i2]; var diagonal = node2.getDiagonal(); if (diagonal > maxDiagonal) { maxDiagonal = diagonal; } } return maxDiagonal; }; CoSELayout.prototype.calcRepulsionRange = function() { return 2 * (this.level + 1) * this.idealEdgeLength; }; CoSELayout.prototype.groupZeroDegreeMembers = function() { var self2 = this; var tempMemberGroups = {}; this.memberGroups = {}; this.idToDummyNode = {}; var zeroDegree = []; var allNodes = this.graphManager.getAllNodes(); for (var i2 = 0; i2 < allNodes.length; i2++) { var node2 = allNodes[i2]; var parent4 = node2.getParent(); if (this.getNodeDegreeWithChildren(node2) === 0 && (parent4.id == void 0 || !this.getToBeTiled(parent4))) { zeroDegree.push(node2); } } for (var i2 = 0; i2 < zeroDegree.length; i2++) { var node2 = zeroDegree[i2]; var p_id = node2.getParent().id; if (typeof tempMemberGroups[p_id] === "undefined") tempMemberGroups[p_id] = []; tempMemberGroups[p_id] = tempMemberGroups[p_id].concat(node2); } Object.keys(tempMemberGroups).forEach(function(p_id2) { if (tempMemberGroups[p_id2].length > 1) { var dummyCompoundId = "DummyCompound_" + p_id2; self2.memberGroups[dummyCompoundId] = tempMemberGroups[p_id2]; var parent5 = tempMemberGroups[p_id2][0].getParent(); var dummyCompound = new CoSENode(self2.graphManager); dummyCompound.id = dummyCompoundId; dummyCompound.paddingLeft = parent5.paddingLeft || 0; dummyCompound.paddingRight = parent5.paddingRight || 0; dummyCompound.paddingBottom = parent5.paddingBottom || 0; dummyCompound.paddingTop = parent5.paddingTop || 0; self2.idToDummyNode[dummyCompoundId] = dummyCompound; var dummyParentGraph = self2.getGraphManager().add(self2.newGraph(), dummyCompound); var parentGraph = parent5.getChild(); parentGraph.add(dummyCompound); for (var i3 = 0; i3 < tempMemberGroups[p_id2].length; i3++) { var node3 = tempMemberGroups[p_id2][i3]; parentGraph.remove(node3); dummyParentGraph.add(node3); } } }); }; CoSELayout.prototype.clearCompounds = function() { var childGraphMap = {}; var idToNode = {}; this.performDFSOnCompounds(); for (var i2 = 0; i2 < this.compoundOrder.length; i2++) { idToNode[this.compoundOrder[i2].id] = this.compoundOrder[i2]; childGraphMap[this.compoundOrder[i2].id] = [].concat(this.compoundOrder[i2].getChild().getNodes()); this.graphManager.remove(this.compoundOrder[i2].getChild()); this.compoundOrder[i2].child = null; } this.graphManager.resetAllNodes(); this.tileCompoundMembers(childGraphMap, idToNode); }; CoSELayout.prototype.clearZeroDegreeMembers = function() { var self2 = this; var tiledZeroDegreePack = this.tiledZeroDegreePack = []; Object.keys(this.memberGroups).forEach(function(id30) { var compoundNode = self2.idToDummyNode[id30]; tiledZeroDegreePack[id30] = self2.tileNodes(self2.memberGroups[id30], compoundNode.paddingLeft + compoundNode.paddingRight); compoundNode.rect.width = tiledZeroDegreePack[id30].width; compoundNode.rect.height = tiledZeroDegreePack[id30].height; compoundNode.setCenter(tiledZeroDegreePack[id30].centerX, tiledZeroDegreePack[id30].centerY); compoundNode.labelMarginLeft = 0; compoundNode.labelMarginTop = 0; if (CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS) { var width3 = compoundNode.rect.width; var height2 = compoundNode.rect.height; if (compoundNode.labelWidth) { if (compoundNode.labelPosHorizontal == "left") { compoundNode.rect.x -= compoundNode.labelWidth; compoundNode.setWidth(width3 + compoundNode.labelWidth); compoundNode.labelMarginLeft = compoundNode.labelWidth; } else if (compoundNode.labelPosHorizontal == "center" && compoundNode.labelWidth > width3) { compoundNode.rect.x -= (compoundNode.labelWidth - width3) / 2; compoundNode.setWidth(compoundNode.labelWidth); compoundNode.labelMarginLeft = (compoundNode.labelWidth - width3) / 2; } else if (compoundNode.labelPosHorizontal == "right") { compoundNode.setWidth(width3 + compoundNode.labelWidth); } } if (compoundNode.labelHeight) { if (compoundNode.labelPosVertical == "top") { compoundNode.rect.y -= compoundNode.labelHeight; compoundNode.setHeight(height2 + compoundNode.labelHeight); compoundNode.labelMarginTop = compoundNode.labelHeight; } else if (compoundNode.labelPosVertical == "center" && compoundNode.labelHeight > height2) { compoundNode.rect.y -= (compoundNode.labelHeight - height2) / 2; compoundNode.setHeight(compoundNode.labelHeight); compoundNode.labelMarginTop = (compoundNode.labelHeight - height2) / 2; } else if (compoundNode.labelPosVertical == "bottom") { compoundNode.setHeight(height2 + compoundNode.labelHeight); } } } }); }; CoSELayout.prototype.repopulateCompounds = function() { for (var i2 = this.compoundOrder.length - 1; i2 >= 0; i2--) { var lCompoundNode = this.compoundOrder[i2]; var id30 = lCompoundNode.id; var horizontalMargin = lCompoundNode.paddingLeft; var verticalMargin = lCompoundNode.paddingTop; var labelMarginLeft = lCompoundNode.labelMarginLeft; var labelMarginTop = lCompoundNode.labelMarginTop; this.adjustLocations(this.tiledMemberPack[id30], lCompoundNode.rect.x, lCompoundNode.rect.y, horizontalMargin, verticalMargin, labelMarginLeft, labelMarginTop); } }; CoSELayout.prototype.repopulateZeroDegreeMembers = function() { var self2 = this; var tiledPack = this.tiledZeroDegreePack; Object.keys(tiledPack).forEach(function(id30) { var compoundNode = self2.idToDummyNode[id30]; var horizontalMargin = compoundNode.paddingLeft; var verticalMargin = compoundNode.paddingTop; var labelMarginLeft = compoundNode.labelMarginLeft; var labelMarginTop = compoundNode.labelMarginTop; self2.adjustLocations(tiledPack[id30], compoundNode.rect.x, compoundNode.rect.y, horizontalMargin, verticalMargin, labelMarginLeft, labelMarginTop); }); }; CoSELayout.prototype.getToBeTiled = function(node2) { var id30 = node2.id; if (this.toBeTiled[id30] != null) { return this.toBeTiled[id30]; } var childGraph = node2.getChild(); if (childGraph == null) { this.toBeTiled[id30] = false; return false; } var children2 = childGraph.getNodes(); for (var i2 = 0; i2 < children2.length; i2++) { var theChild = children2[i2]; if (this.getNodeDegree(theChild) > 0) { this.toBeTiled[id30] = false; return false; } if (theChild.getChild() == null) { this.toBeTiled[theChild.id] = false; continue; } if (!this.getToBeTiled(theChild)) { this.toBeTiled[id30] = false; return false; } } this.toBeTiled[id30] = true; return true; }; CoSELayout.prototype.getNodeDegree = function(node2) { var id30 = node2.id; var edges3 = node2.getEdges(); var degree = 0; for (var i2 = 0; i2 < edges3.length; i2++) { var edge = edges3[i2]; if (edge.getSource().id !== edge.getTarget().id) { degree = degree + 1; } } return degree; }; CoSELayout.prototype.getNodeDegreeWithChildren = function(node2) { var degree = this.getNodeDegree(node2); if (node2.getChild() == null) { return degree; } var children2 = node2.getChild().getNodes(); for (var i2 = 0; i2 < children2.length; i2++) { var child = children2[i2]; degree += this.getNodeDegreeWithChildren(child); } return degree; }; CoSELayout.prototype.performDFSOnCompounds = function() { this.compoundOrder = []; this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes()); }; CoSELayout.prototype.fillCompexOrderByDFS = function(children2) { for (var i2 = 0; i2 < children2.length; i2++) { var child = children2[i2]; if (child.getChild() != null) { this.fillCompexOrderByDFS(child.getChild().getNodes()); } if (this.getToBeTiled(child)) { this.compoundOrder.push(child); } } }; CoSELayout.prototype.adjustLocations = function(organization, x5, y6, compoundHorizontalMargin, compoundVerticalMargin, compoundLabelMarginLeft, compoundLabelMarginTop) { x5 += compoundHorizontalMargin + compoundLabelMarginLeft; y6 += compoundVerticalMargin + compoundLabelMarginTop; var left3 = x5; for (var i2 = 0; i2 < organization.rows.length; i2++) { var row = organization.rows[i2]; x5 = left3; var maxHeight = 0; for (var j3 = 0; j3 < row.length; j3++) { var lnode = row[j3]; lnode.rect.x = x5; lnode.rect.y = y6; x5 += lnode.rect.width + organization.horizontalPadding; if (lnode.rect.height > maxHeight) maxHeight = lnode.rect.height; } y6 += maxHeight + organization.verticalPadding; } }; CoSELayout.prototype.tileCompoundMembers = function(childGraphMap, idToNode) { var self2 = this; this.tiledMemberPack = []; Object.keys(childGraphMap).forEach(function(id30) { var compoundNode = idToNode[id30]; self2.tiledMemberPack[id30] = self2.tileNodes(childGraphMap[id30], compoundNode.paddingLeft + compoundNode.paddingRight); compoundNode.rect.width = self2.tiledMemberPack[id30].width; compoundNode.rect.height = self2.tiledMemberPack[id30].height; compoundNode.setCenter(self2.tiledMemberPack[id30].centerX, self2.tiledMemberPack[id30].centerY); compoundNode.labelMarginLeft = 0; compoundNode.labelMarginTop = 0; if (CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS) { var width3 = compoundNode.rect.width; var height2 = compoundNode.rect.height; if (compoundNode.labelWidth) { if (compoundNode.labelPosHorizontal == "left") { compoundNode.rect.x -= compoundNode.labelWidth; compoundNode.setWidth(width3 + compoundNode.labelWidth); compoundNode.labelMarginLeft = compoundNode.labelWidth; } else if (compoundNode.labelPosHorizontal == "center" && compoundNode.labelWidth > width3) { compoundNode.rect.x -= (compoundNode.labelWidth - width3) / 2; compoundNode.setWidth(compoundNode.labelWidth); compoundNode.labelMarginLeft = (compoundNode.labelWidth - width3) / 2; } else if (compoundNode.labelPosHorizontal == "right") { compoundNode.setWidth(width3 + compoundNode.labelWidth); } } if (compoundNode.labelHeight) { if (compoundNode.labelPosVertical == "top") { compoundNode.rect.y -= compoundNode.labelHeight; compoundNode.setHeight(height2 + compoundNode.labelHeight); compoundNode.labelMarginTop = compoundNode.labelHeight; } else if (compoundNode.labelPosVertical == "center" && compoundNode.labelHeight > height2) { compoundNode.rect.y -= (compoundNode.labelHeight - height2) / 2; compoundNode.setHeight(compoundNode.labelHeight); compoundNode.labelMarginTop = (compoundNode.labelHeight - height2) / 2; } else if (compoundNode.labelPosVertical == "bottom") { compoundNode.setHeight(height2 + compoundNode.labelHeight); } } } }); }; CoSELayout.prototype.tileNodes = function(nodes5, minWidth) { var horizontalOrg = this.tileNodesByFavoringDim(nodes5, minWidth, true); var verticalOrg = this.tileNodesByFavoringDim(nodes5, minWidth, false); var horizontalRatio = this.getOrgRatio(horizontalOrg); var verticalRatio = this.getOrgRatio(verticalOrg); var bestOrg; if (verticalRatio < horizontalRatio) { bestOrg = verticalOrg; } else { bestOrg = horizontalOrg; } return bestOrg; }; CoSELayout.prototype.getOrgRatio = function(organization) { var width3 = organization.width; var height2 = organization.height; var ratio = width3 / height2; if (ratio < 1) { ratio = 1 / ratio; } return ratio; }; CoSELayout.prototype.calcIdealRowWidth = function(members, favorHorizontalDim) { var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL; var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL; var membersSize = members.length; var totalWidth = 0; var totalHeight = 0; var maxWidth2 = 0; members.forEach(function(node2) { totalWidth += node2.getWidth(); totalHeight += node2.getHeight(); if (node2.getWidth() > maxWidth2) { maxWidth2 = node2.getWidth(); } }); var averageWidth = totalWidth / membersSize; var averageHeight = totalHeight / membersSize; var delta = Math.pow(verticalPadding - horizontalPadding, 2) + 4 * (averageWidth + horizontalPadding) * (averageHeight + verticalPadding) * membersSize; var horizontalCountDouble = (horizontalPadding - verticalPadding + Math.sqrt(delta)) / (2 * (averageWidth + horizontalPadding)); var horizontalCount; if (favorHorizontalDim) { horizontalCount = Math.ceil(horizontalCountDouble); if (horizontalCount == horizontalCountDouble) { horizontalCount++; } } else { horizontalCount = Math.floor(horizontalCountDouble); } var idealWidth = horizontalCount * (averageWidth + horizontalPadding) - horizontalPadding; if (maxWidth2 > idealWidth) { idealWidth = maxWidth2; } idealWidth += horizontalPadding * 2; return idealWidth; }; CoSELayout.prototype.tileNodesByFavoringDim = function(nodes5, minWidth, favorHorizontalDim) { var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL; var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL; var tilingCompareBy = CoSEConstants.TILING_COMPARE_BY; var organization = { rows: [], rowWidth: [], rowHeight: [], width: 0, height: minWidth, // assume minHeight equals to minWidth verticalPadding, horizontalPadding, centerX: 0, centerY: 0 }; if (tilingCompareBy) { organization.idealRowWidth = this.calcIdealRowWidth(nodes5, favorHorizontalDim); } var getNodeArea = /* @__PURE__ */ __name(function getNodeArea2(n2) { return n2.rect.width * n2.rect.height; }, "getNodeArea"); var areaCompareFcn = /* @__PURE__ */ __name(function areaCompareFcn2(n1, n2) { return getNodeArea(n2) - getNodeArea(n1); }, "areaCompareFcn"); nodes5.sort(function(n1, n2) { var cmpBy = areaCompareFcn; if (organization.idealRowWidth) { cmpBy = tilingCompareBy; return cmpBy(n1.id, n2.id); } return cmpBy(n1, n2); }); var sumCenterX = 0; var sumCenterY = 0; for (var i2 = 0; i2 < nodes5.length; i2++) { var lNode = nodes5[i2]; sumCenterX += lNode.getCenterX(); sumCenterY += lNode.getCenterY(); } organization.centerX = sumCenterX / nodes5.length; organization.centerY = sumCenterY / nodes5.length; for (var i2 = 0; i2 < nodes5.length; i2++) { var lNode = nodes5[i2]; if (organization.rows.length == 0) { this.insertNodeToRow(organization, lNode, 0, minWidth); } else if (this.canAddHorizontal(organization, lNode.rect.width, lNode.rect.height)) { var rowIndex = organization.rows.length - 1; if (!organization.idealRowWidth) { rowIndex = this.getShortestRowIndex(organization); } this.insertNodeToRow(organization, lNode, rowIndex, minWidth); } else { this.insertNodeToRow(organization, lNode, organization.rows.length, minWidth); } this.shiftToLastRow(organization); } return organization; }; CoSELayout.prototype.insertNodeToRow = function(organization, node2, rowIndex, minWidth) { var minCompoundSize = minWidth; if (rowIndex == organization.rows.length) { var secondDimension = []; organization.rows.push(secondDimension); organization.rowWidth.push(minCompoundSize); organization.rowHeight.push(0); } var w4 = organization.rowWidth[rowIndex] + node2.rect.width; if (organization.rows[rowIndex].length > 0) { w4 += organization.horizontalPadding; } organization.rowWidth[rowIndex] = w4; if (organization.width < w4) { organization.width = w4; } var h3 = node2.rect.height; if (rowIndex > 0) h3 += organization.verticalPadding; var extraHeight = 0; if (h3 > organization.rowHeight[rowIndex]) { extraHeight = organization.rowHeight[rowIndex]; organization.rowHeight[rowIndex] = h3; extraHeight = organization.rowHeight[rowIndex] - extraHeight; } organization.height += extraHeight; organization.rows[rowIndex].push(node2); }; CoSELayout.prototype.getShortestRowIndex = function(organization) { var r2 = -1; var min9 = Number.MAX_VALUE; for (var i2 = 0; i2 < organization.rows.length; i2++) { if (organization.rowWidth[i2] < min9) { r2 = i2; min9 = organization.rowWidth[i2]; } } return r2; }; CoSELayout.prototype.getLongestRowIndex = function(organization) { var r2 = -1; var max10 = Number.MIN_VALUE; for (var i2 = 0; i2 < organization.rows.length; i2++) { if (organization.rowWidth[i2] > max10) { r2 = i2; max10 = organization.rowWidth[i2]; } } return r2; }; CoSELayout.prototype.canAddHorizontal = function(organization, extraWidth, extraHeight) { if (organization.idealRowWidth) { var lastRowIndex = organization.rows.length - 1; var lastRowWidth = organization.rowWidth[lastRowIndex]; return lastRowWidth + extraWidth + organization.horizontalPadding <= organization.idealRowWidth; } var sri = this.getShortestRowIndex(organization); if (sri < 0) { return true; } var min9 = organization.rowWidth[sri]; if (min9 + organization.horizontalPadding + extraWidth <= organization.width) return true; var hDiff = 0; if (organization.rowHeight[sri] < extraHeight) { if (sri > 0) hDiff = extraHeight + organization.verticalPadding - organization.rowHeight[sri]; } var add_to_row_ratio; if (organization.width - min9 >= extraWidth + organization.horizontalPadding) { add_to_row_ratio = (organization.height + hDiff) / (min9 + extraWidth + organization.horizontalPadding); } else { add_to_row_ratio = (organization.height + hDiff) / organization.width; } hDiff = extraHeight + organization.verticalPadding; var add_new_row_ratio; if (organization.width < extraWidth) { add_new_row_ratio = (organization.height + hDiff) / extraWidth; } else { add_new_row_ratio = (organization.height + hDiff) / organization.width; } if (add_new_row_ratio < 1) add_new_row_ratio = 1 / add_new_row_ratio; if (add_to_row_ratio < 1) add_to_row_ratio = 1 / add_to_row_ratio; return add_to_row_ratio < add_new_row_ratio; }; CoSELayout.prototype.shiftToLastRow = function(organization) { var longest = this.getLongestRowIndex(organization); var last3 = organization.rowWidth.length - 1; var row = organization.rows[longest]; var node2 = row[row.length - 1]; var diff2 = node2.width + organization.horizontalPadding; if (organization.width - organization.rowWidth[last3] > diff2 && longest != last3) { row.splice(-1, 1); organization.rows[last3].push(node2); organization.rowWidth[longest] = organization.rowWidth[longest] - diff2; organization.rowWidth[last3] = organization.rowWidth[last3] + diff2; organization.width = organization.rowWidth[instance.getLongestRowIndex(organization)]; var maxHeight = Number.MIN_VALUE; for (var i2 = 0; i2 < row.length; i2++) { if (row[i2].height > maxHeight) maxHeight = row[i2].height; } if (longest > 0) maxHeight += organization.verticalPadding; var prevTotal = organization.rowHeight[longest] + organization.rowHeight[last3]; organization.rowHeight[longest] = maxHeight; if (organization.rowHeight[last3] < node2.height + organization.verticalPadding) organization.rowHeight[last3] = node2.height + organization.verticalPadding; var finalTotal = organization.rowHeight[longest] + organization.rowHeight[last3]; organization.height += finalTotal - prevTotal; this.shiftToLastRow(organization); } }; CoSELayout.prototype.tilingPreLayout = function() { if (CoSEConstants.TILE) { this.groupZeroDegreeMembers(); this.clearCompounds(); this.clearZeroDegreeMembers(); } }; CoSELayout.prototype.tilingPostLayout = function() { if (CoSEConstants.TILE) { this.repopulateZeroDegreeMembers(); this.repopulateCompounds(); } }; CoSELayout.prototype.reduceTrees = function() { var prunedNodesAll = []; var containsLeaf = true; var node2; while (containsLeaf) { var allNodes = this.graphManager.getAllNodes(); var prunedNodesInStepTemp = []; containsLeaf = false; for (var i2 = 0; i2 < allNodes.length; i2++) { node2 = allNodes[i2]; if (node2.getEdges().length == 1 && !node2.getEdges()[0].isInterGraph && node2.getChild() == null) { if (CoSEConstants.PURE_INCREMENTAL) { var otherEnd = node2.getEdges()[0].getOtherEnd(node2); var relativePosition2 = new DimensionD2(node2.getCenterX() - otherEnd.getCenterX(), node2.getCenterY() - otherEnd.getCenterY()); prunedNodesInStepTemp.push([node2, node2.getEdges()[0], node2.getOwner(), relativePosition2]); } else { prunedNodesInStepTemp.push([node2, node2.getEdges()[0], node2.getOwner()]); } containsLeaf = true; } } if (containsLeaf == true) { var prunedNodesInStep = []; for (var j3 = 0; j3 < prunedNodesInStepTemp.length; j3++) { if (prunedNodesInStepTemp[j3][0].getEdges().length == 1) { prunedNodesInStep.push(prunedNodesInStepTemp[j3]); prunedNodesInStepTemp[j3][0].getOwner().remove(prunedNodesInStepTemp[j3][0]); } } prunedNodesAll.push(prunedNodesInStep); this.graphManager.resetAllNodes(); this.graphManager.resetAllEdges(); } } this.prunedNodesAll = prunedNodesAll; }; CoSELayout.prototype.growTree = function(prunedNodesAll) { var lengthOfPrunedNodesInStep = prunedNodesAll.length; var prunedNodesInStep = prunedNodesAll[lengthOfPrunedNodesInStep - 1]; var nodeData2; for (var i2 = 0; i2 < prunedNodesInStep.length; i2++) { nodeData2 = prunedNodesInStep[i2]; this.findPlaceforPrunedNode(nodeData2); nodeData2[2].add(nodeData2[0]); nodeData2[2].add(nodeData2[1], nodeData2[1].source, nodeData2[1].target); } prunedNodesAll.splice(prunedNodesAll.length - 1, 1); this.graphManager.resetAllNodes(); this.graphManager.resetAllEdges(); }; CoSELayout.prototype.findPlaceforPrunedNode = function(nodeData2) { var gridForPrunedNode; var nodeToConnect; var prunedNode = nodeData2[0]; if (prunedNode == nodeData2[1].source) { nodeToConnect = nodeData2[1].target; } else { nodeToConnect = nodeData2[1].source; } if (CoSEConstants.PURE_INCREMENTAL) { prunedNode.setCenter(nodeToConnect.getCenterX() + nodeData2[3].getWidth(), nodeToConnect.getCenterY() + nodeData2[3].getHeight()); } else { var startGridX = nodeToConnect.startX; var finishGridX = nodeToConnect.finishX; var startGridY = nodeToConnect.startY; var finishGridY = nodeToConnect.finishY; var upNodeCount = 0; var downNodeCount = 0; var rightNodeCount = 0; var leftNodeCount = 0; var controlRegions = [upNodeCount, rightNodeCount, downNodeCount, leftNodeCount]; if (startGridY > 0) { for (var i2 = startGridX; i2 <= finishGridX; i2++) { controlRegions[0] += this.grid[i2][startGridY - 1].length + this.grid[i2][startGridY].length - 1; } } if (finishGridX < this.grid.length - 1) { for (var i2 = startGridY; i2 <= finishGridY; i2++) { controlRegions[1] += this.grid[finishGridX + 1][i2].length + this.grid[finishGridX][i2].length - 1; } } if (finishGridY < this.grid[0].length - 1) { for (var i2 = startGridX; i2 <= finishGridX; i2++) { controlRegions[2] += this.grid[i2][finishGridY + 1].length + this.grid[i2][finishGridY].length - 1; } } if (startGridX > 0) { for (var i2 = startGridY; i2 <= finishGridY; i2++) { controlRegions[3] += this.grid[startGridX - 1][i2].length + this.grid[startGridX][i2].length - 1; } } var min9 = Integer.MAX_VALUE; var minCount; var minIndex; for (var j3 = 0; j3 < controlRegions.length; j3++) { if (controlRegions[j3] < min9) { min9 = controlRegions[j3]; minCount = 1; minIndex = j3; } else if (controlRegions[j3] == min9) { minCount++; } } if (minCount == 3 && min9 == 0) { if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[2] == 0) { gridForPrunedNode = 1; } else if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[3] == 0) { gridForPrunedNode = 0; } else if (controlRegions[0] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) { gridForPrunedNode = 3; } else if (controlRegions[1] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) { gridForPrunedNode = 2; } } else if (minCount == 2 && min9 == 0) { var random2 = Math.floor(Math.random() * 2); if (controlRegions[0] == 0 && controlRegions[1] == 0) { ; if (random2 == 0) { gridForPrunedNode = 0; } else { gridForPrunedNode = 1; } } else if (controlRegions[0] == 0 && controlRegions[2] == 0) { if (random2 == 0) { gridForPrunedNode = 0; } else { gridForPrunedNode = 2; } } else if (controlRegions[0] == 0 && controlRegions[3] == 0) { if (random2 == 0) { gridForPrunedNode = 0; } else { gridForPrunedNode = 3; } } else if (controlRegions[1] == 0 && controlRegions[2] == 0) { if (random2 == 0) { gridForPrunedNode = 1; } else { gridForPrunedNode = 2; } } else if (controlRegions[1] == 0 && controlRegions[3] == 0) { if (random2 == 0) { gridForPrunedNode = 1; } else { gridForPrunedNode = 3; } } else { if (random2 == 0) { gridForPrunedNode = 2; } else { gridForPrunedNode = 3; } } } else if (minCount == 4 && min9 == 0) { var random2 = Math.floor(Math.random() * 4); gridForPrunedNode = random2; } else { gridForPrunedNode = minIndex; } if (gridForPrunedNode == 0) { prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() - nodeToConnect.getHeight() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getHeight() / 2); } else if (gridForPrunedNode == 1) { prunedNode.setCenter(nodeToConnect.getCenterX() + nodeToConnect.getWidth() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getWidth() / 2, nodeToConnect.getCenterY()); } else if (gridForPrunedNode == 2) { prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() + nodeToConnect.getHeight() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getHeight() / 2); } else { prunedNode.setCenter(nodeToConnect.getCenterX() - nodeToConnect.getWidth() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getWidth() / 2, nodeToConnect.getCenterY()); } } }; module3.exports = CoSELayout; }) ), /***/ 991: ( /***/ ((module3, __unused_webpack_exports, __webpack_require__2) => { var FDLayoutNode = __webpack_require__2(551).FDLayoutNode; var IMath = __webpack_require__2(551).IMath; function CoSENode(gm, loc, size4, vNode) { FDLayoutNode.call(this, gm, loc, size4, vNode); } __name(CoSENode, "CoSENode"); CoSENode.prototype = Object.create(FDLayoutNode.prototype); for (var prop in FDLayoutNode) { CoSENode[prop] = FDLayoutNode[prop]; } CoSENode.prototype.calculateDisplacement = function() { var layout6 = this.graphManager.getLayout(); if (this.getChild() != null && this.fixedNodeWeight) { this.displacementX += layout6.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.fixedNodeWeight; this.displacementY += layout6.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.fixedNodeWeight; } else { this.displacementX += layout6.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.noOfChildren; this.displacementY += layout6.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.noOfChildren; } if (Math.abs(this.displacementX) > layout6.coolingFactor * layout6.maxNodeDisplacement) { this.displacementX = layout6.coolingFactor * layout6.maxNodeDisplacement * IMath.sign(this.displacementX); } if (Math.abs(this.displacementY) > layout6.coolingFactor * layout6.maxNodeDisplacement) { this.displacementY = layout6.coolingFactor * layout6.maxNodeDisplacement * IMath.sign(this.displacementY); } if (this.child && this.child.getNodes().length > 0) { this.propogateDisplacementToChildren(this.displacementX, this.displacementY); } }; CoSENode.prototype.propogateDisplacementToChildren = function(dX, dY) { var nodes5 = this.getChild().getNodes(); var node2; for (var i2 = 0; i2 < nodes5.length; i2++) { node2 = nodes5[i2]; if (node2.getChild() == null) { node2.displacementX += dX; node2.displacementY += dY; } else { node2.propogateDisplacementToChildren(dX, dY); } } }; CoSENode.prototype.move = function() { var layout6 = this.graphManager.getLayout(); if (this.child == null || this.child.getNodes().length == 0) { this.moveBy(this.displacementX, this.displacementY); layout6.totalDisplacement += Math.abs(this.displacementX) + Math.abs(this.displacementY); } this.springForceX = 0; this.springForceY = 0; this.repulsionForceX = 0; this.repulsionForceY = 0; this.gravitationForceX = 0; this.gravitationForceY = 0; this.displacementX = 0; this.displacementY = 0; }; CoSENode.prototype.setPred1 = function(pred12) { this.pred1 = pred12; }; CoSENode.prototype.getPred1 = function() { return pred1; }; CoSENode.prototype.getPred2 = function() { return pred2; }; CoSENode.prototype.setNext = function(next3) { this.next = next3; }; CoSENode.prototype.getNext = function() { return next; }; CoSENode.prototype.setProcessed = function(processed2) { this.processed = processed2; }; CoSENode.prototype.isProcessed = function() { return processed; }; module3.exports = CoSENode; }) ), /***/ 902: ( /***/ ((module3, __unused_webpack_exports, __webpack_require__2) => { function _toConsumableArray2(arr) { if (Array.isArray(arr)) { for (var i2 = 0, arr2 = Array(arr.length); i2 < arr.length; i2++) { arr2[i2] = arr[i2]; } return arr2; } else { return Array.from(arr); } } __name(_toConsumableArray2, "_toConsumableArray"); var CoSEConstants = __webpack_require__2(806); var LinkedList = __webpack_require__2(551).LinkedList; var Matrix = __webpack_require__2(551).Matrix; var SVD = __webpack_require__2(551).SVD; function ConstraintHandler() { } __name(ConstraintHandler, "ConstraintHandler"); ConstraintHandler.handleConstraints = function(layout6) { var constraints = {}; constraints.fixedNodeConstraint = layout6.constraints.fixedNodeConstraint; constraints.alignmentConstraint = layout6.constraints.alignmentConstraint; constraints.relativePlacementConstraint = layout6.constraints.relativePlacementConstraint; var idToNodeMap = /* @__PURE__ */ new Map(); var nodeIndexes = /* @__PURE__ */ new Map(); var xCoords = []; var yCoords = []; var allNodes = layout6.getAllNodes(); var index = 0; for (var i2 = 0; i2 < allNodes.length; i2++) { var node2 = allNodes[i2]; if (node2.getChild() == null) { nodeIndexes.set(node2.id, index++); xCoords.push(node2.getCenterX()); yCoords.push(node2.getCenterY()); idToNodeMap.set(node2.id, node2); } } if (constraints.relativePlacementConstraint) { constraints.relativePlacementConstraint.forEach(function(constraint) { if (!constraint.gap && constraint.gap != 0) { if (constraint.left) { constraint.gap = CoSEConstants.DEFAULT_EDGE_LENGTH + idToNodeMap.get(constraint.left).getWidth() / 2 + idToNodeMap.get(constraint.right).getWidth() / 2; } else { constraint.gap = CoSEConstants.DEFAULT_EDGE_LENGTH + idToNodeMap.get(constraint.top).getHeight() / 2 + idToNodeMap.get(constraint.bottom).getHeight() / 2; } } }); } var calculatePositionDiff = /* @__PURE__ */ __name(function calculatePositionDiff2(pos1, pos2) { return { x: pos1.x - pos2.x, y: pos1.y - pos2.y }; }, "calculatePositionDiff"); var calculateAvgPosition = /* @__PURE__ */ __name(function calculateAvgPosition2(nodeIdSet) { var xPosSum = 0; var yPosSum = 0; nodeIdSet.forEach(function(nodeId) { xPosSum += xCoords[nodeIndexes.get(nodeId)]; yPosSum += yCoords[nodeIndexes.get(nodeId)]; }); return { x: xPosSum / nodeIdSet.size, y: yPosSum / nodeIdSet.size }; }, "calculateAvgPosition"); var findAppropriatePositionForRelativePlacement = /* @__PURE__ */ __name(function findAppropriatePositionForRelativePlacement2(graph, direction, fixedNodes2, dummyPositions, componentSources) { function setUnion(setA, setB) { var union2 = new Set(setA); var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = void 0; try { for (var _iterator = setB[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var elem = _step.value; union2.add(elem); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return union2; } __name(setUnion, "setUnion"); var inDegrees = /* @__PURE__ */ new Map(); graph.forEach(function(value2, key) { inDegrees.set(key, 0); }); graph.forEach(function(value2, key) { value2.forEach(function(adjacent) { inDegrees.set(adjacent.id, inDegrees.get(adjacent.id) + 1); }); }); var positionMap = /* @__PURE__ */ new Map(); var pastMap = /* @__PURE__ */ new Map(); var queue = new LinkedList(); inDegrees.forEach(function(value2, key) { if (value2 == 0) { queue.push(key); if (!fixedNodes2) { if (direction == "horizontal") { positionMap.set(key, nodeIndexes.has(key) ? xCoords[nodeIndexes.get(key)] : dummyPositions.get(key)); } else { positionMap.set(key, nodeIndexes.has(key) ? yCoords[nodeIndexes.get(key)] : dummyPositions.get(key)); } } } else { positionMap.set(key, Number.NEGATIVE_INFINITY); } if (fixedNodes2) { pastMap.set(key, /* @__PURE__ */ new Set([key])); } }); if (fixedNodes2) { componentSources.forEach(function(component2) { var fixedIds = []; component2.forEach(function(nodeId) { if (fixedNodes2.has(nodeId)) { fixedIds.push(nodeId); } }); if (fixedIds.length > 0) { var position5 = 0; fixedIds.forEach(function(fixedId) { if (direction == "horizontal") { positionMap.set(fixedId, nodeIndexes.has(fixedId) ? xCoords[nodeIndexes.get(fixedId)] : dummyPositions.get(fixedId)); position5 += positionMap.get(fixedId); } else { positionMap.set(fixedId, nodeIndexes.has(fixedId) ? yCoords[nodeIndexes.get(fixedId)] : dummyPositions.get(fixedId)); position5 += positionMap.get(fixedId); } }); position5 = position5 / fixedIds.length; component2.forEach(function(nodeId) { if (!fixedNodes2.has(nodeId)) { positionMap.set(nodeId, position5); } }); } else { var _position = 0; component2.forEach(function(nodeId) { if (direction == "horizontal") { _position += nodeIndexes.has(nodeId) ? xCoords[nodeIndexes.get(nodeId)] : dummyPositions.get(nodeId); } else { _position += nodeIndexes.has(nodeId) ? yCoords[nodeIndexes.get(nodeId)] : dummyPositions.get(nodeId); } }); _position = _position / component2.length; component2.forEach(function(nodeId) { positionMap.set(nodeId, _position); }); } }); } var _loop = /* @__PURE__ */ __name(function _loop2() { var currentNode = queue.shift(); var neighbors = graph.get(currentNode); neighbors.forEach(function(neighbor) { if (positionMap.get(neighbor.id) < positionMap.get(currentNode) + neighbor.gap) { if (fixedNodes2 && fixedNodes2.has(neighbor.id)) { var fixedPosition = void 0; if (direction == "horizontal") { fixedPosition = nodeIndexes.has(neighbor.id) ? xCoords[nodeIndexes.get(neighbor.id)] : dummyPositions.get(neighbor.id); } else { fixedPosition = nodeIndexes.has(neighbor.id) ? yCoords[nodeIndexes.get(neighbor.id)] : dummyPositions.get(neighbor.id); } positionMap.set(neighbor.id, fixedPosition); if (fixedPosition < positionMap.get(currentNode) + neighbor.gap) { var diff2 = positionMap.get(currentNode) + neighbor.gap - fixedPosition; pastMap.get(currentNode).forEach(function(nodeId) { positionMap.set(nodeId, positionMap.get(nodeId) - diff2); }); } } else { positionMap.set(neighbor.id, positionMap.get(currentNode) + neighbor.gap); } } inDegrees.set(neighbor.id, inDegrees.get(neighbor.id) - 1); if (inDegrees.get(neighbor.id) == 0) { queue.push(neighbor.id); } if (fixedNodes2) { pastMap.set(neighbor.id, setUnion(pastMap.get(currentNode), pastMap.get(neighbor.id))); } }); }, "_loop"); while (queue.length != 0) { _loop(); } if (fixedNodes2) { var sinkNodes = /* @__PURE__ */ new Set(); graph.forEach(function(value2, key) { if (value2.length == 0) { sinkNodes.add(key); } }); var _components = []; pastMap.forEach(function(value2, key) { if (sinkNodes.has(key)) { var isFixedComponent = false; var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = void 0; try { for (var _iterator2 = value2[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var nodeId = _step2.value; if (fixedNodes2.has(nodeId)) { isFixedComponent = true; } } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } if (!isFixedComponent) { var isExist = false; var existAt = void 0; _components.forEach(function(component2, index2) { if (component2.has([].concat(_toConsumableArray2(value2))[0])) { isExist = true; existAt = index2; } }); if (!isExist) { _components.push(new Set(value2)); } else { value2.forEach(function(ele) { _components[existAt].add(ele); }); } } } }); _components.forEach(function(component2, index2) { var minBefore = Number.POSITIVE_INFINITY; var minAfter = Number.POSITIVE_INFINITY; var maxBefore = Number.NEGATIVE_INFINITY; var maxAfter = Number.NEGATIVE_INFINITY; var _iteratorNormalCompletion3 = true; var _didIteratorError3 = false; var _iteratorError3 = void 0; try { for (var _iterator3 = component2[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { var nodeId = _step3.value; var posBefore = void 0; if (direction == "horizontal") { posBefore = nodeIndexes.has(nodeId) ? xCoords[nodeIndexes.get(nodeId)] : dummyPositions.get(nodeId); } else { posBefore = nodeIndexes.has(nodeId) ? yCoords[nodeIndexes.get(nodeId)] : dummyPositions.get(nodeId); } var posAfter = positionMap.get(nodeId); if (posBefore < minBefore) { minBefore = posBefore; } if (posBefore > maxBefore) { maxBefore = posBefore; } if (posAfter < minAfter) { minAfter = posAfter; } if (posAfter > maxAfter) { maxAfter = posAfter; } } } catch (err) { _didIteratorError3 = true; _iteratorError3 = err; } finally { try { if (!_iteratorNormalCompletion3 && _iterator3.return) { _iterator3.return(); } } finally { if (_didIteratorError3) { throw _iteratorError3; } } } var diff2 = (minBefore + maxBefore) / 2 - (minAfter + maxAfter) / 2; var _iteratorNormalCompletion4 = true; var _didIteratorError4 = false; var _iteratorError4 = void 0; try { for (var _iterator4 = component2[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { var _nodeId = _step4.value; positionMap.set(_nodeId, positionMap.get(_nodeId) + diff2); } } catch (err) { _didIteratorError4 = true; _iteratorError4 = err; } finally { try { if (!_iteratorNormalCompletion4 && _iterator4.return) { _iterator4.return(); } } finally { if (_didIteratorError4) { throw _iteratorError4; } } } }); } return positionMap; }, "findAppropriatePositionForRelativePlacement"); var applyReflectionForRelativePlacement = /* @__PURE__ */ __name(function applyReflectionForRelativePlacement2(relativePlacementConstraints) { var reflectOnY = 0, notReflectOnY = 0; var reflectOnX = 0, notReflectOnX = 0; relativePlacementConstraints.forEach(function(constraint) { if (constraint.left) { xCoords[nodeIndexes.get(constraint.left)] - xCoords[nodeIndexes.get(constraint.right)] >= 0 ? reflectOnY++ : notReflectOnY++; } else { yCoords[nodeIndexes.get(constraint.top)] - yCoords[nodeIndexes.get(constraint.bottom)] >= 0 ? reflectOnX++ : notReflectOnX++; } }); if (reflectOnY > notReflectOnY && reflectOnX > notReflectOnX) { for (var _i = 0; _i < nodeIndexes.size; _i++) { xCoords[_i] = -1 * xCoords[_i]; yCoords[_i] = -1 * yCoords[_i]; } } else if (reflectOnY > notReflectOnY) { for (var _i2 = 0; _i2 < nodeIndexes.size; _i2++) { xCoords[_i2] = -1 * xCoords[_i2]; } } else if (reflectOnX > notReflectOnX) { for (var _i3 = 0; _i3 < nodeIndexes.size; _i3++) { yCoords[_i3] = -1 * yCoords[_i3]; } } }, "applyReflectionForRelativePlacement"); var findComponents = /* @__PURE__ */ __name(function findComponents2(graph) { var components4 = []; var queue = new LinkedList(); var visited = /* @__PURE__ */ new Set(); var count2 = 0; graph.forEach(function(value2, key) { if (!visited.has(key)) { components4[count2] = []; var _currentNode = key; queue.push(_currentNode); visited.add(_currentNode); components4[count2].push(_currentNode); while (queue.length != 0) { _currentNode = queue.shift(); var neighbors = graph.get(_currentNode); neighbors.forEach(function(neighbor) { if (!visited.has(neighbor.id)) { queue.push(neighbor.id); visited.add(neighbor.id); components4[count2].push(neighbor.id); } }); } count2++; } }); return components4; }, "findComponents"); var dagToUndirected = /* @__PURE__ */ __name(function dagToUndirected2(dag2) { var undirected = /* @__PURE__ */ new Map(); dag2.forEach(function(value2, key) { undirected.set(key, []); }); dag2.forEach(function(value2, key) { value2.forEach(function(adjacent) { undirected.get(key).push(adjacent); undirected.get(adjacent.id).push({ id: key, gap: adjacent.gap, direction: adjacent.direction }); }); }); return undirected; }, "dagToUndirected"); var dagToReversed = /* @__PURE__ */ __name(function dagToReversed2(dag2) { var reversed = /* @__PURE__ */ new Map(); dag2.forEach(function(value2, key) { reversed.set(key, []); }); dag2.forEach(function(value2, key) { value2.forEach(function(adjacent) { reversed.get(adjacent.id).push({ id: key, gap: adjacent.gap, direction: adjacent.direction }); }); }); return reversed; }, "dagToReversed"); var targetMatrix = []; var sourceMatrix = []; var standardTransformation = false; var reflectionType = false; var fixedNodes = /* @__PURE__ */ new Set(); var dag = /* @__PURE__ */ new Map(); var dagUndirected = /* @__PURE__ */ new Map(); var components3 = []; if (constraints.fixedNodeConstraint) { constraints.fixedNodeConstraint.forEach(function(nodeData2) { fixedNodes.add(nodeData2.nodeId); }); } if (constraints.relativePlacementConstraint) { constraints.relativePlacementConstraint.forEach(function(constraint) { if (constraint.left) { if (dag.has(constraint.left)) { dag.get(constraint.left).push({ id: constraint.right, gap: constraint.gap, direction: "horizontal" }); } else { dag.set(constraint.left, [{ id: constraint.right, gap: constraint.gap, direction: "horizontal" }]); } if (!dag.has(constraint.right)) { dag.set(constraint.right, []); } } else { if (dag.has(constraint.top)) { dag.get(constraint.top).push({ id: constraint.bottom, gap: constraint.gap, direction: "vertical" }); } else { dag.set(constraint.top, [{ id: constraint.bottom, gap: constraint.gap, direction: "vertical" }]); } if (!dag.has(constraint.bottom)) { dag.set(constraint.bottom, []); } } }); dagUndirected = dagToUndirected(dag); components3 = findComponents(dagUndirected); } if (CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING) { if (constraints.fixedNodeConstraint && constraints.fixedNodeConstraint.length > 1) { constraints.fixedNodeConstraint.forEach(function(nodeData2, i3) { targetMatrix[i3] = [nodeData2.position.x, nodeData2.position.y]; sourceMatrix[i3] = [xCoords[nodeIndexes.get(nodeData2.nodeId)], yCoords[nodeIndexes.get(nodeData2.nodeId)]]; }); standardTransformation = true; } else if (constraints.alignmentConstraint) { (function() { var count2 = 0; if (constraints.alignmentConstraint.vertical) { var verticalAlign = constraints.alignmentConstraint.vertical; var _loop2 = /* @__PURE__ */ __name(function _loop22(_i42) { var alignmentSet = /* @__PURE__ */ new Set(); verticalAlign[_i42].forEach(function(nodeId) { alignmentSet.add(nodeId); }); var intersection4 = new Set([].concat(_toConsumableArray2(alignmentSet)).filter(function(x5) { return fixedNodes.has(x5); })); var xPos = void 0; if (intersection4.size > 0) xPos = xCoords[nodeIndexes.get(intersection4.values().next().value)]; else xPos = calculateAvgPosition(alignmentSet).x; verticalAlign[_i42].forEach(function(nodeId) { targetMatrix[count2] = [xPos, yCoords[nodeIndexes.get(nodeId)]]; sourceMatrix[count2] = [xCoords[nodeIndexes.get(nodeId)], yCoords[nodeIndexes.get(nodeId)]]; count2++; }); }, "_loop2"); for (var _i4 = 0; _i4 < verticalAlign.length; _i4++) { _loop2(_i4); } standardTransformation = true; } if (constraints.alignmentConstraint.horizontal) { var horizontalAlign = constraints.alignmentConstraint.horizontal; var _loop3 = /* @__PURE__ */ __name(function _loop32(_i52) { var alignmentSet = /* @__PURE__ */ new Set(); horizontalAlign[_i52].forEach(function(nodeId) { alignmentSet.add(nodeId); }); var intersection4 = new Set([].concat(_toConsumableArray2(alignmentSet)).filter(function(x5) { return fixedNodes.has(x5); })); var yPos = void 0; if (intersection4.size > 0) yPos = xCoords[nodeIndexes.get(intersection4.values().next().value)]; else yPos = calculateAvgPosition(alignmentSet).y; horizontalAlign[_i52].forEach(function(nodeId) { targetMatrix[count2] = [xCoords[nodeIndexes.get(nodeId)], yPos]; sourceMatrix[count2] = [xCoords[nodeIndexes.get(nodeId)], yCoords[nodeIndexes.get(nodeId)]]; count2++; }); }, "_loop3"); for (var _i5 = 0; _i5 < horizontalAlign.length; _i5++) { _loop3(_i5); } standardTransformation = true; } if (constraints.relativePlacementConstraint) { reflectionType = true; } })(); } else if (constraints.relativePlacementConstraint) { var largestComponentSize = 0; var largestComponentIndex = 0; for (var _i6 = 0; _i6 < components3.length; _i6++) { if (components3[_i6].length > largestComponentSize) { largestComponentSize = components3[_i6].length; largestComponentIndex = _i6; } } if (largestComponentSize < dagUndirected.size / 2) { applyReflectionForRelativePlacement(constraints.relativePlacementConstraint); standardTransformation = false; reflectionType = false; } else { var subGraphOnHorizontal = /* @__PURE__ */ new Map(); var subGraphOnVertical = /* @__PURE__ */ new Map(); var constraintsInlargestComponent = []; components3[largestComponentIndex].forEach(function(nodeId) { dag.get(nodeId).forEach(function(adjacent) { if (adjacent.direction == "horizontal") { if (subGraphOnHorizontal.has(nodeId)) { subGraphOnHorizontal.get(nodeId).push(adjacent); } else { subGraphOnHorizontal.set(nodeId, [adjacent]); } if (!subGraphOnHorizontal.has(adjacent.id)) { subGraphOnHorizontal.set(adjacent.id, []); } constraintsInlargestComponent.push({ left: nodeId, right: adjacent.id }); } else { if (subGraphOnVertical.has(nodeId)) { subGraphOnVertical.get(nodeId).push(adjacent); } else { subGraphOnVertical.set(nodeId, [adjacent]); } if (!subGraphOnVertical.has(adjacent.id)) { subGraphOnVertical.set(adjacent.id, []); } constraintsInlargestComponent.push({ top: nodeId, bottom: adjacent.id }); } }); }); applyReflectionForRelativePlacement(constraintsInlargestComponent); reflectionType = false; var positionMapHorizontal = findAppropriatePositionForRelativePlacement(subGraphOnHorizontal, "horizontal"); var positionMapVertical = findAppropriatePositionForRelativePlacement(subGraphOnVertical, "vertical"); components3[largestComponentIndex].forEach(function(nodeId, i3) { sourceMatrix[i3] = [xCoords[nodeIndexes.get(nodeId)], yCoords[nodeIndexes.get(nodeId)]]; targetMatrix[i3] = []; if (positionMapHorizontal.has(nodeId)) { targetMatrix[i3][0] = positionMapHorizontal.get(nodeId); } else { targetMatrix[i3][0] = xCoords[nodeIndexes.get(nodeId)]; } if (positionMapVertical.has(nodeId)) { targetMatrix[i3][1] = positionMapVertical.get(nodeId); } else { targetMatrix[i3][1] = yCoords[nodeIndexes.get(nodeId)]; } }); standardTransformation = true; } } if (standardTransformation) { var transformationMatrix = void 0; var targetMatrixTranspose = Matrix.transpose(targetMatrix); var sourceMatrixTranspose = Matrix.transpose(sourceMatrix); for (var _i7 = 0; _i7 < targetMatrixTranspose.length; _i7++) { targetMatrixTranspose[_i7] = Matrix.multGamma(targetMatrixTranspose[_i7]); sourceMatrixTranspose[_i7] = Matrix.multGamma(sourceMatrixTranspose[_i7]); } var tempMatrix = Matrix.multMat(targetMatrixTranspose, Matrix.transpose(sourceMatrixTranspose)); var SVDResult = SVD.svd(tempMatrix); transformationMatrix = Matrix.multMat(SVDResult.V, Matrix.transpose(SVDResult.U)); for (var _i8 = 0; _i8 < nodeIndexes.size; _i8++) { var temp1 = [xCoords[_i8], yCoords[_i8]]; var temp2 = [transformationMatrix[0][0], transformationMatrix[1][0]]; var temp3 = [transformationMatrix[0][1], transformationMatrix[1][1]]; xCoords[_i8] = Matrix.dotProduct(temp1, temp2); yCoords[_i8] = Matrix.dotProduct(temp1, temp3); } if (reflectionType) { applyReflectionForRelativePlacement(constraints.relativePlacementConstraint); } } } if (CoSEConstants.ENFORCE_CONSTRAINTS) { if (constraints.fixedNodeConstraint && constraints.fixedNodeConstraint.length > 0) { var translationAmount = { x: 0, y: 0 }; constraints.fixedNodeConstraint.forEach(function(nodeData2, i3) { var posInTheory = { x: xCoords[nodeIndexes.get(nodeData2.nodeId)], y: yCoords[nodeIndexes.get(nodeData2.nodeId)] }; var posDesired = nodeData2.position; var posDiff = calculatePositionDiff(posDesired, posInTheory); translationAmount.x += posDiff.x; translationAmount.y += posDiff.y; }); translationAmount.x /= constraints.fixedNodeConstraint.length; translationAmount.y /= constraints.fixedNodeConstraint.length; xCoords.forEach(function(value2, i3) { xCoords[i3] += translationAmount.x; }); yCoords.forEach(function(value2, i3) { yCoords[i3] += translationAmount.y; }); constraints.fixedNodeConstraint.forEach(function(nodeData2) { xCoords[nodeIndexes.get(nodeData2.nodeId)] = nodeData2.position.x; yCoords[nodeIndexes.get(nodeData2.nodeId)] = nodeData2.position.y; }); } if (constraints.alignmentConstraint) { if (constraints.alignmentConstraint.vertical) { var xAlign = constraints.alignmentConstraint.vertical; var _loop4 = /* @__PURE__ */ __name(function _loop42(_i92) { var alignmentSet = /* @__PURE__ */ new Set(); xAlign[_i92].forEach(function(nodeId) { alignmentSet.add(nodeId); }); var intersection4 = new Set([].concat(_toConsumableArray2(alignmentSet)).filter(function(x5) { return fixedNodes.has(x5); })); var xPos = void 0; if (intersection4.size > 0) xPos = xCoords[nodeIndexes.get(intersection4.values().next().value)]; else xPos = calculateAvgPosition(alignmentSet).x; alignmentSet.forEach(function(nodeId) { if (!fixedNodes.has(nodeId)) xCoords[nodeIndexes.get(nodeId)] = xPos; }); }, "_loop4"); for (var _i9 = 0; _i9 < xAlign.length; _i9++) { _loop4(_i9); } } if (constraints.alignmentConstraint.horizontal) { var yAlign = constraints.alignmentConstraint.horizontal; var _loop5 = /* @__PURE__ */ __name(function _loop52(_i102) { var alignmentSet = /* @__PURE__ */ new Set(); yAlign[_i102].forEach(function(nodeId) { alignmentSet.add(nodeId); }); var intersection4 = new Set([].concat(_toConsumableArray2(alignmentSet)).filter(function(x5) { return fixedNodes.has(x5); })); var yPos = void 0; if (intersection4.size > 0) yPos = yCoords[nodeIndexes.get(intersection4.values().next().value)]; else yPos = calculateAvgPosition(alignmentSet).y; alignmentSet.forEach(function(nodeId) { if (!fixedNodes.has(nodeId)) yCoords[nodeIndexes.get(nodeId)] = yPos; }); }, "_loop5"); for (var _i10 = 0; _i10 < yAlign.length; _i10++) { _loop5(_i10); } } } if (constraints.relativePlacementConstraint) { (function() { var nodeToDummyForVerticalAlignment = /* @__PURE__ */ new Map(); var nodeToDummyForHorizontalAlignment = /* @__PURE__ */ new Map(); var dummyToNodeForVerticalAlignment = /* @__PURE__ */ new Map(); var dummyToNodeForHorizontalAlignment = /* @__PURE__ */ new Map(); var dummyPositionsForVerticalAlignment = /* @__PURE__ */ new Map(); var dummyPositionsForHorizontalAlignment = /* @__PURE__ */ new Map(); var fixedNodesOnHorizontal = /* @__PURE__ */ new Set(); var fixedNodesOnVertical = /* @__PURE__ */ new Set(); fixedNodes.forEach(function(nodeId2) { fixedNodesOnHorizontal.add(nodeId2); fixedNodesOnVertical.add(nodeId2); }); if (constraints.alignmentConstraint) { if (constraints.alignmentConstraint.vertical) { var verticalAlignment2 = constraints.alignmentConstraint.vertical; var _loop6 = /* @__PURE__ */ __name(function _loop62(_i112) { dummyToNodeForVerticalAlignment.set("dummy" + _i112, []); verticalAlignment2[_i112].forEach(function(nodeId2) { nodeToDummyForVerticalAlignment.set(nodeId2, "dummy" + _i112); dummyToNodeForVerticalAlignment.get("dummy" + _i112).push(nodeId2); if (fixedNodes.has(nodeId2)) { fixedNodesOnHorizontal.add("dummy" + _i112); } }); dummyPositionsForVerticalAlignment.set("dummy" + _i112, xCoords[nodeIndexes.get(verticalAlignment2[_i112][0])]); }, "_loop6"); for (var _i11 = 0; _i11 < verticalAlignment2.length; _i11++) { _loop6(_i11); } } if (constraints.alignmentConstraint.horizontal) { var horizontalAlignment = constraints.alignmentConstraint.horizontal; var _loop7 = /* @__PURE__ */ __name(function _loop72(_i122) { dummyToNodeForHorizontalAlignment.set("dummy" + _i122, []); horizontalAlignment[_i122].forEach(function(nodeId2) { nodeToDummyForHorizontalAlignment.set(nodeId2, "dummy" + _i122); dummyToNodeForHorizontalAlignment.get("dummy" + _i122).push(nodeId2); if (fixedNodes.has(nodeId2)) { fixedNodesOnVertical.add("dummy" + _i122); } }); dummyPositionsForHorizontalAlignment.set("dummy" + _i122, yCoords[nodeIndexes.get(horizontalAlignment[_i122][0])]); }, "_loop7"); for (var _i12 = 0; _i12 < horizontalAlignment.length; _i12++) { _loop7(_i12); } } } var dagOnHorizontal = /* @__PURE__ */ new Map(); var dagOnVertical = /* @__PURE__ */ new Map(); var _loop8 = /* @__PURE__ */ __name(function _loop82(nodeId2) { dag.get(nodeId2).forEach(function(adjacent) { var sourceId = void 0; var targetNode = void 0; if (adjacent["direction"] == "horizontal") { sourceId = nodeToDummyForVerticalAlignment.get(nodeId2) ? nodeToDummyForVerticalAlignment.get(nodeId2) : nodeId2; if (nodeToDummyForVerticalAlignment.get(adjacent.id)) { targetNode = { id: nodeToDummyForVerticalAlignment.get(adjacent.id), gap: adjacent.gap, direction: adjacent.direction }; } else { targetNode = adjacent; } if (dagOnHorizontal.has(sourceId)) { dagOnHorizontal.get(sourceId).push(targetNode); } else { dagOnHorizontal.set(sourceId, [targetNode]); } if (!dagOnHorizontal.has(targetNode.id)) { dagOnHorizontal.set(targetNode.id, []); } } else { sourceId = nodeToDummyForHorizontalAlignment.get(nodeId2) ? nodeToDummyForHorizontalAlignment.get(nodeId2) : nodeId2; if (nodeToDummyForHorizontalAlignment.get(adjacent.id)) { targetNode = { id: nodeToDummyForHorizontalAlignment.get(adjacent.id), gap: adjacent.gap, direction: adjacent.direction }; } else { targetNode = adjacent; } if (dagOnVertical.has(sourceId)) { dagOnVertical.get(sourceId).push(targetNode); } else { dagOnVertical.set(sourceId, [targetNode]); } if (!dagOnVertical.has(targetNode.id)) { dagOnVertical.set(targetNode.id, []); } } }); }, "_loop8"); var _iteratorNormalCompletion5 = true; var _didIteratorError5 = false; var _iteratorError5 = void 0; try { for (var _iterator5 = dag.keys()[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { var nodeId = _step5.value; _loop8(nodeId); } } catch (err) { _didIteratorError5 = true; _iteratorError5 = err; } finally { try { if (!_iteratorNormalCompletion5 && _iterator5.return) { _iterator5.return(); } } finally { if (_didIteratorError5) { throw _iteratorError5; } } } var undirectedOnHorizontal = dagToUndirected(dagOnHorizontal); var undirectedOnVertical = dagToUndirected(dagOnVertical); var componentsOnHorizontal = findComponents(undirectedOnHorizontal); var componentsOnVertical = findComponents(undirectedOnVertical); var reversedDagOnHorizontal = dagToReversed(dagOnHorizontal); var reversedDagOnVertical = dagToReversed(dagOnVertical); var componentSourcesOnHorizontal = []; var componentSourcesOnVertical = []; componentsOnHorizontal.forEach(function(component2, index2) { componentSourcesOnHorizontal[index2] = []; component2.forEach(function(nodeId2) { if (reversedDagOnHorizontal.get(nodeId2).length == 0) { componentSourcesOnHorizontal[index2].push(nodeId2); } }); }); componentsOnVertical.forEach(function(component2, index2) { componentSourcesOnVertical[index2] = []; component2.forEach(function(nodeId2) { if (reversedDagOnVertical.get(nodeId2).length == 0) { componentSourcesOnVertical[index2].push(nodeId2); } }); }); var positionMapHorizontal2 = findAppropriatePositionForRelativePlacement(dagOnHorizontal, "horizontal", fixedNodesOnHorizontal, dummyPositionsForVerticalAlignment, componentSourcesOnHorizontal); var positionMapVertical2 = findAppropriatePositionForRelativePlacement(dagOnVertical, "vertical", fixedNodesOnVertical, dummyPositionsForHorizontalAlignment, componentSourcesOnVertical); var _loop9 = /* @__PURE__ */ __name(function _loop92(key2) { if (dummyToNodeForVerticalAlignment.get(key2)) { dummyToNodeForVerticalAlignment.get(key2).forEach(function(nodeId2) { xCoords[nodeIndexes.get(nodeId2)] = positionMapHorizontal2.get(key2); }); } else { xCoords[nodeIndexes.get(key2)] = positionMapHorizontal2.get(key2); } }, "_loop9"); var _iteratorNormalCompletion6 = true; var _didIteratorError6 = false; var _iteratorError6 = void 0; try { for (var _iterator6 = positionMapHorizontal2.keys()[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) { var key = _step6.value; _loop9(key); } } catch (err) { _didIteratorError6 = true; _iteratorError6 = err; } finally { try { if (!_iteratorNormalCompletion6 && _iterator6.return) { _iterator6.return(); } } finally { if (_didIteratorError6) { throw _iteratorError6; } } } var _loop10 = /* @__PURE__ */ __name(function _loop102(key2) { if (dummyToNodeForHorizontalAlignment.get(key2)) { dummyToNodeForHorizontalAlignment.get(key2).forEach(function(nodeId2) { yCoords[nodeIndexes.get(nodeId2)] = positionMapVertical2.get(key2); }); } else { yCoords[nodeIndexes.get(key2)] = positionMapVertical2.get(key2); } }, "_loop10"); var _iteratorNormalCompletion7 = true; var _didIteratorError7 = false; var _iteratorError7 = void 0; try { for (var _iterator7 = positionMapVertical2.keys()[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) { var key = _step7.value; _loop10(key); } } catch (err) { _didIteratorError7 = true; _iteratorError7 = err; } finally { try { if (!_iteratorNormalCompletion7 && _iterator7.return) { _iterator7.return(); } } finally { if (_didIteratorError7) { throw _iteratorError7; } } } })(); } } for (var _i13 = 0; _i13 < allNodes.length; _i13++) { var _node = allNodes[_i13]; if (_node.getChild() == null) { _node.setCenter(xCoords[nodeIndexes.get(_node.id)], yCoords[nodeIndexes.get(_node.id)]); } } }; module3.exports = ConstraintHandler; }) ), /***/ 551: ( /***/ ((module3) => { module3.exports = __WEBPACK_EXTERNAL_MODULE__551__; }) ) /******/ }; var __webpack_module_cache__ = {}; function __webpack_require__(moduleId) { var cachedModule = __webpack_module_cache__[moduleId]; if (cachedModule !== void 0) { return cachedModule.exports; } var module3 = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; __webpack_modules__[moduleId](module3, module3.exports, __webpack_require__); return module3.exports; } __name(__webpack_require__, "__webpack_require__"); var __webpack_exports__ = __webpack_require__(45); return __webpack_exports__; })() ); }); } }); // ../../node_modules/.pnpm/cytoscape-fcose@2.2.0_cytoscape@3.33.1/node_modules/cytoscape-fcose/cytoscape-fcose.js var require_cytoscape_fcose = __commonJS({ "../../node_modules/.pnpm/cytoscape-fcose@2.2.0_cytoscape@3.33.1/node_modules/cytoscape-fcose/cytoscape-fcose.js"(exports2, module2) { "use strict"; (/* @__PURE__ */ __name((function webpackUniversalModuleDefinition(root3, factory) { if (typeof exports2 === "object" && typeof module2 === "object") module2.exports = factory(require_cose_base2()); else if (typeof define === "function" && define.amd) define(["cose-base"], factory); else if (typeof exports2 === "object") exports2["cytoscapeFcose"] = factory(require_cose_base2()); else root3["cytoscapeFcose"] = factory(root3["coseBase"]); }), "webpackUniversalModuleDefinition"))(exports2, function(__WEBPACK_EXTERNAL_MODULE__140__) { return ( /******/ (() => { "use strict"; var __webpack_modules__ = { /***/ 658: ( /***/ ((module3) => { module3.exports = Object.assign != null ? Object.assign.bind(Object) : function(tgt) { for (var _len = arguments.length, srcs = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { srcs[_key - 1] = arguments[_key]; } srcs.forEach(function(src) { Object.keys(src).forEach(function(k2) { return tgt[k2] = src[k2]; }); }); return tgt; }; }) ), /***/ 548: ( /***/ ((module3, __unused_webpack_exports, __webpack_require__2) => { var _slicedToArray2 = /* @__PURE__ */ (function() { function sliceIterator(arr, i2) { var _arr = []; var _n = true; var _d = false; var _e2 = void 0; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i2 && _arr.length === i2) break; } } catch (err) { _d = true; _e2 = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e2; } } return _arr; } __name(sliceIterator, "sliceIterator"); return function(arr, i2) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i2); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; })(); var LinkedList = __webpack_require__2(140).layoutBase.LinkedList; var auxiliary = {}; auxiliary.getTopMostNodes = function(nodes5) { var nodesMap2 = {}; for (var i2 = 0; i2 < nodes5.length; i2++) { nodesMap2[nodes5[i2].id()] = true; } var roots = nodes5.filter(function(ele, i3) { if (typeof ele === "number") { ele = i3; } var parent4 = ele.parent()[0]; while (parent4 != null) { if (nodesMap2[parent4.id()]) { return false; } parent4 = parent4.parent()[0]; } return true; }); return roots; }; auxiliary.connectComponents = function(cy, eles, topMostNodes, dummyNodes) { var queue = new LinkedList(); var visited = /* @__PURE__ */ new Set(); var visitedTopMostNodes = []; var currentNeighbor = void 0; var minDegreeNode = void 0; var minDegree = void 0; var isConnected = false; var count2 = 1; var nodesConnectedToDummy = []; var components3 = []; var _loop = /* @__PURE__ */ __name(function _loop2() { var cmpt = cy.collection(); components3.push(cmpt); var currentNode = topMostNodes[0]; var childrenOfCurrentNode = cy.collection(); childrenOfCurrentNode.merge(currentNode).merge(currentNode.descendants().intersection(eles)); visitedTopMostNodes.push(currentNode); childrenOfCurrentNode.forEach(function(node2) { queue.push(node2); visited.add(node2); cmpt.merge(node2); }); var _loop22 = /* @__PURE__ */ __name(function _loop23() { currentNode = queue.shift(); var neighborNodes = cy.collection(); currentNode.neighborhood().nodes().forEach(function(node2) { if (eles.intersection(currentNode.edgesWith(node2)).length > 0) { neighborNodes.merge(node2); } }); for (var i2 = 0; i2 < neighborNodes.length; i2++) { var neighborNode = neighborNodes[i2]; currentNeighbor = topMostNodes.intersection(neighborNode.union(neighborNode.ancestors())); if (currentNeighbor != null && !visited.has(currentNeighbor[0])) { var childrenOfNeighbor = currentNeighbor.union(currentNeighbor.descendants()); childrenOfNeighbor.forEach(function(node2) { queue.push(node2); visited.add(node2); cmpt.merge(node2); if (topMostNodes.has(node2)) { visitedTopMostNodes.push(node2); } }); } } }, "_loop2"); while (queue.length != 0) { _loop22(); } cmpt.forEach(function(node2) { eles.intersection(node2.connectedEdges()).forEach(function(e3) { if (cmpt.has(e3.source()) && cmpt.has(e3.target())) { cmpt.merge(e3); } }); }); if (visitedTopMostNodes.length == topMostNodes.length) { isConnected = true; } if (!isConnected || isConnected && count2 > 1) { minDegreeNode = visitedTopMostNodes[0]; minDegree = minDegreeNode.connectedEdges().length; visitedTopMostNodes.forEach(function(node2) { if (node2.connectedEdges().length < minDegree) { minDegree = node2.connectedEdges().length; minDegreeNode = node2; } }); nodesConnectedToDummy.push(minDegreeNode.id()); var temp = cy.collection(); temp.merge(visitedTopMostNodes[0]); visitedTopMostNodes.forEach(function(node2) { temp.merge(node2); }); visitedTopMostNodes = []; topMostNodes = topMostNodes.difference(temp); count2++; } }, "_loop"); do { _loop(); } while (!isConnected); if (dummyNodes) { if (nodesConnectedToDummy.length > 0) { dummyNodes.set("dummy" + (dummyNodes.size + 1), nodesConnectedToDummy); } } return components3; }; auxiliary.relocateComponent = function(originalCenter, componentResult, options2) { if (!options2.fixedNodeConstraint) { var minXCoord = Number.POSITIVE_INFINITY; var maxXCoord = Number.NEGATIVE_INFINITY; var minYCoord = Number.POSITIVE_INFINITY; var maxYCoord = Number.NEGATIVE_INFINITY; if (options2.quality == "draft") { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = void 0; try { for (var _iterator = componentResult.nodeIndexes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var _ref = _step.value; var _ref2 = _slicedToArray2(_ref, 2); var key = _ref2[0]; var value2 = _ref2[1]; var cyNode = options2.cy.getElementById(key); if (cyNode) { var nodeBB = cyNode.boundingBox(); var leftX = componentResult.xCoords[value2] - nodeBB.w / 2; var rightX = componentResult.xCoords[value2] + nodeBB.w / 2; var topY = componentResult.yCoords[value2] - nodeBB.h / 2; var bottomY = componentResult.yCoords[value2] + nodeBB.h / 2; if (leftX < minXCoord) minXCoord = leftX; if (rightX > maxXCoord) maxXCoord = rightX; if (topY < minYCoord) minYCoord = topY; if (bottomY > maxYCoord) maxYCoord = bottomY; } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } var diffOnX = originalCenter.x - (maxXCoord + minXCoord) / 2; var diffOnY = originalCenter.y - (maxYCoord + minYCoord) / 2; componentResult.xCoords = componentResult.xCoords.map(function(x5) { return x5 + diffOnX; }); componentResult.yCoords = componentResult.yCoords.map(function(y6) { return y6 + diffOnY; }); } else { Object.keys(componentResult).forEach(function(item) { var node2 = componentResult[item]; var leftX2 = node2.getRect().x; var rightX2 = node2.getRect().x + node2.getRect().width; var topY2 = node2.getRect().y; var bottomY2 = node2.getRect().y + node2.getRect().height; if (leftX2 < minXCoord) minXCoord = leftX2; if (rightX2 > maxXCoord) maxXCoord = rightX2; if (topY2 < minYCoord) minYCoord = topY2; if (bottomY2 > maxYCoord) maxYCoord = bottomY2; }); var _diffOnX = originalCenter.x - (maxXCoord + minXCoord) / 2; var _diffOnY = originalCenter.y - (maxYCoord + minYCoord) / 2; Object.keys(componentResult).forEach(function(item) { var node2 = componentResult[item]; node2.setCenter(node2.getCenterX() + _diffOnX, node2.getCenterY() + _diffOnY); }); } } }; auxiliary.calcBoundingBox = function(parentNode, xCoords, yCoords, nodeIndexes) { var left3 = Number.MAX_SAFE_INTEGER; var right3 = Number.MIN_SAFE_INTEGER; var top2 = Number.MAX_SAFE_INTEGER; var bottom2 = Number.MIN_SAFE_INTEGER; var nodeLeft = void 0; var nodeRight = void 0; var nodeTop = void 0; var nodeBottom = void 0; var nodes5 = parentNode.descendants().not(":parent"); var s2 = nodes5.length; for (var i2 = 0; i2 < s2; i2++) { var node2 = nodes5[i2]; nodeLeft = xCoords[nodeIndexes.get(node2.id())] - node2.width() / 2; nodeRight = xCoords[nodeIndexes.get(node2.id())] + node2.width() / 2; nodeTop = yCoords[nodeIndexes.get(node2.id())] - node2.height() / 2; nodeBottom = yCoords[nodeIndexes.get(node2.id())] + node2.height() / 2; if (left3 > nodeLeft) { left3 = nodeLeft; } if (right3 < nodeRight) { right3 = nodeRight; } if (top2 > nodeTop) { top2 = nodeTop; } if (bottom2 < nodeBottom) { bottom2 = nodeBottom; } } var boundingBox3 = {}; boundingBox3.topLeftX = left3; boundingBox3.topLeftY = top2; boundingBox3.width = right3 - left3; boundingBox3.height = bottom2 - top2; return boundingBox3; }; auxiliary.calcParentsWithoutChildren = function(cy, eles) { var parentsWithoutChildren = cy.collection(); eles.nodes(":parent").forEach(function(parent4) { var check = false; parent4.children().forEach(function(child) { if (child.css("display") != "none") { check = true; } }); if (!check) { parentsWithoutChildren.merge(parent4); } }); return parentsWithoutChildren; }; module3.exports = auxiliary; }) ), /***/ 816: ( /***/ ((module3, __unused_webpack_exports, __webpack_require__2) => { var aux = __webpack_require__2(548); var CoSELayout = __webpack_require__2(140).CoSELayout; var CoSENode = __webpack_require__2(140).CoSENode; var PointD = __webpack_require__2(140).layoutBase.PointD; var DimensionD2 = __webpack_require__2(140).layoutBase.DimensionD; var LayoutConstants = __webpack_require__2(140).layoutBase.LayoutConstants; var FDLayoutConstants = __webpack_require__2(140).layoutBase.FDLayoutConstants; var CoSEConstants = __webpack_require__2(140).CoSEConstants; var coseLayout = /* @__PURE__ */ __name(function coseLayout2(options2, spectralResult) { var cy = options2.cy; var eles = options2.eles; var nodes5 = eles.nodes(); var edges3 = eles.edges(); var nodeIndexes = void 0; var xCoords = void 0; var yCoords = void 0; var idToLNode = {}; if (options2.randomize) { nodeIndexes = spectralResult["nodeIndexes"]; xCoords = spectralResult["xCoords"]; yCoords = spectralResult["yCoords"]; } var isFn = /* @__PURE__ */ __name(function isFn2(fn3) { return typeof fn3 === "function"; }, "isFn"); var optFn = /* @__PURE__ */ __name(function optFn2(opt, ele) { if (isFn(opt)) { return opt(ele); } else { return opt; } }, "optFn"); var parentsWithoutChildren = aux.calcParentsWithoutChildren(cy, eles); var processChildrenList = /* @__PURE__ */ __name(function processChildrenList2(parent4, children2, layout6, options3) { var size4 = children2.length; for (var i2 = 0; i2 < size4; i2++) { var theChild = children2[i2]; var children_of_children = null; if (theChild.intersection(parentsWithoutChildren).length == 0) { children_of_children = theChild.children(); } var theNode = void 0; var dimensions2 = theChild.layoutDimensions({ nodeDimensionsIncludeLabels: options3.nodeDimensionsIncludeLabels }); if (theChild.outerWidth() != null && theChild.outerHeight() != null) { if (options3.randomize) { if (!theChild.isParent()) { theNode = parent4.add(new CoSENode(layout6.graphManager, new PointD(xCoords[nodeIndexes.get(theChild.id())] - dimensions2.w / 2, yCoords[nodeIndexes.get(theChild.id())] - dimensions2.h / 2), new DimensionD2(parseFloat(dimensions2.w), parseFloat(dimensions2.h)))); } else { var parentInfo = aux.calcBoundingBox(theChild, xCoords, yCoords, nodeIndexes); if (theChild.intersection(parentsWithoutChildren).length == 0) { theNode = parent4.add(new CoSENode(layout6.graphManager, new PointD(parentInfo.topLeftX, parentInfo.topLeftY), new DimensionD2(parentInfo.width, parentInfo.height))); } else { theNode = parent4.add(new CoSENode(layout6.graphManager, new PointD(parentInfo.topLeftX, parentInfo.topLeftY), new DimensionD2(parseFloat(dimensions2.w), parseFloat(dimensions2.h)))); } } } else { theNode = parent4.add(new CoSENode(layout6.graphManager, new PointD(theChild.position("x") - dimensions2.w / 2, theChild.position("y") - dimensions2.h / 2), new DimensionD2(parseFloat(dimensions2.w), parseFloat(dimensions2.h)))); } } else { theNode = parent4.add(new CoSENode(this.graphManager)); } theNode.id = theChild.data("id"); theNode.nodeRepulsion = optFn(options3.nodeRepulsion, theChild); theNode.paddingLeft = parseInt(theChild.css("padding")); theNode.paddingTop = parseInt(theChild.css("padding")); theNode.paddingRight = parseInt(theChild.css("padding")); theNode.paddingBottom = parseInt(theChild.css("padding")); if (options3.nodeDimensionsIncludeLabels) { theNode.labelWidth = theChild.boundingBox({ includeLabels: true, includeNodes: false, includeOverlays: false }).w; theNode.labelHeight = theChild.boundingBox({ includeLabels: true, includeNodes: false, includeOverlays: false }).h; theNode.labelPosVertical = theChild.css("text-valign"); theNode.labelPosHorizontal = theChild.css("text-halign"); } idToLNode[theChild.data("id")] = theNode; if (isNaN(theNode.rect.x)) { theNode.rect.x = 0; } if (isNaN(theNode.rect.y)) { theNode.rect.y = 0; } if (children_of_children != null && children_of_children.length > 0) { var theNewGraph = void 0; theNewGraph = layout6.getGraphManager().add(layout6.newGraph(), theNode); processChildrenList2(theNewGraph, children_of_children, layout6, options3); } } }, "processChildrenList"); var processEdges = /* @__PURE__ */ __name(function processEdges2(layout6, gm2, edges4) { var idealLengthTotal = 0; var edgeCount3 = 0; for (var i2 = 0; i2 < edges4.length; i2++) { var edge = edges4[i2]; var sourceNode = idToLNode[edge.data("source")]; var targetNode = idToLNode[edge.data("target")]; if (sourceNode && targetNode && sourceNode !== targetNode && sourceNode.getEdgesBetween(targetNode).length == 0) { var e1 = gm2.add(layout6.newEdge(), sourceNode, targetNode); e1.id = edge.id(); e1.idealLength = optFn(options2.idealEdgeLength, edge); e1.edgeElasticity = optFn(options2.edgeElasticity, edge); idealLengthTotal += e1.idealLength; edgeCount3++; } } if (options2.idealEdgeLength != null) { if (edgeCount3 > 0) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = idealLengthTotal / edgeCount3; else if (!isFn(options2.idealEdgeLength)) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = options2.idealEdgeLength; else CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = 50; CoSEConstants.MIN_REPULSION_DIST = FDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10; CoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH; } }, "processEdges"); var processConstraints = /* @__PURE__ */ __name(function processConstraints2(layout6, options3) { if (options3.fixedNodeConstraint) { layout6.constraints["fixedNodeConstraint"] = options3.fixedNodeConstraint; } if (options3.alignmentConstraint) { layout6.constraints["alignmentConstraint"] = options3.alignmentConstraint; } if (options3.relativePlacementConstraint) { layout6.constraints["relativePlacementConstraint"] = options3.relativePlacementConstraint; } }, "processConstraints"); if (options2.nestingFactor != null) CoSEConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = options2.nestingFactor; if (options2.gravity != null) CoSEConstants.DEFAULT_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = options2.gravity; if (options2.numIter != null) CoSEConstants.MAX_ITERATIONS = FDLayoutConstants.MAX_ITERATIONS = options2.numIter; if (options2.gravityRange != null) CoSEConstants.DEFAULT_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = options2.gravityRange; if (options2.gravityCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = options2.gravityCompound; if (options2.gravityRangeCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = options2.gravityRangeCompound; if (options2.initialEnergyOnIncremental != null) CoSEConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = options2.initialEnergyOnIncremental; if (options2.tilingCompareBy != null) CoSEConstants.TILING_COMPARE_BY = options2.tilingCompareBy; if (options2.quality == "proof") LayoutConstants.QUALITY = 2; else LayoutConstants.QUALITY = 0; CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS = FDLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = options2.nodeDimensionsIncludeLabels; CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = !options2.randomize; CoSEConstants.ANIMATE = FDLayoutConstants.ANIMATE = LayoutConstants.ANIMATE = options2.animate; CoSEConstants.TILE = options2.tile; CoSEConstants.TILING_PADDING_VERTICAL = typeof options2.tilingPaddingVertical === "function" ? options2.tilingPaddingVertical.call() : options2.tilingPaddingVertical; CoSEConstants.TILING_PADDING_HORIZONTAL = typeof options2.tilingPaddingHorizontal === "function" ? options2.tilingPaddingHorizontal.call() : options2.tilingPaddingHorizontal; CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = true; CoSEConstants.PURE_INCREMENTAL = !options2.randomize; LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = options2.uniformNodeDimensions; if (options2.step == "transformed") { CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = true; CoSEConstants.ENFORCE_CONSTRAINTS = false; CoSEConstants.APPLY_LAYOUT = false; } if (options2.step == "enforced") { CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = false; CoSEConstants.ENFORCE_CONSTRAINTS = true; CoSEConstants.APPLY_LAYOUT = false; } if (options2.step == "cose") { CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = false; CoSEConstants.ENFORCE_CONSTRAINTS = false; CoSEConstants.APPLY_LAYOUT = true; } if (options2.step == "all") { if (options2.randomize) CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = true; else CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = false; CoSEConstants.ENFORCE_CONSTRAINTS = true; CoSEConstants.APPLY_LAYOUT = true; } if (options2.fixedNodeConstraint || options2.alignmentConstraint || options2.relativePlacementConstraint) { CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = false; } else { CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = true; } var coseLayout3 = new CoSELayout(); var gm = coseLayout3.newGraphManager(); processChildrenList(gm.addRoot(), aux.getTopMostNodes(nodes5), coseLayout3, options2); processEdges(coseLayout3, gm, edges3); processConstraints(coseLayout3, options2); coseLayout3.runLayout(); return idToLNode; }, "coseLayout"); module3.exports = { coseLayout }; }) ), /***/ 212: ( /***/ ((module3, __unused_webpack_exports, __webpack_require__2) => { var _createClass2 = /* @__PURE__ */ (function() { function defineProperties(target, props) { for (var i2 = 0; i2 < props.length; i2++) { var descriptor = props[i2]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } __name(defineProperties, "defineProperties"); return function(Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); function _classCallCheck2(instance2, Constructor) { if (!(instance2 instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } __name(_classCallCheck2, "_classCallCheck"); var assign7 = __webpack_require__2(658); var aux = __webpack_require__2(548); var _require = __webpack_require__2(657), spectralLayout = _require.spectralLayout; var _require2 = __webpack_require__2(816), coseLayout = _require2.coseLayout; var defaults4 = Object.freeze({ // 'draft', 'default' or 'proof' // - 'draft' only applies spectral layout // - 'default' improves the quality with subsequent CoSE layout (fast cooling rate) // - 'proof' improves the quality with subsequent CoSE layout (slow cooling rate) quality: "default", // Use random node positions at beginning of layout // if this is set to false, then quality option must be "proof" randomize: true, // Whether or not to animate the layout animate: true, // Duration of animation in ms, if enabled animationDuration: 1e3, // Easing of animation, if enabled animationEasing: void 0, // Fit the viewport to the repositioned nodes fit: true, // Padding around layout padding: 30, // Whether to include labels in node dimensions. Valid in "proof" quality nodeDimensionsIncludeLabels: false, // Whether or not simple nodes (non-compound nodes) are of uniform dimensions uniformNodeDimensions: false, // Whether to pack disconnected components - valid only if randomize: true packComponents: true, // Layout step - all, transformed, enforced, cose - for debug purpose only step: "all", /* spectral layout options */ // False for random, true for greedy samplingType: true, // Sample size to construct distance matrix sampleSize: 25, // Separation amount between nodes nodeSeparation: 75, // Power iteration tolerance piTol: 1e-7, /* CoSE layout options */ // Node repulsion (non overlapping) multiplier nodeRepulsion: /* @__PURE__ */ __name(function nodeRepulsion4(node2) { return 4500; }, "nodeRepulsion"), // Ideal edge (non nested) length idealEdgeLength: /* @__PURE__ */ __name(function idealEdgeLength2(edge) { return 50; }, "idealEdgeLength"), // Divisor to compute edge forces edgeElasticity: /* @__PURE__ */ __name(function edgeElasticity2(edge) { return 0.45; }, "edgeElasticity"), // Nesting factor (multiplier) to compute ideal edge length for nested edges nestingFactor: 0.1, // Gravity force (constant) gravity: 0.25, // Maximum number of iterations to perform numIter: 2500, // For enabling tiling tile: true, // The function that specifies the criteria for comparing nodes while sorting them during tiling operation. // Takes the node id as a parameter and the default tiling operation is perfomed when this option is not set. tilingCompareBy: void 0, // Represents the amount of the vertical space to put between the zero degree members during the tiling operation(can also be a function) tilingPaddingVertical: 10, // Represents the amount of the horizontal space to put between the zero degree members during the tiling operation(can also be a function) tilingPaddingHorizontal: 10, // Gravity range (constant) for compounds gravityRangeCompound: 1.5, // Gravity force (constant) for compounds gravityCompound: 1, // Gravity range (constant) gravityRange: 3.8, // Initial cooling factor for incremental layout initialEnergyOnIncremental: 0.3, /* constraint options */ // Fix required nodes to predefined positions // [{nodeId: 'n1', position: {x: 100, y: 200}, {...}] fixedNodeConstraint: void 0, // Align required nodes in vertical/horizontal direction // {vertical: [['n1', 'n2')], ['n3', 'n4']], horizontal: ['n2', 'n4']} alignmentConstraint: void 0, // Place two nodes relatively in vertical/horizontal direction // [{top: 'n1', bottom: 'n2', gap: 100}, {left: 'n3', right: 'n4', gap: 75}] relativePlacementConstraint: void 0, /* layout event callbacks */ ready: /* @__PURE__ */ __name(function ready4() { }, "ready"), // on layoutready stop: /* @__PURE__ */ __name(function stop5() { }, "stop") // on layoutstop }); var Layout2 = (function() { function Layout3(options2) { _classCallCheck2(this, Layout3); this.options = assign7({}, defaults4, options2); } __name(Layout3, "Layout"); _createClass2(Layout3, [{ key: "run", value: /* @__PURE__ */ __name(function run5() { var layout6 = this; var options2 = this.options; var cy = options2.cy; var eles = options2.eles; var spectralResult = []; var xCoords = void 0; var yCoords = void 0; var coseResult = []; var components3 = void 0; var componentCenters = []; if (options2.fixedNodeConstraint && (!Array.isArray(options2.fixedNodeConstraint) || options2.fixedNodeConstraint.length == 0)) { options2.fixedNodeConstraint = void 0; } if (options2.alignmentConstraint) { if (options2.alignmentConstraint.vertical && (!Array.isArray(options2.alignmentConstraint.vertical) || options2.alignmentConstraint.vertical.length == 0)) { options2.alignmentConstraint.vertical = void 0; } if (options2.alignmentConstraint.horizontal && (!Array.isArray(options2.alignmentConstraint.horizontal) || options2.alignmentConstraint.horizontal.length == 0)) { options2.alignmentConstraint.horizontal = void 0; } } if (options2.relativePlacementConstraint && (!Array.isArray(options2.relativePlacementConstraint) || options2.relativePlacementConstraint.length == 0)) { options2.relativePlacementConstraint = void 0; } var constraintExist = options2.fixedNodeConstraint || options2.alignmentConstraint || options2.relativePlacementConstraint; if (constraintExist) { options2.tile = false; options2.packComponents = false; } var layUtil = void 0; var packingEnabled = false; if (cy.layoutUtilities && options2.packComponents) { layUtil = cy.layoutUtilities("get"); if (!layUtil) layUtil = cy.layoutUtilities(); packingEnabled = true; } if (eles.nodes().length > 0) { if (!packingEnabled) { var boundingBox3 = options2.eles.boundingBox(); componentCenters.push({ x: boundingBox3.x1 + boundingBox3.w / 2, y: boundingBox3.y1 + boundingBox3.h / 2 }); if (options2.randomize) { var result = spectralLayout(options2); spectralResult.push(result); } if (options2.quality == "default" || options2.quality == "proof") { coseResult.push(coseLayout(options2, spectralResult[0])); aux.relocateComponent(componentCenters[0], coseResult[0], options2); } else { aux.relocateComponent(componentCenters[0], spectralResult[0], options2); } } else { var topMostNodes = aux.getTopMostNodes(options2.eles.nodes()); components3 = aux.connectComponents(cy, options2.eles, topMostNodes); components3.forEach(function(component2) { var boundingBox4 = component2.boundingBox(); componentCenters.push({ x: boundingBox4.x1 + boundingBox4.w / 2, y: boundingBox4.y1 + boundingBox4.h / 2 }); }); if (options2.randomize) { components3.forEach(function(component2) { options2.eles = component2; spectralResult.push(spectralLayout(options2)); }); } if (options2.quality == "default" || options2.quality == "proof") { var toBeTiledNodes = cy.collection(); if (options2.tile) { var nodeIndexes = /* @__PURE__ */ new Map(); var _xCoords = []; var _yCoords = []; var count2 = 0; var tempSpectralResult = { nodeIndexes, xCoords: _xCoords, yCoords: _yCoords }; var indexesToBeDeleted = []; components3.forEach(function(component2, index) { if (component2.edges().length == 0) { component2.nodes().forEach(function(node2, i3) { toBeTiledNodes.merge(component2.nodes()[i3]); if (!node2.isParent()) { tempSpectralResult.nodeIndexes.set(component2.nodes()[i3].id(), count2++); tempSpectralResult.xCoords.push(component2.nodes()[0].position().x); tempSpectralResult.yCoords.push(component2.nodes()[0].position().y); } }); indexesToBeDeleted.push(index); } }); if (toBeTiledNodes.length > 1) { var _boundingBox = toBeTiledNodes.boundingBox(); componentCenters.push({ x: _boundingBox.x1 + _boundingBox.w / 2, y: _boundingBox.y1 + _boundingBox.h / 2 }); components3.push(toBeTiledNodes); spectralResult.push(tempSpectralResult); for (var i2 = indexesToBeDeleted.length - 1; i2 >= 0; i2--) { components3.splice(indexesToBeDeleted[i2], 1); spectralResult.splice(indexesToBeDeleted[i2], 1); componentCenters.splice(indexesToBeDeleted[i2], 1); } ; } } components3.forEach(function(component2, index) { options2.eles = component2; coseResult.push(coseLayout(options2, spectralResult[index])); aux.relocateComponent(componentCenters[index], coseResult[index], options2); }); } else { components3.forEach(function(component2, index) { aux.relocateComponent(componentCenters[index], spectralResult[index], options2); }); } var componentsEvaluated = /* @__PURE__ */ new Set(); if (components3.length > 1) { var subgraphs = []; var hiddenEles = eles.filter(function(ele) { return ele.css("display") == "none"; }); components3.forEach(function(component2, index) { var nodeIndexes2 = void 0; if (options2.quality == "draft") { nodeIndexes2 = spectralResult[index].nodeIndexes; } if (component2.nodes().not(hiddenEles).length > 0) { var subgraph = {}; subgraph.edges = []; subgraph.nodes = []; var nodeIndex = void 0; component2.nodes().not(hiddenEles).forEach(function(node2) { if (options2.quality == "draft") { if (!node2.isParent()) { nodeIndex = nodeIndexes2.get(node2.id()); subgraph.nodes.push({ x: spectralResult[index].xCoords[nodeIndex] - node2.boundingbox().w / 2, y: spectralResult[index].yCoords[nodeIndex] - node2.boundingbox().h / 2, width: node2.boundingbox().w, height: node2.boundingbox().h }); } else { var parentInfo = aux.calcBoundingBox(node2, spectralResult[index].xCoords, spectralResult[index].yCoords, nodeIndexes2); subgraph.nodes.push({ x: parentInfo.topLeftX, y: parentInfo.topLeftY, width: parentInfo.width, height: parentInfo.height }); } } else { if (coseResult[index][node2.id()]) { subgraph.nodes.push({ x: coseResult[index][node2.id()].getLeft(), y: coseResult[index][node2.id()].getTop(), width: coseResult[index][node2.id()].getWidth(), height: coseResult[index][node2.id()].getHeight() }); } } }); component2.edges().forEach(function(edge) { var source = edge.source(); var target = edge.target(); if (source.css("display") != "none" && target.css("display") != "none") { if (options2.quality == "draft") { var sourceNodeIndex = nodeIndexes2.get(source.id()); var targetNodeIndex = nodeIndexes2.get(target.id()); var sourceCenter = []; var targetCenter = []; if (source.isParent()) { var parentInfo = aux.calcBoundingBox(source, spectralResult[index].xCoords, spectralResult[index].yCoords, nodeIndexes2); sourceCenter.push(parentInfo.topLeftX + parentInfo.width / 2); sourceCenter.push(parentInfo.topLeftY + parentInfo.height / 2); } else { sourceCenter.push(spectralResult[index].xCoords[sourceNodeIndex]); sourceCenter.push(spectralResult[index].yCoords[sourceNodeIndex]); } if (target.isParent()) { var _parentInfo = aux.calcBoundingBox(target, spectralResult[index].xCoords, spectralResult[index].yCoords, nodeIndexes2); targetCenter.push(_parentInfo.topLeftX + _parentInfo.width / 2); targetCenter.push(_parentInfo.topLeftY + _parentInfo.height / 2); } else { targetCenter.push(spectralResult[index].xCoords[targetNodeIndex]); targetCenter.push(spectralResult[index].yCoords[targetNodeIndex]); } subgraph.edges.push({ startX: sourceCenter[0], startY: sourceCenter[1], endX: targetCenter[0], endY: targetCenter[1] }); } else { if (coseResult[index][source.id()] && coseResult[index][target.id()]) { subgraph.edges.push({ startX: coseResult[index][source.id()].getCenterX(), startY: coseResult[index][source.id()].getCenterY(), endX: coseResult[index][target.id()].getCenterX(), endY: coseResult[index][target.id()].getCenterY() }); } } } }); if (subgraph.nodes.length > 0) { subgraphs.push(subgraph); componentsEvaluated.add(index); } } }); var shiftResult = layUtil.packComponents(subgraphs, options2.randomize).shifts; if (options2.quality == "draft") { spectralResult.forEach(function(result2, index) { var newXCoords = result2.xCoords.map(function(x5) { return x5 + shiftResult[index].dx; }); var newYCoords = result2.yCoords.map(function(y6) { return y6 + shiftResult[index].dy; }); result2.xCoords = newXCoords; result2.yCoords = newYCoords; }); } else { var _count = 0; componentsEvaluated.forEach(function(index) { Object.keys(coseResult[index]).forEach(function(item) { var nodeRectangle = coseResult[index][item]; nodeRectangle.setCenter(nodeRectangle.getCenterX() + shiftResult[_count].dx, nodeRectangle.getCenterY() + shiftResult[_count].dy); }); _count++; }); } } } } var getPositions = /* @__PURE__ */ __name(function getPositions2(ele, i3) { if (options2.quality == "default" || options2.quality == "proof") { if (typeof ele === "number") { ele = i3; } var pos = void 0; var node2 = void 0; var theId = ele.data("id"); coseResult.forEach(function(result2) { if (theId in result2) { pos = { x: result2[theId].getRect().getCenterX(), y: result2[theId].getRect().getCenterY() }; node2 = result2[theId]; } }); if (options2.nodeDimensionsIncludeLabels) { if (node2.labelWidth) { if (node2.labelPosHorizontal == "left") { pos.x += node2.labelWidth / 2; } else if (node2.labelPosHorizontal == "right") { pos.x -= node2.labelWidth / 2; } } if (node2.labelHeight) { if (node2.labelPosVertical == "top") { pos.y += node2.labelHeight / 2; } else if (node2.labelPosVertical == "bottom") { pos.y -= node2.labelHeight / 2; } } } if (pos == void 0) pos = { x: ele.position("x"), y: ele.position("y") }; return { x: pos.x, y: pos.y }; } else { var _pos = void 0; spectralResult.forEach(function(result2) { var index = result2.nodeIndexes.get(ele.id()); if (index != void 0) { _pos = { x: result2.xCoords[index], y: result2.yCoords[index] }; } }); if (_pos == void 0) _pos = { x: ele.position("x"), y: ele.position("y") }; return { x: _pos.x, y: _pos.y }; } }, "getPositions"); if (options2.quality == "default" || options2.quality == "proof" || options2.randomize) { var parentsWithoutChildren = aux.calcParentsWithoutChildren(cy, eles); var _hiddenEles = eles.filter(function(ele) { return ele.css("display") == "none"; }); options2.eles = eles.not(_hiddenEles); eles.nodes().not(":parent").not(_hiddenEles).layoutPositions(layout6, options2, getPositions); if (parentsWithoutChildren.length > 0) { parentsWithoutChildren.forEach(function(ele) { ele.position(getPositions(ele)); }); } } else { console.log("If randomize option is set to false, then quality option must be 'default' or 'proof'."); } }, "run") }]); return Layout3; })(); module3.exports = Layout2; }) ), /***/ 657: ( /***/ ((module3, __unused_webpack_exports, __webpack_require__2) => { var aux = __webpack_require__2(548); var Matrix = __webpack_require__2(140).layoutBase.Matrix; var SVD = __webpack_require__2(140).layoutBase.SVD; var spectralLayout = /* @__PURE__ */ __name(function spectralLayout2(options2) { var cy = options2.cy; var eles = options2.eles; var nodes5 = eles.nodes(); var parentNodes = eles.nodes(":parent"); var dummyNodes = /* @__PURE__ */ new Map(); var nodeIndexes = /* @__PURE__ */ new Map(); var parentChildMap = /* @__PURE__ */ new Map(); var allNodesNeighborhood = []; var xCoords = []; var yCoords = []; var samplesColumn = []; var minDistancesColumn = []; var C3 = []; var PHI = []; var INV = []; var firstSample = void 0; var nodeSize = void 0; var infinity = 1e8; var small = 1e-9; var piTol = options2.piTol; var samplingType = options2.samplingType; var nodeSeparation = options2.nodeSeparation; var sampleSize = void 0; var randomSampleCR = /* @__PURE__ */ __name(function randomSampleCR2() { var sample2 = 0; var count2 = 0; var flag = false; while (count2 < sampleSize) { sample2 = Math.floor(Math.random() * nodeSize); flag = false; for (var i3 = 0; i3 < count2; i3++) { if (samplesColumn[i3] == sample2) { flag = true; break; } } if (!flag) { samplesColumn[count2] = sample2; count2++; } else { continue; } } }, "randomSampleCR"); var BFS = /* @__PURE__ */ __name(function BFS2(pivot, index2, samplingMethod) { var path4 = []; var front = 0; var back = 0; var current = 0; var temp = void 0; var distance2 = []; var max_dist = 0; var max_ind = 1; for (var i3 = 0; i3 < nodeSize; i3++) { distance2[i3] = infinity; } path4[back] = pivot; distance2[pivot] = 0; while (back >= front) { current = path4[front++]; var neighbors = allNodesNeighborhood[current]; for (var _i = 0; _i < neighbors.length; _i++) { temp = nodeIndexes.get(neighbors[_i]); if (distance2[temp] == infinity) { distance2[temp] = distance2[current] + 1; path4[++back] = temp; } } C3[current][index2] = distance2[current] * nodeSeparation; } if (samplingMethod) { for (var _i2 = 0; _i2 < nodeSize; _i2++) { if (C3[_i2][index2] < minDistancesColumn[_i2]) minDistancesColumn[_i2] = C3[_i2][index2]; } for (var _i3 = 0; _i3 < nodeSize; _i3++) { if (minDistancesColumn[_i3] > max_dist) { max_dist = minDistancesColumn[_i3]; max_ind = _i3; } } } return max_ind; }, "BFS"); var allBFS = /* @__PURE__ */ __name(function allBFS2(samplingMethod) { var sample2 = void 0; if (!samplingMethod) { randomSampleCR(); for (var i3 = 0; i3 < sampleSize; i3++) { BFS(samplesColumn[i3], i3, samplingMethod, false); } } else { sample2 = Math.floor(Math.random() * nodeSize); firstSample = sample2; for (var _i4 = 0; _i4 < nodeSize; _i4++) { minDistancesColumn[_i4] = infinity; } for (var _i5 = 0; _i5 < sampleSize; _i5++) { samplesColumn[_i5] = sample2; sample2 = BFS(sample2, _i5, samplingMethod); } } for (var _i6 = 0; _i6 < nodeSize; _i6++) { for (var j3 = 0; j3 < sampleSize; j3++) { C3[_i6][j3] *= C3[_i6][j3]; } } for (var _i7 = 0; _i7 < sampleSize; _i7++) { PHI[_i7] = []; } for (var _i8 = 0; _i8 < sampleSize; _i8++) { for (var _j = 0; _j < sampleSize; _j++) { PHI[_i8][_j] = C3[samplesColumn[_j]][_i8]; } } }, "allBFS"); var sample = /* @__PURE__ */ __name(function sample2() { var SVDResult = SVD.svd(PHI); var a_q = SVDResult.S; var a_u = SVDResult.U; var a_v = SVDResult.V; var max_s = a_q[0] * a_q[0] * a_q[0]; var a_Sig = []; for (var i3 = 0; i3 < sampleSize; i3++) { a_Sig[i3] = []; for (var j3 = 0; j3 < sampleSize; j3++) { a_Sig[i3][j3] = 0; if (i3 == j3) { a_Sig[i3][j3] = a_q[i3] / (a_q[i3] * a_q[i3] + max_s / (a_q[i3] * a_q[i3])); } } } INV = Matrix.multMat(Matrix.multMat(a_v, a_Sig), Matrix.transpose(a_u)); }, "sample"); var powerIteration = /* @__PURE__ */ __name(function powerIteration2() { var theta1 = void 0; var theta2 = void 0; var Y1 = []; var Y22 = []; var V1 = []; var V22 = []; for (var i3 = 0; i3 < nodeSize; i3++) { Y1[i3] = Math.random(); Y22[i3] = Math.random(); } Y1 = Matrix.normalize(Y1); Y22 = Matrix.normalize(Y22); var count2 = 0; var current = small; var previous = small; var temp = void 0; while (true) { count2++; for (var _i9 = 0; _i9 < nodeSize; _i9++) { V1[_i9] = Y1[_i9]; } Y1 = Matrix.multGamma(Matrix.multL(Matrix.multGamma(V1), C3, INV)); theta1 = Matrix.dotProduct(V1, Y1); Y1 = Matrix.normalize(Y1); current = Matrix.dotProduct(V1, Y1); temp = Math.abs(current / previous); if (temp <= 1 + piTol && temp >= 1) { break; } previous = current; } for (var _i10 = 0; _i10 < nodeSize; _i10++) { V1[_i10] = Y1[_i10]; } count2 = 0; previous = small; while (true) { count2++; for (var _i11 = 0; _i11 < nodeSize; _i11++) { V22[_i11] = Y22[_i11]; } V22 = Matrix.minusOp(V22, Matrix.multCons(V1, Matrix.dotProduct(V1, V22))); Y22 = Matrix.multGamma(Matrix.multL(Matrix.multGamma(V22), C3, INV)); theta2 = Matrix.dotProduct(V22, Y22); Y22 = Matrix.normalize(Y22); current = Matrix.dotProduct(V22, Y22); temp = Math.abs(current / previous); if (temp <= 1 + piTol && temp >= 1) { break; } previous = current; } for (var _i12 = 0; _i12 < nodeSize; _i12++) { V22[_i12] = Y22[_i12]; } xCoords = Matrix.multCons(V1, Math.sqrt(Math.abs(theta1))); yCoords = Matrix.multCons(V22, Math.sqrt(Math.abs(theta2))); }, "powerIteration"); aux.connectComponents(cy, eles, aux.getTopMostNodes(nodes5), dummyNodes); parentNodes.forEach(function(ele) { aux.connectComponents(cy, eles, aux.getTopMostNodes(ele.descendants().intersection(eles)), dummyNodes); }); var index = 0; for (var i2 = 0; i2 < nodes5.length; i2++) { if (!nodes5[i2].isParent()) { nodeIndexes.set(nodes5[i2].id(), index++); } } var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = void 0; try { for (var _iterator = dummyNodes.keys()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var key = _step.value; nodeIndexes.set(key, index++); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } for (var _i13 = 0; _i13 < nodeIndexes.size; _i13++) { allNodesNeighborhood[_i13] = []; } parentNodes.forEach(function(ele) { var children2 = ele.children().intersection(eles); while (children2.nodes(":childless").length == 0) { children2 = children2.nodes()[0].children().intersection(eles); } var index2 = 0; var min9 = children2.nodes(":childless")[0].connectedEdges().length; children2.nodes(":childless").forEach(function(ele2, i3) { if (ele2.connectedEdges().length < min9) { min9 = ele2.connectedEdges().length; index2 = i3; } }); parentChildMap.set(ele.id(), children2.nodes(":childless")[index2].id()); }); nodes5.forEach(function(ele) { var eleIndex = void 0; if (ele.isParent()) eleIndex = nodeIndexes.get(parentChildMap.get(ele.id())); else eleIndex = nodeIndexes.get(ele.id()); ele.neighborhood().nodes().forEach(function(node2) { if (eles.intersection(ele.edgesWith(node2)).length > 0) { if (node2.isParent()) allNodesNeighborhood[eleIndex].push(parentChildMap.get(node2.id())); else allNodesNeighborhood[eleIndex].push(node2.id()); } }); }); var _loop = /* @__PURE__ */ __name(function _loop2(_key2) { var eleIndex = nodeIndexes.get(_key2); var disconnectedId = void 0; dummyNodes.get(_key2).forEach(function(id30) { if (cy.getElementById(id30).isParent()) disconnectedId = parentChildMap.get(id30); else disconnectedId = id30; allNodesNeighborhood[eleIndex].push(disconnectedId); allNodesNeighborhood[nodeIndexes.get(disconnectedId)].push(_key2); }); }, "_loop"); var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = void 0; try { for (var _iterator2 = dummyNodes.keys()[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var _key = _step2.value; _loop(_key); } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } nodeSize = nodeIndexes.size; var spectralResult = void 0; if (nodeSize > 2) { sampleSize = nodeSize < options2.sampleSize ? nodeSize : options2.sampleSize; for (var _i14 = 0; _i14 < nodeSize; _i14++) { C3[_i14] = []; } for (var _i15 = 0; _i15 < sampleSize; _i15++) { INV[_i15] = []; } if (options2.quality == "draft" || options2.step == "all") { allBFS(samplingType); sample(); powerIteration(); spectralResult = { nodeIndexes, xCoords, yCoords }; } else { nodeIndexes.forEach(function(value2, key2) { xCoords.push(cy.getElementById(key2).position("x")); yCoords.push(cy.getElementById(key2).position("y")); }); spectralResult = { nodeIndexes, xCoords, yCoords }; } return spectralResult; } else { var iterator = nodeIndexes.keys(); var firstNode = cy.getElementById(iterator.next().value); var firstNodePos = firstNode.position(); var firstNodeWidth = firstNode.outerWidth(); xCoords.push(firstNodePos.x); yCoords.push(firstNodePos.y); if (nodeSize == 2) { var secondNode = cy.getElementById(iterator.next().value); var secondNodeWidth = secondNode.outerWidth(); xCoords.push(firstNodePos.x + firstNodeWidth / 2 + secondNodeWidth / 2 + options2.idealEdgeLength); yCoords.push(firstNodePos.y); } spectralResult = { nodeIndexes, xCoords, yCoords }; return spectralResult; } }, "spectralLayout"); module3.exports = { spectralLayout }; }) ), /***/ 579: ( /***/ ((module3, __unused_webpack_exports, __webpack_require__2) => { var impl2 = __webpack_require__2(212); var register = /* @__PURE__ */ __name(function register2(cytoscape4) { if (!cytoscape4) { return; } cytoscape4("layout", "fcose", impl2); }, "register"); if (typeof cytoscape !== "undefined") { register(cytoscape); } module3.exports = register; }) ), /***/ 140: ( /***/ ((module3) => { module3.exports = __WEBPACK_EXTERNAL_MODULE__140__; }) ) /******/ }; var __webpack_module_cache__ = {}; function __webpack_require__(moduleId) { var cachedModule = __webpack_module_cache__[moduleId]; if (cachedModule !== void 0) { return cachedModule.exports; } var module3 = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; __webpack_modules__[moduleId](module3, module3.exports, __webpack_require__); return module3.exports; } __name(__webpack_require__, "__webpack_require__"); var __webpack_exports__ = __webpack_require__(579); return __webpack_exports__; })() ); }); } }); // src/diagrams/architecture/architectureIcons.ts var wrapIcon, architectureIcons; var init_architectureIcons = __esm({ "src/diagrams/architecture/architectureIcons.ts"() { "use strict"; init_icons(); wrapIcon = /* @__PURE__ */ __name((icon2) => { return `${icon2}`; }, "wrapIcon"); architectureIcons = { prefix: "mermaid-architecture", height: 80, width: 80, icons: { database: { body: wrapIcon( '' ) }, server: { body: wrapIcon( '' ) }, disk: { body: wrapIcon( '' ) }, internet: { body: wrapIcon( '' ) }, cloud: { body: wrapIcon( '' ) }, unknown: unknownIcon, blank: { body: wrapIcon("") } } }; } }); // src/diagrams/architecture/svgDraw.ts var drawEdges, drawGroups, drawServices, drawJunctions; var init_svgDraw5 = __esm({ "src/diagrams/architecture/svgDraw.ts"() { "use strict"; init_diagramAPI(); init_createText(); init_icons(); init_common(); init_architectureIcons(); init_architectureTypes(); init_utils2(); drawEdges = /* @__PURE__ */ __name(async function(edgesEl, cy, db7) { const padding2 = db7.getConfigField("padding"); const iconSize = db7.getConfigField("iconSize"); const halfIconSize = iconSize / 2; const arrowSize = iconSize / 6; const halfArrowSize = arrowSize / 2; await Promise.all( cy.edges().map(async (edge) => { const { source, sourceDir, sourceArrow, sourceGroup, target, targetDir, targetArrow, targetGroup, label } = edgeData(edge); let { x: startX2, y: startY2 } = edge[0].sourceEndpoint(); const { x: midX, y: midY } = edge[0].midpoint(); let { x: endX, y: endY } = edge[0].targetEndpoint(); const groupEdgeShift = padding2 + 4; if (sourceGroup) { if (isArchitectureDirectionX(sourceDir)) { startX2 += sourceDir === "L" ? -groupEdgeShift : groupEdgeShift; } else { startY2 += sourceDir === "T" ? -groupEdgeShift : groupEdgeShift + 18; } } if (targetGroup) { if (isArchitectureDirectionX(targetDir)) { endX += targetDir === "L" ? -groupEdgeShift : groupEdgeShift; } else { endY += targetDir === "T" ? -groupEdgeShift : groupEdgeShift + 18; } } if (!sourceGroup && db7.getNode(source)?.type === "junction") { if (isArchitectureDirectionX(sourceDir)) { startX2 += sourceDir === "L" ? halfIconSize : -halfIconSize; } else { startY2 += sourceDir === "T" ? halfIconSize : -halfIconSize; } } if (!targetGroup && db7.getNode(target)?.type === "junction") { if (isArchitectureDirectionX(targetDir)) { endX += targetDir === "L" ? halfIconSize : -halfIconSize; } else { endY += targetDir === "T" ? halfIconSize : -halfIconSize; } } if (edge[0]._private.rscratch) { const g2 = edgesEl.insert("g"); g2.insert("path").attr("d", `M ${startX2},${startY2} L ${midX},${midY} L${endX},${endY} `).attr("class", "edge").attr("id", getEdgeId(source, target, { prefix: "L" })); if (sourceArrow) { const xShift = isArchitectureDirectionX(sourceDir) ? ArchitectureDirectionArrowShift[sourceDir](startX2, arrowSize) : startX2 - halfArrowSize; const yShift = isArchitectureDirectionY(sourceDir) ? ArchitectureDirectionArrowShift[sourceDir](startY2, arrowSize) : startY2 - halfArrowSize; g2.insert("polygon").attr("points", ArchitectureDirectionArrow[sourceDir](arrowSize)).attr("transform", `translate(${xShift},${yShift})`).attr("class", "arrow"); } if (targetArrow) { const xShift = isArchitectureDirectionX(targetDir) ? ArchitectureDirectionArrowShift[targetDir](endX, arrowSize) : endX - halfArrowSize; const yShift = isArchitectureDirectionY(targetDir) ? ArchitectureDirectionArrowShift[targetDir](endY, arrowSize) : endY - halfArrowSize; g2.insert("polygon").attr("points", ArchitectureDirectionArrow[targetDir](arrowSize)).attr("transform", `translate(${xShift},${yShift})`).attr("class", "arrow"); } if (label) { const axis2 = !isArchitectureDirectionXY(sourceDir, targetDir) ? isArchitectureDirectionX(sourceDir) ? "X" : "Y" : "XY"; let width3 = 0; if (axis2 === "X") { width3 = Math.abs(startX2 - endX); } else if (axis2 === "Y") { width3 = Math.abs(startY2 - endY) / 1.5; } else { width3 = Math.abs(startX2 - endX) / 2; } const textElem = g2.append("g"); await createText( textElem, label, { useHtmlLabels: false, width: width3, classes: "architecture-service-label" }, getConfig2() ); textElem.attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle"); if (axis2 === "X") { textElem.attr("transform", "translate(" + midX + ", " + midY + ")"); } else if (axis2 === "Y") { textElem.attr("transform", "translate(" + midX + ", " + midY + ") rotate(-90)"); } else if (axis2 === "XY") { const pair = getArchitectureDirectionPair(sourceDir, targetDir); if (pair && isArchitecturePairXY(pair)) { const bboxOrig = textElem.node().getBoundingClientRect(); const [x5, y6] = getArchitectureDirectionXYFactors(pair); textElem.attr("dominant-baseline", "auto").attr("transform", `rotate(${-1 * x5 * y6 * 45})`); const bboxNew = textElem.node().getBoundingClientRect(); textElem.attr( "transform", ` translate(${midX}, ${midY - bboxOrig.height / 2}) translate(${x5 * bboxNew.width / 2}, ${y6 * bboxNew.height / 2}) rotate(${-1 * x5 * y6 * 45}, 0, ${bboxOrig.height / 2}) ` ); } } } } }) ); }, "drawEdges"); drawGroups = /* @__PURE__ */ __name(async function(groupsEl, cy, db7) { const padding2 = db7.getConfigField("padding"); const groupIconSize = padding2 * 0.75; const fontSize = db7.getConfigField("fontSize"); const iconSize = db7.getConfigField("iconSize"); const halfIconSize = iconSize / 2; await Promise.all( cy.nodes().map(async (node2) => { const data5 = nodeData(node2); if (data5.type === "group") { const { h: h3, w: w4, x1, y1 } = node2.boundingBox(); const groupsNode = groupsEl.append("rect"); groupsNode.attr("id", `group-${data5.id}`).attr("x", x1 + halfIconSize).attr("y", y1 + halfIconSize).attr("width", w4).attr("height", h3).attr("class", "node-bkg"); const groupLabelContainer = groupsEl.append("g"); let shiftedX1 = x1; let shiftedY1 = y1; if (data5.icon) { const bkgElem = groupLabelContainer.append("g"); bkgElem.html( `${await getIconSVG(data5.icon, { height: groupIconSize, width: groupIconSize, fallbackPrefix: architectureIcons.prefix })}` ); bkgElem.attr( "transform", "translate(" + (shiftedX1 + halfIconSize + 1) + ", " + (shiftedY1 + halfIconSize + 1) + ")" ); shiftedX1 += groupIconSize; shiftedY1 += fontSize / 2 - 1 - 2; } if (data5.label) { const textElem = groupLabelContainer.append("g"); await createText( textElem, data5.label, { useHtmlLabels: false, width: w4, classes: "architecture-service-label" }, getConfig2() ); textElem.attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "start").attr("text-anchor", "start"); textElem.attr( "transform", "translate(" + (shiftedX1 + halfIconSize + 4) + ", " + (shiftedY1 + halfIconSize + 2) + ")" ); } db7.setElementForId(data5.id, groupsNode); } }) ); }, "drawGroups"); drawServices = /* @__PURE__ */ __name(async function(db7, elem, services) { const config5 = getConfig2(); for (const service of services) { const serviceElem = elem.append("g"); const iconSize = db7.getConfigField("iconSize"); if (service.title) { const textElem = serviceElem.append("g"); await createText( textElem, service.title, { useHtmlLabels: false, width: iconSize * 1.5, classes: "architecture-service-label" }, config5 ); textElem.attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle"); textElem.attr("transform", "translate(" + iconSize / 2 + ", " + iconSize + ")"); } const bkgElem = serviceElem.append("g"); if (service.icon) { bkgElem.html( `${await getIconSVG(service.icon, { height: iconSize, width: iconSize, fallbackPrefix: architectureIcons.prefix })}` ); } else if (service.iconText) { bkgElem.html( `${await getIconSVG("blank", { height: iconSize, width: iconSize, fallbackPrefix: architectureIcons.prefix })}` ); const textElemContainer = bkgElem.append("g"); const fo = textElemContainer.append("foreignObject").attr("width", iconSize).attr("height", iconSize); const divElem = fo.append("div").attr("class", "node-icon-text").attr("style", `height: ${iconSize}px;`).append("div").html(sanitizeText(service.iconText, config5)); const fontSize = parseInt( window.getComputedStyle(divElem.node(), null).getPropertyValue("font-size").replace(/\D/g, "") ) ?? 16; divElem.attr("style", `-webkit-line-clamp: ${Math.floor((iconSize - 2) / fontSize)};`); } else { bkgElem.append("path").attr("class", "node-bkg").attr("id", "node-" + service.id).attr( "d", `M0 ${iconSize} v${-iconSize} q0,-5 5,-5 h${iconSize} q5,0 5,5 v${iconSize} H0 Z` ); } serviceElem.attr("id", `service-${service.id}`).attr("class", "architecture-service"); const { width: width3, height: height2 } = serviceElem.node().getBBox(); service.width = width3; service.height = height2; db7.setElementForId(service.id, serviceElem); } return 0; }, "drawServices"); drawJunctions = /* @__PURE__ */ __name(function(db7, elem, junctions) { junctions.forEach((junction) => { const junctionElem = elem.append("g"); const iconSize = db7.getConfigField("iconSize"); const bkgElem = junctionElem.append("g"); bkgElem.append("rect").attr("id", "node-" + junction.id).attr("fill-opacity", "0").attr("width", iconSize).attr("height", iconSize); junctionElem.attr("class", "architecture-junction"); const { width: width3, height: height2 } = junctionElem._groups[0][0].getBBox(); junctionElem.width = width3; junctionElem.height = height2; db7.setElementForId(junction.id, junctionElem); }); }, "drawJunctions"); } }); // src/diagrams/architecture/architectureRenderer.ts function addServices(services, cy, db7) { services.forEach((service) => { cy.add({ group: "nodes", data: { type: "service", id: service.id, icon: service.icon, label: service.title, parent: service.in, width: db7.getConfigField("iconSize"), height: db7.getConfigField("iconSize") }, classes: "node-service" }); }); } function addJunctions(junctions, cy, db7) { junctions.forEach((junction) => { cy.add({ group: "nodes", data: { type: "junction", id: junction.id, parent: junction.in, width: db7.getConfigField("iconSize"), height: db7.getConfigField("iconSize") }, classes: "node-junction" }); }); } function positionNodes(db7, cy) { cy.nodes().map((node2) => { const data5 = nodeData(node2); if (data5.type === "group") { return; } data5.x = node2.position().x; data5.y = node2.position().y; const nodeElem = db7.getElementById(data5.id); nodeElem.attr("transform", "translate(" + (data5.x || 0) + "," + (data5.y || 0) + ")"); }); } function addGroups(groups, cy) { groups.forEach((group2) => { cy.add({ group: "nodes", data: { type: "group", id: group2.id, icon: group2.icon, label: group2.title, parent: group2.in }, classes: "node-group" }); }); } function addEdges2(edges3, cy) { edges3.forEach((parsedEdge) => { const { lhsId, rhsId, lhsInto, lhsGroup, rhsInto, lhsDir, rhsDir, rhsGroup, title: title2 } = parsedEdge; const edgeType = isArchitectureDirectionXY(parsedEdge.lhsDir, parsedEdge.rhsDir) ? "segments" : "straight"; const edge = { id: `${lhsId}-${rhsId}`, label: title2, source: lhsId, sourceDir: lhsDir, sourceArrow: lhsInto, sourceGroup: lhsGroup, sourceEndpoint: lhsDir === "L" ? "0 50%" : lhsDir === "R" ? "100% 50%" : lhsDir === "T" ? "50% 0" : "50% 100%", target: rhsId, targetDir: rhsDir, targetArrow: rhsInto, targetGroup: rhsGroup, targetEndpoint: rhsDir === "L" ? "0 50%" : rhsDir === "R" ? "100% 50%" : rhsDir === "T" ? "50% 0" : "50% 100%" }; cy.add({ group: "edges", data: edge, classes: edgeType }); }); } function getAlignments(db7, spatialMaps, groupAlignments) { const flattenAlignments = /* @__PURE__ */ __name((alignmentObj, alignmentDir) => { return Object.entries(alignmentObj).reduce( (prev2, [dir2, alignments2]) => { let cnt4 = 0; const arr = Object.entries(alignments2); if (arr.length === 1) { prev2[dir2] = arr[0][1]; return prev2; } for (let i2 = 0; i2 < arr.length - 1; i2++) { for (let j3 = i2 + 1; j3 < arr.length; j3++) { const [aGroupId, aNodeIds] = arr[i2]; const [bGroupId, bNodeIds] = arr[j3]; const alignment = groupAlignments[aGroupId]?.[bGroupId]; if (alignment === alignmentDir) { prev2[dir2] ??= []; prev2[dir2] = [...prev2[dir2], ...aNodeIds, ...bNodeIds]; } else if (aGroupId === "default" || bGroupId === "default") { prev2[dir2] ??= []; prev2[dir2] = [...prev2[dir2], ...aNodeIds, ...bNodeIds]; } else { const keyA = `${dir2}-${cnt4++}`; prev2[keyA] = aNodeIds; const keyB = `${dir2}-${cnt4++}`; prev2[keyB] = bNodeIds; } } } return prev2; }, {} ); }, "flattenAlignments"); const alignments = spatialMaps.map((spatialMap) => { const horizontalAlignments = {}; const verticalAlignments = {}; Object.entries(spatialMap).forEach(([id30, [x5, y6]]) => { const nodeGroup = db7.getNode(id30)?.in ?? "default"; horizontalAlignments[y6] ??= {}; horizontalAlignments[y6][nodeGroup] ??= []; horizontalAlignments[y6][nodeGroup].push(id30); verticalAlignments[x5] ??= {}; verticalAlignments[x5][nodeGroup] ??= []; verticalAlignments[x5][nodeGroup].push(id30); }); return { horiz: Object.values(flattenAlignments(horizontalAlignments, "horizontal")).filter( (arr) => arr.length > 1 ), vert: Object.values(flattenAlignments(verticalAlignments, "vertical")).filter( (arr) => arr.length > 1 ) }; }); const [horizontal, vertical] = alignments.reduce( ([prevHoriz, prevVert], { horiz, vert }) => { return [ [...prevHoriz, ...horiz], [...prevVert, ...vert] ]; }, [[], []] ); return { horizontal, vertical }; } function getRelativeConstraints(spatialMaps, db7) { const relativeConstraints = []; const posToStr = /* @__PURE__ */ __name((pos) => `${pos[0]},${pos[1]}`, "posToStr"); const strToPos = /* @__PURE__ */ __name((pos) => pos.split(",").map((p3) => parseInt(p3)), "strToPos"); spatialMaps.forEach((spatialMap) => { const invSpatialMap = Object.fromEntries( Object.entries(spatialMap).map(([id30, pos]) => [posToStr(pos), id30]) ); const queue = [posToStr([0, 0])]; const visited = {}; const directions = { L: [-1, 0], R: [1, 0], T: [0, 1], B: [0, -1] }; while (queue.length > 0) { const curr = queue.shift(); if (curr) { visited[curr] = 1; const currId = invSpatialMap[curr]; if (currId) { const currPos = strToPos(curr); Object.entries(directions).forEach(([dir2, shift2]) => { const newPos = posToStr([currPos[0] + shift2[0], currPos[1] + shift2[1]]); const newId2 = invSpatialMap[newPos]; if (newId2 && !visited[newPos]) { queue.push(newPos); relativeConstraints.push({ [ArchitectureDirectionName[dir2]]: newId2, [ArchitectureDirectionName[getOppositeArchitectureDirection(dir2)]]: currId, gap: 1.5 * db7.getConfigField("iconSize") }); } }); } } } }); return relativeConstraints; } function layoutArchitecture(services, junctions, groups, edges3, db7, { spatialMaps, groupAlignments }) { return new Promise((resolve2) => { const renderEl = select_default2("body").append("div").attr("id", "cy").attr("style", "display:none"); const cy = cytoscape2({ container: document.getElementById("cy"), style: [ { selector: "edge", style: { "curve-style": "straight", label: "data(label)", "source-endpoint": "data(sourceEndpoint)", "target-endpoint": "data(targetEndpoint)" } }, { selector: "edge.segments", style: { "curve-style": "segments", "segment-weights": "0", "segment-distances": [0.5], // @ts-ignore Incorrect library types "edge-distances": "endpoints", "source-endpoint": "data(sourceEndpoint)", "target-endpoint": "data(targetEndpoint)" } }, { selector: "node", style: { // @ts-ignore Incorrect library types "compound-sizing-wrt-labels": "include" } }, { selector: "node[label]", style: { "text-valign": "bottom", "text-halign": "center", "font-size": `${db7.getConfigField("fontSize")}px` } }, { selector: ".node-service", style: { label: "data(label)", width: "data(width)", height: "data(height)" } }, { selector: ".node-junction", style: { width: "data(width)", height: "data(height)" } }, { selector: ".node-group", style: { // @ts-ignore Incorrect library types padding: `${db7.getConfigField("padding")}px` } } ], layout: { name: "grid", boundingBox: { x1: 0, x2: 100, y1: 0, y2: 100 } } }); renderEl.remove(); addGroups(groups, cy); addServices(services, cy, db7); addJunctions(junctions, cy, db7); addEdges2(edges3, cy); const alignmentConstraint = getAlignments(db7, spatialMaps, groupAlignments); const relativePlacementConstraint = getRelativeConstraints(spatialMaps, db7); const layout6 = cy.layout({ name: "fcose", quality: "proof", styleEnabled: false, animate: false, nodeDimensionsIncludeLabels: false, // Adjust the edge parameters if it passes through the border of a group // Hacky fix for: https://github.com/iVis-at-Bilkent/cytoscape.js-fcose/issues/67 idealEdgeLength(edge) { const [nodeA, nodeB] = edge.connectedNodes(); const { parent: parentA } = nodeData(nodeA); const { parent: parentB } = nodeData(nodeB); const elasticity = parentA === parentB ? 1.5 * db7.getConfigField("iconSize") : 0.5 * db7.getConfigField("iconSize"); return elasticity; }, edgeElasticity(edge) { const [nodeA, nodeB] = edge.connectedNodes(); const { parent: parentA } = nodeData(nodeA); const { parent: parentB } = nodeData(nodeB); const elasticity = parentA === parentB ? 0.45 : 1e-3; return elasticity; }, alignmentConstraint, relativePlacementConstraint }); layout6.one("layoutstop", () => { function getSegmentWeights(source, target, pointX, pointY) { let W3, D4; const { x: sX, y: sY } = source; const { x: tX, y: tY } = target; D4 = (pointY - sY + (sX - pointX) * (sY - tY) / (sX - tX)) / Math.sqrt(1 + Math.pow((sY - tY) / (sX - tX), 2)); W3 = Math.sqrt(Math.pow(pointY - sY, 2) + Math.pow(pointX - sX, 2) - Math.pow(D4, 2)); const distAB = Math.sqrt(Math.pow(tX - sX, 2) + Math.pow(tY - sY, 2)); W3 = W3 / distAB; let delta1 = (tX - sX) * (pointY - sY) - (tY - sY) * (pointX - sX); switch (true) { case delta1 >= 0: delta1 = 1; break; case delta1 < 0: delta1 = -1; break; } let delta2 = (tX - sX) * (pointX - sX) + (tY - sY) * (pointY - sY); switch (true) { case delta2 >= 0: delta2 = 1; break; case delta2 < 0: delta2 = -1; break; } D4 = Math.abs(D4) * delta1; W3 = W3 * delta2; return { distances: D4, weights: W3 }; } __name(getSegmentWeights, "getSegmentWeights"); cy.startBatch(); for (const edge of Object.values(cy.edges())) { if (edge.data?.()) { const { x: sX, y: sY } = edge.source().position(); const { x: tX, y: tY } = edge.target().position(); if (sX !== tX && sY !== tY) { const sEP = edge.sourceEndpoint(); const tEP = edge.targetEndpoint(); const { sourceDir } = edgeData(edge); const [pointX, pointY] = isArchitectureDirectionY(sourceDir) ? [sEP.x, tEP.y] : [tEP.x, sEP.y]; const { weights, distances: distances2 } = getSegmentWeights(sEP, tEP, pointX, pointY); edge.style("segment-distances", distances2); edge.style("segment-weights", weights); } } } cy.endBatch(); layout6.run(); }); layout6.run(); cy.ready((e3) => { log.info("Ready", e3); resolve2(cy); }); }); } var import_cytoscape_fcose, draw24, renderer8; var init_architectureRenderer = __esm({ "src/diagrams/architecture/architectureRenderer.ts"() { "use strict"; init_cytoscape_esm(); import_cytoscape_fcose = __toESM(require_cytoscape_fcose(), 1); init_src32(); init_logger(); init_icons(); init_selectSvgElement(); init_setupGraphViewbox(); init_architectureIcons(); init_architectureTypes(); init_svgDraw5(); registerIconPacks([ { name: architectureIcons.prefix, icons: architectureIcons } ]); cytoscape2.use(import_cytoscape_fcose.default); __name(addServices, "addServices"); __name(addJunctions, "addJunctions"); __name(positionNodes, "positionNodes"); __name(addGroups, "addGroups"); __name(addEdges2, "addEdges"); __name(getAlignments, "getAlignments"); __name(getRelativeConstraints, "getRelativeConstraints"); __name(layoutArchitecture, "layoutArchitecture"); draw24 = /* @__PURE__ */ __name(async (text4, id30, _version, diagObj) => { const db7 = diagObj.db; const services = db7.getServices(); const junctions = db7.getJunctions(); const groups = db7.getGroups(); const edges3 = db7.getEdges(); const ds = db7.getDataStructures(); const svg2 = selectSvgElement(id30); const edgesElem = svg2.append("g"); edgesElem.attr("class", "architecture-edges"); const servicesElem = svg2.append("g"); servicesElem.attr("class", "architecture-services"); const groupElem = svg2.append("g"); groupElem.attr("class", "architecture-groups"); await drawServices(db7, servicesElem, services); drawJunctions(db7, servicesElem, junctions); const cy = await layoutArchitecture(services, junctions, groups, edges3, db7, ds); await drawEdges(edgesElem, cy, db7); await drawGroups(groupElem, cy, db7); positionNodes(db7, cy); setupGraphViewbox(void 0, svg2, db7.getConfigField("padding"), db7.getConfigField("useMaxWidth")); }, "draw"); renderer8 = { draw: draw24 }; } }); // src/diagrams/architecture/architectureDiagram.ts var architectureDiagram_exports = {}; __export(architectureDiagram_exports, { diagram: () => diagram25 }); var diagram25; var init_architectureDiagram = __esm({ "src/diagrams/architecture/architectureDiagram.ts"() { "use strict"; init_architectureParser(); init_architectureDb(); init_architectureStyles(); init_architectureRenderer(); diagram25 = { parser: parser22, get db() { return new ArchitectureDB(); }, renderer: renderer8, styles: architectureStyles_default }; } }); // src/diagrams/treemap/db.ts var TreeMapDB; var init_db3 = __esm({ "src/diagrams/treemap/db.ts"() { "use strict"; init_defaultConfig(); init_config(); init_utils2(); init_handDrawnShapeStyles(); init_commonDb(); TreeMapDB = class { constructor() { this.nodes = []; this.levels = /* @__PURE__ */ new Map(); this.outerNodes = []; this.classes = /* @__PURE__ */ new Map(); this.setAccTitle = setAccTitle; this.getAccTitle = getAccTitle; this.setDiagramTitle = setDiagramTitle; this.getDiagramTitle = getDiagramTitle; this.getAccDescription = getAccDescription; this.setAccDescription = setAccDescription; } static { __name(this, "TreeMapDB"); } getNodes() { return this.nodes; } getConfig() { const defaultConfig4 = defaultConfig_default; const userConfig = getConfig(); return cleanAndMerge({ ...defaultConfig4.treemap, ...userConfig.treemap ?? {} }); } addNode(node2, level) { this.nodes.push(node2); this.levels.set(node2, level); if (level === 0) { this.outerNodes.push(node2); this.root ??= node2; } } getRoot() { return { name: "", children: this.outerNodes }; } addClass(id30, _style) { const styleClass = this.classes.get(id30) ?? { id: id30, styles: [], textStyles: [] }; const styles4 = _style.replace(/\\,/g, "\xA7\xA7\xA7").replace(/,/g, ";").replace(/§§§/g, ",").split(";"); if (styles4) { styles4.forEach((s2) => { if (isLabelStyle(s2)) { if (styleClass?.textStyles) { styleClass.textStyles.push(s2); } else { styleClass.textStyles = [s2]; } } if (styleClass?.styles) { styleClass.styles.push(s2); } else { styleClass.styles = [s2]; } }); } this.classes.set(id30, styleClass); } getClasses() { return this.classes; } getStylesForClass(classSelector) { return this.classes.get(classSelector)?.styles ?? []; } clear() { clear(); this.nodes = []; this.levels = /* @__PURE__ */ new Map(); this.outerNodes = []; this.classes = /* @__PURE__ */ new Map(); this.root = void 0; } }; } }); // src/diagrams/treemap/utils.ts function buildHierarchy(items) { if (!items.length) { return []; } const root3 = []; const stack = []; items.forEach((item) => { const node2 = { name: item.name, children: item.type === "Leaf" ? void 0 : [] }; node2.classSelector = item?.classSelector; if (item?.cssCompiledStyles) { node2.cssCompiledStyles = [item.cssCompiledStyles]; } if (item.type === "Leaf" && item.value !== void 0) { node2.value = item.value; } while (stack.length > 0 && stack[stack.length - 1].level >= item.level) { stack.pop(); } if (stack.length === 0) { root3.push(node2); } else { const parent4 = stack[stack.length - 1].node; if (parent4.children) { parent4.children.push(node2); } else { parent4.children = [node2]; } } if (item.type !== "Leaf") { stack.push({ node: node2, level: item.level }); } }); return root3; } var init_utils6 = __esm({ "src/diagrams/treemap/utils.ts"() { "use strict"; __name(buildHierarchy, "buildHierarchy"); } }); // src/diagrams/treemap/parser.ts var populate18, getItemName, parser23; var init_parser5 = __esm({ "src/diagrams/treemap/parser.ts"() { "use strict"; init_mermaid_parser_core(); init_logger(); init_populateCommonDb(); init_utils6(); init_db3(); populate18 = /* @__PURE__ */ __name((ast, db7) => { populateCommonDb(ast, db7); const items = []; for (const row of ast.TreemapRows ?? []) { if (row.$type === "ClassDefStatement") { db7.addClass(row.className ?? "", row.styleText ?? ""); } } for (const row of ast.TreemapRows ?? []) { const item = row.item; if (!item) { continue; } const level = row.indent ? parseInt(row.indent) : 0; const name = getItemName(item); const styles4 = item.classSelector ? db7.getStylesForClass(item.classSelector) : []; const cssCompiledStyles = styles4.length > 0 ? styles4.join(";") : void 0; const itemData = { level, name, type: item.$type, value: item.value, classSelector: item.classSelector, cssCompiledStyles }; items.push(itemData); } const hierarchyNodes = buildHierarchy(items); const addNodesRecursively = /* @__PURE__ */ __name((nodes5, level) => { for (const node2 of nodes5) { db7.addNode(node2, level); if (node2.children && node2.children.length > 0) { addNodesRecursively(node2.children, level + 1); } } }, "addNodesRecursively"); addNodesRecursively(hierarchyNodes, 0); }, "populate"); getItemName = /* @__PURE__ */ __name((item) => { return item.name ? String(item.name) : ""; }, "getItemName"); parser23 = { // @ts-expect-error - TreeMapDB is not assignable to DiagramDB parser: { yy: void 0 }, parse: /* @__PURE__ */ __name(async (text4) => { try { const parseFunc = parse3; const ast = await parseFunc("treemap", text4); log.debug("Treemap AST:", ast); const db7 = parser23.parser?.yy; if (!(db7 instanceof TreeMapDB)) { throw new Error( "parser.parser?.yy was not a TreemapDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues." ); } populate18(ast, db7); } catch (error3) { log.error("Error parsing treemap:", error3); throw error3; } }, "parse") }; } }); // src/diagrams/treemap/renderer.ts var DEFAULT_INNER_PADDING, SECTION_INNER_PADDING, SECTION_HEADER_HEIGHT, draw25, getClasses6, renderer9; var init_renderer3 = __esm({ "src/diagrams/treemap/renderer.ts"() { "use strict"; init_selectSvgElement(); init_setupViewPortForSVG(); init_setupGraphViewbox(); init_src32(); init_handDrawnShapeStyles(); init_config(); init_logger(); DEFAULT_INNER_PADDING = 10; SECTION_INNER_PADDING = 10; SECTION_HEADER_HEIGHT = 25; draw25 = /* @__PURE__ */ __name((_text, id30, _version, diagram27) => { const treemapDb = diagram27.db; const config5 = treemapDb.getConfig(); const treemapInnerPadding = config5.padding ?? DEFAULT_INNER_PADDING; const title2 = treemapDb.getDiagramTitle(); const root3 = treemapDb.getRoot(); const { themeVariables } = getConfig(); if (!root3) { return; } const titleHeight = title2 ? 30 : 0; const svg2 = selectSvgElement(id30); const width3 = config5.nodeWidth ? config5.nodeWidth * SECTION_INNER_PADDING : 960; const height2 = config5.nodeHeight ? config5.nodeHeight * SECTION_INNER_PADDING : 500; const svgWidth = width3; const svgHeight = height2 + titleHeight; svg2.attr("viewBox", `0 0 ${svgWidth} ${svgHeight}`); configureSvgSize(svg2, svgHeight, svgWidth, config5.useMaxWidth); let valueFormat; try { const formatStr = config5.valueFormat || ","; if (formatStr === "$0,0") { valueFormat = /* @__PURE__ */ __name((value2) => "$" + format2(",")(value2), "valueFormat"); } else if (formatStr.startsWith("$") && formatStr.includes(",")) { const precision = /\.\d+/.exec(formatStr); const precisionStr = precision ? precision[0] : ""; valueFormat = /* @__PURE__ */ __name((value2) => "$" + format2("," + precisionStr)(value2), "valueFormat"); } else if (formatStr.startsWith("$")) { const restOfFormat = formatStr.substring(1); valueFormat = /* @__PURE__ */ __name((value2) => "$" + format2(restOfFormat || "")(value2), "valueFormat"); } else { valueFormat = format2(formatStr); } } catch (error3) { log.error("Error creating format function:", error3); valueFormat = format2(","); } const colorScale = ordinal().range([ "transparent", themeVariables.cScale0, themeVariables.cScale1, themeVariables.cScale2, themeVariables.cScale3, themeVariables.cScale4, themeVariables.cScale5, themeVariables.cScale6, themeVariables.cScale7, themeVariables.cScale8, themeVariables.cScale9, themeVariables.cScale10, themeVariables.cScale11 ]); const colorScalePeer = ordinal().range([ "transparent", themeVariables.cScalePeer0, themeVariables.cScalePeer1, themeVariables.cScalePeer2, themeVariables.cScalePeer3, themeVariables.cScalePeer4, themeVariables.cScalePeer5, themeVariables.cScalePeer6, themeVariables.cScalePeer7, themeVariables.cScalePeer8, themeVariables.cScalePeer9, themeVariables.cScalePeer10, themeVariables.cScalePeer11 ]); const colorScaleLabel = ordinal().range([ themeVariables.cScaleLabel0, themeVariables.cScaleLabel1, themeVariables.cScaleLabel2, themeVariables.cScaleLabel3, themeVariables.cScaleLabel4, themeVariables.cScaleLabel5, themeVariables.cScaleLabel6, themeVariables.cScaleLabel7, themeVariables.cScaleLabel8, themeVariables.cScaleLabel9, themeVariables.cScaleLabel10, themeVariables.cScaleLabel11 ]); if (title2) { svg2.append("text").attr("x", svgWidth / 2).attr("y", titleHeight / 2).attr("class", "treemapTitle").attr("text-anchor", "middle").attr("dominant-baseline", "middle").text(title2); } const g2 = svg2.append("g").attr("transform", `translate(0, ${titleHeight})`).attr("class", "treemapContainer"); const hierarchyRoot = hierarchy(root3).sum((d3) => d3.value ?? 0).sort((a2, b3) => (b3.value ?? 0) - (a2.value ?? 0)); const treemapLayout = treemap_default().size([width3, height2]).paddingTop( (d3) => d3.children && d3.children.length > 0 ? SECTION_HEADER_HEIGHT + SECTION_INNER_PADDING : 0 ).paddingInner(treemapInnerPadding).paddingLeft((d3) => d3.children && d3.children.length > 0 ? SECTION_INNER_PADDING : 0).paddingRight((d3) => d3.children && d3.children.length > 0 ? SECTION_INNER_PADDING : 0).paddingBottom((d3) => d3.children && d3.children.length > 0 ? SECTION_INNER_PADDING : 0).round(true); const treemapData = treemapLayout(hierarchyRoot); const branchNodes = treemapData.descendants().filter((d3) => d3.children && d3.children.length > 0); const sections6 = g2.selectAll(".treemapSection").data(branchNodes).enter().append("g").attr("class", "treemapSection").attr("transform", (d3) => `translate(${d3.x0},${d3.y0})`); sections6.append("rect").attr("width", (d3) => d3.x1 - d3.x0).attr("height", SECTION_HEADER_HEIGHT).attr("class", "treemapSectionHeader").attr("fill", "none").attr("fill-opacity", 0.6).attr("stroke-width", 0.6).attr("style", (d3) => { if (d3.depth === 0) { return "display: none;"; } return ""; }); sections6.append("clipPath").attr("id", (_d, i2) => `clip-section-${id30}-${i2}`).append("rect").attr("width", (d3) => Math.max(0, d3.x1 - d3.x0 - 12)).attr("height", SECTION_HEADER_HEIGHT); sections6.append("rect").attr("width", (d3) => d3.x1 - d3.x0).attr("height", (d3) => d3.y1 - d3.y0).attr("class", (_d, i2) => { return `treemapSection section${i2}`; }).attr("fill", (d3) => colorScale(d3.data.name)).attr("fill-opacity", 0.6).attr("stroke", (d3) => colorScalePeer(d3.data.name)).attr("stroke-width", 2).attr("stroke-opacity", 0.4).attr("style", (d3) => { if (d3.depth === 0) { return "display: none;"; } const styles4 = styles2String({ cssCompiledStyles: d3.data.cssCompiledStyles }); return styles4.nodeStyles + ";" + styles4.borderStyles.join(";"); }); sections6.append("text").attr("class", "treemapSectionLabel").attr("x", 6).attr("y", SECTION_HEADER_HEIGHT / 2).attr("dominant-baseline", "middle").text((d3) => d3.depth === 0 ? "" : d3.data.name).attr("font-weight", "bold").attr("style", (d3) => { if (d3.depth === 0) { return "display: none;"; } const labelStyles = "dominant-baseline: middle; font-size: 12px; fill:" + colorScaleLabel(d3.data.name) + "; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;"; const styles4 = styles2String({ cssCompiledStyles: d3.data.cssCompiledStyles }); return labelStyles + styles4.labelStyles.replace("color:", "fill:"); }).each(function(d3) { if (d3.depth === 0) { return; } const self2 = select_default2(this); const originalText = d3.data.name; self2.text(originalText); const totalHeaderWidth = d3.x1 - d3.x0; const labelXPosition = 6; let spaceForTextContent; if (config5.showValues !== false && d3.value) { const valueEndsAtXRelative = totalHeaderWidth - 10; const estimatedValueTextActualWidth = 30; const gapBetweenLabelAndValue = 10; const labelMustEndBeforeX = valueEndsAtXRelative - estimatedValueTextActualWidth - gapBetweenLabelAndValue; spaceForTextContent = labelMustEndBeforeX - labelXPosition; } else { const labelOwnRightPadding = 6; spaceForTextContent = totalHeaderWidth - labelXPosition - labelOwnRightPadding; } const minimumWidthToDisplay = 15; const actualAvailableWidth = Math.max(minimumWidthToDisplay, spaceForTextContent); const textNode = self2.node(); const currentTextContentLength = textNode.getComputedTextLength(); if (currentTextContentLength > actualAvailableWidth) { const ellipsis = "..."; let currentTruncatedText = originalText; while (currentTruncatedText.length > 0) { currentTruncatedText = originalText.substring(0, currentTruncatedText.length - 1); if (currentTruncatedText.length === 0) { self2.text(ellipsis); if (textNode.getComputedTextLength() > actualAvailableWidth) { self2.text(""); } break; } self2.text(currentTruncatedText + ellipsis); if (textNode.getComputedTextLength() <= actualAvailableWidth) { break; } } } }); if (config5.showValues !== false) { sections6.append("text").attr("class", "treemapSectionValue").attr("x", (d3) => d3.x1 - d3.x0 - 10).attr("y", SECTION_HEADER_HEIGHT / 2).attr("text-anchor", "end").attr("dominant-baseline", "middle").text((d3) => d3.value ? valueFormat(d3.value) : "").attr("font-style", "italic").attr("style", (d3) => { if (d3.depth === 0) { return "display: none;"; } const labelStyles = "text-anchor: end; dominant-baseline: middle; font-size: 10px; fill:" + colorScaleLabel(d3.data.name) + "; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;"; const styles4 = styles2String({ cssCompiledStyles: d3.data.cssCompiledStyles }); return labelStyles + styles4.labelStyles.replace("color:", "fill:"); }); } const leafNodes = treemapData.leaves(); const cell = g2.selectAll(".treemapLeafGroup").data(leafNodes).enter().append("g").attr("class", (d3, i2) => { return `treemapNode treemapLeafGroup leaf${i2}${d3.data.classSelector ? ` ${d3.data.classSelector}` : ""}x`; }).attr("transform", (d3) => `translate(${d3.x0},${d3.y0})`); cell.append("rect").attr("width", (d3) => d3.x1 - d3.x0).attr("height", (d3) => d3.y1 - d3.y0).attr("class", "treemapLeaf").attr("fill", (d3) => { return d3.parent ? colorScale(d3.parent.data.name) : colorScale(d3.data.name); }).attr("style", (d3) => { const styles4 = styles2String({ cssCompiledStyles: d3.data.cssCompiledStyles }); return styles4.nodeStyles; }).attr("fill-opacity", 0.3).attr("stroke", (d3) => { return d3.parent ? colorScale(d3.parent.data.name) : colorScale(d3.data.name); }).attr("stroke-width", 3); cell.append("clipPath").attr("id", (_d, i2) => `clip-${id30}-${i2}`).append("rect").attr("width", (d3) => Math.max(0, d3.x1 - d3.x0 - 4)).attr("height", (d3) => Math.max(0, d3.y1 - d3.y0 - 4)); const leafLabels = cell.append("text").attr("class", "treemapLabel").attr("x", (d3) => (d3.x1 - d3.x0) / 2).attr("y", (d3) => (d3.y1 - d3.y0) / 2).attr("style", (d3) => { const labelStyles = "text-anchor: middle; dominant-baseline: middle; font-size: 38px;fill:" + colorScaleLabel(d3.data.name) + ";"; const styles4 = styles2String({ cssCompiledStyles: d3.data.cssCompiledStyles }); return labelStyles + styles4.labelStyles.replace("color:", "fill:"); }).attr("clip-path", (_d, i2) => `url(#clip-${id30}-${i2})`).text((d3) => d3.data.name); leafLabels.each(function(d3) { const self2 = select_default2(this); const nodeWidth = d3.x1 - d3.x0; const nodeHeight = d3.y1 - d3.y0; const textNode = self2.node(); const padding2 = 4; const availableWidth = nodeWidth - 2 * padding2; const availableHeight = nodeHeight - 2 * padding2; if (availableWidth < 10 || availableHeight < 10) { self2.style("display", "none"); return; } let currentLabelFontSize = parseInt(self2.style("font-size"), 10); const minLabelFontSize = 8; const originalValueRelFontSize = 28; const valueScaleFactor = 0.6; const minValueFontSize = 6; const spacingBetweenLabelAndValue = 2; while (textNode.getComputedTextLength() > availableWidth && currentLabelFontSize > minLabelFontSize) { currentLabelFontSize--; self2.style("font-size", `${currentLabelFontSize}px`); } let prospectiveValueFontSize = Math.max( minValueFontSize, Math.min(originalValueRelFontSize, Math.round(currentLabelFontSize * valueScaleFactor)) ); let combinedHeight = currentLabelFontSize + spacingBetweenLabelAndValue + prospectiveValueFontSize; while (combinedHeight > availableHeight && currentLabelFontSize > minLabelFontSize) { currentLabelFontSize--; prospectiveValueFontSize = Math.max( minValueFontSize, Math.min(originalValueRelFontSize, Math.round(currentLabelFontSize * valueScaleFactor)) ); if (prospectiveValueFontSize < minValueFontSize && currentLabelFontSize === minLabelFontSize) { break; } self2.style("font-size", `${currentLabelFontSize}px`); combinedHeight = currentLabelFontSize + spacingBetweenLabelAndValue + prospectiveValueFontSize; if (prospectiveValueFontSize <= minValueFontSize && combinedHeight > availableHeight) { } } self2.style("font-size", `${currentLabelFontSize}px`); if (textNode.getComputedTextLength() > availableWidth || currentLabelFontSize < minLabelFontSize || availableHeight < currentLabelFontSize) { self2.style("display", "none"); } }); if (config5.showValues !== false) { const leafValues = cell.append("text").attr("class", "treemapValue").attr("x", (d3) => (d3.x1 - d3.x0) / 2).attr("y", function(d3) { return (d3.y1 - d3.y0) / 2; }).attr("style", (d3) => { const labelStyles = "text-anchor: middle; dominant-baseline: hanging; font-size: 28px;fill:" + colorScaleLabel(d3.data.name) + ";"; const styles4 = styles2String({ cssCompiledStyles: d3.data.cssCompiledStyles }); return labelStyles + styles4.labelStyles.replace("color:", "fill:"); }).attr("clip-path", (_d, i2) => `url(#clip-${id30}-${i2})`).text((d3) => d3.value ? valueFormat(d3.value) : ""); leafValues.each(function(d3) { const valueTextElement = select_default2(this); const parentCellNode = this.parentNode; if (!parentCellNode) { valueTextElement.style("display", "none"); return; } const labelElement = select_default2(parentCellNode).select(".treemapLabel"); if (labelElement.empty() || labelElement.style("display") === "none") { valueTextElement.style("display", "none"); return; } const finalLabelFontSize = parseFloat(labelElement.style("font-size")); const originalValueFontSize = 28; const valueScaleFactor = 0.6; const minValueFontSize = 6; const spacingBetweenLabelAndValue = 2; const actualValueFontSize = Math.max( minValueFontSize, Math.min(originalValueFontSize, Math.round(finalLabelFontSize * valueScaleFactor)) ); valueTextElement.style("font-size", `${actualValueFontSize}px`); const labelCenterY = (d3.y1 - d3.y0) / 2; const valueTopActualY = labelCenterY + finalLabelFontSize / 2 + spacingBetweenLabelAndValue; valueTextElement.attr("y", valueTopActualY); const nodeWidth = d3.x1 - d3.x0; const nodeTotalHeight = d3.y1 - d3.y0; const cellBottomPadding = 4; const maxValueBottomY = nodeTotalHeight - cellBottomPadding; const availableWidthForValue = nodeWidth - 2 * 4; if (valueTextElement.node().getComputedTextLength() > availableWidthForValue || valueTopActualY + actualValueFontSize > maxValueBottomY || actualValueFontSize < minValueFontSize) { valueTextElement.style("display", "none"); } else { valueTextElement.style("display", null); } }); } const diagramPadding = config5.diagramPadding ?? 8; setupViewPortForSVG(svg2, diagramPadding, "flowchart", config5?.useMaxWidth || false); }, "draw"); getClasses6 = /* @__PURE__ */ __name(function(_text, diagramObj) { return diagramObj.db.getClasses(); }, "getClasses"); renderer9 = { draw: draw25, getClasses: getClasses6 }; } }); // src/diagrams/treemap/styles.ts var defaultTreemapStyleOptions, getStyles19, styles_default17; var init_styles19 = __esm({ "src/diagrams/treemap/styles.ts"() { "use strict"; init_utils2(); defaultTreemapStyleOptions = { sectionStrokeColor: "black", sectionStrokeWidth: "1", sectionFillColor: "#efefef", leafStrokeColor: "black", leafStrokeWidth: "1", leafFillColor: "#efefef", labelColor: "black", labelFontSize: "12px", valueFontSize: "10px", valueColor: "black", titleColor: "black", titleFontSize: "14px" }; getStyles19 = /* @__PURE__ */ __name(({ treemap: treemap2 } = {}) => { const options2 = cleanAndMerge(defaultTreemapStyleOptions, treemap2); return ` .treemapNode.section { stroke: ${options2.sectionStrokeColor}; stroke-width: ${options2.sectionStrokeWidth}; fill: ${options2.sectionFillColor}; } .treemapNode.leaf { stroke: ${options2.leafStrokeColor}; stroke-width: ${options2.leafStrokeWidth}; fill: ${options2.leafFillColor}; } .treemapLabel { fill: ${options2.labelColor}; font-size: ${options2.labelFontSize}; } .treemapValue { fill: ${options2.valueColor}; font-size: ${options2.valueFontSize}; } .treemapTitle { fill: ${options2.titleColor}; font-size: ${options2.titleFontSize}; } `; }, "getStyles"); styles_default17 = getStyles19; } }); // src/diagrams/treemap/diagram.ts var diagram_exports3 = {}; __export(diagram_exports3, { diagram: () => diagram26 }); var diagram26; var init_diagram3 = __esm({ "src/diagrams/treemap/diagram.ts"() { "use strict"; init_db3(); init_parser5(); init_renderer3(); init_styles19(); diagram26 = { parser: parser23, get db() { return new TreeMapDB(); }, renderer: renderer9, styles: styles_default17 }; } }); // src/mermaid.ts var mermaid_exports = {}; __export(mermaid_exports, { default: () => mermaid_default }); init_icons(); init_esm(); init_detectType(); // src/diagrams/c4/c4Detector.ts var id2 = "c4"; var detector = /* @__PURE__ */ __name((txt) => { return /^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(txt); }, "detector"); var loader = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_c4Diagram2(), c4Diagram_exports)); return { id: id2, diagram: diagram27 }; }, "loader"); var plugin = { id: id2, detector, loader }; var c4Detector_default = plugin; // src/diagrams/flowchart/flowDetector.ts var id4 = "flowchart"; var detector2 = /* @__PURE__ */ __name((txt, config5) => { if (config5?.flowchart?.defaultRenderer === "dagre-wrapper" || config5?.flowchart?.defaultRenderer === "elk") { return false; } return /^\s*graph/.test(txt); }, "detector"); var loader3 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_flowDiagram(), flowDiagram_exports)); return { id: id4, diagram: diagram27 }; }, "loader"); var plugin2 = { id: id4, detector: detector2, loader: loader3 }; var flowDetector_default = plugin2; // src/diagrams/flowchart/flowDetector-v2.ts var id5 = "flowchart-v2"; var detector3 = /* @__PURE__ */ __name((txt, config5) => { if (config5?.flowchart?.defaultRenderer === "dagre-d3") { return false; } if (config5?.flowchart?.defaultRenderer === "elk") { config5.layout = "elk"; } if (/^\s*graph/.test(txt) && config5?.flowchart?.defaultRenderer === "dagre-wrapper") { return true; } return /^\s*flowchart/.test(txt); }, "detector"); var loader4 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_flowDiagram(), flowDiagram_exports)); return { id: id5, diagram: diagram27 }; }, "loader"); var plugin3 = { id: id5, detector: detector3, loader: loader4 }; var flowDetector_v2_default = plugin3; // src/diagrams/er/erDetector.ts var id6 = "er"; var detector4 = /* @__PURE__ */ __name((txt) => { return /^\s*erDiagram/.test(txt); }, "detector"); var loader5 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_erDiagram2(), erDiagram_exports)); return { id: id6, diagram: diagram27 }; }, "loader"); var plugin4 = { id: id6, detector: detector4, loader: loader5 }; var erDetector_default = plugin4; // src/diagrams/git/gitGraphDetector.ts var id7 = "gitGraph"; var detector5 = /* @__PURE__ */ __name((txt) => { return /^\s*gitGraph/.test(txt); }, "detector"); var loader6 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_gitGraphDiagram(), gitGraphDiagram_exports)); return { id: id7, diagram: diagram27 }; }, "loader"); var plugin5 = { id: id7, detector: detector5, loader: loader6 }; var gitGraphDetector_default = plugin5; // src/diagrams/gantt/ganttDetector.ts var id8 = "gantt"; var detector6 = /* @__PURE__ */ __name((txt) => { return /^\s*gantt/.test(txt); }, "detector"); var loader7 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_ganttDiagram(), ganttDiagram_exports)); return { id: id8, diagram: diagram27 }; }, "loader"); var plugin6 = { id: id8, detector: detector6, loader: loader7 }; var ganttDetector_default = plugin6; // src/diagrams/info/infoDetector.ts var id9 = "info"; var detector7 = /* @__PURE__ */ __name((txt) => { return /^\s*info/.test(txt); }, "detector"); var loader8 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_infoDiagram(), infoDiagram_exports)); return { id: id9, diagram: diagram27 }; }, "loader"); var info = { id: id9, detector: detector7, loader: loader8 }; // src/diagrams/pie/pieDetector.ts var id10 = "pie"; var detector8 = /* @__PURE__ */ __name((txt) => { return /^\s*pie/.test(txt); }, "detector"); var loader9 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_pieDiagram(), pieDiagram_exports)); return { id: id10, diagram: diagram27 }; }, "loader"); var pie = { id: id10, detector: detector8, loader: loader9 }; // src/diagrams/quadrant-chart/quadrantDetector.ts var id11 = "quadrantChart"; var detector9 = /* @__PURE__ */ __name((txt) => { return /^\s*quadrantChart/.test(txt); }, "detector"); var loader10 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_quadrantDiagram(), quadrantDiagram_exports)); return { id: id11, diagram: diagram27 }; }, "loader"); var plugin7 = { id: id11, detector: detector9, loader: loader10 }; var quadrantDetector_default = plugin7; // src/diagrams/xychart/xychartDetector.ts var id12 = "xychart"; var detector10 = /* @__PURE__ */ __name((txt) => { return /^\s*xychart(-beta)?/.test(txt); }, "detector"); var loader11 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_xychartDiagram(), xychartDiagram_exports)); return { id: id12, diagram: diagram27 }; }, "loader"); var plugin8 = { id: id12, detector: detector10, loader: loader11 }; var xychartDetector_default = plugin8; // src/diagrams/requirement/requirementDetector.ts var id13 = "requirement"; var detector11 = /* @__PURE__ */ __name((txt) => { return /^\s*requirement(Diagram)?/.test(txt); }, "detector"); var loader12 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_requirementDiagram2(), requirementDiagram_exports)); return { id: id13, diagram: diagram27 }; }, "loader"); var plugin9 = { id: id13, detector: detector11, loader: loader12 }; var requirementDetector_default = plugin9; // src/diagrams/sequence/sequenceDetector.ts var id14 = "sequence"; var detector12 = /* @__PURE__ */ __name((txt) => { return /^\s*sequenceDiagram/.test(txt); }, "detector"); var loader13 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_sequenceDiagram2(), sequenceDiagram_exports)); return { id: id14, diagram: diagram27 }; }, "loader"); var plugin10 = { id: id14, detector: detector12, loader: loader13 }; var sequenceDetector_default = plugin10; // src/diagrams/class/classDetector.ts var id15 = "class"; var detector13 = /* @__PURE__ */ __name((txt, config5) => { if (config5?.class?.defaultRenderer === "dagre-wrapper") { return false; } return /^\s*classDiagram/.test(txt); }, "detector"); var loader14 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_classDiagram2(), classDiagram_exports)); return { id: id15, diagram: diagram27 }; }, "loader"); var plugin11 = { id: id15, detector: detector13, loader: loader14 }; var classDetector_default = plugin11; // src/diagrams/class/classDetector-V2.ts var id16 = "classDiagram"; var detector14 = /* @__PURE__ */ __name((txt, config5) => { if (/^\s*classDiagram/.test(txt) && config5?.class?.defaultRenderer === "dagre-wrapper") { return true; } return /^\s*classDiagram-v2/.test(txt); }, "detector"); var loader15 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_classDiagram_v2(), classDiagram_v2_exports)); return { id: id16, diagram: diagram27 }; }, "loader"); var plugin12 = { id: id16, detector: detector14, loader: loader15 }; var classDetector_V2_default = plugin12; // src/diagrams/state/stateDetector.ts var id17 = "state"; var detector15 = /* @__PURE__ */ __name((txt, config5) => { if (config5?.state?.defaultRenderer === "dagre-wrapper") { return false; } return /^\s*stateDiagram/.test(txt); }, "detector"); var loader16 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_stateDiagram2(), stateDiagram_exports)); return { id: id17, diagram: diagram27 }; }, "loader"); var plugin13 = { id: id17, detector: detector15, loader: loader16 }; var stateDetector_default = plugin13; // src/diagrams/state/stateDetector-V2.ts var id18 = "stateDiagram"; var detector16 = /* @__PURE__ */ __name((txt, config5) => { if (/^\s*stateDiagram-v2/.test(txt)) { return true; } if (/^\s*stateDiagram/.test(txt) && config5?.state?.defaultRenderer === "dagre-wrapper") { return true; } return false; }, "detector"); var loader17 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_stateDiagram_v2(), stateDiagram_v2_exports)); return { id: id18, diagram: diagram27 }; }, "loader"); var plugin14 = { id: id18, detector: detector16, loader: loader17 }; var stateDetector_V2_default = plugin14; // src/diagrams/user-journey/journeyDetector.ts var id19 = "journey"; var detector17 = /* @__PURE__ */ __name((txt) => { return /^\s*journey/.test(txt); }, "detector"); var loader18 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_journeyDiagram(), journeyDiagram_exports)); return { id: id19, diagram: diagram27 }; }, "loader"); var plugin15 = { id: id19, detector: detector17, loader: loader18 }; var journeyDetector_default = plugin15; // src/diagrams/error/errorRenderer.ts init_logger(); init_selectSvgElement(); init_setupGraphViewbox(); var draw16 = /* @__PURE__ */ __name((_text, id30, version3) => { log.debug("rendering svg for syntax error\n"); const svg2 = selectSvgElement(id30); const g2 = svg2.append("g"); svg2.attr("viewBox", "0 0 2412 512"); configureSvgSize(svg2, 100, 512, true); g2.append("path").attr("class", "error-icon").attr( "d", "m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z" ); g2.append("path").attr("class", "error-icon").attr( "d", "m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z" ); g2.append("path").attr("class", "error-icon").attr( "d", "m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z" ); g2.append("path").attr("class", "error-icon").attr( "d", "m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z" ); g2.append("path").attr("class", "error-icon").attr( "d", "m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z" ); g2.append("path").attr("class", "error-icon").attr( "d", "m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z" ); g2.append("text").attr("class", "error-text").attr("x", 1440).attr("y", 250).attr("font-size", "150px").style("text-anchor", "middle").text("Syntax error in text"); g2.append("text").attr("class", "error-text").attr("x", 1250).attr("y", 400).attr("font-size", "100px").style("text-anchor", "middle").text(`mermaid version ${version3}`); }, "draw"); var renderer5 = { draw: draw16 }; var errorRenderer_default = renderer5; // src/diagrams/error/errorDiagram.ts var diagram17 = { db: {}, renderer: renderer5, parser: { parse: /* @__PURE__ */ __name(() => { return; }, "parse") } }; var errorDiagram_default = diagram17; // src/diagrams/flowchart/elk/detector.ts var id20 = "flowchart-elk"; var detector18 = /* @__PURE__ */ __name((txt, config5 = {}) => { if ( // If diagram explicitly states flowchart-elk /^\s*flowchart-elk/.test(txt) || // If a flowchart/graph diagram has their default renderer set to elk /^\s*(flowchart|graph)/.test(txt) && config5?.flowchart?.defaultRenderer === "elk" ) { config5.layout = "elk"; return true; } return false; }, "detector"); var loader19 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_flowDiagram(), flowDiagram_exports)); return { id: id20, diagram: diagram27 }; }, "loader"); var plugin16 = { id: id20, detector: detector18, loader: loader19 }; var detector_default = plugin16; // src/diagrams/timeline/detector.ts var id21 = "timeline"; var detector19 = /* @__PURE__ */ __name((txt) => { return /^\s*timeline/.test(txt); }, "detector"); var loader20 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_timeline_definition(), timeline_definition_exports)); return { id: id21, diagram: diagram27 }; }, "loader"); var plugin17 = { id: id21, detector: detector19, loader: loader20 }; var detector_default2 = plugin17; // src/diagrams/mindmap/detector.ts var id22 = "mindmap"; var detector20 = /* @__PURE__ */ __name((txt) => { return /^\s*mindmap/.test(txt); }, "detector"); var loader21 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_mindmap_definition(), mindmap_definition_exports)); return { id: id22, diagram: diagram27 }; }, "loader"); var plugin18 = { id: id22, detector: detector20, loader: loader21 }; var detector_default3 = plugin18; // src/diagrams/kanban/detector.ts var id23 = "kanban"; var detector21 = /* @__PURE__ */ __name((txt) => { return /^\s*kanban/.test(txt); }, "detector"); var loader22 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_kanban_definition(), kanban_definition_exports)); return { id: id23, diagram: diagram27 }; }, "loader"); var plugin19 = { id: id23, detector: detector21, loader: loader22 }; var detector_default4 = plugin19; // src/diagrams/sankey/sankeyDetector.ts var id24 = "sankey"; var detector22 = /* @__PURE__ */ __name((txt) => { return /^\s*sankey(-beta)?/.test(txt); }, "detector"); var loader23 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_sankeyDiagram(), sankeyDiagram_exports)); return { id: id24, diagram: diagram27 }; }, "loader"); var plugin20 = { id: id24, detector: detector22, loader: loader23 }; var sankeyDetector_default = plugin20; // src/diagrams/packet/detector.ts var id25 = "packet"; var detector23 = /* @__PURE__ */ __name((txt) => { return /^\s*packet(-beta)?/.test(txt); }, "detector"); var loader24 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_diagram(), diagram_exports)); return { id: id25, diagram: diagram27 }; }, "loader"); var packet = { id: id25, detector: detector23, loader: loader24 }; // src/diagrams/radar/detector.ts var id26 = "radar"; var detector24 = /* @__PURE__ */ __name((txt) => { return /^\s*radar-beta/.test(txt); }, "detector"); var loader25 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_diagram2(), diagram_exports2)); return { id: id26, diagram: diagram27 }; }, "loader"); var radar = { id: id26, detector: detector24, loader: loader25 }; // src/diagrams/block/blockDetector.ts var id27 = "block"; var detector25 = /* @__PURE__ */ __name((txt) => { return /^\s*block(-beta)?/.test(txt); }, "detector"); var loader26 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_blockDiagram(), blockDiagram_exports)); return { id: id27, diagram: diagram27 }; }, "loader"); var plugin21 = { id: id27, detector: detector25, loader: loader26 }; var blockDetector_default = plugin21; // src/diagrams/architecture/architectureDetector.ts var id28 = "architecture"; var detector26 = /* @__PURE__ */ __name((txt) => { return /^\s*architecture/.test(txt); }, "detector"); var loader27 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_architectureDiagram(), architectureDiagram_exports)); return { id: id28, diagram: diagram27 }; }, "loader"); var architecture = { id: id28, detector: detector26, loader: loader27 }; var architectureDetector_default = architecture; // src/diagram-api/diagram-orchestration.ts init_detectType(); init_diagramAPI(); // src/diagrams/treemap/detector.ts var id29 = "treemap"; var detector27 = /* @__PURE__ */ __name((txt) => { return /^\s*treemap/.test(txt); }, "detector"); var loader28 = /* @__PURE__ */ __name(async () => { const { diagram: diagram27 } = await Promise.resolve().then(() => (init_diagram3(), diagram_exports3)); return { id: id29, diagram: diagram27 }; }, "loader"); var treemap = { id: id29, detector: detector27, loader: loader28 }; // src/diagram-api/diagram-orchestration.ts var hasLoadedDiagrams = false; var addDiagrams = /* @__PURE__ */ __name(() => { if (hasLoadedDiagrams) { return; } hasLoadedDiagrams = true; registerDiagram("error", errorDiagram_default, (text4) => { return text4.toLowerCase().trim() === "error"; }); registerDiagram( "---", // --- diagram type may appear if YAML front-matter is not parsed correctly { db: { clear: /* @__PURE__ */ __name(() => { }, "clear") }, styles: {}, // should never be used renderer: { draw: /* @__PURE__ */ __name(() => { }, "draw") }, parser: { parse: /* @__PURE__ */ __name(() => { throw new Error( "Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks" ); }, "parse") }, init: /* @__PURE__ */ __name(() => null, "init") // no op }, (text4) => { return text4.toLowerCase().trimStart().startsWith("---"); } ); if (true) { registerLazyLoadedDiagrams(detector_default, detector_default3, architectureDetector_default); } registerLazyLoadedDiagrams( c4Detector_default, detector_default4, classDetector_V2_default, classDetector_default, erDetector_default, ganttDetector_default, info, pie, requirementDetector_default, sequenceDetector_default, flowDetector_v2_default, flowDetector_default, detector_default2, gitGraphDetector_default, stateDetector_V2_default, stateDetector_default, journeyDetector_default, quadrantDetector_default, sankeyDetector_default, packet, xychartDetector_default, blockDetector_default, radar, treemap ); }, "addDiagrams"); // src/diagram-api/loadDiagram.ts init_logger(); init_detectType(); init_diagramAPI(); var loadRegisteredDiagrams = /* @__PURE__ */ __name(async () => { log.debug(`Loading registered diagrams`); const results = await Promise.allSettled( Object.entries(detectors).map(async ([key, { detector: detector28, loader: loader29 }]) => { if (!loader29) { return; } try { getDiagram(key); } catch { try { const { diagram: diagram27, id: id30 } = await loader29(); registerDiagram(id30, diagram27, detector28); } catch (err) { log.error(`Failed to load external diagram with key ${key}. Removing from detectors.`); delete detectors[key]; throw err; } } }) ); const failed = results.filter((result) => result.status === "rejected"); if (failed.length > 0) { log.error(`Failed to load ${failed.length} external diagrams`); for (const res of failed) { log.error(res); } throw new Error(`Failed to load ${failed.length} external diagrams`); } }, "loadRegisteredDiagrams"); // src/mermaid.ts init_logger(); // src/mermaidAPI.ts init_src32(); // ../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Enum.js var COMMENT = "comm"; var RULESET = "rule"; var DECLARATION = "decl"; var IMPORT = "@import"; var NAMESPACE = "@namespace"; var KEYFRAMES = "@keyframes"; var LAYER = "@layer"; // ../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Utility.js var abs3 = Math.abs; var from = String.fromCharCode; function trim(value2) { return value2.trim(); } __name(trim, "trim"); function replace(value2, pattern, replacement) { return value2.replace(pattern, replacement); } __name(replace, "replace"); function indexof(value2, search, position5) { return value2.indexOf(search, position5); } __name(indexof, "indexof"); function charat(value2, index) { return value2.charCodeAt(index) | 0; } __name(charat, "charat"); function substr(value2, begin, end2) { return value2.slice(begin, end2); } __name(substr, "substr"); function strlen(value2) { return value2.length; } __name(strlen, "strlen"); function sizeof(value2) { return value2.length; } __name(sizeof, "sizeof"); function append2(value2, array4) { return array4.push(value2), value2; } __name(append2, "append"); // ../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Tokenizer.js var line = 1; var column = 1; var length = 0; var position4 = 0; var character = 0; var characters = ""; function node(value2, root3, parent4, type3, props, children2, length2, siblings2) { return { value: value2, root: root3, parent: parent4, type: type3, props, children: children2, line, column, length: length2, return: "", siblings: siblings2 }; } __name(node, "node"); function char() { return character; } __name(char, "char"); function prev() { character = position4 > 0 ? charat(characters, --position4) : 0; if (column--, character === 10) column = 1, line--; return character; } __name(prev, "prev"); function next2() { character = position4 < length ? charat(characters, position4++) : 0; if (column++, character === 10) column = 1, line++; return character; } __name(next2, "next"); function peek() { return charat(characters, position4); } __name(peek, "peek"); function caret() { return position4; } __name(caret, "caret"); function slice4(begin, end2) { return substr(characters, begin, end2); } __name(slice4, "slice"); function token(type3) { switch (type3) { // \0 \t \n \r \s whitespace token case 0: case 9: case 10: case 13: case 32: return 5; // ! + , / > @ ~ isolate token case 33: case 43: case 44: case 47: case 62: case 64: case 126: // ; { } breakpoint token case 59: case 123: case 125: return 4; // : accompanied token case 58: return 3; // " ' ( [ opening delimit token case 34: case 39: case 40: case 91: return 2; // ) ] closing delimit token case 41: case 93: return 1; } return 0; } __name(token, "token"); function alloc(value2) { return line = column = 1, length = strlen(characters = value2), position4 = 0, []; } __name(alloc, "alloc"); function dealloc(value2) { return characters = "", value2; } __name(dealloc, "dealloc"); function delimit(type3) { return trim(slice4(position4 - 1, delimiter2(type3 === 91 ? type3 + 2 : type3 === 40 ? type3 + 1 : type3))); } __name(delimit, "delimit"); function whitespace(type3) { while (character = peek()) if (character < 33) next2(); else break; return token(type3) > 2 || token(character) > 3 ? "" : " "; } __name(whitespace, "whitespace"); function escaping(index, count2) { while (--count2 && next2()) if (character < 48 || character > 102 || character > 57 && character < 65 || character > 70 && character < 97) break; return slice4(index, caret() + (count2 < 6 && peek() == 32 && next2() == 32)); } __name(escaping, "escaping"); function delimiter2(type3) { while (next2()) switch (character) { // ] ) " ' case type3: return position4; // " ' case 34: case 39: if (type3 !== 34 && type3 !== 39) delimiter2(character); break; // ( case 40: if (type3 === 41) delimiter2(type3); break; // \ case 92: next2(); break; } return position4; } __name(delimiter2, "delimiter"); function commenter(type3, index) { while (next2()) if (type3 + character === 47 + 10) break; else if (type3 + character === 42 + 42 && peek() === 47) break; return "/*" + slice4(index, position4 - 1) + "*" + from(type3 === 47 ? type3 : next2()); } __name(commenter, "commenter"); function identifier(index) { while (!token(peek())) next2(); return slice4(index, position4); } __name(identifier, "identifier"); // ../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Parser.js function compile(value2) { return dealloc(parse4("", null, null, null, [""], value2 = alloc(value2), 0, [0], value2)); } __name(compile, "compile"); function parse4(value2, root3, parent4, rule, rules, rulesets, pseudo, points, declarations) { var index = 0; var offset = 0; var length2 = pseudo; var atrule = 0; var property2 = 0; var previous = 0; var variable = 1; var scanning = 1; var ampersand = 1; var character2 = 0; var type3 = ""; var props = rules; var children2 = rulesets; var reference = rule; var characters2 = type3; while (scanning) switch (previous = character2, character2 = next2()) { // ( case 40: if (previous != 108 && charat(characters2, length2 - 1) == 58) { if (indexof(characters2 += replace(delimit(character2), "&", "&\f"), "&\f", abs3(index ? points[index - 1] : 0)) != -1) ampersand = -1; break; } // " ' [ case 34: case 39: case 91: characters2 += delimit(character2); break; // \t \n \r \s case 9: case 10: case 13: case 32: characters2 += whitespace(previous); break; // \ case 92: characters2 += escaping(caret() - 1, 7); continue; // / case 47: switch (peek()) { case 42: case 47: append2(comment(commenter(next2(), caret()), root3, parent4, declarations), declarations); if ((token(previous || 1) == 5 || token(peek() || 1) == 5) && strlen(characters2) && substr(characters2, -1, void 0) !== " ") characters2 += " "; break; default: characters2 += "/"; } break; // { case 123 * variable: points[index++] = strlen(characters2) * ampersand; // } ; \0 case 125 * variable: case 59: case 0: switch (character2) { // \0 } case 0: case 125: scanning = 0; // ; case 59 + offset: if (ampersand == -1) characters2 = replace(characters2, /\f/g, ""); if (property2 > 0 && (strlen(characters2) - length2 || variable === 0 && previous === 47)) append2(property2 > 32 ? declaration(characters2 + ";", rule, parent4, length2 - 1, declarations) : declaration(replace(characters2, " ", "") + ";", rule, parent4, length2 - 2, declarations), declarations); break; // @ ; case 59: characters2 += ";"; // { rule/at-rule default: append2(reference = ruleset(characters2, root3, parent4, index, offset, rules, points, type3, props = [], children2 = [], length2, rulesets), rulesets); if (character2 === 123) if (offset === 0) parse4(characters2, root3, reference, reference, props, rulesets, length2, points, children2); else { switch (atrule) { // c(ontainer) case 99: if (charat(characters2, 3) === 110) break; // l(ayer) case 108: if (charat(characters2, 2) === 97) break; default: offset = 0; // d(ocument) m(edia) s(upports) case 100: case 109: case 115: } if (offset) parse4(value2, reference, reference, rule && append2(ruleset(value2, reference, reference, 0, 0, rules, points, type3, rules, props = [], length2, children2), children2), rules, children2, length2, points, rule ? props : children2); else parse4(characters2, reference, reference, reference, [""], children2, 0, points, children2); } } index = offset = property2 = 0, variable = ampersand = 1, type3 = characters2 = "", length2 = pseudo; break; // : case 58: length2 = 1 + strlen(characters2), property2 = previous; default: if (variable < 1) { if (character2 == 123) --variable; else if (character2 == 125 && variable++ == 0 && prev() == 125) continue; } switch (characters2 += from(character2), character2 * variable) { // & case 38: ampersand = offset > 0 ? 1 : (characters2 += "\f", -1); break; // , case 44: points[index++] = (strlen(characters2) - 1) * ampersand, ampersand = 1; break; // @ case 64: if (peek() === 45) characters2 += delimit(next2()); atrule = peek(), offset = length2 = strlen(type3 = characters2 += identifier(caret())), character2++; break; // - case 45: if (previous === 45 && strlen(characters2) == 2) variable = 0; } } return rulesets; } __name(parse4, "parse"); function ruleset(value2, root3, parent4, index, offset, rules, points, type3, props, children2, length2, siblings2) { var post = offset - 1; var rule = offset === 0 ? rules : [""]; var size4 = sizeof(rule); for (var i2 = 0, j3 = 0, k2 = 0; i2 < index; ++i2) for (var x5 = 0, y6 = substr(value2, post + 1, post = abs3(j3 = points[i2])), z3 = value2; x5 < size4; ++x5) if (z3 = trim(j3 > 0 ? rule[x5] + " " + y6 : replace(y6, /&\f/g, rule[x5]))) props[k2++] = z3; return node(value2, root3, parent4, offset === 0 ? RULESET : type3, props, children2, length2, siblings2); } __name(ruleset, "ruleset"); function comment(value2, root3, parent4, siblings2) { return node(value2, root3, parent4, COMMENT, from(char()), substr(value2, 2, -2), 0, siblings2); } __name(comment, "comment"); function declaration(value2, root3, parent4, length2, siblings2) { return node(value2, root3, parent4, DECLARATION, substr(value2, 0, length2), substr(value2, length2 + 1, -1), length2, siblings2); } __name(declaration, "declaration"); // ../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Serializer.js function serialize(children2, callback) { var output2 = ""; for (var i2 = 0; i2 < children2.length; i2++) output2 += callback(children2[i2], i2, children2, callback) || ""; return output2; } __name(serialize, "serialize"); function stringify(element3, index, children2, callback) { switch (element3.type) { case LAYER: if (element3.children.length) break; case IMPORT: case NAMESPACE: case DECLARATION: return element3.return = element3.return || element3.value; case COMMENT: return ""; case KEYFRAMES: return element3.return = element3.value + "{" + serialize(element3.children, callback) + "}"; case RULESET: if (!strlen(element3.value = element3.props.join(","))) return ""; } return strlen(children2 = serialize(element3.children, callback)) ? element3.return = element3.value + "{" + children2 + "}" : ""; } __name(stringify, "stringify"); // src/mermaidAPI.ts init_purify_es(); init_isEmpty(); init_package(); // src/accessibility.ts var SVG_ROLE = "graphics-document document"; function setA11yDiagramInfo(svg2, diagramType) { svg2.attr("role", SVG_ROLE); if (diagramType !== "") { svg2.attr("aria-roledescription", diagramType); } } __name(setA11yDiagramInfo, "setA11yDiagramInfo"); function addSVGa11yTitleDescription(svg2, a11yTitle, a11yDesc, baseId) { if (svg2.insert === void 0) { return; } if (a11yDesc) { const descId = `chart-desc-${baseId}`; svg2.attr("aria-describedby", descId); svg2.insert("desc", ":first-child").attr("id", descId).text(a11yDesc); } if (a11yTitle) { const titleId = `chart-title-${baseId}`; svg2.attr("aria-labelledby", titleId); svg2.insert("title", ":first-child").attr("id", titleId).text(a11yTitle); } } __name(addSVGa11yTitleDescription, "addSVGa11yTitleDescription"); // src/mermaidAPI.ts init_assignWithDepth(); init_config(); // src/Diagram.ts init_config(); init_diagramAPI(); init_detectType(); init_errors(); init_utils2(); var Diagram = class _Diagram { constructor(type3, text4, db7, parser24, renderer10) { this.type = type3; this.text = text4; this.db = db7; this.parser = parser24; this.renderer = renderer10; } static { __name(this, "Diagram"); } static async fromText(text4, metadata = {}) { const config5 = getConfig(); const type3 = detectType(text4, config5); text4 = encodeEntities(text4) + "\n"; try { getDiagram(type3); } catch { const loader29 = getDiagramLoader(type3); if (!loader29) { throw new UnknownDiagramError(`Diagram ${type3} not found.`); } const { id: id30, diagram: diagram27 } = await loader29(); registerDiagram(id30, diagram27); } const { db: db7, parser: parser24, renderer: renderer10, init: init3 } = getDiagram(type3); if (parser24.parser) { parser24.parser.yy = db7; } db7.clear?.(); init3?.(config5); if (metadata.title) { db7.setDiagramTitle?.(metadata.title); } await parser24.parse(text4); return new _Diagram(type3, text4, db7, parser24, renderer10); } async render(id30, version3) { await this.renderer.draw(this.text, id30, version3, this); } getParser() { return this.parser; } getType() { return this.type; } }; // src/mermaidAPI.ts init_common(); // src/interactionDb.ts var interactionFunctions = []; var attachFunctions = /* @__PURE__ */ __name(() => { interactionFunctions.forEach((f2) => { f2(); }); interactionFunctions = []; }, "attachFunctions"); // src/mermaidAPI.ts init_logger(); // src/diagram-api/comments.ts var cleanupComments = /* @__PURE__ */ __name((text4) => { return text4.replace(/^\s*%%(?!{)[^\n]+\n?/gm, "").trimStart(); }, "cleanupComments"); // src/diagram-api/frontmatter.ts init_regexes(); init_js_yaml(); function extractFrontMatter(text4) { const matches33 = text4.match(frontMatterRegex); if (!matches33) { return { text: text4, metadata: {} }; } let parsed = load(matches33[1], { // To support config, we need JSON schema. // https://www.yaml.org/spec/1.2/spec.html#id2803231 schema: JSON_SCHEMA }) ?? {}; parsed = typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {}; const metadata = {}; if (parsed.displayMode) { metadata.displayMode = parsed.displayMode.toString(); } if (parsed.title) { metadata.title = parsed.title.toString(); } if (parsed.config) { metadata.config = parsed.config; } return { text: text4.slice(matches33[0].length), metadata }; } __name(extractFrontMatter, "extractFrontMatter"); // src/preprocess.ts init_utils2(); var cleanupText = /* @__PURE__ */ __name((code) => { return code.replace(/\r\n?/g, "\n").replace( /<(\w+)([^>]*)>/g, (match2, tag, attributes) => "<" + tag + attributes.replace(/="([^"]*)"/g, "='$1'") + ">" ); }, "cleanupText"); var processFrontmatter = /* @__PURE__ */ __name((code) => { const { text: text4, metadata } = extractFrontMatter(code); const { displayMode: displayMode2, title: title2, config: config5 = {} } = metadata; if (displayMode2) { if (!config5.gantt) { config5.gantt = {}; } config5.gantt.displayMode = displayMode2; } return { title: title2, config: config5, text: text4 }; }, "processFrontmatter"); var processDirectives = /* @__PURE__ */ __name((code) => { const initDirective = utils_default2.detectInit(code) ?? {}; const wrapDirectives = utils_default2.detectDirective(code, "wrap"); if (Array.isArray(wrapDirectives)) { initDirective.wrap = wrapDirectives.some(({ type: type3 }) => type3 === "wrap"); } else if (wrapDirectives?.type === "wrap") { initDirective.wrap = true; } return { text: removeDirectives(code), directive: initDirective }; }, "processDirectives"); function preprocessDiagram(code) { const cleanedCode = cleanupText(code); const frontMatterResult = processFrontmatter(cleanedCode); const directiveResult = processDirectives(frontMatterResult.text); const config5 = cleanAndMerge(frontMatterResult.config, directiveResult.directive); code = cleanupComments(directiveResult.text); return { code, title: frontMatterResult.title, config: config5 }; } __name(preprocessDiagram, "preprocessDiagram"); // src/mermaidAPI.ts init_styles(); init_themes(); init_utils2(); // src/utils/base64.ts function toBase64(str2) { const utf8Bytes = new TextEncoder().encode(str2); const utf8Str = Array.from(utf8Bytes, (byte) => String.fromCodePoint(byte)).join(""); return btoa(utf8Str); } __name(toBase64, "toBase64"); // src/mermaidAPI.ts var MAX_TEXTLENGTH = 5e4; var MAX_TEXTLENGTH_EXCEEDED_MSG = "graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa"; var SECURITY_LVL_SANDBOX = "sandbox"; var SECURITY_LVL_LOOSE = "loose"; var XMLNS_SVG_STD = "http://www.w3.org/2000/svg"; var XMLNS_XLINK_STD = "http://www.w3.org/1999/xlink"; var XMLNS_XHTML_STD = "http://www.w3.org/1999/xhtml"; var IFRAME_WIDTH = "100%"; var IFRAME_HEIGHT = "100%"; var IFRAME_STYLES = "border:0;margin:0;"; var IFRAME_BODY_STYLE = "margin:0"; var IFRAME_SANDBOX_OPTS = "allow-top-navigation-by-user-activation allow-popups"; var IFRAME_NOT_SUPPORTED_MSG = 'The "iframe" tag is not supported by your browser.'; var DOMPURIFY_TAGS = ["foreignobject"]; var DOMPURIFY_ATTR = ["dominant-baseline"]; function processAndSetConfigs(text4) { const processed2 = preprocessDiagram(text4); reset(); addDirective(processed2.config ?? {}); return processed2; } __name(processAndSetConfigs, "processAndSetConfigs"); async function parse5(text4, parseOptions) { addDiagrams(); try { const { code, config: config5 } = processAndSetConfigs(text4); const diagram27 = await getDiagramFromText(code); return { diagramType: diagram27.type, config: config5 }; } catch (error3) { if (parseOptions?.suppressErrors) { return false; } throw error3; } } __name(parse5, "parse"); var cssImportantStyles = /* @__PURE__ */ __name((cssClass, element3, cssClasses = []) => { return ` .${cssClass} ${element3} { ${cssClasses.join(" !important; ")} !important; }`; }, "cssImportantStyles"); var createCssStyles = /* @__PURE__ */ __name((config5, classDefs = /* @__PURE__ */ new Map()) => { let cssStyles = ""; if (config5.themeCSS !== void 0) { cssStyles += ` ${config5.themeCSS}`; } if (config5.fontFamily !== void 0) { cssStyles += ` :root { --mermaid-font-family: ${config5.fontFamily}}`; } if (config5.altFontFamily !== void 0) { cssStyles += ` :root { --mermaid-alt-font-family: ${config5.altFontFamily}}`; } if (classDefs instanceof Map) { const htmlLabels = config5.htmlLabels ?? config5.flowchart?.htmlLabels; const cssHtmlElements = ["> *", "span"]; const cssShapeElements = ["rect", "polygon", "ellipse", "circle", "path"]; const cssElements = htmlLabels ? cssHtmlElements : cssShapeElements; classDefs.forEach((styleClassDef) => { if (!isEmpty_default(styleClassDef.styles)) { cssElements.forEach((cssElement) => { cssStyles += cssImportantStyles(styleClassDef.id, cssElement, styleClassDef.styles); }); } if (!isEmpty_default(styleClassDef.textStyles)) { cssStyles += cssImportantStyles( styleClassDef.id, "tspan", (styleClassDef?.textStyles || []).map((s2) => s2.replace("color", "fill")) ); } }); } return cssStyles; }, "createCssStyles"); var createUserStyles = /* @__PURE__ */ __name((config5, graphType, classDefs, svgId) => { const userCSSstyles = createCssStyles(config5, classDefs); const allStyles = styles_default(graphType, userCSSstyles, config5.themeVariables); return serialize(compile(`${svgId}{${allStyles}}`), stringify); }, "createUserStyles"); var cleanUpSvgCode = /* @__PURE__ */ __name((svgCode = "", inSandboxMode, useArrowMarkerUrls) => { let cleanedUpSvg = svgCode; if (!useArrowMarkerUrls && !inSandboxMode) { cleanedUpSvg = cleanedUpSvg.replace( /marker-end="url\([\d+./:=?A-Za-z-]*?#/g, 'marker-end="url(#' ); } cleanedUpSvg = decodeEntities(cleanedUpSvg); cleanedUpSvg = cleanedUpSvg.replace(/
/g, "
"); return cleanedUpSvg; }, "cleanUpSvgCode"); var putIntoIFrame = /* @__PURE__ */ __name((svgCode = "", svgElement) => { const height2 = svgElement?.viewBox?.baseVal?.height ? svgElement.viewBox.baseVal.height + "px" : IFRAME_HEIGHT; const base64encodedSrc = toBase64(`${svgCode}`); return ``; }, "putIntoIFrame"); var appendDivSvgG = /* @__PURE__ */ __name((parentRoot, id30, enclosingDivId, divStyle, svgXlink) => { const enclosingDiv = parentRoot.append("div"); enclosingDiv.attr("id", enclosingDivId); if (divStyle) { enclosingDiv.attr("style", divStyle); } const svgNode2 = enclosingDiv.append("svg").attr("id", id30).attr("width", "100%").attr("xmlns", XMLNS_SVG_STD); if (svgXlink) { svgNode2.attr("xmlns:xlink", svgXlink); } svgNode2.append("g"); return parentRoot; }, "appendDivSvgG"); function sandboxedIframe(parentNode, iFrameId) { return parentNode.append("iframe").attr("id", iFrameId).attr("style", "width: 100%; height: 100%;").attr("sandbox", ""); } __name(sandboxedIframe, "sandboxedIframe"); var removeExistingElements = /* @__PURE__ */ __name((doc, id30, divId, iFrameId) => { doc.getElementById(id30)?.remove(); doc.getElementById(divId)?.remove(); doc.getElementById(iFrameId)?.remove(); }, "removeExistingElements"); var render7 = /* @__PURE__ */ __name(async function(id30, text4, svgContainingElement) { addDiagrams(); const processed2 = processAndSetConfigs(text4); text4 = processed2.code; const config5 = getConfig(); log.debug(config5); if (text4.length > (config5?.maxTextSize ?? MAX_TEXTLENGTH)) { text4 = MAX_TEXTLENGTH_EXCEEDED_MSG; } const idSelector = "#" + id30; const iFrameID = "i" + id30; const iFrameID_selector = "#" + iFrameID; const enclosingDivID = "d" + id30; const enclosingDivID_selector = "#" + enclosingDivID; const removeTempElements = /* @__PURE__ */ __name(() => { const tmpElementSelector = isSandboxed ? iFrameID_selector : enclosingDivID_selector; const node2 = select_default2(tmpElementSelector).node(); if (node2 && "remove" in node2) { node2.remove(); } }, "removeTempElements"); let root3 = select_default2("body"); const isSandboxed = config5.securityLevel === SECURITY_LVL_SANDBOX; const isLooseSecurityLevel = config5.securityLevel === SECURITY_LVL_LOOSE; const fontFamily = config5.fontFamily; if (svgContainingElement !== void 0) { if (svgContainingElement) { svgContainingElement.innerHTML = ""; } if (isSandboxed) { const iframe = sandboxedIframe(select_default2(svgContainingElement), iFrameID); root3 = select_default2(iframe.nodes()[0].contentDocument.body); root3.node().style.margin = 0; } else { root3 = select_default2(svgContainingElement); } appendDivSvgG(root3, id30, enclosingDivID, `font-family: ${fontFamily}`, XMLNS_XLINK_STD); } else { removeExistingElements(document, id30, enclosingDivID, iFrameID); if (isSandboxed) { const iframe = sandboxedIframe(select_default2("body"), iFrameID); root3 = select_default2(iframe.nodes()[0].contentDocument.body); root3.node().style.margin = 0; } else { root3 = select_default2("body"); } appendDivSvgG(root3, id30, enclosingDivID); } let diag; let parseEncounteredException; try { diag = await Diagram.fromText(text4, { title: processed2.title }); } catch (error3) { if (config5.suppressErrorRendering) { removeTempElements(); throw error3; } diag = await Diagram.fromText("error"); parseEncounteredException = error3; } const element3 = root3.select(enclosingDivID_selector).node(); const diagramType = diag.type; const svg2 = element3.firstChild; const firstChild = svg2.firstChild; const diagramClassDefs = diag.renderer.getClasses?.(text4, diag); const rules = createUserStyles(config5, diagramType, diagramClassDefs, idSelector); const style1 = document.createElement("style"); style1.innerHTML = rules; svg2.insertBefore(style1, firstChild); try { await diag.renderer.draw(text4, id30, package_default.version, diag); } catch (e3) { if (config5.suppressErrorRendering) { removeTempElements(); } else { errorRenderer_default.draw(text4, id30, package_default.version); } throw e3; } const svgNode2 = root3.select(`${enclosingDivID_selector} svg`); const a11yTitle = diag.db.getAccTitle?.(); const a11yDescr = diag.db.getAccDescription?.(); addA11yInfo(diagramType, svgNode2, a11yTitle, a11yDescr); root3.select(`[id="${id30}"]`).selectAll("foreignobject > *").attr("xmlns", XMLNS_XHTML_STD); let svgCode = root3.select(enclosingDivID_selector).node().innerHTML; log.debug("config.arrowMarkerAbsolute", config5.arrowMarkerAbsolute); svgCode = cleanUpSvgCode(svgCode, isSandboxed, evaluate(config5.arrowMarkerAbsolute)); if (isSandboxed) { const svgEl = root3.select(enclosingDivID_selector + " svg").node(); svgCode = putIntoIFrame(svgCode, svgEl); } else if (!isLooseSecurityLevel) { svgCode = purify.sanitize(svgCode, { ADD_TAGS: DOMPURIFY_TAGS, ADD_ATTR: DOMPURIFY_ATTR, HTML_INTEGRATION_POINTS: { foreignobject: true } }); } attachFunctions(); if (parseEncounteredException) { throw parseEncounteredException; } removeTempElements(); return { diagramType, svg: svgCode, bindFunctions: diag.db.bindFunctions }; }, "render"); function initialize(userOptions = {}) { const options2 = assignWithDepth_default({}, userOptions); if (options2?.fontFamily && !options2.themeVariables?.fontFamily) { if (!options2.themeVariables) { options2.themeVariables = {}; } options2.themeVariables.fontFamily = options2.fontFamily; } saveConfigFromInitialize(options2); if (options2?.theme && options2.theme in themes_default) { options2.themeVariables = themes_default[options2.theme].getThemeVariables( options2.themeVariables ); } else if (options2) { options2.themeVariables = themes_default.default.getThemeVariables(options2.themeVariables); } const config5 = typeof options2 === "object" ? setSiteConfig(options2) : getSiteConfig(); setLogLevel(config5.logLevel); addDiagrams(); } __name(initialize, "initialize"); var getDiagramFromText = /* @__PURE__ */ __name((text4, metadata = {}) => { const { code } = preprocessDiagram(text4); return Diagram.fromText(code, metadata); }, "getDiagramFromText"); function addA11yInfo(diagramType, svgNode2, a11yTitle, a11yDescr) { setA11yDiagramInfo(svgNode2, diagramType); addSVGa11yTitleDescription(svgNode2, a11yTitle, a11yDescr, svgNode2.attr("id")); } __name(addA11yInfo, "addA11yInfo"); var mermaidAPI = Object.freeze({ render: render7, parse: parse5, getDiagramFromText, initialize, getConfig, setConfig, getSiteConfig, updateSiteConfig, reset: /* @__PURE__ */ __name(() => { reset(); }, "reset"), globalReset: /* @__PURE__ */ __name(() => { reset(defaultConfig); }, "globalReset"), defaultConfig }); setLogLevel(getConfig().logLevel); reset(getConfig()); // src/mermaid.ts init_render2(); init_utils2(); var handleError = /* @__PURE__ */ __name((error3, errors, parseError) => { log.warn(error3); if (isDetailedError(error3)) { if (parseError) { parseError(error3.str, error3.hash); } errors.push({ ...error3, message: error3.str, error: error3 }); } else { if (parseError) { parseError(error3); } if (error3 instanceof Error) { errors.push({ str: error3.message, message: error3.message, hash: error3.name, error: error3 }); } } }, "handleError"); var run4 = /* @__PURE__ */ __name(async function(options2 = { querySelector: ".mermaid" }) { try { await runThrowsErrors(options2); } catch (e3) { if (isDetailedError(e3)) { log.error(e3.str); } if (mermaid.parseError) { mermaid.parseError(e3); } if (!options2.suppressErrors) { log.error("Use the suppressErrors option to suppress these errors"); throw e3; } } }, "run"); var runThrowsErrors = /* @__PURE__ */ __name(async function({ postRenderCallback, querySelector, nodes: nodes5 } = { querySelector: ".mermaid" }) { const conf5 = mermaidAPI.getConfig(); log.debug(`${!postRenderCallback ? "No " : ""}Callback function found`); let nodesToProcess; if (nodes5) { nodesToProcess = nodes5; } else if (querySelector) { nodesToProcess = document.querySelectorAll(querySelector); } else { throw new Error("Nodes and querySelector are both undefined"); } log.debug(`Found ${nodesToProcess.length} diagrams`); if (conf5?.startOnLoad !== void 0) { log.debug("Start On Load: " + conf5?.startOnLoad); mermaidAPI.updateSiteConfig({ startOnLoad: conf5?.startOnLoad }); } const idGenerator = new utils_default2.InitIDGenerator(conf5.deterministicIds, conf5.deterministicIDSeed); let txt; const errors = []; for (const element3 of Array.from(nodesToProcess)) { log.info("Rendering diagram: " + element3.id); if (element3.getAttribute("data-processed")) { continue; } element3.setAttribute("data-processed", "true"); const id30 = `mermaid-${idGenerator.next()}`; txt = element3.innerHTML; txt = dedent(utils_default2.entityDecode(txt)).trim().replace(//gi, "
"); const init3 = utils_default2.detectInit(txt); if (init3) { log.debug("Detected early reinit: ", init3); } try { const { svg: svg2, bindFunctions: bindFunctions2 } = await render8(id30, txt, element3); element3.innerHTML = svg2; if (postRenderCallback) { await postRenderCallback(id30); } if (bindFunctions2) { bindFunctions2(element3); } } catch (error3) { handleError(error3, errors, mermaid.parseError); } } if (errors.length > 0) { throw errors[0]; } }, "runThrowsErrors"); var initialize2 = /* @__PURE__ */ __name(function(config5) { mermaidAPI.initialize(config5); }, "initialize"); var init2 = /* @__PURE__ */ __name(async function(config5, nodes5, callback) { log.warn("mermaid.init is deprecated. Please use run instead."); if (config5) { initialize2(config5); } const runOptions = { postRenderCallback: callback, querySelector: ".mermaid" }; if (typeof nodes5 === "string") { runOptions.querySelector = nodes5; } else if (nodes5) { if (nodes5 instanceof HTMLElement) { runOptions.nodes = [nodes5]; } else { runOptions.nodes = nodes5; } } await run4(runOptions); }, "init"); var registerExternalDiagrams = /* @__PURE__ */ __name(async (diagrams2, { lazyLoad = true } = {}) => { addDiagrams(); registerLazyLoadedDiagrams(...diagrams2); if (lazyLoad === false) { await loadRegisteredDiagrams(); } }, "registerExternalDiagrams"); var contentLoaded = /* @__PURE__ */ __name(function() { if (mermaid.startOnLoad) { const { startOnLoad } = mermaidAPI.getConfig(); if (startOnLoad) { mermaid.run().catch((err) => log.error("Mermaid failed to initialize", err)); } } }, "contentLoaded"); if (typeof document !== "undefined") { window.addEventListener("load", contentLoaded, false); } var setParseErrorHandler = /* @__PURE__ */ __name(function(parseErrorHandler) { mermaid.parseError = parseErrorHandler; }, "setParseErrorHandler"); var executionQueue = []; var executionQueueRunning = false; var executeQueue = /* @__PURE__ */ __name(async () => { if (executionQueueRunning) { return; } executionQueueRunning = true; while (executionQueue.length > 0) { const f2 = executionQueue.shift(); if (f2) { try { await f2(); } catch (e3) { log.error("Error executing queue", e3); } } } executionQueueRunning = false; }, "executeQueue"); var parse6 = /* @__PURE__ */ __name(async (text4, parseOptions) => { return new Promise((resolve2, reject3) => { const performCall = /* @__PURE__ */ __name(() => new Promise((res, rej) => { mermaidAPI.parse(text4, parseOptions).then( (r2) => { res(r2); resolve2(r2); }, (e3) => { log.error("Error parsing", e3); mermaid.parseError?.(e3); rej(e3); reject3(e3); } ); }), "performCall"); executionQueue.push(performCall); executeQueue().catch(reject3); }); }, "parse"); var render8 = /* @__PURE__ */ __name((id30, text4, container2) => { return new Promise((resolve2, reject3) => { const performCall = /* @__PURE__ */ __name(() => new Promise((res, rej) => { mermaidAPI.render(id30, text4, container2).then( (r2) => { res(r2); resolve2(r2); }, (e3) => { log.error("Error parsing", e3); mermaid.parseError?.(e3); rej(e3); reject3(e3); } ); }), "performCall"); executionQueue.push(performCall); executeQueue().catch(reject3); }); }, "render"); var getRegisteredDiagramsMetadata = /* @__PURE__ */ __name(() => { return Object.keys(detectors).map((id30) => ({ id: id30 })); }, "getRegisteredDiagramsMetadata"); var mermaid = { startOnLoad: true, mermaidAPI, parse: parse6, render: render8, init: init2, run: run4, registerExternalDiagrams, registerLayoutLoaders, initialize: initialize2, parseError: void 0, contentLoaded, setParseErrorHandler, detectType, registerIconPacks, getRegisteredDiagramsMetadata }; var mermaid_default = mermaid; return __toCommonJS(mermaid_exports); })(); /*! Check if previously processed */ /*! * Wait for document loaded before starting the execution */ /*! Bundled license information: dompurify/dist/purify.es.mjs: (*! @license DOMPurify 3.2.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.6/LICENSE *) js-yaml/dist/js-yaml.mjs: (*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT *) lodash-es/lodash.js: (** * @license * Lodash (Custom Build) * Build: `lodash modularize exports="es" -o ./` * Copyright OpenJS Foundation and other contributors * Released under MIT license * Based on Underscore.js 1.8.3 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors *) cytoscape/dist/cytoscape.esm.mjs: (*! Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) Licensed under The MIT License (http://opensource.org/licenses/MIT) *) (*! Event object based on jQuery events, MIT license https://jquery.org/license/ https://tldrlegal.com/license/mit-license https://github.com/jquery/jquery/blob/master/src/event.js *) (*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License *) (*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License *) */ globalThis["mermaid"] = globalThis.__esbuild_esm_mermaid_nm["mermaid"].default;