webapp.flowDiagram-b222e15a.d5bac7fc.js.map Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of langgraph4j-studio Show documentation
Show all versions of langgraph4j-studio Show documentation
an **embed playground webapp** to run a Langgraph4j workflow in visual way
{"mappings":"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","sources":["","node_modules/mermaid/dist/index-01f381cb.js","node_modules/dagre-d3-es/src/graphlib/json.js"],"sourcesContent":["\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n var $parcel$global = globalThis;\n var parcelRequire = $parcel$global[\"parcelRequire0031\"];\nvar parcelRegister = parcelRequire.register;\nparcelRegister(\"4FlE0\", function(module, exports) {\n\n$parcel$export(module.exports, \"r\", () => $365bc7d5dc9758d1$export$43caf9889c228507);\n\nvar $hV1gR = parcelRequire(\"hV1gR\");\n\nvar $c0ySZ = parcelRequire(\"c0ySZ\");\n\nvar $hl1Sc = parcelRequire(\"hl1Sc\");\n\nvar $4jcZX = parcelRequire(\"4jcZX\");\n\nvar $4LkSm = parcelRequire(\"4LkSm\");\n\nvar $fmBVZ = parcelRequire(\"fmBVZ\");\n\nvar $2YFJl = parcelRequire(\"2YFJl\");\nlet $365bc7d5dc9758d1$var$clusterDb = {};\nlet $365bc7d5dc9758d1$var$descendants = {};\nlet $365bc7d5dc9758d1$var$parents = {};\nconst $365bc7d5dc9758d1$var$clear$1 = ()=>{\n $365bc7d5dc9758d1$var$descendants = {};\n $365bc7d5dc9758d1$var$parents = {};\n $365bc7d5dc9758d1$var$clusterDb = {};\n};\nconst $365bc7d5dc9758d1$var$isDescendant = (id, ancestorId)=>{\n (0, $4jcZX.l).trace(\"In isDescendant\", ancestorId, \" \", id, \" = \", $365bc7d5dc9758d1$var$descendants[ancestorId].includes(id));\n if ($365bc7d5dc9758d1$var$descendants[ancestorId].includes(id)) return true;\n return false;\n};\nconst $365bc7d5dc9758d1$var$edgeInCluster = (edge, clusterId)=>{\n (0, $4jcZX.l).info(\"Descendants of \", clusterId, \" is \", $365bc7d5dc9758d1$var$descendants[clusterId]);\n (0, $4jcZX.l).info(\"Edge is \", edge);\n if (edge.v === clusterId) return false;\n if (edge.w === clusterId) return false;\n if (!$365bc7d5dc9758d1$var$descendants[clusterId]) {\n (0, $4jcZX.l).debug(\"Tilt, \", clusterId, \",not in descendants\");\n return false;\n }\n return $365bc7d5dc9758d1$var$descendants[clusterId].includes(edge.v) || $365bc7d5dc9758d1$var$isDescendant(edge.v, clusterId) || $365bc7d5dc9758d1$var$isDescendant(edge.w, clusterId) || $365bc7d5dc9758d1$var$descendants[clusterId].includes(edge.w);\n};\nconst $365bc7d5dc9758d1$var$copy = (clusterId, graph, newGraph, rootId)=>{\n (0, $4jcZX.l).warn(\"Copying children of \", clusterId, \"root\", rootId, \"data\", graph.node(clusterId), rootId);\n const nodes = graph.children(clusterId) || [];\n if (clusterId !== rootId) nodes.push(clusterId);\n (0, $4jcZX.l).warn(\"Copying (nodes) clusterId\", clusterId, \"nodes\", nodes);\n nodes.forEach((node)=>{\n if (graph.children(node).length > 0) $365bc7d5dc9758d1$var$copy(node, graph, newGraph, rootId);\n else {\n const data = graph.node(node);\n (0, $4jcZX.l).info(\"cp \", node, \" to \", rootId, \" with parent \", clusterId);\n newGraph.setNode(node, data);\n if (rootId !== graph.parent(node)) {\n (0, $4jcZX.l).warn(\"Setting parent\", node, graph.parent(node));\n newGraph.setParent(node, graph.parent(node));\n }\n if (clusterId !== rootId && node !== clusterId) {\n (0, $4jcZX.l).debug(\"Setting parent\", node, clusterId);\n newGraph.setParent(node, clusterId);\n } else {\n (0, $4jcZX.l).info(\"In copy \", clusterId, \"root\", rootId, \"data\", graph.node(clusterId), rootId);\n (0, $4jcZX.l).debug(\"Not Setting parent for node=\", node, \"cluster!==rootId\", clusterId !== rootId, \"node!==clusterId\", node !== clusterId);\n }\n const edges = graph.edges(node);\n (0, $4jcZX.l).debug(\"Copying Edges\", edges);\n edges.forEach((edge)=>{\n (0, $4jcZX.l).info(\"Edge\", edge);\n const data2 = graph.edge(edge.v, edge.w, edge.name);\n (0, $4jcZX.l).info(\"Edge data\", data2, rootId);\n try {\n if ($365bc7d5dc9758d1$var$edgeInCluster(edge, rootId)) {\n (0, $4jcZX.l).info(\"Copying as \", edge.v, edge.w, data2, edge.name);\n newGraph.setEdge(edge.v, edge.w, data2, edge.name);\n (0, $4jcZX.l).info(\"newGraph edges \", newGraph.edges(), newGraph.edge(newGraph.edges()[0]));\n } else (0, $4jcZX.l).info(\"Skipping copy of edge \", edge.v, \"-->\", edge.w, \" rootId: \", rootId, \" clusterId:\", clusterId);\n } catch (e) {\n (0, $4jcZX.l).error(e);\n }\n });\n }\n (0, $4jcZX.l).debug(\"Removing node\", node);\n graph.removeNode(node);\n });\n};\nconst $365bc7d5dc9758d1$var$extractDescendants = (id, graph)=>{\n const children = graph.children(id);\n let res = [\n ...children\n ];\n for (const child of children){\n $365bc7d5dc9758d1$var$parents[child] = id;\n res = [\n ...res,\n ...$365bc7d5dc9758d1$var$extractDescendants(child, graph)\n ];\n }\n return res;\n};\nconst $365bc7d5dc9758d1$var$findNonClusterChild = (id, graph)=>{\n (0, $4jcZX.l).trace(\"Searching\", id);\n const children = graph.children(id);\n (0, $4jcZX.l).trace(\"Searching children of id \", id, children);\n if (children.length < 1) {\n (0, $4jcZX.l).trace(\"This is a valid node\", id);\n return id;\n }\n for (const child of children){\n const _id = $365bc7d5dc9758d1$var$findNonClusterChild(child, graph);\n if (_id) {\n (0, $4jcZX.l).trace(\"Found replacement for\", id, \" => \", _id);\n return _id;\n }\n }\n};\nconst $365bc7d5dc9758d1$var$getAnchorId = (id)=>{\n if (!$365bc7d5dc9758d1$var$clusterDb[id]) return id;\n if (!$365bc7d5dc9758d1$var$clusterDb[id].externalConnections) return id;\n if ($365bc7d5dc9758d1$var$clusterDb[id]) return $365bc7d5dc9758d1$var$clusterDb[id].id;\n return id;\n};\nconst $365bc7d5dc9758d1$var$adjustClustersAndEdges = (graph, depth)=>{\n if (!graph || depth > 10) {\n (0, $4jcZX.l).debug(\"Opting out, no graph \");\n return;\n } else (0, $4jcZX.l).debug(\"Opting in, graph \");\n graph.nodes().forEach(function(id) {\n const children = graph.children(id);\n if (children.length > 0) {\n (0, $4jcZX.l).warn(\"Cluster identified\", id, \" Replacement id in edges: \", $365bc7d5dc9758d1$var$findNonClusterChild(id, graph));\n $365bc7d5dc9758d1$var$descendants[id] = $365bc7d5dc9758d1$var$extractDescendants(id, graph);\n $365bc7d5dc9758d1$var$clusterDb[id] = {\n id: $365bc7d5dc9758d1$var$findNonClusterChild(id, graph),\n clusterData: graph.node(id)\n };\n }\n });\n graph.nodes().forEach(function(id) {\n const children = graph.children(id);\n const edges = graph.edges();\n if (children.length > 0) {\n (0, $4jcZX.l).debug(\"Cluster identified\", id, $365bc7d5dc9758d1$var$descendants);\n edges.forEach((edge)=>{\n if (edge.v !== id && edge.w !== id) {\n const d1 = $365bc7d5dc9758d1$var$isDescendant(edge.v, id);\n const d2 = $365bc7d5dc9758d1$var$isDescendant(edge.w, id);\n if (d1 ^ d2) {\n (0, $4jcZX.l).warn(\"Edge: \", edge, \" leaves cluster \", id);\n (0, $4jcZX.l).warn(\"Descendants of XXX \", id, \": \", $365bc7d5dc9758d1$var$descendants[id]);\n $365bc7d5dc9758d1$var$clusterDb[id].externalConnections = true;\n }\n }\n });\n } else (0, $4jcZX.l).debug(\"Not a cluster \", id, $365bc7d5dc9758d1$var$descendants);\n });\n for (let id of Object.keys($365bc7d5dc9758d1$var$clusterDb)){\n const nonClusterChild = $365bc7d5dc9758d1$var$clusterDb[id].id;\n const parent = graph.parent(nonClusterChild);\n if (parent !== id && $365bc7d5dc9758d1$var$clusterDb[parent] && !$365bc7d5dc9758d1$var$clusterDb[parent].externalConnections) $365bc7d5dc9758d1$var$clusterDb[id].id = parent;\n }\n graph.edges().forEach(function(e) {\n const edge = graph.edge(e);\n (0, $4jcZX.l).warn(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(e));\n (0, $4jcZX.l).warn(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(graph.edge(e)));\n let v = e.v;\n let w = e.w;\n (0, $4jcZX.l).warn(\"Fix XXX\", $365bc7d5dc9758d1$var$clusterDb, \"ids:\", e.v, e.w, \"Translating: \", $365bc7d5dc9758d1$var$clusterDb[e.v], \" --- \", $365bc7d5dc9758d1$var$clusterDb[e.w]);\n if ($365bc7d5dc9758d1$var$clusterDb[e.v] && $365bc7d5dc9758d1$var$clusterDb[e.w] && $365bc7d5dc9758d1$var$clusterDb[e.v] === $365bc7d5dc9758d1$var$clusterDb[e.w]) {\n (0, $4jcZX.l).warn(\"Fixing and trixing link to self - removing XXX\", e.v, e.w, e.name);\n (0, $4jcZX.l).warn(\"Fixing and trixing - removing XXX\", e.v, e.w, e.name);\n v = $365bc7d5dc9758d1$var$getAnchorId(e.v);\n w = $365bc7d5dc9758d1$var$getAnchorId(e.w);\n graph.removeEdge(e.v, e.w, e.name);\n const specialId = e.w + \"---\" + e.v;\n graph.setNode(specialId, {\n domId: specialId,\n id: specialId,\n labelStyle: \"\",\n labelText: edge.label,\n padding: 0,\n shape: \"labelRect\",\n style: \"\"\n });\n const edge1 = structuredClone(edge);\n const edge2 = structuredClone(edge);\n edge1.label = \"\";\n edge1.arrowTypeEnd = \"none\";\n edge2.label = \"\";\n edge1.fromCluster = e.v;\n edge2.toCluster = e.v;\n graph.setEdge(v, specialId, edge1, e.name + \"-cyclic-special\");\n graph.setEdge(specialId, w, edge2, e.name + \"-cyclic-special\");\n } else if ($365bc7d5dc9758d1$var$clusterDb[e.v] || $365bc7d5dc9758d1$var$clusterDb[e.w]) {\n (0, $4jcZX.l).warn(\"Fixing and trixing - removing XXX\", e.v, e.w, e.name);\n v = $365bc7d5dc9758d1$var$getAnchorId(e.v);\n w = $365bc7d5dc9758d1$var$getAnchorId(e.w);\n graph.removeEdge(e.v, e.w, e.name);\n if (v !== e.v) {\n const parent = graph.parent(v);\n $365bc7d5dc9758d1$var$clusterDb[parent].externalConnections = true;\n edge.fromCluster = e.v;\n }\n if (w !== e.w) {\n const parent = graph.parent(w);\n $365bc7d5dc9758d1$var$clusterDb[parent].externalConnections = true;\n edge.toCluster = e.w;\n }\n (0, $4jcZX.l).warn(\"Fix Replacing with XXX\", v, w, e.name);\n graph.setEdge(v, w, edge, e.name);\n }\n });\n (0, $4jcZX.l).warn(\"Adjusted Graph\", $c0ySZ.write(graph));\n $365bc7d5dc9758d1$var$extractor(graph, 0);\n (0, $4jcZX.l).trace($365bc7d5dc9758d1$var$clusterDb);\n};\nconst $365bc7d5dc9758d1$var$extractor = (graph, depth)=>{\n (0, $4jcZX.l).warn(\"extractor - \", depth, $c0ySZ.write(graph), graph.children(\"D\"));\n if (depth > 10) {\n (0, $4jcZX.l).error(\"Bailing out\");\n return;\n }\n let nodes = graph.nodes();\n let hasChildren = false;\n for (const node of nodes){\n const children = graph.children(node);\n hasChildren = hasChildren || children.length > 0;\n }\n if (!hasChildren) {\n (0, $4jcZX.l).debug(\"Done, no node has children\", graph.nodes());\n return;\n }\n (0, $4jcZX.l).debug(\"Nodes = \", nodes, depth);\n for (const node of nodes){\n (0, $4jcZX.l).debug(\"Extracting node\", node, $365bc7d5dc9758d1$var$clusterDb, $365bc7d5dc9758d1$var$clusterDb[node] && !$365bc7d5dc9758d1$var$clusterDb[node].externalConnections, !graph.parent(node), graph.node(node), graph.children(\"D\"), \" Depth \", depth);\n if (!$365bc7d5dc9758d1$var$clusterDb[node]) (0, $4jcZX.l).debug(\"Not a cluster\", node, depth);\n else if (!$365bc7d5dc9758d1$var$clusterDb[node].externalConnections && // !graph.parent(node) &&\n graph.children(node) && graph.children(node).length > 0) {\n (0, $4jcZX.l).warn(\"Cluster without external connections, without a parent and with children\", node, depth);\n const graphSettings = graph.graph();\n let dir = graphSettings.rankdir === \"TB\" ? \"LR\" : \"TB\";\n if ($365bc7d5dc9758d1$var$clusterDb[node] && $365bc7d5dc9758d1$var$clusterDb[node].clusterData && $365bc7d5dc9758d1$var$clusterDb[node].clusterData.dir) {\n dir = $365bc7d5dc9758d1$var$clusterDb[node].clusterData.dir;\n (0, $4jcZX.l).warn(\"Fixing dir\", $365bc7d5dc9758d1$var$clusterDb[node].clusterData.dir, dir);\n }\n const clusterGraph = new $4LkSm.Graph({\n multigraph: true,\n compound: true\n }).setGraph({\n rankdir: dir,\n // Todo: set proper spacing\n nodesep: 50,\n ranksep: 50,\n marginx: 8,\n marginy: 8\n }).setDefaultEdgeLabel(function() {\n return {};\n });\n (0, $4jcZX.l).warn(\"Old graph before copy\", $c0ySZ.write(graph));\n $365bc7d5dc9758d1$var$copy(node, graph, clusterGraph, node);\n graph.setNode(node, {\n clusterNode: true,\n id: node,\n clusterData: $365bc7d5dc9758d1$var$clusterDb[node].clusterData,\n labelText: $365bc7d5dc9758d1$var$clusterDb[node].labelText,\n graph: clusterGraph\n });\n (0, $4jcZX.l).warn(\"New graph after copy node: (\", node, \")\", $c0ySZ.write(clusterGraph));\n (0, $4jcZX.l).debug(\"Old graph after copy\", $c0ySZ.write(graph));\n } else {\n (0, $4jcZX.l).warn(\"Cluster ** \", node, \" **not meeting the criteria !externalConnections:\", !$365bc7d5dc9758d1$var$clusterDb[node].externalConnections, \" no parent: \", !graph.parent(node), \" children \", graph.children(node) && graph.children(node).length > 0, graph.children(\"D\"), depth);\n (0, $4jcZX.l).debug($365bc7d5dc9758d1$var$clusterDb);\n }\n }\n nodes = graph.nodes();\n (0, $4jcZX.l).warn(\"New list of nodes\", nodes);\n for (const node of nodes){\n const data = graph.node(node);\n (0, $4jcZX.l).warn(\" Now next level\", node, data);\n if (data.clusterNode) $365bc7d5dc9758d1$var$extractor(data.graph, depth + 1);\n }\n};\nconst $365bc7d5dc9758d1$var$sorter = (graph, nodes)=>{\n if (nodes.length === 0) return [];\n let result = Object.assign(nodes);\n nodes.forEach((node)=>{\n const children = graph.children(node);\n const sorted = $365bc7d5dc9758d1$var$sorter(graph, children);\n result = [\n ...result,\n ...sorted\n ];\n });\n return result;\n};\nconst $365bc7d5dc9758d1$var$sortNodesByHierarchy = (graph)=>$365bc7d5dc9758d1$var$sorter(graph, graph.children());\nconst $365bc7d5dc9758d1$var$rect = (parent, node)=>{\n (0, $4jcZX.l).info(\"Creating subgraph rect for \", node.id, node);\n const siteConfig = (0, $4jcZX.c)();\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"cluster\" + (node.class ? \" \" + node.class : \"\")).attr(\"id\", node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const useHtmlLabels = (0, $4jcZX.m)(siteConfig.flowchart.htmlLabels);\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"cluster-label\");\n const text = node.labelType === \"markdown\" ? (0, $fmBVZ.a)(label, node.labelText, {\n style: node.labelStyle,\n useHtmlLabels: useHtmlLabels\n }) : label.node().appendChild((0, $hl1Sc.c)(node.labelText, node.labelStyle, void 0, true));\n let bbox = text.getBBox();\n if ((0, $4jcZX.m)(siteConfig.flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = (0, $2YFJl.select)(text);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width;\n if (node.width <= bbox.width + padding) node.diff = (bbox.width - node.width) / 2 - node.padding / 2;\n else node.diff = -node.padding / 2;\n (0, $4jcZX.l).trace(\"Data \", node, JSON.stringify(node));\n rect2.attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", node.x - width / 2).attr(\"y\", node.y - node.height / 2 - halfPadding).attr(\"width\", width).attr(\"height\", node.height + padding);\n const { subGraphTitleTopMargin: subGraphTitleTopMargin } = (0, $hl1Sc.g)(siteConfig);\n if (useHtmlLabels) label.attr(\"transform\", // This puts the label on top of the box instead of inside it\n `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})`);\n else label.attr(\"transform\", // This puts the label on top of the box instead of inside it\n `translate(${node.x}, ${node.y - node.height / 2 + subGraphTitleTopMargin})`);\n const rectBox = rect2.node().getBBox();\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.intersect = function(point) {\n return (0, $hl1Sc.i)(node, point);\n };\n return shapeSvg;\n};\nconst $365bc7d5dc9758d1$var$noteGroup = (parent, node)=>{\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"note-cluster\").attr(\"id\", node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n rect2.attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", node.x - node.width / 2 - halfPadding).attr(\"y\", node.y - node.height / 2 - halfPadding).attr(\"width\", node.width + padding).attr(\"height\", node.height + padding).attr(\"fill\", \"none\");\n const rectBox = rect2.node().getBBox();\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.intersect = function(point) {\n return (0, $hl1Sc.i)(node, point);\n };\n return shapeSvg;\n};\nconst $365bc7d5dc9758d1$var$roundedWithTitle = (parent, node)=>{\n const siteConfig = (0, $4jcZX.c)();\n const shapeSvg = parent.insert(\"g\").attr(\"class\", node.classes).attr(\"id\", node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"cluster-label\");\n const innerRect = shapeSvg.append(\"rect\");\n const text = label.node().appendChild((0, $hl1Sc.c)(node.labelText, node.labelStyle, void 0, true));\n let bbox = text.getBBox();\n if ((0, $4jcZX.m)(siteConfig.flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = (0, $2YFJl.select)(text);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n bbox = text.getBBox();\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width;\n if (node.width <= bbox.width + node.padding) node.diff = (bbox.width + node.padding * 0 - node.width) / 2;\n else node.diff = -node.padding / 2;\n rect2.attr(\"class\", \"outer\").attr(\"x\", node.x - width / 2 - halfPadding).attr(\"y\", node.y - node.height / 2 - halfPadding).attr(\"width\", width + padding).attr(\"height\", node.height + padding);\n innerRect.attr(\"class\", \"inner\").attr(\"x\", node.x - width / 2 - halfPadding).attr(\"y\", node.y - node.height / 2 - halfPadding + bbox.height - 1).attr(\"width\", width + padding).attr(\"height\", node.height + padding - bbox.height - 3);\n const { subGraphTitleTopMargin: subGraphTitleTopMargin } = (0, $hl1Sc.g)(siteConfig);\n label.attr(\"transform\", `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 - node.padding / 3 + ((0, $4jcZX.m)(siteConfig.flowchart.htmlLabels) ? 5 : 3) + subGraphTitleTopMargin})`);\n const rectBox = rect2.node().getBBox();\n node.height = rectBox.height;\n node.intersect = function(point) {\n return (0, $hl1Sc.i)(node, point);\n };\n return shapeSvg;\n};\nconst $365bc7d5dc9758d1$var$divider = (parent, node)=>{\n const shapeSvg = parent.insert(\"g\").attr(\"class\", node.classes).attr(\"id\", node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n rect2.attr(\"class\", \"divider\").attr(\"x\", node.x - node.width / 2 - halfPadding).attr(\"y\", node.y - node.height / 2).attr(\"width\", node.width + padding).attr(\"height\", node.height + padding);\n const rectBox = rect2.node().getBBox();\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.diff = -node.padding / 2;\n node.intersect = function(point) {\n return (0, $hl1Sc.i)(node, point);\n };\n return shapeSvg;\n};\nconst $365bc7d5dc9758d1$var$shapes = {\n rect: $365bc7d5dc9758d1$var$rect,\n roundedWithTitle: $365bc7d5dc9758d1$var$roundedWithTitle,\n noteGroup: $365bc7d5dc9758d1$var$noteGroup,\n divider: $365bc7d5dc9758d1$var$divider\n};\nlet $365bc7d5dc9758d1$var$clusterElems = {};\nconst $365bc7d5dc9758d1$var$insertCluster = (elem, node)=>{\n (0, $4jcZX.l).trace(\"Inserting cluster\");\n const shape = node.shape || \"rect\";\n $365bc7d5dc9758d1$var$clusterElems[node.id] = $365bc7d5dc9758d1$var$shapes[shape](elem, node);\n};\nconst $365bc7d5dc9758d1$var$clear = ()=>{\n $365bc7d5dc9758d1$var$clusterElems = {};\n};\nconst $365bc7d5dc9758d1$var$recursiveRender = async (_elem, graph, diagramType, id, parentCluster, siteConfig)=>{\n (0, $4jcZX.l).info(\"Graph in recursive render: XXX\", $c0ySZ.write(graph), parentCluster);\n const dir = graph.graph().rankdir;\n (0, $4jcZX.l).trace(\"Dir in recursive render - dir:\", dir);\n const elem = _elem.insert(\"g\").attr(\"class\", \"root\");\n if (!graph.nodes()) (0, $4jcZX.l).info(\"No nodes found for\", graph);\n else (0, $4jcZX.l).info(\"Recursive render XXX\", graph.nodes());\n if (graph.edges().length > 0) (0, $4jcZX.l).trace(\"Recursive edges\", graph.edge(graph.edges()[0]));\n const clusters = elem.insert(\"g\").attr(\"class\", \"clusters\");\n const edgePaths = elem.insert(\"g\").attr(\"class\", \"edgePaths\");\n const edgeLabels = elem.insert(\"g\").attr(\"class\", \"edgeLabels\");\n const nodes = elem.insert(\"g\").attr(\"class\", \"nodes\");\n await Promise.all(graph.nodes().map(async function(v) {\n const node = graph.node(v);\n if (parentCluster !== void 0) {\n const data = JSON.parse(JSON.stringify(parentCluster.clusterData));\n (0, $4jcZX.l).info(\"Setting data for cluster XXX (\", v, \") \", data, parentCluster);\n graph.setNode(parentCluster.id, data);\n if (!graph.parent(v)) {\n (0, $4jcZX.l).trace(\"Setting parent\", v, parentCluster.id);\n graph.setParent(v, parentCluster.id, data);\n }\n }\n (0, $4jcZX.l).info(\"(Insert) Node XXX\" + v + \": \" + JSON.stringify(graph.node(v)));\n if (node && node.clusterNode) {\n (0, $4jcZX.l).info(\"Cluster identified\", v, node.width, graph.node(v));\n const o = await $365bc7d5dc9758d1$var$recursiveRender(nodes, node.graph, diagramType, id, graph.node(v), siteConfig);\n const newEl = o.elem;\n (0, $hl1Sc.u)(node, newEl);\n node.diff = o.diff || 0;\n (0, $4jcZX.l).info(\"Node bounds (abc123)\", v, node, node.width, node.x, node.y);\n (0, $hl1Sc.s)(newEl, node);\n (0, $4jcZX.l).warn(\"Recursive render complete \", newEl, node);\n } else if (graph.children(v).length > 0) {\n (0, $4jcZX.l).info(\"Cluster - the non recursive path XXX\", v, node.id, node, graph);\n (0, $4jcZX.l).info($365bc7d5dc9758d1$var$findNonClusterChild(node.id, graph));\n $365bc7d5dc9758d1$var$clusterDb[node.id] = {\n id: $365bc7d5dc9758d1$var$findNonClusterChild(node.id, graph),\n node: node\n };\n } else {\n (0, $4jcZX.l).info(\"Node - the non recursive path\", v, node.id, node);\n await (0, $hl1Sc.e)(nodes, graph.node(v), dir);\n }\n }));\n graph.edges().forEach(function(e) {\n const edge = graph.edge(e.v, e.w, e.name);\n (0, $4jcZX.l).info(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(e));\n (0, $4jcZX.l).info(\"Edge \" + e.v + \" -> \" + e.w + \": \", e, \" \", JSON.stringify(graph.edge(e)));\n (0, $4jcZX.l).info(\"Fix\", $365bc7d5dc9758d1$var$clusterDb, \"ids:\", e.v, e.w, \"Translating: \", $365bc7d5dc9758d1$var$clusterDb[e.v], $365bc7d5dc9758d1$var$clusterDb[e.w]);\n (0, $hl1Sc.f)(edgeLabels, edge);\n });\n graph.edges().forEach(function(e) {\n (0, $4jcZX.l).info(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(e));\n });\n (0, $4jcZX.l).info(\"#############################################\");\n (0, $4jcZX.l).info(\"### Layout ###\");\n (0, $4jcZX.l).info(\"#############################################\");\n (0, $4jcZX.l).info(graph);\n (0, $hV1gR.layout)(graph);\n (0, $4jcZX.l).info(\"Graph after layout:\", $c0ySZ.write(graph));\n let diff = 0;\n const { subGraphTitleTotalMargin: subGraphTitleTotalMargin } = (0, $hl1Sc.g)(siteConfig);\n $365bc7d5dc9758d1$var$sortNodesByHierarchy(graph).forEach(function(v) {\n const node = graph.node(v);\n (0, $4jcZX.l).info(\"Position \" + v + \": \" + JSON.stringify(graph.node(v)));\n (0, $4jcZX.l).info(\"Position \" + v + \": (\" + node.x, \",\" + node.y, \") width: \", node.width, \" height: \", node.height);\n if (node && node.clusterNode) {\n node.y += subGraphTitleTotalMargin;\n (0, $hl1Sc.p)(node);\n } else if (graph.children(v).length > 0) {\n node.height += subGraphTitleTotalMargin;\n $365bc7d5dc9758d1$var$insertCluster(clusters, node);\n $365bc7d5dc9758d1$var$clusterDb[node.id].node = node;\n } else {\n node.y += subGraphTitleTotalMargin / 2;\n (0, $hl1Sc.p)(node);\n }\n });\n graph.edges().forEach(function(e) {\n const edge = graph.edge(e);\n (0, $4jcZX.l).info(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(edge), edge);\n edge.points.forEach((point)=>point.y += subGraphTitleTotalMargin / 2);\n const paths = (0, $hl1Sc.h)(edgePaths, e, edge, $365bc7d5dc9758d1$var$clusterDb, diagramType, graph, id);\n (0, $hl1Sc.j)(edge, paths);\n });\n graph.nodes().forEach(function(v) {\n const n = graph.node(v);\n (0, $4jcZX.l).info(v, n.type, n.diff);\n if (n.type === \"group\") diff = n.diff;\n });\n return {\n elem: elem,\n diff: diff\n };\n};\nconst $365bc7d5dc9758d1$export$43caf9889c228507 = async (elem, graph, markers, diagramType, id)=>{\n (0, $hl1Sc.a)(elem, markers, diagramType, id);\n (0, $hl1Sc.b)();\n (0, $hl1Sc.d)();\n $365bc7d5dc9758d1$var$clear();\n $365bc7d5dc9758d1$var$clear$1();\n (0, $4jcZX.l).warn(\"Graph at first:\", JSON.stringify($c0ySZ.write(graph)));\n $365bc7d5dc9758d1$var$adjustClustersAndEdges(graph);\n (0, $4jcZX.l).warn(\"Graph after:\", JSON.stringify($c0ySZ.write(graph)));\n const siteConfig = (0, $4jcZX.c)();\n await $365bc7d5dc9758d1$var$recursiveRender(elem, graph, diagramType, id, void 0, siteConfig);\n};\n\n});\nparcelRegister(\"c0ySZ\", function(module, exports) {\n\n$parcel$export(module.exports, \"write\", () => $8be08bb87e59fed8$export$68d8715fc104d294);\n\nvar $hNIl0 = parcelRequire(\"hNIl0\");\nvar $fpekr = parcelRequire(\"fpekr\");\nvar $1G4S6 = parcelRequire(\"1G4S6\");\nvar $3kePu = parcelRequire(\"3kePu\");\n\nvar $2rLgF = parcelRequire(\"2rLgF\");\nfunction $8be08bb87e59fed8$export$68d8715fc104d294(g) {\n var json = {\n options: {\n directed: g.isDirected(),\n multigraph: g.isMultigraph(),\n compound: g.isCompound()\n },\n nodes: $8be08bb87e59fed8$var$writeNodes(g),\n edges: $8be08bb87e59fed8$var$writeEdges(g)\n };\n if (!$1G4S6.default(g.graph())) json.value = $hNIl0.default(g.graph());\n return json;\n}\nfunction $8be08bb87e59fed8$var$writeNodes(g) {\n return $3kePu.default(g.nodes(), function(v) {\n var nodeValue = g.node(v);\n var parent = g.parent(v);\n var node = {\n v: v\n };\n if (!$1G4S6.default(nodeValue)) node.value = nodeValue;\n if (!$1G4S6.default(parent)) node.parent = parent;\n return node;\n });\n}\nfunction $8be08bb87e59fed8$var$writeEdges(g) {\n return $3kePu.default(g.edges(), function(e) {\n var edgeValue = g.edge(e);\n var edge = {\n v: e.v,\n w: e.w\n };\n if (!$1G4S6.default(e.name)) edge.name = e.name;\n if (!$1G4S6.default(edgeValue)) edge.value = edgeValue;\n return edge;\n });\n}\nfunction $8be08bb87e59fed8$export$aafa59e2e03f2942(json) {\n var g = new (0, $2rLgF.Graph)(json.options).setGraph(json.value);\n $fpekr.default(json.nodes, function(entry) {\n g.setNode(entry.v, entry.value);\n if (entry.parent) g.setParent(entry.v, entry.parent);\n });\n $fpekr.default(json.edges, function(entry) {\n g.setEdge({\n v: entry.v,\n w: entry.w,\n name: entry.name\n }, entry.value);\n });\n return g;\n}\n\n});\n\n\n\n//# sourceMappingURL=flowDiagram-b222e15a.d5bac7fc.js.map\n","import { layout } from \"dagre-d3-es/src/dagre/index.js\";\nimport * as graphlibJson from \"dagre-d3-es/src/graphlib/json.js\";\nimport { c as createLabel, g as getSubGraphTitleMargins, i as intersectRect, a as insertMarkers, b as clear$2, d as clear$3, u as updateNodeBounds, s as setNodeElem, e as insertNode, f as insertEdgeLabel, p as positionNode, h as insertEdge, j as positionEdgeLabel } from \"./edges-066a5561.js\";\nimport { l as log, c as getConfig, m as evaluate } from \"./mermaid-6dc72991.js\";\nimport * as graphlib from \"dagre-d3-es/src/graphlib/index.js\";\nimport { a as createText } from \"./createText-ca0c5216.js\";\nimport { select } from \"d3\";\nlet clusterDb = {};\nlet descendants = {};\nlet parents = {};\nconst clear$1 = () => {\n descendants = {};\n parents = {};\n clusterDb = {};\n};\nconst isDescendant = (id, ancestorId) => {\n log.trace(\"In isDescendant\", ancestorId, \" \", id, \" = \", descendants[ancestorId].includes(id));\n if (descendants[ancestorId].includes(id)) {\n return true;\n }\n return false;\n};\nconst edgeInCluster = (edge, clusterId) => {\n log.info(\"Descendants of \", clusterId, \" is \", descendants[clusterId]);\n log.info(\"Edge is \", edge);\n if (edge.v === clusterId) {\n return false;\n }\n if (edge.w === clusterId) {\n return false;\n }\n if (!descendants[clusterId]) {\n log.debug(\"Tilt, \", clusterId, \",not in descendants\");\n return false;\n }\n return descendants[clusterId].includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || descendants[clusterId].includes(edge.w);\n};\nconst copy = (clusterId, graph, newGraph, rootId) => {\n log.warn(\n \"Copying children of \",\n clusterId,\n \"root\",\n rootId,\n \"data\",\n graph.node(clusterId),\n rootId\n );\n const nodes = graph.children(clusterId) || [];\n if (clusterId !== rootId) {\n nodes.push(clusterId);\n }\n log.warn(\"Copying (nodes) clusterId\", clusterId, \"nodes\", nodes);\n nodes.forEach((node) => {\n if (graph.children(node).length > 0) {\n copy(node, graph, newGraph, rootId);\n } else {\n const data = graph.node(node);\n log.info(\"cp \", node, \" to \", rootId, \" with parent \", clusterId);\n newGraph.setNode(node, data);\n if (rootId !== graph.parent(node)) {\n log.warn(\"Setting parent\", node, graph.parent(node));\n newGraph.setParent(node, graph.parent(node));\n }\n if (clusterId !== rootId && node !== clusterId) {\n log.debug(\"Setting parent\", node, clusterId);\n newGraph.setParent(node, clusterId);\n } else {\n log.info(\"In copy \", clusterId, \"root\", rootId, \"data\", graph.node(clusterId), rootId);\n log.debug(\n \"Not Setting parent for node=\",\n node,\n \"cluster!==rootId\",\n clusterId !== rootId,\n \"node!==clusterId\",\n node !== clusterId\n );\n }\n const edges = graph.edges(node);\n log.debug(\"Copying Edges\", edges);\n edges.forEach((edge) => {\n log.info(\"Edge\", edge);\n const data2 = graph.edge(edge.v, edge.w, edge.name);\n log.info(\"Edge data\", data2, rootId);\n try {\n if (edgeInCluster(edge, rootId)) {\n log.info(\"Copying as \", edge.v, edge.w, data2, edge.name);\n newGraph.setEdge(edge.v, edge.w, data2, edge.name);\n log.info(\"newGraph edges \", newGraph.edges(), newGraph.edge(newGraph.edges()[0]));\n } else {\n log.info(\n \"Skipping copy of edge \",\n edge.v,\n \"-->\",\n edge.w,\n \" rootId: \",\n rootId,\n \" clusterId:\",\n clusterId\n );\n }\n } catch (e) {\n log.error(e);\n }\n });\n }\n log.debug(\"Removing node\", node);\n graph.removeNode(node);\n });\n};\nconst extractDescendants = (id, graph) => {\n const children = graph.children(id);\n let res = [...children];\n for (const child of children) {\n parents[child] = id;\n res = [...res, ...extractDescendants(child, graph)];\n }\n return res;\n};\nconst findNonClusterChild = (id, graph) => {\n log.trace(\"Searching\", id);\n const children = graph.children(id);\n log.trace(\"Searching children of id \", id, children);\n if (children.length < 1) {\n log.trace(\"This is a valid node\", id);\n return id;\n }\n for (const child of children) {\n const _id = findNonClusterChild(child, graph);\n if (_id) {\n log.trace(\"Found replacement for\", id, \" => \", _id);\n return _id;\n }\n }\n};\nconst getAnchorId = (id) => {\n if (!clusterDb[id]) {\n return id;\n }\n if (!clusterDb[id].externalConnections) {\n return id;\n }\n if (clusterDb[id]) {\n return clusterDb[id].id;\n }\n return id;\n};\nconst adjustClustersAndEdges = (graph, depth) => {\n if (!graph || depth > 10) {\n log.debug(\"Opting out, no graph \");\n return;\n } else {\n log.debug(\"Opting in, graph \");\n }\n graph.nodes().forEach(function(id) {\n const children = graph.children(id);\n if (children.length > 0) {\n log.warn(\n \"Cluster identified\",\n id,\n \" Replacement id in edges: \",\n findNonClusterChild(id, graph)\n );\n descendants[id] = extractDescendants(id, graph);\n clusterDb[id] = { id: findNonClusterChild(id, graph), clusterData: graph.node(id) };\n }\n });\n graph.nodes().forEach(function(id) {\n const children = graph.children(id);\n const edges = graph.edges();\n if (children.length > 0) {\n log.debug(\"Cluster identified\", id, descendants);\n edges.forEach((edge) => {\n if (edge.v !== id && edge.w !== id) {\n const d1 = isDescendant(edge.v, id);\n const d2 = isDescendant(edge.w, id);\n if (d1 ^ d2) {\n log.warn(\"Edge: \", edge, \" leaves cluster \", id);\n log.warn(\"Descendants of XXX \", id, \": \", descendants[id]);\n clusterDb[id].externalConnections = true;\n }\n }\n });\n } else {\n log.debug(\"Not a cluster \", id, descendants);\n }\n });\n for (let id of Object.keys(clusterDb)) {\n const nonClusterChild = clusterDb[id].id;\n const parent = graph.parent(nonClusterChild);\n if (parent !== id && clusterDb[parent] && !clusterDb[parent].externalConnections) {\n clusterDb[id].id = parent;\n }\n }\n graph.edges().forEach(function(e) {\n const edge = graph.edge(e);\n log.warn(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(e));\n log.warn(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(graph.edge(e)));\n let v = e.v;\n let w = e.w;\n log.warn(\n \"Fix XXX\",\n clusterDb,\n \"ids:\",\n e.v,\n e.w,\n \"Translating: \",\n clusterDb[e.v],\n \" --- \",\n clusterDb[e.w]\n );\n if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) {\n log.warn(\"Fixing and trixing link to self - removing XXX\", e.v, e.w, e.name);\n log.warn(\"Fixing and trixing - removing XXX\", e.v, e.w, e.name);\n v = getAnchorId(e.v);\n w = getAnchorId(e.w);\n graph.removeEdge(e.v, e.w, e.name);\n const specialId = e.w + \"---\" + e.v;\n graph.setNode(specialId, {\n domId: specialId,\n id: specialId,\n labelStyle: \"\",\n labelText: edge.label,\n padding: 0,\n shape: \"labelRect\",\n style: \"\"\n });\n const edge1 = structuredClone(edge);\n const edge2 = structuredClone(edge);\n edge1.label = \"\";\n edge1.arrowTypeEnd = \"none\";\n edge2.label = \"\";\n edge1.fromCluster = e.v;\n edge2.toCluster = e.v;\n graph.setEdge(v, specialId, edge1, e.name + \"-cyclic-special\");\n graph.setEdge(specialId, w, edge2, e.name + \"-cyclic-special\");\n } else if (clusterDb[e.v] || clusterDb[e.w]) {\n log.warn(\"Fixing and trixing - removing XXX\", e.v, e.w, e.name);\n v = getAnchorId(e.v);\n w = getAnchorId(e.w);\n graph.removeEdge(e.v, e.w, e.name);\n if (v !== e.v) {\n const parent = graph.parent(v);\n clusterDb[parent].externalConnections = true;\n edge.fromCluster = e.v;\n }\n if (w !== e.w) {\n const parent = graph.parent(w);\n clusterDb[parent].externalConnections = true;\n edge.toCluster = e.w;\n }\n log.warn(\"Fix Replacing with XXX\", v, w, e.name);\n graph.setEdge(v, w, edge, e.name);\n }\n });\n log.warn(\"Adjusted Graph\", graphlibJson.write(graph));\n extractor(graph, 0);\n log.trace(clusterDb);\n};\nconst extractor = (graph, depth) => {\n log.warn(\"extractor - \", depth, graphlibJson.write(graph), graph.children(\"D\"));\n if (depth > 10) {\n log.error(\"Bailing out\");\n return;\n }\n let nodes = graph.nodes();\n let hasChildren = false;\n for (const node of nodes) {\n const children = graph.children(node);\n hasChildren = hasChildren || children.length > 0;\n }\n if (!hasChildren) {\n log.debug(\"Done, no node has children\", graph.nodes());\n return;\n }\n log.debug(\"Nodes = \", nodes, depth);\n for (const node of nodes) {\n log.debug(\n \"Extracting node\",\n node,\n clusterDb,\n clusterDb[node] && !clusterDb[node].externalConnections,\n !graph.parent(node),\n graph.node(node),\n graph.children(\"D\"),\n \" Depth \",\n depth\n );\n if (!clusterDb[node]) {\n log.debug(\"Not a cluster\", node, depth);\n } else if (!clusterDb[node].externalConnections && // !graph.parent(node) &&\n graph.children(node) && graph.children(node).length > 0) {\n log.warn(\n \"Cluster without external connections, without a parent and with children\",\n node,\n depth\n );\n const graphSettings = graph.graph();\n let dir = graphSettings.rankdir === \"TB\" ? \"LR\" : \"TB\";\n if (clusterDb[node] && clusterDb[node].clusterData && clusterDb[node].clusterData.dir) {\n dir = clusterDb[node].clusterData.dir;\n log.warn(\"Fixing dir\", clusterDb[node].clusterData.dir, dir);\n }\n const clusterGraph = new graphlib.Graph({\n multigraph: true,\n compound: true\n }).setGraph({\n rankdir: dir,\n // Todo: set proper spacing\n nodesep: 50,\n ranksep: 50,\n marginx: 8,\n marginy: 8\n }).setDefaultEdgeLabel(function() {\n return {};\n });\n log.warn(\"Old graph before copy\", graphlibJson.write(graph));\n copy(node, graph, clusterGraph, node);\n graph.setNode(node, {\n clusterNode: true,\n id: node,\n clusterData: clusterDb[node].clusterData,\n labelText: clusterDb[node].labelText,\n graph: clusterGraph\n });\n log.warn(\"New graph after copy node: (\", node, \")\", graphlibJson.write(clusterGraph));\n log.debug(\"Old graph after copy\", graphlibJson.write(graph));\n } else {\n log.warn(\n \"Cluster ** \",\n node,\n \" **not meeting the criteria !externalConnections:\",\n !clusterDb[node].externalConnections,\n \" no parent: \",\n !graph.parent(node),\n \" children \",\n graph.children(node) && graph.children(node).length > 0,\n graph.children(\"D\"),\n depth\n );\n log.debug(clusterDb);\n }\n }\n nodes = graph.nodes();\n log.warn(\"New list of nodes\", nodes);\n for (const node of nodes) {\n const data = graph.node(node);\n log.warn(\" Now next level\", node, data);\n if (data.clusterNode) {\n extractor(data.graph, depth + 1);\n }\n }\n};\nconst sorter = (graph, nodes) => {\n if (nodes.length === 0) {\n return [];\n }\n let result = Object.assign(nodes);\n nodes.forEach((node) => {\n const children = graph.children(node);\n const sorted = sorter(graph, children);\n result = [...result, ...sorted];\n });\n return result;\n};\nconst sortNodesByHierarchy = (graph) => sorter(graph, graph.children());\nconst rect = (parent, node) => {\n log.info(\"Creating subgraph rect for \", node.id, node);\n const siteConfig = getConfig();\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"cluster\" + (node.class ? \" \" + node.class : \"\")).attr(\"id\", node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const useHtmlLabels = evaluate(siteConfig.flowchart.htmlLabels);\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"cluster-label\");\n const text = node.labelType === \"markdown\" ? createText(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild(createLabel(node.labelText, node.labelStyle, void 0, true));\n let bbox = text.getBBox();\n if (evaluate(siteConfig.flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width;\n if (node.width <= bbox.width + padding) {\n node.diff = (bbox.width - node.width) / 2 - node.padding / 2;\n } else {\n node.diff = -node.padding / 2;\n }\n log.trace(\"Data \", node, JSON.stringify(node));\n rect2.attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", node.x - width / 2).attr(\"y\", node.y - node.height / 2 - halfPadding).attr(\"width\", width).attr(\"height\", node.height + padding);\n const { subGraphTitleTopMargin } = getSubGraphTitleMargins(siteConfig);\n if (useHtmlLabels) {\n label.attr(\n \"transform\",\n // This puts the label on top of the box instead of inside it\n `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})`\n );\n } else {\n label.attr(\n \"transform\",\n // This puts the label on top of the box instead of inside it\n `translate(${node.x}, ${node.y - node.height / 2 + subGraphTitleTopMargin})`\n );\n }\n const rectBox = rect2.node().getBBox();\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.intersect = function(point) {\n return intersectRect(node, point);\n };\n return shapeSvg;\n};\nconst noteGroup = (parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"note-cluster\").attr(\"id\", node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n rect2.attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", node.x - node.width / 2 - halfPadding).attr(\"y\", node.y - node.height / 2 - halfPadding).attr(\"width\", node.width + padding).attr(\"height\", node.height + padding).attr(\"fill\", \"none\");\n const rectBox = rect2.node().getBBox();\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.intersect = function(point) {\n return intersectRect(node, point);\n };\n return shapeSvg;\n};\nconst roundedWithTitle = (parent, node) => {\n const siteConfig = getConfig();\n const shapeSvg = parent.insert(\"g\").attr(\"class\", node.classes).attr(\"id\", node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"cluster-label\");\n const innerRect = shapeSvg.append(\"rect\");\n const text = label.node().appendChild(createLabel(node.labelText, node.labelStyle, void 0, true));\n let bbox = text.getBBox();\n if (evaluate(siteConfig.flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n bbox = text.getBBox();\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width;\n if (node.width <= bbox.width + node.padding) {\n node.diff = (bbox.width + node.padding * 0 - node.width) / 2;\n } else {\n node.diff = -node.padding / 2;\n }\n rect2.attr(\"class\", \"outer\").attr(\"x\", node.x - width / 2 - halfPadding).attr(\"y\", node.y - node.height / 2 - halfPadding).attr(\"width\", width + padding).attr(\"height\", node.height + padding);\n innerRect.attr(\"class\", \"inner\").attr(\"x\", node.x - width / 2 - halfPadding).attr(\"y\", node.y - node.height / 2 - halfPadding + bbox.height - 1).attr(\"width\", width + padding).attr(\"height\", node.height + padding - bbox.height - 3);\n const { subGraphTitleTopMargin } = getSubGraphTitleMargins(siteConfig);\n label.attr(\n \"transform\",\n `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 - node.padding / 3 + (evaluate(siteConfig.flowchart.htmlLabels) ? 5 : 3) + subGraphTitleTopMargin})`\n );\n const rectBox = rect2.node().getBBox();\n node.height = rectBox.height;\n node.intersect = function(point) {\n return intersectRect(node, point);\n };\n return shapeSvg;\n};\nconst divider = (parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", node.classes).attr(\"id\", node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n rect2.attr(\"class\", \"divider\").attr(\"x\", node.x - node.width / 2 - halfPadding).attr(\"y\", node.y - node.height / 2).attr(\"width\", node.width + padding).attr(\"height\", node.height + padding);\n const rectBox = rect2.node().getBBox();\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.diff = -node.padding / 2;\n node.intersect = function(point) {\n return intersectRect(node, point);\n };\n return shapeSvg;\n};\nconst shapes = { rect, roundedWithTitle, noteGroup, divider };\nlet clusterElems = {};\nconst insertCluster = (elem, node) => {\n log.trace(\"Inserting cluster\");\n const shape = node.shape || \"rect\";\n clusterElems[node.id] = shapes[shape](elem, node);\n};\nconst clear = () => {\n clusterElems = {};\n};\nconst recursiveRender = async (_elem, graph, diagramType, id, parentCluster, siteConfig) => {\n log.info(\"Graph in recursive render: XXX\", graphlibJson.write(graph), parentCluster);\n const dir = graph.graph().rankdir;\n log.trace(\"Dir in recursive render - dir:\", dir);\n const elem = _elem.insert(\"g\").attr(\"class\", \"root\");\n if (!graph.nodes()) {\n log.info(\"No nodes found for\", graph);\n } else {\n log.info(\"Recursive render XXX\", graph.nodes());\n }\n if (graph.edges().length > 0) {\n log.trace(\"Recursive edges\", graph.edge(graph.edges()[0]));\n }\n const clusters = elem.insert(\"g\").attr(\"class\", \"clusters\");\n const edgePaths = elem.insert(\"g\").attr(\"class\", \"edgePaths\");\n const edgeLabels = elem.insert(\"g\").attr(\"class\", \"edgeLabels\");\n const nodes = elem.insert(\"g\").attr(\"class\", \"nodes\");\n await Promise.all(\n graph.nodes().map(async function(v) {\n const node = graph.node(v);\n if (parentCluster !== void 0) {\n const data = JSON.parse(JSON.stringify(parentCluster.clusterData));\n log.info(\"Setting data for cluster XXX (\", v, \") \", data, parentCluster);\n graph.setNode(parentCluster.id, data);\n if (!graph.parent(v)) {\n log.trace(\"Setting parent\", v, parentCluster.id);\n graph.setParent(v, parentCluster.id, data);\n }\n }\n log.info(\"(Insert) Node XXX\" + v + \": \" + JSON.stringify(graph.node(v)));\n if (node && node.clusterNode) {\n log.info(\"Cluster identified\", v, node.width, graph.node(v));\n const o = await recursiveRender(\n nodes,\n node.graph,\n diagramType,\n id,\n graph.node(v),\n siteConfig\n );\n const newEl = o.elem;\n updateNodeBounds(node, newEl);\n node.diff = o.diff || 0;\n log.info(\"Node bounds (abc123)\", v, node, node.width, node.x, node.y);\n setNodeElem(newEl, node);\n log.warn(\"Recursive render complete \", newEl, node);\n } else {\n if (graph.children(v).length > 0) {\n log.info(\"Cluster - the non recursive path XXX\", v, node.id, node, graph);\n log.info(findNonClusterChild(node.id, graph));\n clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node };\n } else {\n log.info(\"Node - the non recursive path\", v, node.id, node);\n await insertNode(nodes, graph.node(v), dir);\n }\n }\n })\n );\n graph.edges().forEach(function(e) {\n const edge = graph.edge(e.v, e.w, e.name);\n log.info(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(e));\n log.info(\"Edge \" + e.v + \" -> \" + e.w + \": \", e, \" \", JSON.stringify(graph.edge(e)));\n log.info(\"Fix\", clusterDb, \"ids:\", e.v, e.w, \"Translating: \", clusterDb[e.v], clusterDb[e.w]);\n insertEdgeLabel(edgeLabels, edge);\n });\n graph.edges().forEach(function(e) {\n log.info(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(e));\n });\n log.info(\"#############################################\");\n log.info(\"### Layout ###\");\n log.info(\"#############################################\");\n log.info(graph);\n layout(graph);\n log.info(\"Graph after layout:\", graphlibJson.write(graph));\n let diff = 0;\n const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig);\n sortNodesByHierarchy(graph).forEach(function(v) {\n const node = graph.node(v);\n log.info(\"Position \" + v + \": \" + JSON.stringify(graph.node(v)));\n log.info(\n \"Position \" + v + \": (\" + node.x,\n \",\" + node.y,\n \") width: \",\n node.width,\n \" height: \",\n node.height\n );\n if (node && node.clusterNode) {\n node.y += subGraphTitleTotalMargin;\n positionNode(node);\n } else {\n if (graph.children(v).length > 0) {\n node.height += subGraphTitleTotalMargin;\n insertCluster(clusters, node);\n clusterDb[node.id].node = node;\n } else {\n node.y += subGraphTitleTotalMargin / 2;\n positionNode(node);\n }\n }\n });\n graph.edges().forEach(function(e) {\n const edge = graph.edge(e);\n log.info(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(edge), edge);\n edge.points.forEach((point) => point.y += subGraphTitleTotalMargin / 2);\n const paths = insertEdge(edgePaths, e, edge, clusterDb, diagramType, graph, id);\n positionEdgeLabel(edge, paths);\n });\n graph.nodes().forEach(function(v) {\n const n = graph.node(v);\n log.info(v, n.type, n.diff);\n if (n.type === \"group\") {\n diff = n.diff;\n }\n });\n return { elem, diff };\n};\nconst render = async (elem, graph, markers, diagramType, id) => {\n insertMarkers(elem, markers, diagramType, id);\n clear$2();\n clear$3();\n clear();\n clear$1();\n log.warn(\"Graph at first:\", JSON.stringify(graphlibJson.write(graph)));\n adjustClustersAndEdges(graph);\n log.warn(\"Graph after:\", JSON.stringify(graphlibJson.write(graph)));\n const siteConfig = getConfig();\n await recursiveRender(elem, graph, diagramType, id, void 0, siteConfig);\n};\nexport {\n render as r\n};\n","import * as _ from 'lodash-es';\nimport { Graph } from './graph.js';\n\nexport { write, read };\n\nfunction write(g) {\n var json = {\n options: {\n directed: g.isDirected(),\n multigraph: g.isMultigraph(),\n compound: g.isCompound(),\n },\n nodes: writeNodes(g),\n edges: writeEdges(g),\n };\n if (!_.isUndefined(g.graph())) {\n json.value = _.clone(g.graph());\n }\n return json;\n}\n\nfunction writeNodes(g) {\n return _.map(g.nodes(), function (v) {\n var nodeValue = g.node(v);\n var parent = g.parent(v);\n var node = { v: v };\n if (!_.isUndefined(nodeValue)) {\n node.value = nodeValue;\n }\n if (!_.isUndefined(parent)) {\n node.parent = parent;\n }\n return node;\n });\n}\n\nfunction writeEdges(g) {\n return _.map(g.edges(), function (e) {\n var edgeValue = g.edge(e);\n var edge = { v: e.v, w: e.w };\n if (!_.isUndefined(e.name)) {\n edge.name = e.name;\n }\n if (!_.isUndefined(edgeValue)) {\n edge.value = edgeValue;\n }\n return edge;\n });\n}\n\nfunction read(json) {\n var g = new Graph(json.options).setGraph(json.value);\n _.each(json.nodes, function (entry) {\n g.setNode(entry.v, entry.value);\n if (entry.parent) {\n g.setParent(entry.v, entry.parent);\n }\n });\n _.each(json.edges, function (entry) {\n g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value);\n });\n return g;\n}\n"],"names":["$parcel$export","e","n","v","s","Object","defineProperty","get","set","enumerable","configurable","parcelRequire","$parcel$global","globalThis","parcelRegister","register","module","exports","$365bc7d5dc9758d1$export$43caf9889c228507","$hV1gR","$c0ySZ","$hl1Sc","$4jcZX","$4LkSm","$fmBVZ","$2YFJl","$365bc7d5dc9758d1$var$clusterDb","$365bc7d5dc9758d1$var$descendants","$365bc7d5dc9758d1$var$parents","$365bc7d5dc9758d1$var$clear$1","$365bc7d5dc9758d1$var$isDescendant","id","ancestorId","l","trace","includes","$365bc7d5dc9758d1$var$edgeInCluster","edge","clusterId","info","w","debug","$365bc7d5dc9758d1$var$copy","graph","newGraph","rootId","warn","node","nodes","children","push","forEach","length","data","setNode","parent","setParent","edges","data2","name","setEdge","error","removeNode","$365bc7d5dc9758d1$var$extractDescendants","res","child","$365bc7d5dc9758d1$var$findNonClusterChild","_id","$365bc7d5dc9758d1$var$getAnchorId","externalConnections","$365bc7d5dc9758d1$var$adjustClustersAndEdges","depth","clusterData","d1","keys","nonClusterChild","JSON","stringify","removeEdge","specialId","domId","labelStyle","labelText","label","padding","shape","style","edge1","structuredClone","edge2","arrowTypeEnd","fromCluster","toCluster","write","$365bc7d5dc9758d1$var$extractor","hasChildren","dir","graphSettings","rankdir","clusterGraph","Graph","multigraph","compound","setGraph","nodesep","ranksep","marginx","marginy","setDefaultEdgeLabel","clusterNode","$365bc7d5dc9758d1$var$sorter","result","assign","sorted","$365bc7d5dc9758d1$var$sortNodesByHierarchy","$365bc7d5dc9758d1$var$shapes","rect","siteConfig","c","shapeSvg","insert","attr","class","rect2","useHtmlLabels","m","flowchart","htmlLabels","text","labelType","a","appendChild","bbox","getBBox","div","dv","select","getBoundingClientRect","width","height","diff","rx","ry","x","y","subGraphTitleTopMargin","g","rectBox","intersect","point","i","roundedWithTitle","classes","innerRect","append","halfPadding","noteGroup","divider","$365bc7d5dc9758d1$var$clusterElems","$365bc7d5dc9758d1$var$insertCluster","elem","$365bc7d5dc9758d1$var$clear","$365bc7d5dc9758d1$var$recursiveRender","_elem","diagramType","parentCluster","clusters","edgePaths","edgeLabels","Promise","all","map","parse","o","newEl","u","f","layout","subGraphTitleTotalMargin","p","points","paths","h","j","type","markers","b","d","$8be08bb87e59fed8$export$68d8715fc104d294","$hNIl0","$1G4S6","$3kePu","json","options","directed","isDirected","isMultigraph","isCompound","default","nodeValue","value","edgeValue"],"version":3,"file":"flowDiagram-b222e15a.d5bac7fc.js.map"}