{"version":3,"file":"dagre-VZM6K2ZE-tnkfMM4S.chunk.mjs","sources":["../node_modules/mermaid/dist/chunks/mermaid.core/dagre-VZM6K2ZE.mjs"],"sourcesContent":["import {\n  adjustClustersAndEdges,\n  clear as clear4,\n  clusterDb,\n  findNonClusterChild,\n  sortNodesByHierarchy\n} from \"./chunk-RYQCIY6F.mjs\";\nimport {\n  clear as clear2,\n  insertEdge,\n  insertEdgeLabel,\n  markers_default,\n  positionEdgeLabel\n} from \"./chunk-7Z6QIM7H.mjs\";\nimport {\n  clear,\n  clear2 as clear3,\n  insertCluster,\n  insertNode,\n  positionNode,\n  setNodeElem,\n  updateNodeBounds\n} from \"./chunk-QR6OTTB3.mjs\";\nimport \"./chunk-W5SLKNZC.mjs\";\nimport \"./chunk-7BUUIJ7U.mjs\";\nimport {\n  getSubGraphTitleMargins\n} from \"./chunk-UBXNYLIW.mjs\";\nimport \"./chunk-WRU74C26.mjs\";\nimport \"./chunk-4I5QYGJK.mjs\";\nimport \"./chunk-NSK5VX7P.mjs\";\nimport {\n  getConfig2 as getConfig\n} from \"./chunk-I66GZJ75.mjs\";\nimport {\n  log\n} from \"./chunk-X3CZISLH.mjs\";\nimport {\n  __name\n} from \"./chunk-Y2CYZVJY.mjs\";\n\n// src/rendering-util/layout-algorithms/dagre/index.js\nimport { layout as dagreLayout } from \"dagre-d3-es/src/dagre/index.js\";\nimport * as graphlibJson from \"dagre-d3-es/src/graphlib/json.js\";\nimport * as graphlib from \"dagre-d3-es/src/graphlib/index.js\";\nvar clamp = /* @__PURE__ */ __name((value, min, max) => Math.max(min, Math.min(max, value)), \"clamp\");\nvar getDefaultSelfLoopSide = /* @__PURE__ */ __name((rankdir = \"TB\") => {\n  switch (rankdir) {\n    case \"BT\":\n      return \"bottom\";\n    case \"LR\":\n      return \"right\";\n    case \"RL\":\n      return \"left\";\n    case \"TB\":\n    default:\n      return \"top\";\n  }\n}, \"getDefaultSelfLoopSide\");\nvar shouldMergeSelfLoopSegments = /* @__PURE__ */ __name((diagramType) => diagramType === \"flowchart\" || diagramType === \"flowchart-v2\" || diagramType === \"stateDiagram\", \"shouldMergeSelfLoopSegments\");\nvar getSelfLoopSide = /* @__PURE__ */ __name((graph, node, segments, originalNodeId, rankdir) => {\n  const layoutHints = [];\n  const dummyNodeIds = /* @__PURE__ */ new Set();\n  segments.forEach(({ start, end }) => {\n    if (start !== originalNodeId) {\n      dummyNodeIds.add(start);\n    }\n    if (end !== originalNodeId) {\n      dummyNodeIds.add(end);\n    }\n  });\n  dummyNodeIds.forEach((id) => {\n    const dummyNode = graph.node(id);\n    if (typeof dummyNode?.x === \"number\" && typeof dummyNode?.y === \"number\") {\n      layoutHints.push(dummyNode);\n    }\n  });\n  if (layoutHints.length === 0) {\n    segments.forEach(({ edge }) => {\n      (edge.points ?? []).forEach((point) => {\n        if (typeof point?.x === \"number\" && typeof point?.y === \"number\") {\n          layoutHints.push(point);\n        }\n      });\n    });\n  }\n  if (layoutHints.length === 0) {\n    return getDefaultSelfLoopSide(rankdir);\n  }\n  const center = layoutHints.reduce(\n    (acc, point) => ({\n      x: acc.x + point.x / layoutHints.length,\n      y: acc.y + point.y / layoutHints.length\n    }),\n    { x: 0, y: 0 }\n  );\n  const dx = center.x - node.x;\n  const dy = center.y - node.y;\n  if (Math.abs(dx) > Math.abs(dy)) {\n    return dx > 0 ? \"right\" : \"left\";\n  }\n  if (Math.abs(dy) > 0) {\n    return dy > 0 ? \"bottom\" : \"top\";\n  }\n  return getDefaultSelfLoopSide(rankdir);\n}, \"getSelfLoopSide\");\nvar getSelfLoopPoints = /* @__PURE__ */ __name((node, side = \"top\", yOffset = 0, labelWidth = 0) => {\n  const x = node.x;\n  const y = node.y - yOffset;\n  const halfWidth = node.width / 2;\n  const halfHeight = node.height / 2;\n  const maxSpan = Math.max(36, Math.min(100, node.width * 0.8));\n  const span = clamp(Math.max(labelWidth, node.width * 0.35), 36, maxSpan);\n  const depth = clamp(Math.min(node.width, node.height) * 0.45, 24, 48);\n  switch (side) {\n    case \"bottom\": {\n      const bottom = y + halfHeight;\n      return [\n        { x: x - span / 2, y: bottom },\n        { x: x - span / 2, y: bottom + depth },\n        { x: x + span / 2, y: bottom + depth },\n        { x: x + span / 2, y: bottom }\n      ];\n    }\n    case \"right\": {\n      const right = x + halfWidth;\n      return [\n        { x: right, y: y - span / 2 },\n        { x: right + depth, y: y - span / 2 },\n        { x: right + depth, y: y + span / 2 },\n        { x: right, y: y + span / 2 }\n      ];\n    }\n    case \"left\": {\n      const left = x - halfWidth;\n      return [\n        { x: left, y: y - span / 2 },\n        { x: left - depth, y: y - span / 2 },\n        { x: left - depth, y: y + span / 2 },\n        { x: left, y: y + span / 2 }\n      ];\n    }\n    case \"top\":\n    default: {\n      const top = y - halfHeight;\n      return [\n        { x: x - span / 2, y: top },\n        { x: x - span / 2, y: top - depth },\n        { x: x + span / 2, y: top - depth },\n        { x: x + span / 2, y: top }\n      ];\n    }\n  }\n}, \"getSelfLoopPoints\");\nvar getSelfLoopLabelPosition = /* @__PURE__ */ __name((node, points, side = \"top\", yOffset = 0, label = {}) => {\n  const gap = 4;\n  const x = node.x;\n  const y = node.y - yOffset;\n  const labelWidth = label.width ?? 0;\n  const labelHeight = label.height ?? 0;\n  switch (side) {\n    case \"bottom\":\n      return { x, y: Math.max(...points.map((point) => point.y)) + labelHeight / 2 + gap };\n    case \"right\":\n      return { x: Math.max(...points.map((point) => point.x)) + labelWidth / 2 + gap, y };\n    case \"left\":\n      return { x: Math.min(...points.map((point) => point.x)) - labelWidth / 2 - gap, y };\n    case \"top\":\n    default:\n      return { x, y: Math.min(...points.map((point) => point.y)) - labelHeight / 2 - gap };\n  }\n}, \"getSelfLoopLabelPosition\");\nvar getEdgesToRender = /* @__PURE__ */ __name((graph, yOffset = 0, { mergeSelfLoops = true } = {}) => {\n  const selfLoopEdgeGroups = /* @__PURE__ */ new Map();\n  const edgesToRender = [];\n  const rankdir = graph.graph()?.rankdir;\n  graph.edges().forEach((e) => {\n    const edge = graph.edge(e);\n    if (mergeSelfLoops && edge.selfLoop) {\n      const key = edge.selfLoop.id;\n      if (!selfLoopEdgeGroups.has(key)) {\n        selfLoopEdgeGroups.set(key, []);\n      }\n      selfLoopEdgeGroups.get(key).push({ edge, start: e.v, end: e.w });\n    } else {\n      edgesToRender.push({ edge, start: e.v, end: e.w });\n    }\n  });\n  selfLoopEdgeGroups.forEach((segments) => {\n    if (segments.length !== 3) {\n      segments.forEach((segment) => edgesToRender.push(segment));\n      return;\n    }\n    segments.sort((a, b) => a.edge.selfLoop.order - b.edge.selfLoop.order);\n    const [firstSegment, middleSegment, lastSegment] = segments;\n    const originalEdge = firstSegment.edge.originalEdge ?? middleSegment.edge.originalEdge ?? lastSegment.edge.originalEdge ?? middleSegment.edge;\n    const node = graph.node(originalEdge.start);\n    if (!node) {\n      segments.forEach((segment) => edgesToRender.push(segment));\n      return;\n    }\n    const label = {\n      width: middleSegment.edge.width,\n      height: middleSegment.edge.height\n    };\n    const side = getSelfLoopSide(graph, node, segments, originalEdge.start, rankdir);\n    const points = getSelfLoopPoints(node, side, yOffset, label.width ?? 0);\n    const labelPosition = getSelfLoopLabelPosition(node, points, side, yOffset, label);\n    const mergedEdge = {\n      ...middleSegment.edge,\n      ...originalEdge,\n      id: originalEdge.id,\n      points,\n      start: originalEdge.start,\n      end: originalEdge.end,\n      x: labelPosition.x,\n      y: labelPosition.y,\n      width: label.width,\n      height: label.height,\n      labelStyle: middleSegment.edge.labelStyle,\n      fromCluster: firstSegment.edge.fromCluster ?? middleSegment.edge.fromCluster ?? lastSegment.edge.fromCluster,\n      toCluster: firstSegment.edge.toCluster ?? middleSegment.edge.toCluster ?? lastSegment.edge.toCluster\n    };\n    delete mergedEdge.selfLoop;\n    delete mergedEdge.originalEdge;\n    edgesToRender.push({ edge: mergedEdge, start: mergedEdge.start, end: mergedEdge.end });\n  });\n  return edgesToRender;\n}, \"getEdgesToRender\");\nvar recursiveRender = /* @__PURE__ */ __name(async (_elem, graph, diagramType, id, parentCluster, siteConfig) => {\n  log.warn(\"Graph in recursive render:XAX\", 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.info(\"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  const mergeSelfLoops = shouldMergeSelfLoopSegments(diagramType);\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.trace(\n          \"Setting data for parent cluster XXX\\n Node.id = \",\n          v,\n          \"\\n data=\",\n          data.height,\n          \"\\nParent cluster\",\n          parentCluster.height\n        );\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?.clusterNode) {\n        log.info(\"Cluster identified XBX\", v, node.width, graph.node(v));\n        const { ranksep, nodesep } = graph.graph();\n        node.graph.setGraph({\n          ...node.graph.graph(),\n          ranksep: ranksep + 25,\n          nodesep\n        });\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(\n          \"New compound node after recursive render XAX\",\n          v,\n          \"width\",\n          // node,\n          node.width,\n          \"height\",\n          node.height\n          // node.x,\n          // node.y\n        );\n        setNodeElem(newEl, node);\n      } else {\n        if (graph.children(v).length > 0) {\n          log.trace(\n            \"Cluster - the non recursive path XBX\",\n            v,\n            node.id,\n            node,\n            node.width,\n            \"Graph:\",\n            graph\n          );\n          log.trace(findNonClusterChild(node.id, graph));\n          clusterDb.set(node.id, { id: findNonClusterChild(node.id, graph), node });\n        } else {\n          log.trace(\"Node - the non recursive path XAX\", v, nodes, graph.node(v), dir);\n          await insertNode(nodes, graph.node(v), { config: siteConfig, dir });\n        }\n      }\n    })\n  );\n  const processEdges = /* @__PURE__ */ __name(async () => {\n    const edgePromises = graph.edges().map(async 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(\n        \"Fix\",\n        clusterDb,\n        \"ids:\",\n        e.v,\n        e.w,\n        \"Translating: \",\n        clusterDb.get(e.v),\n        clusterDb.get(e.w)\n      );\n      if (mergeSelfLoops && edge.selfLoop) {\n        if (edge.selfLoop.order !== 1) {\n          return;\n        }\n        const segmentId = edge.id;\n        edge.id = edge.selfLoop.id;\n        await insertEdgeLabel(edgeLabels, edge);\n        edge.id = segmentId;\n        return;\n      }\n      await insertEdgeLabel(edgeLabels, edge);\n    });\n    await Promise.all(edgePromises);\n  }, \"processEdges\");\n  await processEdges();\n  log.info(\"Graph before layout:\", JSON.stringify(graphlibJson.write(graph)));\n  log.info(\"############################################# XXX\");\n  log.info(\"###                Layout                 ### XXX\");\n  log.info(\"############################################# XXX\");\n  dagreLayout(graph);\n  log.info(\"Graph after layout:\", JSON.stringify(graphlibJson.write(graph)));\n  let diff = 0;\n  let { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig);\n  await Promise.all(\n    sortNodesByHierarchy(graph).map(async function(v) {\n      const node = graph.node(v);\n      log.info(\n        \"Position XBX => \" + v + \": (\" + node.x,\n        \",\" + node.y,\n        \") width: \",\n        node.width,\n        \" height: \",\n        node.height\n      );\n      if (node?.clusterNode) {\n        node.y += subGraphTitleTotalMargin;\n        log.info(\n          \"A tainted cluster node XBX1\",\n          v,\n          node.id,\n          node.width,\n          node.height,\n          node.x,\n          node.y,\n          graph.parent(v)\n        );\n        clusterDb.get(node.id).node = node;\n        positionNode(node);\n      } else {\n        if (graph.children(v).length > 0) {\n          log.info(\n            \"A pure cluster node XBX1\",\n            v,\n            node.id,\n            node.x,\n            node.y,\n            node.width,\n            node.height,\n            graph.parent(v)\n          );\n          node.height += subGraphTitleTotalMargin;\n          graph.node(node.parentId);\n          const halfPadding = node?.padding / 2 || 0;\n          const labelHeight = node?.labelBBox?.height || 0;\n          const offsetY = labelHeight - halfPadding || 0;\n          log.debug(\"OffsetY\", offsetY, \"labelHeight\", labelHeight, \"halfPadding\", halfPadding);\n          await insertCluster(clusters, node);\n          clusterDb.get(node.id).node = node;\n        } else {\n          const parent = graph.node(node.parentId);\n          node.y += subGraphTitleTotalMargin / 2;\n          log.info(\n            \"A regular node XBX1 - using the padding\",\n            node.id,\n            \"parent\",\n            node.parentId,\n            node.width,\n            node.height,\n            node.x,\n            node.y,\n            \"offsetY\",\n            node.offsetY,\n            \"parent\",\n            parent,\n            parent?.offsetY,\n            node\n          );\n          positionNode(node);\n        }\n      }\n    })\n  );\n  const edgeOffsetY = subGraphTitleTotalMargin / 2;\n  const edgesToRender = getEdgesToRender(graph, edgeOffsetY, { mergeSelfLoops });\n  edgesToRender.forEach(function({ edge, start, end }) {\n    log.info(\"Edge \" + start + \" -> \" + end + \": \" + JSON.stringify(edge), edge);\n    edge.points.forEach((point) => point.y += edgeOffsetY);\n    const startNode = graph.node(start);\n    const endNode = graph.node(end);\n    const paths = insertEdge(edgePaths, edge, clusterDb, diagramType, startNode, endNode, 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.isGroup) {\n      diff = n.diff;\n    }\n  });\n  log.warn(\"Returning from recursive render XAX\", elem, diff);\n  return { elem, diff };\n}, \"recursiveRender\");\nvar render = /* @__PURE__ */ __name(async (data4Layout, svg) => {\n  const graph = new graphlib.Graph({\n    multigraph: true,\n    compound: true\n  }).setGraph({\n    rankdir: data4Layout.direction,\n    nodesep: data4Layout.config?.nodeSpacing || data4Layout.config?.flowchart?.nodeSpacing || data4Layout.nodeSpacing,\n    ranksep: data4Layout.config?.rankSpacing || data4Layout.config?.flowchart?.rankSpacing || data4Layout.rankSpacing,\n    marginx: 8,\n    marginy: 8\n  }).setDefaultEdgeLabel(function() {\n    return {};\n  });\n  const element = svg.select(\"g\");\n  markers_default(element, data4Layout.markers, data4Layout.type, data4Layout.diagramId);\n  clear3();\n  clear2();\n  clear();\n  clear4();\n  data4Layout.nodes.forEach((node) => {\n    graph.setNode(node.id, { ...node });\n    if (node.parentId) {\n      graph.setParent(node.id, node.parentId);\n    }\n  });\n  log.debug(\"Edges:\", data4Layout.edges);\n  data4Layout.edges.forEach((edge) => {\n    if (edge.start === edge.end) {\n      const nodeId = edge.start;\n      const specialId1 = nodeId + \"---\" + nodeId + \"---1\";\n      const specialId2 = nodeId + \"---\" + nodeId + \"---2\";\n      const node = graph.node(nodeId);\n      graph.setNode(specialId1, {\n        domId: specialId1,\n        id: specialId1,\n        parentId: node.parentId,\n        labelStyle: \"\",\n        label: \"\",\n        padding: 0,\n        shape: \"labelRect\",\n        // shape: 'rect',\n        style: \"\",\n        width: 10,\n        height: 10\n      });\n      graph.setParent(specialId1, node.parentId);\n      graph.setNode(specialId2, {\n        domId: specialId2,\n        id: specialId2,\n        parentId: node.parentId,\n        labelStyle: \"\",\n        padding: 0,\n        // shape: 'rect',\n        shape: \"labelRect\",\n        label: \"\",\n        style: \"\",\n        width: 10,\n        height: 10\n      });\n      graph.setParent(specialId2, node.parentId);\n      const originalEdge = structuredClone(edge);\n      const edge1 = structuredClone(edge);\n      const edgeMid = structuredClone(edge);\n      const edge2 = structuredClone(edge);\n      edge1.originalEdge = originalEdge;\n      edge1.selfLoop = { id: originalEdge.id, order: 0 };\n      edgeMid.originalEdge = originalEdge;\n      edgeMid.selfLoop = { id: originalEdge.id, order: 1 };\n      edge2.originalEdge = originalEdge;\n      edge2.selfLoop = { id: originalEdge.id, order: 2 };\n      edge1.label = \"\";\n      edge1.arrowTypeEnd = \"none\";\n      edge1.endLabelLeft = \"\";\n      edge1.endLabelRight = \"\";\n      edge1.startLabelLeft = \"\";\n      edge1.id = nodeId + \"-cyclic-special-1\";\n      edgeMid.startLabelRight = \"\";\n      edgeMid.startLabelLeft = \"\";\n      edgeMid.endLabelLeft = \"\";\n      edgeMid.endLabelRight = \"\";\n      edgeMid.arrowTypeStart = \"none\";\n      edgeMid.arrowTypeEnd = \"none\";\n      edgeMid.id = nodeId + \"-cyclic-special-mid\";\n      edge2.label = \"\";\n      edge2.startLabelRight = \"\";\n      edge2.startLabelLeft = \"\";\n      edge2.arrowTypeStart = \"none\";\n      if (node.isGroup) {\n        edge1.fromCluster = nodeId;\n        edge2.toCluster = nodeId;\n      }\n      edge2.id = nodeId + \"-cyclic-special-2\";\n      edge2.arrowTypeStart = \"none\";\n      graph.setEdge(nodeId, specialId1, edge1, nodeId + \"-cyclic-special-0\");\n      graph.setEdge(specialId1, specialId2, edgeMid, nodeId + \"-cyclic-special-1\");\n      graph.setEdge(specialId2, nodeId, edge2, nodeId + \"-cyclic-special-2\");\n    } else {\n      graph.setEdge(edge.start, edge.end, { ...edge }, edge.id);\n    }\n  });\n  log.warn(\"Graph at first:\", JSON.stringify(graphlibJson.write(graph)));\n  adjustClustersAndEdges(graph);\n  log.warn(\"Graph after XAX:\", JSON.stringify(graphlibJson.write(graph)));\n  const siteConfig = getConfig();\n  await recursiveRender(\n    element,\n    graph,\n    data4Layout.type,\n    data4Layout.diagramId,\n    void 0,\n    siteConfig\n  );\n}, \"render\");\nexport {\n  getEdgesToRender,\n  render\n};\n"],"names":["clamp","__name","value","min","max","getDefaultSelfLoopSide","rankdir","shouldMergeSelfLoopSegments","diagramType","getSelfLoopSide","graph","node","segments","originalNodeId","layoutHints","dummyNodeIds","start","end","id","dummyNode","edge","point","center","acc","dx","dy","getSelfLoopPoints","side","yOffset","labelWidth","x","y","halfWidth","halfHeight","maxSpan","span","depth","bottom","right","left","top","getSelfLoopLabelPosition","points","label","labelHeight","getEdgesToRender","mergeSelfLoops","selfLoopEdgeGroups","edgesToRender","e","key","segment","a","b","firstSegment","middleSegment","lastSegment","originalEdge","labelPosition","mergedEdge","recursiveRender","_elem","parentCluster","siteConfig","log","graphlibJson.write","dir","elem","clusters","edgePaths","edgeLabels","nodes","v","data","ranksep","nodesep","o","newEl","updateNodeBounds","setNodeElem","findNonClusterChild","clusterDb","insertNode","edgePromises","segmentId","insertEdgeLabel","dagreLayout","diff","subGraphTitleTotalMargin","getSubGraphTitleMargins","sortNodesByHierarchy","positionNode","halfPadding","offsetY","insertCluster","parent","edgeOffsetY","startNode","endNode","paths","insertEdge","positionEdgeLabel","n","render","data4Layout","svg","graphlib.Graph","element","markers_default","clear3","clear2","clear","clear4","nodeId","specialId1","specialId2","edge1","edgeMid","edge2","adjustClustersAndEdges","getConfig"],"mappings":"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","x_google_ignoreList":[0]}