UNPKG

mermaid

Version:

Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.

2 lines (1 loc) 10.1 kB
import{C as w}from"./chunk-4CAJECRU.mjs";import{a as V,b as O}from"./chunk-ZQN7UHIL.mjs";import{b as S,c as L,d as T,e as x,f as E,h as j,i as B}from"./chunk-4OADUZ5Q.mjs";import{a as k,b as X,d as $,e as G}from"./chunk-VRZKL3EH.mjs";import{a as M}from"./chunk-Z6V44ARX.mjs";import{p as y}from"./chunk-VY2OSTJR.mjs";import{_ as N,t as v}from"./chunk-QJSWEUOL.mjs";import{b as u}from"./chunk-H7VHZCWX.mjs";import{a as c}from"./chunk-AQ6EADP3.mjs";function Z(e,{edgePathsClass:n="edges edgePaths"}={}){let t=e.insert("g").attr("class","root"),r=t.insert("g").attr("class","clusters"),o=t.insert("g").attr("class",n),a=t.insert("g").attr("class","edgeLabels"),i=t.insert("g").attr("class","nodes");return{clusters:r,edgePaths:o,edgeLabels:a,nodes:i,rootGroups:t}}c(Z,"createLayoutElementGroups");async function I(e,n){if(n.label){let{shapeSvg:t,bbox:r}=await M(e,n);n.labelBBox={width:r.width,height:r.height},t.remove()}else n.labelBBox={width:0,height:0}}c(I,"measureGroupLabel");async function ee(e,n,t){let r=await X(e,n,t),o=r.node()?.getBBox()??{width:0,height:0};return n.width=o.width,n.height=o.height,r}c(ee,"insertMeasuredNode");async function A(e,n){let t=new w({multigraph:!0,compound:!0}),r=[...n.edges],o=N(),a=Z(e),{edgeLabels:i,nodes:d}=a,s=new Map,f=e.node()!=null;await Promise.all(n.nodes.map(async m=>{if(m.isGroup)f&&await I(d,m),t.setNode(m.id,{...m});else{if(f){let b=await ee(d,m,{config:o,dir:m.dir});s.set(m.id,b)}t.setNode(m.id,{...m})}}));for(let m of r)f&&x(m)&&await E(i,m),t.setEdge(m.start,m.end,{...m},m.id),n.edges.some(h=>h.id===m.id)||n.edges.push(m);if(globalThis.mermaidCaptureSizes){let{captureNodeSizes:m}=await import("./sizeCapture-FGA5AGYP.mjs");m(e,n)}return{graph:t,groups:a,nodeElements:s}}c(A,"createGraphWithElements");var l=new Map,p=new Map,H=new Map,_=c(()=>{p.clear(),H.clear(),l.clear()},"clear"),C=c((e,n)=>{let t=p.get(n)||[];return u.trace("In isDescendant",n," ",e," = ",t.includes(e)),t.includes(e)},"isDescendant"),te=c((e,n)=>{let t=p.get(n)||[];return u.info("Descendants of ",n," is ",t),u.info("Edge is ",e),e.v===n||e.w===n?!1:t?t.includes(e.v)||C(e.v,n)||C(e.w,n)||t.includes(e.w):(u.debug("Tilt, ",n,",not in descendants"),!1)},"edgeInCluster"),z=c((e,n,t,r)=>{u.debug("Copying children of ",e,"root",r,"data",n.node(e),r);let o=n.children(e)||[];e!==r&&o.push(e),u.debug("Copying (nodes) clusterId",e,"nodes",o),o.forEach(a=>{if(n.children(a).length>0)z(a,n,t,r);else{let i=n.node(a);u.info("cp ",a," to ",r," with parent ",e),t.setNode(a,i),r!==n.parent(a)&&(u.debug("Setting parent",a,n.parent(a)),t.setParent(a,n.parent(a))),e!==r&&a!==e?(u.debug("Setting parent",a,e),t.setParent(a,e)):(u.info("In copy ",e,"root",r,"data",n.node(e),r),u.debug("Not Setting parent for node=",a,"cluster!==rootId",e!==r,"node!==clusterId",a!==e));let d=n.edges(a);u.debug("Copying Edges",d),d.forEach(s=>{u.info("Edge",s);let f=n.edge(s.v,s.w,s.name);u.info("Edge data",f,r);try{te(s,r)?(u.info("Copying as ",s.v,s.w,f,s.name),t.setEdge(s.v,s.w,f,s.name),u.info("newGraph edges ",t.edges(),t.edge(t.edges()[0]))):u.info("Skipping copy of edge ",s.v,"-->",s.w," rootId: ",r," clusterId:",e)}catch(m){u.error(m)}})}u.debug("Removing node",a),n.removeNode(a)})},"copy"),W=c((e,n)=>{let t=n.children(e),r=[...t];for(let o of t)H.set(o,e),r=[...r,...W(o,n)];return r},"extractDescendants");var ne=c((e,n,t)=>{let r=e.edges().filter(s=>s.v===n||s.w===n),o=e.edges().filter(s=>s.v===t||s.w===t),a=r.map(s=>({v:s.v===n?t:s.v,w:s.w===n?n:s.w})),i=o.map(s=>({v:s.v,w:s.w}));return a.filter(s=>i.some(f=>s.v===f.v&&s.w===f.w))},"findCommonEdges"),P=c((e,n,t)=>{let r=n.children(e);if(u.trace("Searching children of id ",e,r),r.length<1)return e;let o;for(let a of r){let i=P(a,n,t),d=ne(n,t,i);if(i)if(d.length>0)o=i;else return i}return o},"findNonClusterChild"),F=c(e=>!l.has(e)||!l.get(e).externalConnections?e:l.has(e)?l.get(e).id:e,"getAnchorId"),xe=c((e,n)=>{if(!e||n>10){u.debug("Opting out, no graph ");return}else u.debug("Opting in, graph ");e.nodes().forEach(function(t){e.children(t).length>0&&(u.debug("Cluster identified",t," Replacement id in edges: ",P(t,e,t)),p.set(t,W(t,e)),l.set(t,{id:P(t,e,t),clusterData:e.node(t)}))}),e.nodes().forEach(function(t){let r=e.children(t),o=e.edges();r.length>0?(u.debug("Cluster identified",t,p),o.forEach(a=>{let i=C(a.v,t),d=C(a.w,t);i^d&&(u.debug("Edge: ",a," leaves cluster ",t),u.debug("Descendants of XXX ",t,": ",p.get(t)),l.get(t).externalConnections=!0)})):u.debug("Not a cluster ",t,p)});for(let t of l.keys()){let r=l.get(t).id,o=e.parent(r);o!==t&&l.has(o)&&!l.get(o).externalConnections&&(l.get(t).id=o);let a=e.edges().some(i=>i.v===t);if(r&&l.get(t)?.externalConnections&&a&&K(e,r,t)){let i=oe(e,t,e.parent(r));i&&(l.get(t).id=i)}}e.edges().forEach(function(t){let r=e.edge(t);u.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t)),u.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(e.edge(t)));let o=t.v,a=t.w;if(u.debug("Fix XXX",l,"ids:",t.v,t.w,"Translating: ",l.get(t.v)," --- ",l.get(t.w)),l.get(t.v)||l.get(t.w)){if(u.debug("Fixing and trying - removing XXX",t.v,t.w,t.name),o=F(t.v),a=F(t.w),e.removeEdge(t.v,t.w,t.name),o!==t.v){let i=e.parent(o);l.get(i).externalConnections=!0,r.fromCluster=t.v}if(a!==t.w){let i=e.parent(a);l.get(i).externalConnections=!0,r.toCluster=t.w}u.debug("Fix Replacing with XXX",o,a,t.name),e.setEdge(o,a,r,t.name)}}),J(e,0),u.trace(l)},"adjustClustersAndEdges"),J=c((e,n)=>{if(n>10){u.error("Bailing out");return}let t=e.nodes(),r=!1;for(let o of t){let a=e.children(o);r=r||a.length>0}if(!r){u.debug("Done, no node has children",e.nodes());return}u.debug("Nodes = ",t,n);for(let o of t)if(u.debug("Extracting node",o,l,l.has(o)&&!l.get(o).externalConnections,!e.parent(o),e.node(o),e.children("D")," Depth ",n),!l.has(o))u.debug("Not a cluster",o,n);else if(!l.get(o).externalConnections&&e.children(o)&&e.children(o).length>0){u.debug("Cluster without external connections, without a parent and with children",o,n);let i=e.graph().rankdir==="TB"?"LR":"TB";l.get(o)?.clusterData?.dir&&(i=l.get(o).clusterData.dir,u.debug("Fixing dir",l.get(o).clusterData.dir,i));let d=new w({multigraph:!0,compound:!0}).setGraph({rankdir:i,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});z(o,e,d,o),e.setNode(o,{clusterNode:!0,id:o,clusterData:l.get(o).clusterData,label:l.get(o).label,graph:d})}else u.debug("Cluster ** ",o," **not meeting the criteria !externalConnections:",!l.get(o).externalConnections," no parent: ",!e.parent(o)," children ",e.children(o)&&e.children(o).length>0,e.children("D"),n),u.debug(l);t=e.nodes(),u.debug("New list of nodes",t);for(let o of t){let a=e.node(o);u.debug(" Now next level",o,a),a?.clusterNode&&J(a.graph,n+1)}},"extractor"),q=c((e,n)=>{if(n.length===0)return[];let t=Object.assign([],n);return n.forEach(r=>{let o=e.children(r),a=q(e,o);t=[...t,...a]}),t},"sorter"),Ee=c(e=>q(e,e.children()),"sortNodesByHierarchy"),K=c((e,n,t)=>{let r=e.parent(n);for(;r&&r!==t;){let o=l.get(r);if(o&&!o.externalConnections)return!0;r=e.parent(r)}return!1},"isNodeInExtractableCluster"),oe=c((e,n,t)=>{let r=e.children(n)??[];for(let o of r){if(o===t||C(o,t))continue;let a=P(o,e,n);if(a&&!K(e,a,n))return a}return null},"findSafeAnchorNode");function Be({prepareLayout:e,measureLayout:n,runLayoutCore:t,paintLayout:r,afterPaint:o,paintOptions:a}){let i=n??ae;return c(async function(s,f,m,b){let h=f.select("g");(m?.insertMarkers??B)(h,s.markers,s.type,s.diagramId),re();let g={element:h,helpers:m,options:b};g.preparedLayout=await e?.(s,g);let U=await i(s,g),R=await t(s,g),D={...g,measure:U};r?await r(s,D,R):await se(s,D,a),await o?.(s,D,R)},"render")}c(Be,"createCommonLayoutRenderer");function re(){$(),T(),O(),_()}c(re,"clearLayoutRenderState");async function ae(e,{element:n}){return await A(n,e)}c(ae,"defaultMeasureLayout");async function se(e,n,t={}){let{measure:r}=n,{groups:o}=r;for(let i of t.getNodes?.(e,n)??e.nodes)t.skipNode?.(i,n)||await ie(o,i,n,t);let a=le(e.nodes);for(let i of e.edges)ce(i,t)||await de(o,i,a,e,t,n)}c(se,"paintLayoutData");async function ie(e,n,t,r){n.clusterNode?G(n):ue(n,t,r)?await V(e.clusters,n):G(n)}c(ie,"paintLayoutNode");function ue(e,n,t){return e.isGroup===!0&&(t.isCluster?.(e,n)??!0)}c(ue,"shouldPaintAsCluster");function le(e){let n=new Map;for(let t of e)t?.id&&n.set(t.id,t);return n}c(le,"buildNodeLookup");function ce(e,n){return e.isLayoutOnly||!!n.skipEdge?.(e)}c(ce,"shouldSkipPaintEdge");async function de(e,n,t,r,o,a){let i=j(e.edgePaths,{...n},o.clusterDb??new Map,r.type,Q(n.start,n,t,a,o),Q(n.end,n,t,a,o),r.diagramId,me(n,o));x(n)&&(S.has(n.id)||await E(e.edgeLabels,n),fe(n,i))}c(de,"paintLayoutEdge");function Q(e,n,t,r,o){return o.getEdgeNode?.(e,n,r)??(e?t.get(e)??{}:{})}c(Q,"getRenderedNode");function me(e,n){return typeof n.skipIntersect=="function"?n.skipIntersect(e):n.skipIntersect??!1}c(me,"shouldSkipIntersect");function fe(e,n){let t=n?.updatedPath??n?.originalPath,r=v(),{subGraphTitleTotalMargin:o}=k({flowchart:r.flowchart??{}});if(e.label){let a=S.get(e.id),i=e.x,d=e.y;if(t){let s=y.calcLabelPosition(t);u.debug("Moving label "+e.label+" from (",i,",",d,") to (",s.x,",",s.y,") abc88"),n?.updatedPath&&(i=s.x,d=s.y)}a.attr("transform",`translate(${i}, ${d+o/2})`)}if(e?.startLabelLeft){let a=L.get(e.id).startLeft,i=e?.x,d=e?.y;if(t){let s=y.calcTerminalLabelPosition(e.arrowTypeStart?10:0,"start_left",t);i=s.x,d=s.y}a.attr("transform",`translate(${i}, ${d})`)}if(e.startLabelRight){let a=L.get(e.id).startRight,i=e.x,d=e.y;if(t){let s=y.calcTerminalLabelPosition(e.arrowTypeStart?10:0,"start_right",t);i=s.x,d=s.y}a.attr("transform",`translate(${i}, ${d})`)}if(e.endLabelLeft){let a=L.get(e.id).endLeft,i=e.x,d=e.y;if(t){let s=y.calcTerminalLabelPosition(e.arrowTypeEnd?10:0,"end_left",t);i=s.x,d=s.y}a.attr("transform",`translate(${i}, ${d})`)}if(e.endLabelRight){let a=L.get(e.id).endRight,i=e.x,d=e.y;if(t){let s=y.calcTerminalLabelPosition(e.arrowTypeEnd?10:0,"end_right",t);i=s.x,d=s.y}a.attr("transform",`translate(${i}, ${d})`)}}c(fe,"positionRenderedEdgeLabel");export{Z as a,ee as b,l as c,P as d,xe as e,Ee as f,Be as g,re as h,ae as i,se as j};