UNPKG

mermaid

Version:

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

2 lines 114 kB
import{g as Jn}from"./chunk-WUBWJARI.mjs";import"./chunk-4CAJECRU.mjs";import"./chunk-ZQN7UHIL.mjs";import{a as In}from"./chunk-4OADUZ5Q.mjs";import"./chunk-VRZKL3EH.mjs";import"./chunk-Z6V44ARX.mjs";import"./chunk-5IMINLNL.mjs";import"./chunk-ZNLK7HRR.mjs";import"./chunk-DZP67EKU.mjs";import"./chunk-2NMSUPJH.mjs";import"./chunk-VY2OSTJR.mjs";import"./chunk-STOV2HOB.mjs";import"./chunk-QJSWEUOL.mjs";import{b as Bt}from"./chunk-H7VHZCWX.mjs";import{a as i}from"./chunk-AQ6EADP3.mjs";var qn=5,Vt=1e-5,Ut=1e-6;function Mn(e){let t=[];for(let n=0;n<e.length-1;n++)t.push({a:e[n],b:e[n+1]});return t}i(Mn,"buildSegmentList");function Ar(e,t,n,o){let r=t.x-e.x,s=t.y-e.y,a=o.x-n.x,m=o.y-n.y,l=r*m-s*a;if(l===0)return null;let d=n.x-e.x,f=n.y-e.y,y=(d*m-f*a)/l,E=(d*s-f*r)/l;return y<=Ut||y>=1-Ut||E<=Ut||E>=1-Ut?null:{point:{x:e.x+y*r,y:e.y+y*s},tA:y,tB:E}}i(Ar,"segmentIntersection");function Zn(e){return Math.abs(e.b.x-e.a.x)>=Math.abs(e.b.y-e.a.y)}i(Zn,"isHorizontalSeg");function vr(e){let t=[];for(let n=0;n<e.length;n++){let o=e[n],r=Mn(o.points);for(let s=n+1;s<e.length;s++){let a=e[s],m=Mn(a.points);for(let[l,d]of r.entries())for(let[f,y]of m.entries()){let E=Ar(d.a,d.b,y.a,y.b);if(!E)continue;let h=Zn(d),g=Zn(y);(h!==g?h:!1)?t.push({jumpEdgeId:o.id,otherEdgeId:a.id,segIndex:l,t:E.tA,point:E.point}):t.push({jumpEdgeId:a.id,otherEdgeId:o.id,segIndex:f,t:E.tB,point:E.point})}}}return t}i(vr,"findEdgeIntersections");function lt(e){let t=Math.round(e*1e3)/1e3;return Number.isInteger(t)?`${t}`:`${t}`}i(lt,"fmt");function kt(e){return`${lt(e.x)},${lt(e.y)}`}i(kt,"pointToString");function Br(e){let t=e.b.x-e.a.x,n=e.b.y-e.a.y;return Math.abs(t)>=Math.abs(n)?t>=0?1:0:n>=0?1:0}i(Br,"getArcSweepFlag");var kr=.001;function _r(e,t){if(e.length<2)return e.map(s=>({...s}));let n=e.map(s=>({...s})),o=t.arrowTypeStart&&In[t.arrowTypeStart];if(o){let s=e[0],a=e[1],m=Math.atan2(a.y-s.y,a.x-s.x);n[0].x=s.x+o*Math.cos(m),n[0].y=s.y+o*Math.sin(m)}let r=t.arrowTypeEnd&&In[t.arrowTypeEnd];if(r){let s=e.length,a=e[s-2],m=e[s-1],l=Math.atan2(m.y-a.y,m.x-a.x);n[s-1].x=m.x-r*Math.cos(l),n[s-1].y=m.y-r*Math.sin(l)}return n}i(_r,"applyMarkerOffsets");function Dr(e,t,n,o,r){let s=e.point.x,a=e.point.y,m={x:s-t*e.r,y:a-n*e.r},l={x:s+t*e.r,y:a+n*e.r},d=[`L${kt(m)}`];return r==="arc"?d.push(`A${lt(e.r)},${lt(e.r)} 0 0 ${o} ${kt(l)}`):d.push(`M${kt(l)}`),d}i(Dr,"emitJump");function Qn(e,t,n,o){let r=t.x-e.x,s=t.y-e.y,a=n.x-t.x,m=n.y-t.y,l=Math.hypot(r,s),d=Math.hypot(a,m);if(l<Vt||d<Vt)return null;let f=r/l,y=s/l,E=a/d,h=m/d,g=f*E+y*h,c=Math.max(-1,Math.min(1,g)),p=Math.acos(c);if(p<Vt||Math.abs(Math.PI-p)<Vt)return null;let S=Math.min(o/Math.sin(p/2),l/2,d/2);return{startX:t.x-f*S,startY:t.y-y*S,endX:t.x+E*S,endY:t.y+h*S,ctrlX:t.x,ctrlY:t.y,cutLen:S}}i(Qn,"computeRoundedCorner");function Fr(e,t,n){let o=e.points;if(o.length<2)return"";let r=_r(o,e),s=e.curve==="rounded",a=Mn(r),m=new Map;for(let d of t){let f=a[d.segIndex];if(!f)continue;let y=Math.hypot(f.b.x-f.a.x,f.b.y-f.a.y),E=m.get(d.segIndex)??[];E.push({t:d.t,point:d.point,d:d.t*y,r:n.jumpRadius}),m.set(d.segIndex,E)}let l=[`M${kt(r[0])}`];for(let d=0;d<a.length;d++){let f=a[d],y=Math.hypot(f.b.x-f.a.x,f.b.y-f.a.y),E=y===0?0:(f.b.x-f.a.x)/y,h=y===0?0:(f.b.y-f.a.y)/y,g=Br(f),c=0;if(s&&d>0){let N=Qn(r[d-1],r[d],r[d+1]??r[d],qn);N&&(c=N.cutLen)}let p=y,S=null;s&&d<a.length-1&&(S=Qn(r[d],r[d+1],r[d+2]??r[d+1],qn),S&&(p=y-S.cutLen));let I=[...m.get(d)??[]].sort((N,O)=>N.t-O.t);for(let N of I)N.r=Math.min(N.r,N.d-c,p-N.d);for(let N=0;N<I.length-1;N++){let O=I[N+1].d-I[N].d;if(I[N].r+I[N+1].r>O){let M=O/2;I[N].r=Math.min(I[N].r,M),I[N+1].r=Math.min(I[N+1].r,M)}}for(let N of I)N.r<kr||l.push(...Dr(N,E,h,g,n.jumpStyle));s&&S?(l.push(`L${lt(S.startX)},${lt(S.startY)}`),l.push(`Q${lt(S.ctrlX)},${lt(S.ctrlY)} ${lt(S.endX)},${lt(S.endY)}`)):l.push(`L${kt(f.b)}`)}return l.join(" ")}i(Fr,"rewriteEdgePath");function Gr(e){return/^[\d\s+,.LMelm-]*$/.test(e)}i(Gr,"isStraightPath");function zr(e){return e?e==="linear"||e==="rounded"||e==="step"||e==="stepBefore"||e==="stepAfter":!0}i(zr,"curveSupportsLineHops");function Hr(e){if(!e)return null;try{let t=typeof atob=="function"?atob(e):Buffer.from(e,"base64").toString(),n=JSON.parse(t);if(!Array.isArray(n))return null;let o=[];for(let r of n)r&&typeof r.x=="number"&&typeof r.y=="number"&&o.push({x:r.x,y:r.y});return o.length>=2?o:null}catch{return null}}i(Hr,"decodeDataPoints");function eo(e,t,n){if(!n.enabled)return;let o=e.node();if(!o)return;let r=new Map;for(let d of t)r.set(d.id,d);let s=[],a=new Map;for(let d of t){let f=typeof CSS<"u"&&CSS.escape?CSS.escape(d.id):d.id,y=o.querySelector(`path[data-id="${f}"]`);if(!y)continue;a.set(d.id,y);let h=Hr(y.getAttribute("data-points"))??d.points;s.push({...d,points:h})}let m=vr(s);if(m.length===0)return;let l=new Map;for(let d of m){let f=l.get(d.jumpEdgeId)??[];f.push(d),l.set(d.jumpEdgeId,f)}for(let d of s){let f=l.get(d.id);if(!f||f.length===0)continue;let E=r.get(d.id)?.curve;if(E!==void 0&&!zr(E))continue;let h=a.get(d.id);if(!h)continue;if(E===void 0){let N=h.getAttribute("d")??"";if(!Gr(N))continue}let g=h.getAttribute("style")??"",c=/stroke-dasharray\s*:\s*0\s+([\d.]+)\s+[\d.]+\s+([\d.]+)/.exec(g),p=c?Number.parseFloat(c[1]):null,S=c?Number.parseFloat(c[2]):null,I=Fr(d,f,n);if(h.setAttribute("d",I),p!==null&&S!==null&&typeof h.getTotalLength=="function"){let N=h.getTotalLength(),O=Math.max(0,N-p-S),M=`0 ${p} ${O} ${S}`,b=g.replace(/stroke-dasharray\s*:[^;]*;?/g,`stroke-dasharray: ${M};`).replace(/;\s*;+/g,";");h.setAttribute("style",b)}}}i(eo,"applyLineJumpsToSvg");function to(e,{measure:t}){let n=e.config?.swimlane?.lineHops;if(n===!1)return;let o=n==="gap"?"gap":"arc",r=e.edges.filter(s=>Array.isArray(s.points)&&s.points.length>=2).map(s=>({id:s.id,points:s.points,curve:s.curve,arrowTypeStart:s.arrowTypeStart,arrowTypeEnd:s.arrowTypeEnd}));eo(t.groups.edgePaths,r,{enabled:!0,jumpRadius:6,jumpStyle:o})}i(to,"applySwimlaneLineJumps");var Ln="__swimlane_default__";function no(e){return Math.max(e.padding??20,20)}i(no,"topLaneHorizontalPadding");function Xr(e){let{x:t,y:n,width:o,height:r}=e,s=e.swimlaneContentTop;if(typeof t!="number"||typeof n!="number"||typeof o!="number"||typeof r!="number"||typeof s!="number"||!Number.isFinite(t)||!Number.isFinite(n)||!Number.isFinite(o)||!Number.isFinite(r)||!Number.isFinite(s)||o<=0||r<=0){delete e.groupTitleRect;return}let a=n-r/2,m=Math.min(s,n+r/2),l=Math.min(21,Math.max(0,m-a)),d=a+l;if(d<=a){delete e.groupTitleRect;return}e.groupTitleRect={left:t-o/2,right:t+o/2,top:a,bottom:d}}i(Xr,"assignTopLaneTitleRect");function oo(e){let t=e.direction,n=e.nodes??=[];for(let s of e.nodes??[])s.isGroup&&!s.parentId&&(s.shape="swimlane",t&&(s.direction=t));let o=n.filter(s=>!s.isGroup&&!s.parentId);if(o.length===0)return;let r=n.find(s=>s.id===Ln);r?r.isGroup&&(r.shape="swimlane",t&&(r.direction=t)):(r={id:Ln,label:"",isGroup:!0,shape:"swimlane",padding:20,...t?{direction:t}:{}},n.push(r));for(let s of o)s.parentId=Ln}i(oo,"prepareLayoutForSwimlanes");function ro(e){let t=new Map;for(let l of e.nodes??[])t.set(l.id,l);let n=[];for(let l of e.edges??[]){let d=typeof l.start=="string"?l.start:void 0,f=typeof l.end=="string"?l.end:void 0;!d||!f||l.labelNodeId||n.push({id:l.id,src:d,dst:f,ref:l})}let o=e.nodes??[],r=o.filter(l=>l.isGroup),s=o.filter(l=>!l.isGroup);return{nodes:[...[...r].reverse(),...s].map(l=>l.id),edges:n,layout:e,nodeById:t}}i(ro,"toGraphView");function so(e,t,n,o){let{layout:r}=e,s=e.nodeById,a=o?.layerGap??100,m=o?.nodeGap??40,l=0;for(let E of t.layers){let h=0;for(let g of E){let c=s.get(g);if(!c){h++;continue}c.layer=l,c.order=h;let p=n.x[g]??h*m,S=n.y[g]??l*a;c.x=p,c.y=S,h++}l++}let d=r.nodes??[],f=new Map,y=[];for(let E of d){if(!E?.isGroup)continue;E.parentId||y.push(E);let h=d.filter(I=>I.parentId===E.id),g=1/0,c=-1/0,p=1/0,S=-1/0;for(let I of h){let N=I.x??n.x[I.id],O=I.y??n.y[I.id],M=I.width??0,b=I.height??0;N!=null&&O!=null&&(g=Math.min(g,N-M/2),c=Math.max(c,N+M/2),p=Math.min(p,O-b/2),S=Math.max(S,O+b/2))}if(g===1/0||p===1/0)E.x=E.x??0,E.y=E.y??0,E.width=E.width??0,E.height=E.height??0;else{let I=E.padding??20,N=E.parentId?I:2*no(E),O=I,M=Math.max(0,c-g)+N,b=Math.max(0,S-p)+O,P=(g+c)/2,w=(p+S)/2;E.x=P,E.y=w,E.width=M,E.height=b,f.set(E.id,{minX:g,maxX:c,minY:p,maxY:S})}}if(y.length>0&&f.size>0){let E=1/0,h=-1/0,g=0;for(let c of y){let p=c.padding??20;p>g&&(g=p);let S=f.get(c.id);S&&(E=Math.min(E,S.minY),h=Math.max(h,S.maxY))}if(E!==1/0&&h!==-1/0){let c=Math.max(0,h-E),S=Math.max(g,36),I=c+2*S,N=(E+h)/2;for(let B of y)B.y=N,B.height=I,B.swimlaneContentTop=E;let O=[...y].sort((B,T)=>{let D=B.x??0,_=T.x??0;return D-_}),M=[],b=[],P=[];for(let B of O){let T=f.get(B.id);if(!T)continue;let D=Math.max(0,T.maxX-T.minX)+2*no(B),_=(T.minX+T.maxX)/2;M.push(B.id),b.push(_),P.push(D)}let w=M.length;if(w>0){let B=new Map;if(w===1)B.set(M[0],P[0]);else{let T=[];for(let Y=0;Y<w-1;Y++)T.push(b[Y+1]-b[Y]);let D=new Array(w);D[0]=0;for(let Y=0;Y<w-1;Y++)D[Y+1]=2*T[Y]-D[Y];let _=0,v=Number.POSITIVE_INFINITY;for(let Y=0;Y<w;Y++){let K=P[Y];Y%2===0?_=Math.max(_,K-D[Y]):v=Math.min(v,D[Y]-K)}let z=_;_<=v?z=(_+v)/2:z=_;for(let Y=0;Y<w;Y++){let K=D[Y]+(Y%2===0?z:-z),ae=Math.max(P[Y],K);B.set(M[Y],ae)}}for(let T of y){let D=B.get(T.id);D!=null&&(T.width=D),Xr(T)}}}}}i(so,"writeBackToLayoutData");var Yr="[EdgeLabelNodes]";function io(e){let t=[],n=[],o=new Map;for(let a of e.nodes)o.set(a.id,a);for(let a of e.edges){if(!a.label||a.label.length===0||a.isLayoutOnly||a.labelNodeId)continue;let m=a.start?o.get(a.start):void 0,l=a.end?o.get(a.end):void 0;if(!m||!l){Bt.warn(Yr,`Edge ${a.id} has missing source or target node`);continue}let d=`edge-label-${a.start}-${a.end}-${a.id}`,y=m.parentId!==l.parentId?l.parentId:m.parentId,E={id:d,label:a.label,edgeStart:a.start??"",edgeEnd:a.end??"",shape:"labelRect",width:0,height:0,isEdgeLabel:!0,isDummy:!0,parentId:y,isGroup:!1,labelStyle:Array.isArray(a.labelStyle)?a.labelStyle[0]:a.labelStyle??"",...m.dir?{dir:m.dir}:{}};t.push(E),a.labelNodeId=d,a.label=void 0,a.text=void 0;let h={id:`${a.id}-to-label`,start:a.start,end:d,type:"normal",isLayoutOnly:!0},g={id:`${a.id}-from-label`,start:d,end:a.end,type:"normal",isLayoutOnly:!0};n.push(h,g)}let r=[...e.nodes,...t],s=[...e.edges,...n];return{...e,nodes:r,edges:s}}i(io,"createEdgeLabelNodes");function co(e){let t=e.x??0,n=e.y??0,o=e.width??0,r=e.height??0;return o>0&&r>0?{cx:t,cy:n,rect:Tt(t,n,o,r)}:void 0}i(co,"measuredNodeRect");function lo(e){if(e.isGroup)return;let t=co(e);return t?{id:String(e.id??""),cx:t.cx,cy:t.cy,rect:t.rect}:void 0}i(lo,"nodeBoundsInfoFor");function Je(e,t,n=.001){return Math.abs(e.x-t.x)<n&&Math.abs(e.y-t.y)<n}i(Je,"samePoint");function de(e,t,n=.001){return Math.abs(e.x-t.x)<n}i(de,"sameX");function fe(e,t,n=.001){return Math.abs(e.y-t.y)<n}i(fe,"sameY");function Re(e,t,n=.001){return fe(e,t,n)&&Math.abs(e.x-t.x)>n}i(Re,"isHorizontalSegment");function Pe(e,t,n=.001){return de(e,t,n)&&Math.abs(e.y-t.y)>n}i(Pe,"isVerticalSegment");function Xe(e,t,n,o){return Math.max(0,Math.min(Math.max(e,t),Math.max(n,o))-Math.max(Math.min(e,t),Math.min(n,o)))}i(Xe,"overlapLength");function it(e,t,n=.001){return e.horizontal&&t.horizontal&&fe(e.a,t.a,n)?Xe(e.a.x,e.b.x,t.a.x,t.b.x):e.vertical&&t.vertical&&de(e.a,t.a,n)?Xe(e.a.y,e.b.y,t.a.y,t.b.y):0}i(it,"sameAxisSegmentOverlapLength");function ht(e,t=.001){let n=[];for(let o=0;o<e.length-1;o++){let r=e[o],s=e[o+1],a=Re(r,s,t),m=Pe(r,s,t);(a||m)&&n.push({index:o,a:r,b:s,horizontal:a,vertical:m})}return n}i(ht,"orthogonalSegmentsForPoints");function qe(e,t=.001){let n=ht(e,t),o=0;for(let r=1;r<n.length;r++)n[r-1].horizontal!==n[r].horizontal&&o++;return o}i(qe,"countOrthogonalBends");function le(e,t=.001){let n=[];for(let o of e){let r=n.length>0?n[n.length-1]:void 0;(!r||!Je(r,o,t))&&n.push({x:o.x,y:o.y})}return n}i(le,"dedupeConsecutivePoints");function Wt(e,t=.001){if(!e||e.length!==4)return;let[n,o,r,s]=e;return Re(n,o,t)&&Pe(o,r,t)&&Re(r,s,t)?{kind:"HVH",p0:n,p1:o,p2:r,p3:s}:Pe(n,o,t)&&Re(o,r,t)&&Pe(r,s,t)?{kind:"VHV",p0:n,p1:o,p2:r,p3:s}:void 0}i(Wt,"classifyThreeSegmentRoute");function _t(e,t,n,o=0){let r=Math.min(e.x,t.x),s=Math.max(e.x,t.x),a=Math.min(e.y,t.y),m=Math.max(e.y,t.y);return s>n.left-o&&r<n.right+o&&m>n.top-o&&a<n.bottom+o}i(_t,"segmentBoundsOverlapRect");function Kt(e,t,n=0){return e.x>t.left+n&&e.x<t.right-n&&e.y>t.top+n&&e.y<t.bottom-n}i(Kt,"pointInsideRect");function uo(e,t){return e.left<=t.left&&e.right>=t.right&&e.top<=t.top&&e.bottom>=t.bottom}i(uo,"rectContainsRect");function Jt(e,t){return e.left<t.right&&e.right>t.left&&e.top<t.bottom&&e.bottom>t.top}i(Jt,"rectsOverlap");function Sn(e,t){return{left:e.left-t,right:e.right+t,top:e.top-t,bottom:e.bottom+t}}i(Sn,"inflateRect");function Tt(e,t,n,o){return{left:e-n/2,right:e+n/2,top:t-o/2,bottom:t+o/2}}i(Tt,"rectFromCenterSize");function _e(e){return co(e)?.rect}i(_e,"rectOfNodeBounds");function yt(e,t){switch(t){case"top":return{x:e.cx,y:e.rect.top};case"bottom":return{x:e.cx,y:e.rect.bottom};case"left":return{x:e.rect.left,y:e.cy};case"right":return{x:e.rect.right,y:e.cy}}}i(yt,"portForRectSide");function qt(e,t,n,o,r,s=.001){let a=t==="left"||t==="right",m=o==="left"||o==="right";if(a&&m){if(t==="right"&&o==="left"&&e.x<n.x||t==="left"&&o==="right"&&e.x>n.x){if(fe(e,n,s))return[e,n];let y=(e.x+n.x)/2;return[e,{x:y,y:e.y},{x:y,y:n.y},n]}if(t===o){if(fe(e,n,s))return;let y=t==="left"?Math.min(e.x,n.x)-r:Math.max(e.x,n.x)+r;return[e,{x:y,y:e.y},{x:y,y:n.y},n]}return}if(!a&&!m){if(t===o){if(de(e,n,s))return;let E=t==="top"?Math.min(e.y,n.y)-r:Math.max(e.y,n.y)+r;return[e,{x:e.x,y:E},{x:n.x,y:E},n]}if(!(t==="bottom"&&o==="top"&&e.y<n.y||t==="top"&&o==="bottom"&&e.y>n.y))return;if(de(e,n,s))return[e,n];let y=(e.y+n.y)/2;return[e,{x:e.x,y},{x:n.x,y},n]}if(a&&!m){let f=t==="right"&&n.x>e.x||t==="left"&&n.x<e.x,y=o==="top"&&e.y<n.y||o==="bottom"&&e.y>n.y;return f&&y?[e,{x:n.x,y:e.y},n]:void 0}let l=t==="bottom"&&n.y>e.y||t==="top"&&n.y<e.y,d=o==="left"&&e.x<n.x||o==="right"&&e.x>n.x;return l&&d?[e,{x:e.x,y:n.y},n]:void 0}i(qt,"buildOrthogonalPortPath");function Zt(e,t,n,o){return t==="left"||t==="right"?[e,{x:o,y:e.y},{x:o,y:n.y},n]:[e,{x:e.x,y:o},{x:n.x,y:o},n]}i(Zt,"buildSameSideTrackPath");function Ot(e){let t=new Map,n=[];for(let o of e){if(o.isEdgeLabel)continue;let r=lo(o);r&&(t.set(r.id,r),n.push({id:r.id,rect:r.rect}))}return{nodeInfoById:t,realNodeRects:n}}i(Ot,"collectRealNodeBounds");function ut(e){let t=[],n=[];for(let o of e){let r=lo(o);if(!r)continue;let s={id:r.id,rect:r.rect};o.isEdgeLabel?n.push(s):t.push(s)}return{realNodeRects:t,labelNodeRects:n}}i(ut,"collectNodeRectEntries");function fo(e,{includeEdgeLabels:t=!0}={}){let n=[];for(let o of e){if(o.isGroup||!t&&o.isEdgeLabel)continue;let r=o.x??0,s=o.y??0,a=o.width??0,m=o.height??0;n.push({nodeId:o.id,...Tt(r,s,a,m)})}return n}i(fo,"collectLayoutNodeRects");function Qt(e,t,n=.001){let o=e.start,r=e.end;if(!o||!r)return;let s=t.get(o),a=t.get(r);if(!(!s||!a))return{srcId:o,dstId:r,srcInfo:s,dstInfo:a,collinearX:Math.abs(s.cx-a.cx)<n,collinearY:Math.abs(s.cy-a.cy)<n}}i(Qt,"getNodePairGeometry");function Le(e,t,n,o=[],r=0){for(let s of n)if(!o.includes(s.id)&&_t(e,t,s.rect,-r))return!0;return!1}i(Le,"segmentHitsAnyRect");function Nn(e,t,n,o,r=.001,s=1e-6){let a=fe(e,t,r),m=de(e,t,r),l=fe(n,o,r),d=de(n,o,r);if(a&&l||m&&d||!(a||m)||!(l||d))return!1;let f=a?{a:e,b:t}:{a:n,b:o},y=m?{a:e,b:t}:{a:n,b:o},E=f.a.y,h=Math.min(f.a.x,f.b.x),g=Math.max(f.a.x,f.b.x),c=y.a.x,p=Math.min(y.a.y,y.b.y),S=Math.max(y.a.y,y.b.y);if(c<h||c>g||E<p||E>S)return!1;let I=Math.abs(c-f.a.x)<s&&Math.abs(E-f.a.y)<s||Math.abs(c-f.b.x)<s&&Math.abs(E-f.b.y)<s,N=Math.abs(c-y.a.x)<s&&Math.abs(E-y.a.y)<s||Math.abs(c-y.b.x)<s&&Math.abs(E-y.b.y)<s;return!(I&&N)}i(Nn,"orthogonalSegmentsCross");function $r(e,t,n,o,r=.001){let s=fe(e,t,r),a=de(e,t,r),m=fe(n,o,r),l=de(n,o,r);return a&&l&&de(e,n,r)?Xe(e.y,t.y,n.y,o.y)>r:s&&m&&fe(e,n,r)?Xe(e.x,t.x,n.x,o.x)>r:!1}i($r,"sameAxisSegmentsOverlap");function Dt(e,t,n,o,{epsilon:r=.001,skipDegenerateOther:s=!1}={}){for(let a of n){if(a===o||a.isLayoutOnly)continue;let m=a.points;if(!(!m||m.length<2))for(let l=0;l<m.length-1;l++){let d=m[l],f=m[l+1];if(!(s&&Je(d,f,r))&&(Nn(e,t,d,f,r)||$r(e,t,d,f,r)))return!0}}return!1}i(Dt,"segmentConflictsWithAnyEdge");function at(e,t,n,o,r=.001){let s=fe(e,t,r),a=de(e,t,r),m=fe(n,o,r),l=de(n,o,r);if(!(s&&l||a&&m))return!1;let d=s?{a:e,b:t}:{a:n,b:o},f=s?{a:n,b:o}:{a:e,b:t},y=d.a.y,E=Math.min(d.a.x,d.b.x),h=Math.max(d.a.x,d.b.x),g=f.a.x,c=Math.min(f.a.y,f.b.y),p=Math.max(f.a.y,f.b.y);return g>E+r&&g<h-r&&y>c+r&&y<p-r}i(at,"orthogonalSegmentsStrictlyCross");function ao(e,t,n){let o=Math.min(t,n),r=Math.max(t,n);return e>o+.001&&e<r-.001}i(ao,"strictlyBetween");function jr(e,t,n){return de(e,t)&&de(t,n)?ao(t.y,e.y,n.y):fe(e,t)&&fe(t,n)?ao(t.x,e.x,n.x):!1}i(jr,"isCollinearIntermediate");function Vr(e){let t=!1,n=[];for(let o=0;o<e.length;o++){let r=n[n.length-1],s=e[o],a=o+1<e.length?e[o+1]:void 0;if(r&&a){if(Je(r,a)){o++,t=!0;continue}if(jr(r,s,a)){t=!0;continue}}n.push(s)}return{points:n,changed:t}}i(Vr,"simplifyPolylineOnce");function Ft(e){let t=[e[0]];for(let o=1;o<e.length;o++){let r=t[t.length-1],s=e[o];if(!de(r,s)&&!fe(r,s)){let a=t.length>=2?t[t.length-2]:void 0,l=(a?de(a,r):!1)?{x:r.x,y:s.y}:{x:s.x,y:r.y};t.push(l)}t.push(s)}let n=[];for(let o of t){let r=n[n.length-1];(!r||!Je(r,o))&&n.push(o)}return n}i(Ft,"orthogonalizePolyline");function rt(e){if(e.length<3)return e;let t=[...e];for(let n=0;n<32;n++){let o=Vr(t);if(t=o.points,!o.changed)break}return t}i(rt,"simplifyPolyline");var ne=.001,Ur=.5,go=4;function So(e,t,n){let o=e;if(o.isLayoutOnly||!o.points||o.points.length<n)return;let r=o.start?t.get(o.start):void 0,s=o.end?t.get(o.end):void 0;return{edge:o,points:o.points,srcRect:r?_e(r):void 0,dstRect:s?_e(s):void 0}}i(So,"endpointContextFor");function Wr(e,t,n){if(fe(e,t,ne))return{x:e.x<n.left?n.left:n.right,y:e.y};if(de(e,t,ne)){let o=e.y<n.top?n.top:n.bottom;return{x:e.x,y:o}}return{x:Math.min(n.right,Math.max(n.left,e.x)),y:Math.min(n.bottom,Math.max(n.top,e.y))}}i(Wr,"segmentEnterPoint");function mo(e,t,n){let o=n?1:-1,r=n?0:e.length-1;for(;r>=0&&r<e.length&&Kt(e[r],t,Ur);)r+=o;if(r<0||r>=e.length)return e;let s=r-o;if(s<0||s>=e.length)return e;let a=Wr(e[r],e[s],t);return n?[a,...e.slice(r)]:[...e.slice(0,r+1),a]}i(mo,"clipEndpoint");function No(e,t){for(let n of e){let o=So(n,t,2);if(!o)continue;let r=[...o.points];o.srcRect&&(r=mo(r,o.srcRect,!0)),o.dstRect&&(r=mo(r,o.dstRect,!1)),r=rt(Ft(r)),r=Eo(r,o.srcRect,o.dstRect),o.edge.points=rt(Ft(r))}}i(No,"clipEdgeEndpointsToNodeBoundaries");function po(e,t,n,o=!1){if(fe(e,t,ne)){if(t.y<n.top-ne||t.y>n.bottom+ne)return t;if(o){if(e.x<n.left-ne)return{x:n.left,y:e.y};if(e.x>n.right+ne)return{x:n.right,y:e.y}}return{x:Math.abs(t.x-n.left)<=Math.abs(t.x-n.right)?n.left:n.right,y:e.y}}if(de(e,t,ne)){if(t.x<n.left-ne||t.x>n.right+ne)return t;if(o){if(e.y<n.top-ne)return{x:e.x,y:n.top};if(e.y>n.bottom+ne)return{x:e.x,y:n.bottom}}let r=Math.abs(t.y-n.top)<=Math.abs(t.y-n.bottom);return{x:e.x,y:r?n.top:n.bottom}}return t}i(po,"snapEndpointToBoundary");function En(e,t,n){let o=e[t];for(let r=t+n;r>=0&&r<e.length;r+=n){let s=e[r];if(!Je(s,o,ne))return s}return e[t+n]}i(En,"firstDistinctAdjacent");function Rn(e,t){let n=e+go,o=t-go;return n<=o?{lo:n,hi:o}:{lo:(e+t)/2,hi:(e+t)/2}}i(Rn,"cornerClearanceRange");function ho(e,t,n){let{lo:o,hi:r}=Rn(t,n);return Math.min(r,Math.max(o,e))}i(ho,"clampToCornerClearance");function Kr(e){let t=Math.max(...e.map(o=>o.lo)),n=Math.min(...e.map(o=>o.hi));if(!(t>n))return{lo:t,hi:n}}i(Kr,"intersectRanges");function yo(e,t){return t==="left"||t==="right"?Rn(e.top,e.bottom):Rn(e.left,e.right)}i(yo,"clearanceRangeForSide");function Pn(e,t,n){let o=e.y>=n.top-ne&&e.y<=n.bottom+ne,r=e.x>=n.left-ne&&e.x<=n.right+ne;if(fe(e,t,ne)&&o){if(Math.abs(e.x-n.left)<ne)return"left";if(Math.abs(e.x-n.right)<ne)return"right"}if(de(e,t,ne)&&r){if(Math.abs(e.y-n.top)<ne)return"top";if(Math.abs(e.y-n.bottom)<ne)return"bottom"}}i(Pn,"terminalSideForSegment");function en(e){return e==="left"||e==="right"}i(en,"isHorizontalSide");function Jr(e,t,n,o,r){let s=[],a=n?Pn(e,t,n):void 0,m=o?Pn(t,e,o):void 0;return n&&a&&en(a)===r&&s.push(yo(n,a)),o&&m&&en(m)===r&&s.push(yo(o,m)),s.length>0?Kr(s):void 0}i(Jr,"straightClearanceRange");function xo(e,t,n,o,r){let s=Jr(e,t,n,o,r);if(!s)return;let a=r?e.y:e.x,m=Math.min(s.hi,Math.max(s.lo,a));if(!(Math.abs(m-a)<ne))return r?[{x:e.x,y:m},{x:t.x,y:m}]:[{x:m,y:e.y},{x:m,y:t.y}]}i(xo,"clearStraightEndpointCornerAxis");function Eo(e,t,n){if(e.length!==2)return e;let[o,r]=e;return fe(o,r,ne)?xo(o,r,t,n,!0)??e:de(o,r,ne)?xo(o,r,t,n,!1)??e:e}i(Eo,"clearStraightEndpointCornerConnections");function qr(e,t,n){return en(n)?{x:e.x,y:ho(e.y,t.top,t.bottom)}:{x:ho(e.x,t.left,t.right),y:e.y}}i(qr,"cornerClearedEndpoint");function Zr(e,t,n,o,r,s){let a=e.map(m=>({...m}));for(let m=t;m>=0&&m<e.length;m+=n){let l=e[m];if(s&&!fe(l,o,ne)||!s&&!de(l,o,ne))break;s?a[m].y=r.y:a[m].x=r.x}return a}i(Zr,"moveCollinearEndpointRun");function bo(e,t,n){if(e.length<2)return e;let o=n?0:e.length-1,r=n?1:-1,s=e[o],a=En(e,o,r);if(!a)return e;let m=Pn(s,a,t);if(!m)return e;let l=en(m),d=qr(s,t,m);return Je(s,d,ne)?e:Zr(e,o,r,s,d,l)}i(bo,"clearEndpointCornerConnection");function Io(e,t,n){let o=Math.min(e.x,t.x)>=n.left-ne&&Math.max(e.x,t.x)<=n.right+ne,r=Math.min(e.y,t.y)>=n.top-ne&&Math.max(e.y,t.y)<=n.bottom+ne;if(Math.abs(e.y-n.top)<ne&&Math.abs(t.y-n.top)<ne&&o)return"top";if(Math.abs(e.y-n.bottom)<ne&&Math.abs(t.y-n.bottom)<ne&&o)return"bottom";if(Math.abs(e.x-n.left)<ne&&Math.abs(t.x-n.left)<ne&&r)return"left";if(Math.abs(e.x-n.right)<ne&&Math.abs(t.x-n.right)<ne&&r)return"right"}i(Io,"borderSideForSegment");function Mo(e,t,n,o){switch(e){case"top":return de(t,n,ne)&&n.y<o.top-ne;case"bottom":return de(t,n,ne)&&n.y>o.bottom+ne;case"left":return fe(t,n,ne)&&n.x<o.left-ne;case"right":return fe(t,n,ne)&&n.x>o.right+ne}}i(Mo,"leavesOutward");function Lo(e,t,n){if(e.length<3)return e;if(n){let s=Io(e[0],e[1],t);return s&&Mo(s,e[1],e[2],t)?e.slice(1):e}let o=e.length-1,r=Io(e[o-1],e[o],t);return r&&Mo(r,e[o-1],e[o-2],t)?e.slice(0,o):e}i(Lo,"collapseOwnBorderStub");function Qr(e,t,n){let o=e;if(t){let s=En(o,0,1);if(s){let a=po(s,o[0],t);a!==o[0]&&(o=[a,...o.slice(1)])}o=Lo(o,t,!0)}if(n){let s=o.length-1,a=En(o,s,-1);if(a){let m=po(a,o[s],n,!0);m!==o[s]&&(o=[...o.slice(0,s),m])}o=Lo(o,n,!1)}let r=Eo(o,t,n);return r!==o||o.length===2?r:(t&&(o=bo(o,t,!0)),n&&(o=bo(o,n,!1)),o)}i(Qr,"snapAndCollapseEndpoints");function Cn(e,t){for(let n of e){let o=So(n,t,2);if(!o)continue;let r=le(o.points,ne),s=Qr(r,o.srcRect,o.dstRect);if(s.length<3){o.edge.points=s;continue}let a=[s[0],{...s[0]},...s.slice(1,-1),s[s.length-1],{...s[s.length-1]}];o.edge.points=a}}i(Cn,"prepareEdgeEndpointsForRenderer");function Po(e){return new Map(e.map(t=>[t.id,t]))}i(Po,"buildNodeMap");function es(e,t){let n=e.parentId,o=null;for(;n;){let r=t.get(n);if(!r?.isGroup)break;o=r.id,n=r.parentId}return o}i(es,"resolveTopLevelGroupId");function Ro(e,t){let n=0,o=e.parentId;for(;o;){let r=t.get(o);if(!r?.isGroup)break;n++,o=r.parentId}return n}i(Ro,"groupDepth");function Co(e){let t=1/0,n=-1/0,o=1/0,r=-1/0;for(let s of e){let a=s.x,m=s.y;if(typeof a!="number"||typeof m!="number")continue;let l=s.width??0,d=s.height??0;t=Math.min(t,a-l/2),n=Math.max(n,a+l/2),o=Math.min(o,m-d/2),r=Math.max(r,m+d/2)}return t===1/0||o===1/0?null:{minX:t,maxX:n,minY:o,maxY:r}}i(Co,"boundsForChildren");function ts(e,t){let n=e.padding??20;e.x=(t.minX+t.maxX)/2,e.y=(t.minY+t.maxY)/2,e.width=Math.max(0,t.maxX-t.minX)+n,e.height=Math.max(0,t.maxY-t.minY)+n}i(ts,"applyGroupBounds");function ns(e){let t=Po(e),n=e.filter(o=>o.isGroup&&o.parentId).sort((o,r)=>Ro(r,t)-Ro(o,t));for(let o of n){let r=e.filter(a=>a.parentId===o.id),s=Co(r);s&&ts(o,s)}}i(ns,"recomputeNestedGroupBounds");function Tn(e,t){let n=e.nodes??[],o=e.edges??[],r=n.filter(l=>!l.isGroup),s=1/0,a=-1/0;for(let l of r){let d=l[t];typeof d=="number"&&(s=Math.min(s,d),a=Math.max(a,d))}if(!Number.isFinite(s)||!Number.isFinite(a))return!1;let m=i(l=>s+a-l,"mirror");for(let l of n){let d=l[t];typeof d=="number"&&(l[t]=m(d));let f=l.groupTitleRect;f&&(l.groupTitleRect=t==="x"?{...f,left:m(f.right),right:m(f.left)}:{...f,top:m(f.bottom),bottom:m(f.top)})}for(let l of o)for(let d of l.points??[])d[t]=m(d[t]);return!0}i(Tn,"mirrorAxis");function To(e){return(e.nodes??[]).some(n=>!n.isGroup)?Tn(e,"y"):!0}i(To,"applyBtDirectionTransform");function Oo(e,t="LR"){let n=e.nodes??[],o=e.edges??[],r=n.filter(v=>!v.isGroup),s=1/0,a=1/0;for(let v of r){let z=v.x??0,Y=v.y??0;z<s&&(s=z),Y<a&&(a=Y)}if(!Number.isFinite(s)||!Number.isFinite(a))return!1;let m=36,l=0,d=0;for(let v of r)l+=v.width??0,d+=v.height??0;let f=l/r.length,y=d/r.length,E=y>0?Math.max(1,f/y):1;for(let v of r){let z=v.x??0,K=((v.y??0)-a)*E+m,ae=z-s;v.x=K,v.y=ae}for(let v of o)if(v.points)for(let z of v.points){let Y=z.x,ae=(z.y-a)*E+m,he=Y-s;z.x=ae,z.y=he}ns(n);let h=n.filter(v=>v.isGroup&&!v.parentId);if(h.length===0)return t==="RL"&&Tn(e,"x"),!0;let g=Po(n),c=new Map;for(let v of n){if(v.isGroup)continue;let z=es(v,g);if(!z)continue;let Y=c.get(z)??[];Y.push(v),c.set(z,Y)}let p=0;for(let v of h){let z=v.padding??0;z>p&&(p=z)}let S=[],I=1/0,N=-1/0;for(let v of h){let z=c.get(v.id)??[],Y=Co(z);Y&&(I=Math.min(I,Y.minX),N=Math.max(N,Y.maxX),S.push({lane:v,contentTop:Y.minY,contentBottom:Y.maxY,centerY:(Y.minY+Y.maxY)/2}))}if(I===1/0||N===-1/0)return!0;let O=Math.max(0,N-I),M=Math.max(p,10),b=O+2*M,P=m+b,T=(I+N)/2-b/2-m,D=T+P/2,_=Math.max(p,m);S.sort((v,z)=>v.centerY-z.centerY);for(let v=0;v<S.length;v++){let z=S[v],Y,K;if(v===0?Y=z.contentTop-_:Y=(S[v-1].contentBottom+z.contentTop)/2,v===S.length-1)K=z.contentBottom+_;else{let Oe=S[v+1];K=(z.contentBottom+Oe.contentTop)/2}let ae=Math.max(0,K-Y),he=(Y+K)/2;z.lane.x=D,z.lane.y=he,z.lane.width=P,z.lane.height=ae,z.lane.swimlaneContentTop=z.contentTop,z.lane.groupTitleRect={left:T,right:T+m,top:Y,bottom:K}}return t==="RL"&&Tn(e,"x"),!0}i(Oo,"applyLrDirectionTransform");var ct=1e-6,os=8,tn=os,rs=[0,tn,-tn,2*tn,-2*tn];function wo(e,t){let{nodeInfoById:n,realNodeRects:o}=Ot(t);for(let r of e){if(r.isLayoutOnly)continue;let s=r.points;if(!s||s.length<4)continue;let a=Wt(le(s,ct),ct);if(!a)continue;let{p3:m}=a,l=a.kind==="HVH",d=Qt(r,n,ct);if(!d)continue;let{srcId:f,dstId:y,srcInfo:E,dstInfo:h,collinearX:g,collinearY:c}=d;if(g||c)continue;let p,S=E.rect;for(let I of rs){let N,O,M;if(l){let D=h.cy>E.cy?S.bottom:S.top,_=E.cx+I;if(_<=S.left+ct||_>=S.right-ct)continue;N={x:_,y:D},O={x:_,y:m.y},M={x:m.x,y:m.y}}else{let D=h.cx>E.cx?S.right:S.left,_=E.cy+I;if(_<=S.top+ct||_>=S.bottom-ct)continue;N={x:D,y:_},O={x:m.x,y:_},M={x:m.x,y:m.y}}let b=Je(N,O,ct),P=Je(O,M,ct);if(b&&P||!b&&Le(N,O,o,[f],1)||!P&&Le(O,M,o,[y],1))continue;let w=!b&&Dt(N,O,e,r,{epsilon:ct,skipDegenerateOther:!0}),B=!P&&Dt(O,M,e,r,{epsilon:ct,skipDegenerateOther:!0});if(!(w||B)){b?p=[O,M]:P?p=[N,O]:p=[N,O,M];break}}p&&(r.points=p)}}i(wo,"portSwapToLShape");function Ao(e,t){let{realNodeRects:s,labelNodeRects:a}=ut(t.values());for(let m of e){if(m.isLayoutOnly)continue;let l=m.points;if(!l||l.length<4)continue;let d=le(l,.001);if(d.length<4)continue;let f=d.length-1,y=d[f],E=d[f-1],h=d[f-2],g=y.x-E.x,c=y.y-E.y,p=Math.hypot(g,c);if(p>=10||p<.001)continue;let S=E.x-h.x,I=E.y-h.y;if(Math.hypot(S,I)<.001)continue;let O=Re(E,y,.001),M=Pe(E,y,.001),b=Re(h,E,.001),P=Pe(h,E,.001);if(!(O&&P||M&&b))continue;let w=m.end,B=m.start,T=w?t.get(w):void 0;if(!T)continue;let D=T.x??0,_=T.y??0,v=_e(T);if(!v)continue;let z,Y;if(P){let W=I<0;z={x:D,y:h.y},Y={x:D,y:W?v.bottom:v.top}}else{let W=S>0;z={x:h.x,y:_},Y={x:W?v.right:v.left,y:_}}if(Le(z,Y,s,w?[w]:[],-2)||Le(z,Y,a,[],-2))continue;if(B){let W=t.get(B),te=W?_e(W):void 0;if(te&&Kt(z,te,2))continue}let K=i((W,te)=>`${W.x.toFixed(3)},${W.y.toFixed(3)}|${te.x.toFixed(3)},${te.y.toFixed(3)}`,"ownSegmentKey"),ae=new Set;for(let W=0;W<d.length-1;W++)ae.add(K(d[W],d[W+1]));let he=i((W,te)=>{for(let ue of e){if(ue===m||ue.isLayoutOnly)continue;let pe=ue.points;if(!(!pe||pe.length<2))for(let xe=0;xe<pe.length-1;xe++){let Ee=pe[xe],Ve=pe[xe+1];if(!ae.has(K(Ee,Ve))&&at(W,te,Ee,Ve,.001))return!0}}return!1},"segmentCrossesOtherEdge");if(he(z,Y))continue;if(f-3>=0){let W=d[f-3],te=[B,w].filter(ue=>!!ue);if(Le(W,z,s,te,-2)||he(W,z))continue}let Be=[...d.slice(0,f-2),z,Y];m.points=Be;let Q=m.labelNodeId;if(Q){let W=t.get(Q);if(W){let te=W.width??0,ue=W.height??0;if(te>0&&ue>0){let pe,xe,Ee=-1;for(let Ve=0;Ve<Be.length-1;Ve++){let Ue=Be[Ve],We=Be[Ve+1],nt=Math.hypot(We.x-Ue.x,We.y-Ue.y),Nt=fe(Ue,We,.001),ft=de(Ue,We,.001);(Nt&&nt>=te+2||ft&&nt>=ue+2)&&nt>Ee&&(Ee=nt,pe=(Ue.x+We.x)/2,xe=(Ue.y+We.y)/2)}pe!==void 0&&xe!==void 0&&(W.x=pe,W.y=xe)}}}}}i(Ao,"collapseShortTerminalStub");var Z=.001,De=8,ie=ht,On=i((e,t)=>de(e,t,Z)||fe(e,t,Z),"orthogonallyAligned");function vo(e,t){let r=i((h,g)=>{let c=h.x??0,p=h.y??0,S=g.x-c,I=g.y-p,N=(h.width??0)/2,O=(h.height??0)/2;return Math.abs(I)*N>Math.abs(S)*O?(I<0&&(O=-O),{x:c+(I===0?0:O*S/I),y:p+O}):(S<0&&(N=-N),{x:c+N,y:p+(S===0?0:N*I/S)})},"rectIntersect"),s=i((h,g)=>{let c=le(h.points??[]);if(c.length<2)return;let p=g?h.start:h.end,S=p?t.get(p):void 0,I=S?_e(S):void 0;if(!S||!p||!I)return;let N=g?c[0]:c[c.length-1],O=g?c[1]:c[c.length-2],M=r(S,N),b=N;if(On(O,M)&&(b=O),de(M,b,Z))return{edge:h,edgeId:String(h.id??""),nodeId:p,atStart:g,orientation:"V",coord:M.x,min:Math.min(M.y,b.y),max:Math.max(M.y,b.y),boundary:M,railEnd:b,rect:I};if(fe(M,b,Z))return{edge:h,edgeId:String(h.id??""),nodeId:p,atStart:g,orientation:"H",coord:M.y,min:Math.min(M.x,b.x),max:Math.max(M.x,b.x),boundary:M,railEnd:b,rect:I}},"terminalLaneFor"),a=i((h,g)=>Math.max(0,Math.min(h.max,g.max)-Math.max(h.min,g.min)),"projectedOverlapLength"),m=i((h,g)=>h.nodeId!==g.nodeId||h.orientation!==g.orientation?!1:h.orientation==="H"?(Math.abs(h.boundary.x-h.rect.left)<1||Math.abs(h.boundary.x-h.rect.right)<1)&&de(h.boundary,g.boundary,1):(Math.abs(h.boundary.y-h.rect.top)<1||Math.abs(h.boundary.y-h.rect.bottom)<1)&&fe(h.boundary,g.boundary,1),"sameTerminalFace"),l=i((h,g)=>h.nodeId!==g.nodeId||h.orientation!==g.orientation?!1:a(h,g)>=De&&Math.abs(h.coord-g.coord)<.5,"exactTerminalLaneConflict"),d=i((h,g)=>{if(h.nodeId!==g.nodeId||h.orientation!==g.orientation||h.orientation!=="H"||h.atStart===g.atStart)return!1;let c=a(h,g);if(c<De)return!1;let p=h.rect.bottom-h.rect.top;return c<p||c>2*p?!1:m(h,g)&&Math.abs(h.coord-g.coord)<16},"nearTerminalLaneConflict"),f=i((h,g)=>{let c=le(h.edge.points??[]);if(c.length<2)return;let p=h.orientation==="V"?{x:h.boundary.x+g,y:h.boundary.y}:{x:h.boundary.x,y:h.boundary.y+g},S=h.orientation==="V"?{x:h.railEnd.x+g,y:h.railEnd.y}:{x:h.railEnd.x,y:h.railEnd.y+g};if(!i(()=>Math.abs(h.boundary.y-h.rect.top)<1||Math.abs(h.boundary.y-h.rect.bottom)<1?fe(p,h.boundary,Z)&&p.x>=h.rect.left+1&&p.x<=h.rect.right-1:Math.abs(h.boundary.x-h.rect.left)<1||Math.abs(h.boundary.x-h.rect.right)<1?de(p,h.boundary,Z)&&p.y>=h.rect.top+1&&p.y<=h.rect.bottom-1:!1,"boundaryStaysOnSameFace")())return;if(h.atStart){let b=c.length>1&&Je(c[1],h.railEnd,Z),P=c.slice(b?2:1),w=P[0];return w&&!On(w,S)?void 0:[p,S,...P]}let N=c.length>1&&Je(c[c.length-2],h.railEnd,Z),O=c.slice(0,N?-2:-1),M=O[O.length-1];if(!(M&&!On(M,S)))return[...O,S,p]},"shiftedCandidate"),y=i(h=>{let g=h.edge,c=le(g.points??[]);if(c.length!==2)return!1;let p=g.start,S=g.end,I=p?t.get(p):void 0,N=S?t.get(S):void 0;if(!I||!N)return!1;let O=I.x??0,M=I.y??0,b=N.x??0,P=N.y??0,[w,B]=c;return fe(w,B,Z)&&Math.abs(M-P)<1&&Math.abs(O-b)>1||de(w,B,Z)&&Math.abs(O-b)<1&&Math.abs(M-P)>1},"laneIsStraightCollinearConnector"),E=[-7,7,-14,14,-21,21];for(let h=0;h<8;h++){let g=e.filter(p=>!p.isLayoutOnly).flatMap(p=>[s(p,!0),s(p,!1)]).filter(p=>!!p),c=!1;for(let p=0;p<g.length&&!c;p++)for(let S=p+1;S<g.length&&!c;S++){let I=g[p],N=g[S];if(I.edge===N.edge||!(l(I,N)||d(I,N)))continue;let O=!l(I,N),M=[I,N].sort((b,P)=>{let w=y(b),B=y(P);return w!==B?Number(w)-Number(B):+!P.atStart-+!b.atStart});for(let b of M){for(let P of E){let w=f(b,P);if(!w)continue;let B=s({...b.edge,points:w},b.atStart);if(!(!B||g.some(T=>T.edge!==b.edge&&(l(B,T)||O&&d(B,T))))){b.edge.points=w,c=!0;break}}if(c)break}}if(!c)return}}i(vo,"separateSharedRenderedTerminalLanes");function Bo(e,t){let{realNodeRects:r,labelNodeRects:s}=ut(t.values()),a=i((l,d)=>{let f=l.start,y=l.end,E=ie(d);if(E.length!==d.length-1)return!1;let h=[f,y].filter(g=>!!g);for(let g of E)if(Le(g.a,g.b,r,h,-2)||Le(g.a,g.b,s,[],-2))return!1;for(let g of e){if(g===l||g.isLayoutOnly)continue;let c=g.points;if(!(!c||c.length<2)){for(let p of E)for(let S of ie(le(c)))if(it(p,S,.5)>=De||at(p.a,p.b,S.a,S.b,Z))return!1}}return!0},"candidateIsSafe"),m=i((l,d)=>{if(d+4>=l.length)return;let f=l[d],y=l[d+1],E=l[d+2],h=l[d+3],g=l[d+4],c=Re(f,y)&&Pe(y,E)&&Re(E,h)&&Pe(h,g)&&de(f,h,Z)&&de(f,g,Z)&&de(y,E,Z)&&(y.x-f.x)*(h.x-E.x)<0,p=Pe(f,y)&&Re(y,E)&&Pe(E,h)&&Re(h,g)&&fe(f,h,Z)&&fe(f,g,Z)&&fe(y,E,Z)&&(y.y-f.y)*(h.y-E.y)<0;if(c||p)return le([...l.slice(0,d+1),g,...l.slice(d+5)]);if(d+5>=l.length)return;let S=l[d+5],I=Pe(f,y)&&Re(y,E)&&Pe(E,h)&&Re(h,g)&&Pe(g,S)&&de(f,g,Z)&&de(f,S,Z)&&de(E,h,Z)&&(E.x-y.x)*(g.x-h.x)<0,N=Re(f,y)&&Pe(y,E)&&Re(E,h)&&Pe(h,g)&&Re(g,S)&&fe(f,g,Z)&&fe(f,S,Z)&&fe(E,h,Z)&&(E.y-y.y)*(g.y-h.y)<0;if(!(!I&&!N))return le([...l.slice(0,d+1),S,...l.slice(d+6)])},"withoutDogleg");for(let l=0;l<8;l++){let d=!1;for(let f of e){if(f.isLayoutOnly)continue;let y=le(f.points??[]);for(let E=0;E<=y.length-5;E++){let h=m(y,E);if(!(!h||!a(f,h))){f.points=h,d=!0;break}}if(d)break}if(!d)return}}i(Bo,"collapseRedundantRectangularDoglegs");function wn(e,t){let{realNodeRects:s,labelNodeRects:a}=ut(t.values()),m=e.filter(g=>!g.isLayoutOnly),l=i((g,c,p)=>le(g===c?p??[]:g.points??[]),"pointsFor"),d=i((g,c)=>{let p=0;for(let S=0;S<m.length;S++){let I=ie(l(m[S],g,c));for(let N=S+1;N<m.length;N++){let O=ie(l(m[N],g,c));for(let M of I)for(let b of O)at(M.a,M.b,b.a,b.b,Z)&&p++}}return p},"strictCrossingCount"),f=i(g=>{let c=ie(g);if(c.length!==3)return;let p=c[1];if(!(c[0].horizontal===p.horizontal||c[2].horizontal===p.horizontal))return{index:p.index,horizontal:p.horizontal,vertical:p.vertical,segment:p}},"middleRail"),y=i((g,c)=>{let p=[g.start,g.end].filter(S=>!!S);return s.filter(S=>{if(p.includes(S.id))return!1;let I=S.rect;return c.horizontal?Xe(c.a.x,c.b.x,I.left,I.right)>=De&&c.a.y>=I.top-2&&c.a.y<=I.bottom+2:Xe(c.a.y,c.b.y,I.top,I.bottom)>=De&&c.a.x>=I.left-2&&c.a.x<=I.right+2})},"blockingRectsFor"),E=i((g,c,p)=>{let S=g.map(N=>({...N}));if(c.horizontal)S[c.index].y=p,S[c.index+1].y=p;else if(c.vertical)S[c.index].x=p,S[c.index+1].x=p;else return;let I=rt(le(S));return ie(I).length===I.length-1?I:void 0},"candidateByMovingRail"),h=i((g,c,p)=>{let S=[g.start,g.end].filter(N=>!!N),I=ie(c);if(I.length!==c.length-1)return!1;for(let N of I)if(Le(N.a,N.b,s,S,-2)||Le(N.a,N.b,a,[],-2))return!1;for(let N of m)if(N!==g){for(let O of I)for(let M of ie(l(N)))if(it(O,M,.5)>=De)return!1}return d(g,c)<=p},"candidateIsSafe");for(let g=0;g<8;g++){let c=d(),p=!1;for(let S of m){let I=l(S),N=f(I);if(!N)continue;let O=y(S,N.segment);if(O.length===0)continue;let M=N.horizontal?[Math.min(...O.map(b=>b.rect.top))-20,Math.max(...O.map(b=>b.rect.bottom))+20]:[Math.min(...O.map(b=>b.rect.left))-20,Math.max(...O.map(b=>b.rect.right))+20];for(let b of M){let P=E(I,N.segment,b);if(!(!P||!h(S,P,c))){S.points=P,p=!0;break}}if(p)break}if(!p)return}}i(wn,"liftObstacleHuggingSameSideRails");function An(e,t){let o=i(l=>{let d=l.groupTitleRect;if(!(!d||typeof d.left!="number"||typeof d.right!="number"||typeof d.top!="number"||typeof d.bottom!="number"||!Number.isFinite(d.left)||!Number.isFinite(d.right)||!Number.isFinite(d.top)||!Number.isFinite(d.bottom)||d.right<=d.left||d.bottom<=d.top))return{left:d.left,right:d.right,top:d.top,bottom:d.bottom}},"validTitleRect"),r=i(l=>{if(!l.isGroup||l.parentId)return;let d=l.direction,f=typeof d=="string"?d.toUpperCase():"";if(f==="LR"||f==="RL"||f==="BT")return;let y=o(l),E=l.y,h=l.height;if(!y||typeof E!="number"||typeof h!="number"||!Number.isFinite(E)||!Number.isFinite(h)||h<=0)return;let g=y.right-y.left,c=y.bottom-y.top;if(!(c<=0||g<c))return{node:l,rect:y}},"topLaneTitleFor"),s=i((l,d)=>{if(!l.horizontal)return!1;let f=l.a.y;return f<=d.top+Z||f>=d.bottom-Z?!1:Xe(l.a.x,l.b.x,d.left,d.right)>=De},"horizontalSegmentIntersectsTitle"),a=[...t.values()].map(r).filter(l=>!!l);if(a.length===0)return;let m=0;for(let l of e){if(l.isLayoutOnly)continue;let d=le(l.points??[]);for(let f of ie(d))for(let y of a)s(f,y.rect)&&(m=Math.max(m,y.rect.bottom-f.a.y+4))}if(!(m<=Z))for(let l of a){let d=l.node.y,f=l.node.height;typeof d!="number"||typeof f!="number"||!Number.isFinite(d)||!Number.isFinite(f)||f<=0||(l.node.y=d-m/2,l.node.height=f+m,l.node.groupTitleRect={...l.rect,top:l.rect.top-m,bottom:l.rect.bottom-m})}}i(An,"liftTopLaneTitleBandsAboveRails");function vn(e,t){let o=i(d=>{let f=d.groupTitleRect;if(!(!f||typeof f.left!="number"||typeof f.right!="number"||typeof f.top!="number"||typeof f.bottom!="number"||!Number.isFinite(f.left)||!Number.isFinite(f.right)||!Number.isFinite(f.top)||!Number.isFinite(f.bottom)||f.right<=f.left||f.bottom<=f.top))return{left:f.left,right:f.right,top:f.top,bottom:f.bottom}},"validTitleRect"),r=i(d=>{if(!d.isGroup||d.parentId||d.direction!=="LR")return;let y=o(d),E=d.x,h=d.width;if(!y||typeof E!="number"||typeof h!="number"||!Number.isFinite(E)||!Number.isFinite(h)||h<=0)return;let g=y.right-y.left,c=y.bottom-y.top;if(!(g<=0||c<g))return{node:d,rect:y}},"leftLaneTitleFor"),s=i((d,f)=>{if(!d.vertical)return!1;let y=d.a.x;return y<=f.left+Z||y>=f.right-Z?!1:Xe(d.a.y,d.b.y,f.top,f.bottom)>=De},"verticalSegmentIntersectsTitle"),a=i((d,f)=>{if(!d.horizontal)return!1;let y=d.a.y;return y<=f.top+Z||y>=f.bottom-Z?!1:Xe(d.a.x,d.b.x,f.left,f.right)>=De},"horizontalSegmentIntersectsTitle"),m=[...t.values()].map(r).filter(d=>!!d);if(m.length===0)return;let l=0;for(let d of e){if(d.isLayoutOnly)continue;let f=le(d.points??[]);for(let y of ie(f))for(let E of m)if(s(y,E.rect))l=Math.max(l,E.rect.right-y.a.x+4);else if(a(y,E.rect)){let h=Math.min(y.a.x,y.b.x);l=Math.max(l,E.rect.right-h+4)}}if(!(l<=Z))for(let d of m){let f=d.node.x,y=d.node.width;typeof f!="number"||typeof y!="number"||!Number.isFinite(f)||!Number.isFinite(y)||y<=0||(d.node.x=f-l/2,d.node.width=y+l,d.node.groupTitleRect={...d.rect,left:d.rect.left-l,right:d.rect.right-l})}}i(vn,"shiftLeftLaneTitleBandsLeftOfRails");function ko(e,t){let{realNodeRects:r}=ut(t.values()),s=e.filter(c=>!c.isLayoutOnly),a=i((c,p=new Map)=>le(p.get(c)??c.points??[]),"replacementPointsFor"),m=i((c=new Map)=>{let p=0;for(let S=0;S<s.length;S++){let I=ie(a(s[S],c));for(let N=S+1;N<s.length;N++){let O=ie(a(s[N],c));for(let M of I)for(let b of O)at(M.a,M.b,b.a,b.b,Z)&&p++}}return p},"crossingCount"),l=i((c=new Map)=>s.reduce((p,S)=>p+qe(a(S,c)),0),"totalBends"),d=i(c=>{let p=a(c);if(p.length<4)return;let S=p[p.length-2],I=p[p.length-1];if(!(!Re(S,I,Z)&&!Pe(S,I,Z)))return{tailStart:S,terminal:I}},"terminalTailFor"),f=i((c,p)=>{let S=a(c);if(S.length<3)return;let I=S[0],N=S[1],O;if(Re(I,N,Z))O={x:N.x,y:p.tailStart.y};else if(Pe(I,N,Z))O={x:p.tailStart.x,y:N.y};else return;let M=rt(le([I,N,O,p.tailStart,p.terminal]));return ie(M).length===M.length-1?M:void 0},"candidateWithDestinationTail"),y=i((c,p)=>{let S=[c.start,c.end].filter(I=>!!I);for(let I of ie(p))if(Le(I.a,I.b,r,S,-2))return!0;return!1},"pathHasNodeHit"),E=i((c,p,S)=>{for(let I of s)if(I!==c){for(let N of ie(p))for(let O of ie(a(I,S)))if(it(N,O,.5)>=De)return!0}return!1},"pathHasSharedTrack"),h=i((c,p,S)=>!y(c,p)&&!E(c,p,S),"candidateIsSafe"),g=i(()=>{let c=new Map;for(let p of s){let S=p.end;if(!S||!t.has(S)||a(p).length<4)continue;let N=c.get(S)??[];N.push(p),c.set(S,N)}return c},"edgesByDestination");for(let c=0;c<4;c++){let p=m();if(p===0)return;let S=l(),I,N=p,O=S;for(let M of g().values())for(let b=0;b<M.length;b++)for(let P=b+1;P<M.length;P++){let w=M[b],B=M[P],T=d(w),D=d(B);if(!T||!D)continue;let _=f(w,D),v=f(B,T);if(!_||!v)continue;let z=new Map([[w,_],[B,v]]);if(!h(w,_,z)||!h(B,v,z))continue;let Y=m(z),K=l(z);Y>=p||Y>N||Y===N&&K>=O||(I=z,N=Y,O=K)}if(!I)return;for(let[M,b]of I)M.points=b}}i(ko,"swapDestinationTerminalTailsToReduceCrossings");function _o(e,t){let{realNodeRects:a,labelNodeRects:m}=ut(t.values()),l=e.filter(M=>!M.isLayoutOnly),d=i((M,b=new Map)=>le(b.get(M)??M.points??[]),"replacementPointsFor"),f=i((M=new Map)=>{let b=0;for(let P=0;P<l.length;P++){let w=ie(d(l[P],M));for(let B=P+1;B<l.length;B++){let T=ie(d(l[B],M));for(let D of w)for(let _ of T)at(D.a,D.b,_.a,_.b,Z)&&b++}}return b},"strictCrossingCount"),y=i((M=new Map)=>l.reduce((b,P)=>b+qe(d(P,M)),0),"totalBends"),E=i(M=>{let b=M.start,P=M.end,w=b?t.get(b):void 0,B=P?t.get(P):void 0,T=w?_e(w):void 0,D=B?_e(B):void 0;return T&&D?{src:T,dst:D}:void 0},"endpointRectsFor"),h=i((M,b,P)=>{if(P.index<=0||P.index+1>=b.length-1)return;let w=E(M);if(w){if(P.vertical){let B=P.a.x,T=Math.min(w.src.left,w.dst.left),D=Math.max(w.src.right,w.dst.right),_=B<T-Z?"left":B>D+Z?"right":void 0;return _?{edge:M,points:b,segmentIndex:P.index,axis:"vertical",side:_,coord:B,min:Math.min(P.a.y,P.b.y),max:Math.max(P.a.y,P.b.y)}:void 0}if(P.horizontal){let B=P.a.y,T=Math.min(w.src.top,w.dst.top),D=Math.max(w.src.bottom,w.dst.bottom),_=B<T-Z?"top":B>D+Z?"bottom":void 0;return _?{edge:M,points:b,segmentIndex:P.index,axis:"horizontal",side:_,coord:B,min:Math.min(P.a.x,P.b.x),max:Math.max(P.a.x,P.b.x)}:void 0}}},"externalRailForSegment"),g=i(()=>{let M=[];for(let b of l){let P=d(b);for(let w of ie(P)){let B=h(b,P,w);B&&M.push(B)}}return M},"collectExternalRails"),c=i((M,b)=>M.edge!==b.edge&&M.axis===b.axis&&M.side===b.side&&Xe(M.min,M.max,b.min,b.max)>=De,"railsInteract"),p=i(M=>{let b=[],P=new Set;for(let w of M){if(P.has(w))continue;let B=[w],T=[];for(P.add(w);B.length>0;){let D=B.pop();T.push(D);for(let _ of M)!P.has(_)&&c(D,_)&&(P.add(_),B.push(_))}T.length>1&&b.push(T)}return b},"connectedComponents"),S=i(M=>{let b=[];for(let P of M)b.some(w=>Math.abs(w-P.coord)<Z)||b.push(P.coord);for(;b.length<M.length;){let P=Math.min(...b),w=Math.max(...b),B=M[0].side;b.push(B==="left"||B==="top"?P-12*(M.length-b.length):w+12*(M.length-b.length))}return b},"uniqueCoordsFor"),I=i(M=>{let b=M.map(B=>B.coord),P=S(M),w=[];if(M.length<=6){let B=new Array(P.length).fill(!1),T=[],D=i(()=>{if(T.length===M.length){T.some((_,v)=>Math.abs(_-b[v])>=Z)&&w.push([...T]);return}for(let[_,v]of P.entries())B[_]||(B[_]=!0,T.push(v),D(),T.pop(),B[_]=!1)},"visit");return D(),w}for(let B=0;B<b.length;B++)for(let T=B+1;T<b.length;T++){let D=[...b];[D[B],D[T]]=[D[T],D[B]],w.push(D)}return w},"coordinateAssignmentsFor"),N=i((M,b)=>{let P=new Map;for(let[B,T]of M.entries()){let D=b[B],_=P.get(T.edge)??T.points.map(v=>({x:v.x,y:v.y}));T.axis==="vertical"?(_[T.segmentIndex].x=D,_[T.segmentIndex+1].x=D):(_[T.segmentIndex].y=D,_[T.segmentIndex+1].y=D),P.set(T.edge,_)}let w=new Map;for(let[B,T]of P){let D=rt(le(T));if(ie(D).length!==D.length-1)return;w.set(B,D)}return w},"replacementsForAssignment"),O=i(M=>{for(let[b,P]of M){let w=[b.start,b.end].filter(B=>!!B);for(let B of ie(P))if(Le(B.a,B.b,a,w,-2)||Le(B.a,B.b,m,[],-2))return!1}for(let b=0;b<l.length;b++){let P=l[b],w=M.has(P),B=ie(d(P,M));for(let T=b+1;T<l.length;T++){let D=l[T];if(!w&&!M.has(D))continue;let _=ie(d(D,M));for(let v of B)for(let z of _)if(it(v,z,.5)>=De)return!1}}return!0},"candidateIsSafe");for(let M=0;M<4;M++){let b=f();if(b===0)return;let P,w=b,B=y(),T=Number.POSITIVE_INFINITY;for(let D of p(g()))for(let _ of I(D)){let v=N(D,_);if(!v||!O(v))continue;let z=f(v);if(z>=b)continue;let Y=y(v),K=D.reduce((ae,he,Oe)=>ae+Math.abs(_[Oe]-he.coord),0);z>w||z===w&&(Y>B||Y===B&&K>=T)||(P=v,w=z,B=Y,T=K)}if(!P)return;for(let[D,_]of P)D.points=_}}i(_o,"reassignCrossingExternalRailChannels");function Do(e,t){let{realNodeRects:r,labelNodeRects:s}=ut(t.values()),a=e.filter(g=>!g.isLayoutOnly),m=i((g,c,p)=>le(g===c?p??[]:g.points??[]),"pointsFor"),l=i(g=>ie(g).reduce((c,p)=>{let S=p.a.x-p.b.x,I=p.a.y-p.b.y;return c+Math.hypot(S,I)},0),"pathLength"),d=i((g,c)=>{let p=0;for(let S=0;S<a.length;S++){let I=ie(m(a[S],g,c));for(let N=S+1;N<a.length;N++){let O=ie(m(a[N],g,c));for(let M of I)for(let b of O)at(M.a,M.b,b.a,b.b,Z)&&p++}}return p},"strictCrossingCount"),f=i((g,c)=>{if(g.horizontal){let p=g.a.y;return(Math.abs(p-c.top)<1||Math.abs(p-c.bottom)<1)&&Xe(g.a.x,g.b.x,c.left,c.right)>=De}if(g.vertical){let p=g.a.x;return(Math.abs(p-c.left)<1||Math.abs(p-c.right)<1)&&Xe(g.a.y,g.b.y,c.top,c.bottom)>=De}return!1},"segmentRunsAlongRectBorder"),y=i(g=>{let c=[g.start,g.end].filter(S=>!!S),p=[];for(let S of c){let I=t.get(S),N=I?_e(I):void 0;N&&p.push(N)}return p},"endpointRectsFor"),E=i((g,c)=>{if(c+3>=g.length)return[];let p=g[c],S=g[c+1],I=g[c+2],N=g[c+3],O=Re(p,S,Z)&&Pe(S,I,Z)&&Re(I,N,Z),M=Pe(p,S,Z)&&Re(S,I,Z)&&Pe(I,N,Z);if(!O&&!M)return[];if(!(O?Math.sign(S.x-p.x)!==Math.sign(N.x-I.x):Math.sign(S.y-p.y)!==Math.sign(N.y-I.y)))return[];let P=de(p,N,Z)||fe(p,N,Z)?[]:[{x:p.x,y:N.y},{x:N.x,y:p.y}],w=P.length===0?[[...g.slice(0,c+1),...g.slice(c+3)]]:P.map(T=>[...g.slice(0,c+1),T,...g.slice(c+3)]),B=new Set;return w.map(T=>rt(le(T))).filter(T=>{if(ie(T).length!==T.length-1||!T.some(_=>Je(_,N,Z)))return!1;let D=T.map(_=>`${_.x.toFixed(3)},${_.y.toFixed(3)}`).join("|");return B.has(D)?!1:(B.add(D),!0)})},"shortcutCandidatesAt"),h=i((g,c,p)=>{let S=[g.start,g.end].filter(N=>!!N),I=y(g);for(let N of ie(c))if(Le(N.a,N.b,r,S,-2)||Le(N.a,N.b,s,[],-2)||I.some(O=>f(N,O)))return!1;for(let N of a)if(N!==g){for(let O of ie(c))for(let M of ie(m(N)))if(it(O,M,.5)>=De)return!1}return d(g,c)<=p},"candidateIsSafe");for(let g=0;g<8;g++){let c=d(),p,S,I=c,N=Number.POSITIVE_INFINITY,O=Number.POSITIVE_INFINITY;for(let M of a){let b=m(M),P=qe(b,Z),w=l(b);for(let B=0;B<=b.length-4;B++)for(let T of E(b,B)){let D=qe(T,Z),_=l(T);if(!(D<P||D===P&&_<w-Z)||!h(M,T,c))continue;let z=d(M,T);z>I||z===I&&(D>N||D===N&&_>=O)||(p=M,S=T,I=z,N=D,O=_)}}if(!p||!S)return;p.points=S}}i(Do,"shortcutRedundantOrthogonalJogs");function Fo(e,t){let a=[];for(let A of t.values()){if(A.isGroup||A.isEdgeLabel)continue;let F=A.x??0,G=A.y??0,V=_e(A);V&&a.push({id:String(A.id??""),cx:F,cy:G,rect:V})}if(a.length===0)return;let m=new Map(a.map(A=>[A.id,A])),l=a.map(A=>({id:A.id,rect:A.rect})),d=["top","bottom","left","right"],f={top:Math.min(...a.map(A=>A.rect.top))-20,bottom:Math.max(...a.map(A=>A.rect.bottom))+20,left:Math.min(...a.map(A=>A.rect.left))-20,right:Math.max(...a.map(A=>A.rect.right))+20},y=e.filter(A=>!A.isLayoutOnly),E=new Map(y.map((A,F)=>[A,F])),h=i(A=>{let F=A==="left"||A==="top"?-1:1,G=[];for(let V=0;V<=2;V++)G.push(f[A]+F*20*V);return G},"outwardTracksForSide"),g=i((A,F=new Map)=>le(F.get(A)??A.points??[]),"replacementPointsFor"),c=i((A,F)=>{let G=0;for(let V of A)for(let u of F)at(V.a,V.b,u.a,u.b,Z)&&G++;return G},"crossingCountBetweenSegments"),p=i((A,F)=>c(ie(A),ie(F)),"crossingCountBetweenPaths"),S=i((A=new Map)=>{let F=0,G=[],V=new Set,u=[],x=i(L=>{V.has(L)||(V.add(L),u.push(L))},"addEdge");for(let L=0;L<y.length;L++){let R=y[L],C=g(R,A);for(let k=L+1;k<y.length;k++){let U=y[k],q=p(C,g(U,A));q>0&&(F+=q,G.push({first:R,second:U,count:q}),x(R),x(U))}}return u.sort((L,R)=>(E.get(L)??0)-(E.get(R)??0)),{count:F,pairs:G,edgeSet:V,edges:u}},"crossingSnapshot"),I=i((A,F)=>{let G=new Set(F.keys());if(G.size===0)return A.count;let V=0;for(let x of A.pairs)(G.has(x.first)||G.has(x.second))&&(V+=x.count);let u=0;for(let x=0;x<y.length;x++){let L=y[x],R=G.has(L),C=g(L,F);for(let k=x+1;k<y.length;k++){let U=y[k];!R&&!G.has(U)||(u+=p(C,g(U,F)))}}return A.count-V+u},"crossingCountWithReplacements"),N=i(A=>{let F=new Map;for(let u of A.pairs){let x=F.get(u.first)??new Set;x.add(u.second),F.set(u.first,x);let L=F.get(u.second)??new Set;L.add(u.first),F.set(u.second,L)}let G=[],V=new Set;for(let u of A.edges){if(V.has(u))continue;let x=[u],L=[];for(V.add(u);x.length>0;){let R=x.pop();L.push(R);for(let C of F.get(R)??[])V.has(C)||(V.add(C),x.push(C))}L.sort((R,C)=>(E.get(R)??0)-(E.get(C)??0)),L.length>1&&G.push(L)}return G},"crossingComponents"),O=i(A=>[A.start,A.end].filter(F=>!!F),"endpointIdsFor"),M=i(A=>{let F=[];for(let G of N(A)){let V=new Set(G),u=new Set(G.flatMap(L=>O(L))),x=[...G];for(let L of y)V.has(L)||O(L).some(R=>u.has(R))&&x.push(L);x.sort((L,R)=>(E.get(L)??0)-(E.get(R)??0)),F.push(x)}return F},"pairSearchGroups"),b=i((A,F,G)=>I(A,new Map([[F,G]])),"crossingCountWithSingleReplacement"),P=i(A=>{let F=new Map;for(let G of A.pairs)F.set(G.first,(F.get(G.first)??0)+G.count),F.set(G.second,(F.get(G.second)??0)+G.count);return F},"currentCrossingsByEdge"),w=i(A=>A.slice(1).reduce((F,G,V)=>{let u=A[V];return F+Math.abs(G.x-u.x)+Math.abs(G.y-u.y)},0),"pathLength"),B=i((A=new Map)=>y.reduce((F,G)=>F+qe(g(G,A)),0),"totalBends"),T=i((A=new Map)=>y.reduce((F,G)=>F+w(g(G,A)),0),"totalLength"),D=i((A,F,G=new Map)=>{let V=ie(F);for(let u of y)if(u!==A){for(let x of V)for(let L of ie(g(u,G)))if(it(x,L,.5)>=De)return!0}return!1},"pathHasSegmentConflict"),_=i((A,F)=>{let G=[A.start,A.end].filter(V=>!!V);for(let V of ie(F))if(Le(V.a,V.b,l,G,-2))return!0;return!1},"pathHitsNode"),v=i((A,F)=>{let G=rt(le(F));ie(G).length===G.length-1&&A.push(G)},"pushOrthogonalCandidate"),z=i(A=>A==="left"||A==="right","sideIsHorizontal"),Y=i((A,F,G)=>{switch(F){case"left":return Math.min(A.x,G.x)-20;case"right":return Math.max(A.x,G.x)+20;case"top":return Math.min(A.y,G.y)-20;case"bottom":return Math.max(A.y,G.y)+20}},"localTrackForSameSide"),K=i((A,F,G,V)=>{let u=G==="left"||G==="top"?-1:1,x=[Y(F,G,V),f[G]];for(let L of x)for(let R=0;R<=2;R++)v(A,Zt(F,G,V,L+u*20*R))},"addSameSideCandidates"),ae=i((A,F,G,V,u)=>{for(let x of h(G))for(let L of h(u))v(A,[F,{x,y:F.y},{x,y:L},{x:V.x,y:L},V])},"addHorizontalToVerticalCandidates"),he=i((A,F,G,V,u)=>{for(let x of h(G))for(let L of h(u))v(A,[F,{x:F.x,y:x},{x:L,y:x},{x:L,y:V.y},V])},"addVerticalToHorizontalCandidates"),Oe=i((A,F,G,V,u)=>{let x=[...h("top"),...h("bottom")];for(let L of h(G))for(let R of h(u))for(let C of x)v(A,[F,{x:L,y:F.y},{x:L,y:C},{x:R,y:C},{x:R,y:V.y},V])},"addHorizontalPairCandidates"),Be=i((A,F,G,V,u)=>{let x=[...h("left"),...h("right")];for(let L of h(G))for(let R of h(u))for(let C of x)v(A,[F,{x:F.x,y:L},{x:C,y:L},{x:C,y:R},{x:V.x,y:R},V])},"addVerticalPairCandidates"),Q=i(A=>{let F=new Set;return A.map(G=>le(G)).filter(G=>{let V=G.map(u=>`${u.x.toFixed(3)},${u.y.toFixed(3)}`).join("|");return F.has(V)||G.length<2?!1:(F.add(V),!0)})},"dedupeCandidatePaths"),W=i((A,F,G,V)=>{let u=[],x=qt(A,F,G,V,20,Z);x&&v(u,x),F===V&&K(u,A,F,G);let L=z(F),R=z(V);return L&&!R?ae(u,A,F,G,V):!L&&R?he(u,A,F,G,V):L?Oe(u,A,F,G,V):Be(u,A,F,G,V),Q(u)},"buildCandidatesForSides"),te=i((A,F,G,V)=>{let u=[...h("left"),...h("right")],x=[...h("top"),...h("bottom")];for(let L of d){let R=yt(V,L),C=L==="top"||L==="bottom"?h(L):x;for(let k of u){v(A,[F,G,{x:k,y:G.y},{x:k,y:R.y},R]);for(let U of C)v(A,[F,G,{x:k,y:G.y},{x:k,y:U},{x:R.x,y:U},R])}}},"addVerticalDepartureOuterTrackCandidates"),ue=i((A,F,G,V)=>{let u=[...h("left"),...h("right")],x=[...h("top"),...h("bottom")];for(let L of d){let R=yt(V,L),C=L==="left"||L==="right"?h(L):u;for(let k of x){v(A,[F,G,{x:G.x,y:k},{x:R.x,y:k},R]);for(let U of C)v(A,[F,G,{x:G.x,y:k},{x:U,y:k},{x:U,y:R.y},R])}}},"addHorizontalDepartureOuterTrackCandidates"),pe=i(A=>{let F=A.start,G=A.end,V=G?m.get(G):void 0;if(!F||!V)return[];let u=le(A.points??[]);if(u.length<4)return[];let x=u[0],L=u[1],R=[];return Pe(x,L,Z)?te(R,x,L,V):Re(x,L,Z)&&ue(R,x,L,V),R},"terminalPreservingOuterTrackCandidates"),xe=i(A=>{let F=A.start,G=A.end,V=F?m.get(F):void 0,u=G?m.get(G):void 0;if(!V||!u)return[];let x=[];for(let L of d){let R=yt(V,L);for(let C of d)x.push(...W(R,L,yt(u,C),C))}return x.push(...pe(A)),x},"candidatePathsFor"),Ee=i(()=>new Map(y.map(A=>[A,ie(g(A))])),"currentSegmentsByEdge"),Ve=i((A,F,G)=>{let V=new Set;for(let u of y){if(u===A)continue;let x=G.get(u)??ie(g(u));F.some(L=>x.some(R=>it(L,R,.5)>=De))&&V.add(u)}return V},"sharedTrackConflictsFor"),Ue=i((A,F,G,V)=>{let u=new Set;return xe(A).map(L=>rt(le(L))).filter(L=>{if(_(A,L))return!1;let R=L.map(C=>`${C.x.toFixed(3)},${C.y.toFixed(3)}`).join("|");return u.has(R)||L.length<2?!1:(u.add(R),!0)}).map(L=>{let R=ie(L),C=0;for(let k of y)k!==A&&(C+=c(R,G.get(k)??ie(g(k))));return{candidate:L,candidateSegments:R,crossings:F.count-(V.get(A)??0)+C,bends:qe(L,Z),totalBends:qe(L),length:w(L)}}).filter(({crossings:L})=>L<=F.count).sort((L,R)=>L.crossings-R.crossings||L.bends-R.bends||L.length-R.length).slice(0,48).map(L=>({path:L.candidate,segments:L.candidateSegments,sharedTrackConflicts:Ve(A,L.candidateSegments,G),totalBends:L.totalBends,length:L.length}))},"pairCandidatesFor"),We=i((A,F,G,V,u,x)=>{let L=0;for(let C of A.pairs)(C.first===F||C.second===F||C.first===V||C.second===V)&&(L+=C.count);let R=c(G.segments,u.segments);for(let C of y){if(C===F||C===V)continue;let k=x.get(C)??ie(g(C));R+=c(G.segments,k)+c(u.segments,k)}return A.count-L+R},"pairCrossingCount"),nt=i((A,F)=>{for(let G of A.sharedTrackConflicts)if(G!==F)return!1;return!0},"conflictsOnlyWith"),Nt=i((A,F)=>A.segments.some(G=>F.segments.some(V=>it(G,V,.5)>=De)),"candidatesShareTrack"),ft=i((A,F,G,V)=>nt(F,G.edge)&&nt(V,A.edge)&&!Nt(F,V),"pairCandidatesAreCompatible"),Et=i((A,F,G,V,u)=>{let x=We(A.current,F.edge,G,V.edge,u,A.baseSegments);if(!(x>=A.current.count))return{replacements:new Map([[F.edge,G.path],[V.edge,u.path]]),crossings:x,bends:A.currentBends-(A.baseBendsByEdge.get(F.edge)??0)-(A.baseBendsByEdge.get(V.edge)??0)+G.totalBends+u.totalBends,length:A.currentLength-(A.baseLengthByEdge.get(F.edge)??0)-(A.baseLengthByEdge.get(V.edge)??0)+G.length+u.length}},"scorePairReplacement"),un=i((A,F)=>A.crossings<F.crossings||A.crossings===F.crossings&&(A.bends<F.bends||A.bends===F.bends&&A.length<F.length),"pairScoreIsBetter"),fn=i((A,F,G,V)=>{let u=V;for(let x of F.candidates)for(let L of G.candidates){if(!ft(F,x,G,L))continue;let R=Et(A,F,x,G,L);R&&un(R,u)&&(u=R)}return u},"bestScoreForOptionPair"),gn=i(A=>{let F=B(),G=T(),V=Ee(),u=P(A),x=new Map(y.map(q=>[q,qe(g(q))])),L=new Map(y.map(q=>[q,w(g(q))])),R=new Map,C=M(A);for(let q of C)for(let j of q){if(R.has(j))continue;let X=Ue(j,A,V,u);X.length>0&&R.set(j,{edge:j,candidates:X})}let k={replacements:new Map,crossings:A.count,bends:F,length:G},U={current:A,currentBends:F,currentLength:G,baseBendsByEdge:x,baseLengthByEdge:L,baseSegments:V};for(let q of C){let j=new Set(q.filter(oe=>A.edgeSet.has(oe))),X=q.map(oe=>R.get(oe)).filter(oe=>!!oe);for(let oe=0;oe<X.length;oe++){let se=X[oe];for(let re=oe+1;re<X.length;re++){let ee=X[re];!j.has(se.edge)&&!j.has(ee.edge)||(k=fn(U,se,ee,k))}}}return k.replacements.size>0?k.replacements:void 0},"bestPairedReplacement");for(let A=0;A<4;A++){let F=S(),G=F.count;if(G===0)return;let V,u,x=G,L=Number.POSITIVE_INFINITY;for(let C of F.edges){let k=qe(g(C),Z);for(let U of xe(C)){let q=_(C,U),j=!q&&D(C,U),X=b(F,C,U),oe=qe(U,Z);q||j||!(X<G||X===G&&oe<k)||X>x||X===x&&oe>=L||(V=C,u=U,x=X,L=oe)}}if(V&&u){V.points=u;continue}let R=gn(F);if(!R)return;for(let[C,k]of R)C.points=k}}i(Fo,"resolveRenderedOrthogonalCrossings");var xt=.001,ss=8;function Go(e,t){let{nodeInfoById:n,realNodeRects:o}=Ot(t),r=["top","bottom","left","right"],s=20,a={top:Math.min(...o.map(c=>c.rect.top))-s,bottom:Math.max(...o.map(c=>c.rect.bottom))+s,left:Math.min(...o.map(c=>c.rect.left))-s,right:Math.max(...o.map(c=>c.rect.right))+s},m=i((c,p,S,I)=>{let N=[],O=qt(c,p,S,I,s,xt);return O&&N.push(O),p===I&&N.push(Zt(c,p,S,a[p])),N},"buildOrthogonalPathCandidates"),l=i((c,p)=>{for(let S=0;S<c.length-1;S++){let I=c[S],N=c[S+1];if(Le(I,N,o,p,1))return!0}return!1},"pathHitsNode"),d=i((c,p,S=!1)=>{let I=0,N=ht(c,xt),O=p.start,M=p.end;for(let b of e){if(b===p||b.isLayoutOnly)continue;let P=b.start,w=b.end;if(!S&&O&&M&&(P===O||P===M||w===O||w===M))continue;let B=b.points;if(!(!B||B.length<2))for(let T of N)for(let D of ht(B,xt)){if(Nn(T.a,T.b,D.a,D.b,xt,xt)){I++;continue}it(T,D,xt)>=ss&&I++}}return I},"pathConflictCount"),f=4,y=i((c,p)=>{let S=Math.abs(c.y-p.rect.top),I=Math.abs(c.y-p.rect.bottom),N=Math.abs(c.x-p.rect.left),O=Math.abs(c.x-p.rect.right),M="top",b=S;return I<b&&(M="bottom",b=I),N<b&&(M="left",b=N),O<b&&(M="right",b=O),M},"nearestSideOfRect"),E=new Map,h=i((c,p,S)=>{let I=E.get(c)??[];I.push({side:p,edgeId:S}),E.set(c,I)},"addFaceClaim");for(let c of e){if(c.isLayoutOnly)continue;let p=c.points??[];if(p.length<1)continue;let S=c.id??"",I=c.start,N=c.end;if(I){let O=n.get(I);O&&h(I,y(p[0],O),S)}if(N){let O=n.get(N);O&&h(N,y(p[p.length-1],O),S)}}let g=i((c,p,S)=>E.get(c)?.some(I=>I.edgeId!==S&&I.side===p)??!1,"faceIsClaimed");for(let c of e){if(c.isLayoutOnly)continue;let p=c.points;if(!p||p.length<2)continue;let S=qe(p,xt);if(S<f)continue;let I=c.start,N=c.end;if(!I||!N)continue;let O=n.get(I),M=n.get(N);if(!O||!M)continue;let b=c.id??"",P=d(p,c,!0),w=d(p,c),B,T=P,D=S;for(let _ of r){if(g(I,_,b))continue;let v=yt(O,_);for(let z of r){if(g(N,z,b))continue;let Y=yt(M,z);for(let K of m(v,_,Y,z)){if(l(K,[I,N]))continue;let ae=qe(K,xt);if(P>0){let he=d(K,c,!0);if(he>T||he===T&&ae>=D)continue;T=he,D=ae,B=K;continue}d(K,c)>w||ae<D&&(D=ae,B=K)}}}if(B){c.points=B;let _=E.get(I);_&&E.set(I,_.filter(z=>z.edgeId!==b));let v=E.get(N);v&&E.set(N,v.filter(z=>z.edgeId!==b)),h(I,y(B[0],O),b),h(N,y(B[B.length-1],M),b)}}}i(Go,"simplifyDetouredEdges");var Ze=.001,zo=10,nn=7;function Ho(e,t){let n=t?0:e.length-1,o=t?1:-1,r=e[n],s=e[n+o];if(!r||!s)return;let a=s.x-r.x,m=s.y-r.y;if(!(Math.abs(a)+Math.abs(m)<Ze)){if(Math.abs(m)<=Ze){let d=r.x+Math.sign(a)*zo;return{left:Math.min(r.x,d),right:Math.max(r.x,d),top:r.y-nn,bottom:r.y+nn}}if(Math.abs(a)<=Ze){let d=r.y+Math.sign(m)*zo;return{left:r.x-nn,right:r.x+nn,top:Math.min(r.y,d),bottom:Math.max(r.y,d)}}return{left:Math.min(r.x,s.x),right:Math.max(r.x,s.x),top:Math.min(r.y,s.y),bottom:Math.max(r.y,s.y)}}}i(Ho,"markerClearanceRectFor");function is(e){return{left:Math.min(e.left,e.right),right:Math.max(e.left,e.right),top:Math.min(e.top,e.bottom),bottom:Math.max(e.top,e.bottom)}}i(is,"normalizeRect");function Xo(e,t){let n=le(t),o=Ho(n,!0),r=Ho(n,!1);return[o,r].some(s=>s&&Jt(e,is(s)))}i(Xo,"labelOverlapsOwnMarker");function on(e,t){let n=[];for(let g of e){if(g.isLayoutOnly)continue;let c=g.points;if(!(!c||c.length<2))for(let p=0;p<c.length-1;p++)n.push({edgeId:g.id,p1:c[p],p2:c[p+1]})}let o=[],r=[];for(let g of t.values()){let c=g.isGroup,p=g.parentId;if(c&&!p){let I=_e(g);I&&r.push({id:g.id,rect:I});continue}if(c||g.isEdgeLabel)continue;let S=_e(g);S&&o.push({nodeId:g.id,rect:S})}let s=3,a=1,m=12,l=i((g,c)=>{let p=Sn(c,s);for(let{nodeId:S,rect:I}of o)if(S!==g&&Jt(p,I))return!0;return!1},"labelOverlapsForeignNode"),d=i((g,c)=>{let p=Sn(c,s);for(let S of n)if(S.edgeId!==g&&_t(S.p1,S.p2,p))return!0;return!1},"labelOverlapsForeignEdge"),f=i((g,c,p)=>l(g,p)||d(c,p),"labelOverlapsAnything"),y=[],E=i(g=>{for(let{id:c,rect:p}of r)if(uo(p,g))return c},"findContainingLane"),h=i((g,c)=>y.some(p=>p.labelId!==g&&Jt(c,p.rect)),"overlapsPlacedLabel");for(let g of e){if(g.isLayoutOnly)continue;let c=g.labelNodeId;if(!c)continue;let p=t.get(c);if(!p)continue;let S=g.points;if(!S||S.length<2)continue;let I=p.width??0,N=p.height??0;if(I<=0||N<=0)continue;let O=[];for(let Q=0;Q<S.length-1;Q++){let W=S[Q],te=S[Q+1],ue=Math.abs(W.x-te.x),pe=Math.abs(W.y-te.y);ue<Ze&&pe<Ze||ue>=Ze&&pe>=Ze||O.push({idx:Q,length:ue+pe,orientation:ue>=Ze?"horizontal":"vertical",midX:(W.x+te.x)/2,midY:(W.y+te.y)/2})}if(O.length===0)continue;let M=O.length>=3?O.filter(Q=>Q.idx>0&&Q.idx<O.length-1):O,b=M.length>0?M:O,P=I>=N?"horizontal":"vertical",w=i(Q=>[...Q].sort((W,te)=>{let ue=W.orientation===P,pe=te.orientation===P;if(ue!==pe)return ue?-1:1;let xe=W.length>=(W.orientation==="horizontal"?I:N)+2,Ee=te.length>=(te.orientation==="horizontal"?I:N)+2;return xe!==Ee?xe?-1:1:te.length-W.length}),"rankSegments"),B=O[0],T=O[O.length-1],D=[.5,.25,.75,.05,.95,.15,.85,.1,.9],_=i((Q,W)=>{let te=S[Q.idx],ue=S[Q.idx+1];return{midX:te.x+(ue.x-te.x)*W,midY:te.y+(ue.y-te.y)*W}},"anchorAtT"),v=i((Q,W,te)=>Math.min(te,Math.max(W,Q)),"clamp"),z=i((Q,W)=>Q.midX>=W.left-Ze&&Q.midX<=W.right+Ze&&Q.midY>=W.top-Ze&&Q.midY<=W.bottom+Ze,"pointInsideRectInclusive"),Y=i(Q=>{let W=Tt(Q.midX,Q.midY,I,N),te=E(W);if(te)return{laneId:te,anchor:Q,rect:W};let ue=r.find(({rect:nt})=>z(Q,nt));if(!ue)return;let pe=ue.rect.left+I/2+a,xe=ue.rect.right-I/2-a,Ee=ue.rect.top+N/2+a,Ve=ue.rect.bottom-N/2-a;if(pe>xe||Ee>Ve)return;let Ue={midX:v(Q.midX,pe,xe),midY:v(Q.midY,Ee,Ve)},We=Tt(Ue.midX,Ue.midY,I,N);return z(Q,We)?{laneId:ue.id,anchor:Ue,rect:We}:void 0},"placementForAnchor"),K=i((Q,W,te)=>Q.orientation==="horizontal"?Math.abs(W.midX-te.x):Math.abs(W.midY-te.y),"distanceAlongSegment"),ae=i((Q,W)=>{let ue=(Q.orientation==="horizontal"?I/2:N/2)+m;if(Q===B){let pe=S[Q.idx];if(K(Q,W,pe)+Ze<ue)return!1}if(Q===T){let pe=S[Q.idx+1];if(K(Q,W,pe)+Ze<ue)return!1}return!0},"labelClearsTerminalEndpoints"),he=i(Q=>{let W=w(Q);for(let te of W)for(let ue of D){let pe=_(te,ue);if(!ae(te,pe))continue;let xe=Y(pe);if(xe&&!Xo(xe.rect,S)&&!h(c,xe.rect)&&!f(c,g.id,xe.rect))return{laneId:xe.laneId,anchor:xe.anchor}}},"tryPool"),Oe=i((Q,W,te=!1)=>{let ue=w(Q);for(let pe of ue){let xe={midX:pe.midX,midY:pe.midY};if(W&&!ae(pe,xe))continue;let Ee=Y(xe);if(Ee&&!Xo(Ee.rect,S)&&!h(c,Ee.rect)&&!l(c,Ee.rect)&&(te||!d(g.id,Ee.rect)))return{laneId:Ee.laneId,anchor:Ee.anchor}}},"findLaneContainingFallback"),Be=he(b)??(b.length<O.length?he(O):void 0)??Oe(O,!0)??Oe(O,!1)??Oe(O,!1,!0);if(Be){p.x=Be.anchor.midX,p.y=Be.anchor.midY,p.parentId=Be.laneId;let Q=Tt(Be.anchor.midX,Be.anchor.midY,I,N),W=y.findIndex(te=>te.labelId===c);W>=0?y[W]={labelId:c,rect:Q}:y.push({labelId:c,rect:Q})}}}i(on,"anchorLabelsToPolyline");var Bn=1e-6,as=8,Yo=as/2,cs=3;function $o(e,t){return e<t?`${e}::${t}`:`${t}::${e}`}i($o,"pairKey");function jo(e,t){let{nodeInfoById:n,realNodeRects:o}=Ot(t),r=new Map;for(let a of t){let m=a.id;if(!a.isGroup&&a.isEdgeLabel){r.set(m,{w:a.width??0,h:a.height??0});continue}}let s=i((a,m,l,d)=>{let f=$o(m,l),y=0,E=i(h=>{if(!h)return;let g=r.get(h);if(!g)return;let c=d==="x"?g.w/2:g.h/2;c>y&&(y=c)},"consider");E(a.labelNodeId);for(let h of e){if(h===a||h.isLayoutOnly)continue;let g=h.start,c=h.end;!g||!c||$o(g,c)===f&&E(h.labelNodeId)}return y>0?y+cs:0},"labelClearanceFor");for(let a of e){if(a.isLayoutOnly)continue;let m=a.points;if(!Wt(m,Bn))continue;let l=Qt(a,n,Bn);if(!l)continue;let{srcId:d,dstId:f,srcInfo:y,dstInfo:E,collinearX:h,collinearY:g}=l;if(h===g)continue;let c,p;if(h){let M=E.cy>y.cy;c={x:y.cx,y:M?y.rect.bottom:y.rect.top},p={x:E.cx,y:M?E.rect.top:E.rect.bottom}}else{let M=E.cx>y.cx;c={x:M?y.rect.right:y.rect.left,y:y.cy},p={x:M?E.rect.left:E.rect.right,y:E.cy}}if(Le(c,p,o,[d,f],1))continue;let I=s(a,d,f,h?"x":"y"),N=I>Yo?I:Yo,O=[0,N,-N];for(let M of O){let b={...c},P={...p};if(h){if(b.x+=M,P.x+=M,b.x<=y.rect.left||b.x>=y.rect.right||P.x<=E.rect.left||P.x>=E.rect.right)continue}else if(b.y+=M,P.y+=M,b.y<=y.rect.top||b.y>=y.rect.bottom||P.y<=E.rect.top||P.y>=E.rect.bottom)continue;if(!Le(b,P,o,[d,f],1)&&!Dt(b,P,e,a,{epsilon:Bn})){a.points=[b,P];break}}}}i(jo,"straightenCollinearSiblingDetours");function kn(e,t){let{realNodeRects:d,labelNodeRects:f}=ut(t.values()),y=i((b,P)=>ht(P,.001).map(w=>({...w,edge:b,interior:w.index>=1&&w.index<=P.length-3})),"segmentsFor"),E=i(()=>{let b=[];for(let P of e){if(P.isLayoutOnly)continue;let w=P.points;!w||w.length<2||b.push(...y(P,le(w)))}return b},"allSegments"),h=i((b,P)=>b.horizontal&&P.horizontal?Xe(b.a.x,b.b.x,P.a.x,P.b.x)>=8&&Math.abs(b.a.y-P.a.y)<7:b.vertical&&P.vertical?Xe(b.a.y,b.b.y,P.a.y,P.b.y)>=8&&Math.abs(b.a.x-P.a.x)<7:!1,"hasCrowdedParallelTrack"),g=i((b,P)=>{let w=b.start,B=b.end,T=y(b,P);if(T.length!==P.length-1)return!1;let D=[w,B].filter(v=>!!v),_=b.labelNodeId?[b.labelNodeId]:[];for(let v of T)if(Le(v.a,v.b,d,D,-2)||Le(v.a,v.b,f,_,-2))return!1;for(let v of e){if(v===b||v.isLayoutOnly)continue;let z=v.points;if(!(!z||z.length<2)){for(let Y of T)for(let K of y(v,le(z)))if(h(Y,K)||at(Y.a,Y.b,K.a,K.b,.001))return!1}}return!0},"candidateIsSafe"),c=i((b,P)=>{let w=le(b.edge.points??[]);if(w.length<4||b.index>=w.length-1)return;let B=w.map(T=>({...T}));if(b.horizontal)B[b.index].y+=P,B[b.index+1].y+=P;else if(b.vertical)B[b.index].x+=P,B[b.index+1].x+=P;else return;return y(b.edge,B).length===B.length-1?B:void 0},"shiftedCandidate"),p=i((b,P)=>({x:b.x??(P.left+P.right)/2,y:b.y??(P.top+P.bottom)/2}),"nodeCenter"),S=i(b=>{let P=b.edge,w=le(P.points??[]);if(w.length!==4||b.index!==1)return;let B=P.start?t.get(P.start):void 0,T=P.end?t.get(P.end):void 0,D=B?_e(B):void 0,_=T?_e(T):void 0,v=w.slice(b.index+2);if(!(!B||!T||!D||!_||v.length===0))return{sourceCenter:p(B,D),targetCenter:p(T,_),sourceRect:D,tail:v}},"sourceDetourContextFor"),I=i((b,P,w,B,T,D)=>{let _=B.y>=w.y,v=_?T.bottom:T.top,z=v+(_?20:-20);if(_&&b.b.y<=z+.001||!_&&b.b.y>=z-.001)return;let Y=b.a.x+P;return le([{x:w.x,y:v},{x:w.x,y:z},{x:Y,y:z},{x:Y,y:b.b.y},...D],.001)},"verticalSourceDetour"),N=i((b,P,w,B,T,D)=>{let _=B.x>=w.x,v=_?T.right:T.left,z=v+(_?20:-20);if(_&&b.b.x<=z+.001||!_&&b.b.x>=z-.001)return;let Y=b.a.y+P;return le([{x:v,y:w.y},{x:z,y:w.y},{x:z,y:Y},{x:b.b.x,y:Y},...D],.001)},"horizontalSourceDetour"),O=i((b,P)=>{let w=S(b);if(w){if(b.vertical)return I(b,P,w.sourceCenter,w.targetCenter,w.sourceRect,w.tail);if(b.horizontal)return N(b,P,w.sourceCenter,w.targetCenter,w.sourceRect,w.tail)}},"sourceDetourCandidate"),M=[-7,7,-14,14,-21,21];for(let b=0;b<12;b++){let P=E(),w=!1;for(let B=0;B<P.length&&!w;B++)for(let T=B+1;T<P.length&&!w;T++){let D=P[B],_=P[T];if(D.edge===_.edge||!h(D,_))continue;let v=[D,_].filter(z=>z.interior);for(let z of v){for(let Y of M){let K=c(z,Y);if(K&&g(z.edge,K)){z.edge.points=K,w=!0;break}let ae=O(z,Y);if(ae&&g(z.edge,ae)){z.edge.points=ae,w=!0;break}}if(w)break}}if(!w)return}}i(kn,"nudgeSharedInteriorSubpaths");function ds(e,t,n,o){let r=t.x-e.x,s=t.y-e.y,a=o.x-n.x,m=o.y-n.y,l=r*m-s*a;if(Math.abs(l)<1e-10)return!1;let d=n.x-e.x,f=n.y-e.y,y=(d*m-f*a)/l,E=(d*s-f*r)/l,h=.01;return y>h&&y<1-h&&E>h&&E<1-h}i(ds,"segmentsIntersect");function _n(e){let t=e.nodes??[],n=e.edges??[],o=[];if(!n.length||!t.length)return o;let r=fo(t),s=1,a=[];for(let l of n){if(l.isLayoutOnly)continue;let d=l.points;if(!d||d.length<2)continue;let f=l.start,y=l.end,E=l.labelNodeId,h=l.id??`${f}->${y}`;for(let g of r)if(!(g.nodeId===f||g.nodeId===y)&&!(E&&g.nodeId===E)){for(let c=0;c<d.length-1;c++)if(_t(d[c],d[c+1],g,-s)){o.push({type:"edge-node-overlap",edgeId:h,targetId:g.nodeId,detail:`segment ${c} passes through node "${g.nodeId}"`});break}}for(let g=0;g<d.length-1;g++)a.push({edgeId:h,start:f,end:y,p1:d[g],p2:d[g+1]})}let m=new Set;for(let l=0;l<a.length;l++)for(let d=l+1;d<a.length;d++){let f=a[l],y=a[d];if(f.edgeId!==y.edgeId&&!(f.start===y.start||f.start===y.end||f.end===y.start||f.end===y.end)&&ds(f.p1,f.p2,y.p1,y.p2)){let E=f.edgeId<y.edgeId?`${f.edgeId}|${y.edgeId}`:`${y.edgeId}|${f.edgeId}`;m.has(E)||(m.add(E),o.push({type:"edge-edge-crossing",edgeId:f.edgeId,targetId:y.edgeId,detail:`edges "${f.edgeId}" and "${y.edgeId}" cross`}))}}if(o.length>0){let l=o.filter(f=>f.type==="edge-node-overlap").length,d=o.filter(f=>f.type==="edge-edge-crossing").length;Bt.warn(`[SWIMLANE_VALIDATE] ${o.length} issue(s) detected: ${l} edge-node overlap(s), ${d} edge crossing(s)`);for(let f of o)Bt.warn(`[SWIMLANE_VALIDATE]   ${f.type}: ${f.detail}`)}return o}i(_n,"validateSwimlanesLayout");function Vo(e,t){let n=e.nodes??[],o=e.edges??[],r=n.filter(m=>!m.isGroup);if((t==="LR"||t==="RL")&&r.length>0&&!Oo(e,t)||t==="BT"&&r.length>0&&!To(e))return;for(let m of o){if(m.isLayoutOnly)continue;let l=m.points;!l||l.length<2||(m.points=rt(Ft(l)))}Go(o,n),jo(o,n),wo(o,n);let s=new Map;for(let m of n)s.set(String(m.id),m);on(o,s),No(o,s),Ao(o,s),kn(o,s),vo(o,s),Bo(o,s),wn(o,s),ko(o,s);let a=i(()=>{Fo(o,s),_o(o,s),Do(o,s),on(o,s),Cn(o,s),wn(o,s),on(o,s),Cn(o,s)},"finalizeRenderedEdges");a(),kn(o,s),a(),An(o,s),vn(o,s),An(o,s),vn(o,s)}i(Vo,"postProcessSwimlaneLayout");function Qe(e){let t=new Map(e.nodeById),n=new Set,o=[];for(let s of e.edges){if(!t.has(s.src)||!t.has(s.dst))continue;let a=`${s.id}:${s.src}->${s.dst}`;n.has(a)||(n.add(a),o.push(s))}return{nodes:[...t.keys()],edges:o,layout:e.layout,nodeById:t}}i(Qe,"normalizeGraph");function rn(e,t){return e.edges.filter(n=>n.dst===t)}i(rn,"incoming");function ls(e){let t=new Map;for(let n of e.nodes)t.set(n,[]);for(let n of e.edges)t.get(n.src).push(n.dst);return t}i(ls,"buildSuccessorMap");function Dn(e){let t=ls(e);for(let n of t.values())n.sort((o,r)=>o.localeCompare(r));return t}i(Dn,"buildSortedSuccessorMap");function Fn(e){let t=new Map;for(let n of e.nodes)t.set(n,0);for(let n of e.edges)t.set(n.dst,(t.get(n.dst)??0)+1);return t}i(Fn,"buildInDegreeMap");function Gn(e){return[...e.entries()].filter(([,t])=>t===0).map(([t])=>t).sort((t,n)=>t.localeCompare(n))}i(Gn,"sortedZeroInDegreeNodes");function wt(e,t=()=>!0){let n=new Map,o=new Map;for(let r of e.nodes)n.set(r,[]),o.set(r,[]);for(let r of e.edges)t(r)&&(o.get(r.src).push(r.dst),n.get(r.dst).push(r.src));return{preds:n,succs:o}}i(wt,"buildPredecessorSuccessorMaps");function sn(e,t,n,o){let r=0;for(let a of e.nodes)o?.skipGroups&&e.nodeById.get(a)?.isGroup||(r=Math.max(r,n[a]??0));let s=Array.from({length:r+1},()=>[]);for(let a of t)o?.skipGroups&&e.nodeById.get(a)?.isGroup||s[Math.max(0,n[a]??0)].push(a);return s}i(sn,"buildLayersFromRanks");function bt(e){let t=Fn(e),n=Gn(t),o=[],r=Dn(e);for(;n.length;){let s=n.shift();o.push(s);for(let a of r.get(s)??[])if(t.set(a,(t.get(a)??0)-1),(t.get(a)??0)===0){let m=0;for(;m<n.length&&n[m]<a;)m++;n.splice(m,0,a)}}return o.length===e.nodes.length?o:null}i(bt,"topoSortIfAcyclic");function Mt(e){let t=new Map,n=0;for(let o of e)t.set(o,n),n++;return t}i(Mt,"buildLayerIndex");function an(e){let t=new Array(e.length),n=i((o,r)=>{if(r-o<=1)return 0;let s=o+r>>1,a=n(o,s)+n(s,r),m=o,l=s,d=o;for(;m<s||l<r;)l>=r||m<s&&e[m]<=e[l]?t[d++]=e[m++]:(t[d++]=e[l++],a+=s-m);for(let f=o;f<r;f++)e[f]=t[f];return a},"count");return n(0,e.length)}i(an,"countInversions");function Uo(e){let t=Qe(e),n=new Map;for(let f of t.nodes)n.set(f,[]);for(let f of t.edges)n.get(f.src).push(f);for(let f of n.values())f.sort((y,E)=>y.dst===E.dst?y.id.localeCompare(E.id):y.dst.localeCompare(E.dst));let o=Object.create(null);for(let f of t.nodes)o[f]=0;let r=[],s=i(f=>{o[f]=1;for(let y of n.get(f)??[]){let E=y.dst;o[E]===0?s(E):o[E]===1&&r.push(y)}o[f]=2},"dfs"),a=[...t.nodes].sort((f,y)=>f.localeCompare(y));for(let f of a)o[f]===0&&s(f);let m=new Set(r.map(f=>`${f.id}:${f.src}->${f.dst}`)),l=t.edges.map(f=>m.has(`${f.id}:${f.src}->${f.dst}`)?{id:f.id,src:f.dst,dst:f.src,weight:f.weight,ref:f.ref}:f);return{acyclic:{nodes:[...t.nodes],edges:l,layout:t.layout,nodeById:new Map(t.nodeById)},reversed:r}}i(Uo,"removeCycles_DFS");function us(e){let t=new Map,n=i(o=>{if(t.has(o))return t.get(o);let r=e.nodeById.get(o);if(!r)return t.set(o,null),null;let s=r.parentId;if(!s)return t.set(o,null),null;let m=n(s)??s;return t.set(o,m),m},"resolve");for(let o of e.nodes)n(o);return t}i(us,"buildTopLaneMap");function Ye(e){let t=us(e);return n=>t.get(n)??null}i(Ye,"createTopLaneResolver");function cn(e){let t=[];for(let n of e.layout.nodes??[])n.isGroup&&!n.parentId&&t.push(n.id);return[...new Set(t)].reverse()}i(cn,"buildTopLaneOrder");function dn(e,t){let n=cn(e);if(!t||t.length===0)return n;let o=new Set(n),r=new Set,s=[];for(let a of t)!o.has(a)||r.has(a)||(r.add(a),s.push(a));for(let a of n)r.has(a)||s.push(a);return s}i(dn,"resolveTopLaneOrder");var Wo={EPSILON:1e-6},Lt={GRAVITY_ITERATIONS:8,MAX_CROSSING_OPTIMIZATION_PASSES:4,DEFAULT_COMPACT_SINGLE_INPUT:!0},zn={DEFAULT_LAYER_GAP:100,DEFAULT_NODE_GAP:40};function Ko(e,t){let n=Qe(e),o=t?.laneOf??(()=>null),r=t?.rankHint,{preds:s}=wt(n);for(let M of s.values())M.sort((b,P)=>b.localeCompare(P));let a=bt(n)??[...n.nodes].sort((M,b)=>M.localeCompare(b)),m=new Map;for(let[M,b]of a.entries())m.set(b,M);let l=new Map,d=new Map;for(let M of n.nodes)d.set(M,[]);for(let M of a){let b=(s.get(M)??[]).filter(P=>l.has(P));if(b.length>0){let P=fs(M,b,{laneOf:o,rankHint:r,topoIndex:m});l.set(M,P),d.get(P).push(M)}else l.has(M)||l.set(M,null)}for(let M of n.nodes)l.has(M)||l.set(M,null);let f=new Set;for(let M of n.nodes)(l.get(M)??null)===null&&f.add(M);let y=[...f].sort((M,b)=>{let P=m.get(M)??0,w=m.get(b)??0;return P===w?M.localeCompare(b):P-w}),E=gs(n),h=new Map;for(let[M,b]of E.entries())h.set(M,[...b].sort((P,w)=>P.localeCompare(w)));let g=ms(h),c=ps(h),p=new Map;for(let M of n.nodes)p.set(M,[]);for(let M of c)for(let b of M.nodes){let P=p.get(b);P?P.push(M.id):p.set(b,[M.id])}let S=[],I=[],N=new Set,O=i(M=>{if(!N.has(M)){N.add(M),S.push(M);for(let b of d.get(M)??[])O(b);I.push(M)}},"walk");for(let M of y)O(M);for(let M of a)O(M);return{parent:l,children:d,roots:y,componentOf:g,blocks:c,nodeBlocks:p,adjacency:h,preorder:S,postorder:I,topologicalOrder:a}}i(Ko,"buildDrivingTree");function fs(e,t,n){let o=n.laneOf(e);return[...t].sort((s,a)=>{let m=n.laneOf(s),l=n.laneOf(a),d=m!=null&&m===o,f=l!=null&&l===o;if(d!==f)return d?-1:1;let y=n.rankHint?.[s],E=n.rankHint?.[a];if(y!=null&&E!=null&&y!==E)return E-y;let h=n.topoIndex.get(s)??0,g=n.topoIndex.get(a)??0;return h!==g?h-g:s.localeCompare(a)})[0]}i(fs,"chooseParent");function gs(e){let t=new Map;for(let n of e.nodes)t.set(n,new Set);for(let n of e.edges)t.get(n.src).add(n.dst),t.get(n.dst).add(n.src);return t}i(gs,"buildAdjacency");function ms(e){let t=new Map,n=0;for(let o of e.keys()){if(t.has(o))continue;let r=[o];for(;r.length>0;){let s=r.pop();if(!t.has(s)){t.set(s,n);for(let a of e.get(s)??[])t.has(a)||r.push(a)}}n++}return t}i(ms,"assignComponents");function ps(e){let t=new Map,n=new Map,o=[],r=[],s=0,a=i((m,l)=>{t.set(m,++s),n.set(m,s);for(let d of e.get(m)??[])d!==l&&(t.has(d)?(t.get(d)??0)<(t.get(m)??0)&&(o.push([m,d]),n.set(m,Math.min(n.get(m)??s,t.get(d)??s))):(o.push([m,d]),a(d,m),n.set(m,Math.min(n.get(m)??s,n.get(d)??s)),(n.get(d)??0)>=(t.get(m)??0)&&r.push(hs(m,d,o,r.length))))},"visit");for(let m of e.keys())t.has(m)||a(m,null);return r}i(ps,"computeBlocks");function hs(e,t,n,o){let r=[],s=new Set;for(;n.length>0;){let a=n.pop();if(r.push(a),s.add(a[0]),s.add(a[1]),a[0]===e&&a[1]===t||a[0]===t&&a[1]===e)break}return{id:o,edges:r,nodes:[...s]}}i(hs,"popBlock");function Jo(e,t,n){let o=[...e.nodes],r=new Map;for(let[I,N]of o.entries())r.set(N,I);let s=o.length,a=new Array(s).fill(-1),m=new Array(s).fill(0),l=[],d=new Set;for(let I of o){let N=n.parent.get(I)??null,O=r.get(I);O!=null&&N==null&&(a[O]=-1,m[O]=0,d.has(I)||(d.add(I),l.push(I)))}for(;l.length>0;){let I=l.shift(),N=r.get(I);if(N==null)continue;let O=n.children.get(I)??[];for(let M of O){if(d.has(M))continue;let b=r.get(M);b!=null&&(a[b]=N,m[b]=m[N]+1,d.add(M),l.push(M))}}for(let I of o){if(d.has(I))continue;let N=r.get(I);N!=null&&(a[N]=-1,m[N]=0,d.add(I))}let f=Math.max(1,Math.ceil(Math.log2(Math.max(1,s)))+1),y=Array.from({length:f},()=>new Array(s).fill(-1));for(let I=0;I<s;I++)y[0][I]=a[I];for(let I=1;I<f;I++)for(let N=0;N<s;N++){let O=y[I-1][N];y[I][N]=O===-1?-1:y[I-1][O]}let E=i((I,N)=>{if(I===-1||N===-1)return-1;m[I]<m[N]&&([I,N]=[N,I]);let O=m[I]-m[N];for(let M=0;M<f;M++)if(O>>M&1&&(I=y[M][I],I===-1))return-1;if(I===N)return I;for(let M=f-1;M>=0;M--){let b=y[M][I],P=y[M][N];b===-1||P===-1||b!==P&&(I=b,N=P)}return y[0][I]},"lcaIndex"),h=Array.from({length:s},()=>new Map);for(let I of e.edges){let N=I.src,O=I.dst,M=t[N],b=t[O];if(M==null||b==null||(M>b&&([N,O]=[O,N],[M,b]=[b,M]),M==null||b==null||M===b))continue;let P=r.get(N),w=r.get(O);if(P==null||w==null)continue;let B=E(P,w);if(B===-1)continue;let T=h[B];for(let D=M;D<b;D++)T.set(D,(T.get(D)??0)+1)}let g=new Map,c=i((I,N)=>{if(N.size!==0)for(let[O,M]of N)I.set(O,(I.get(O)??0)+M)},"mergeInto"),p=new Set,S=i(I=>{let N=r.get(I);p.add(I);let O=N==null?void 0:h[N],M=O?new Map(O):new Map,b=n.children.get(I)??[];for(let P of b){let w=S(P),B=t[I];if(B!=null){let T=g.get(I);T||(T=new Map,g.set(I,T));let D=w.get(B)??0,_=t[P];_!=null&&_>B&&(D+=1),T.set(P,D)}c(M,w)}return M},"dfs");for(let I of n.roots)p.has(I)||S(I);for(let I of o)p.has(I)||S(I);return g}i(Jo,"computeSubtreeCrossCounts");function qo(e,t,n){let o=new Map,r=i(s=>{let a=n[s]??0,m=[...t.get(s)??[]];m.sort(Hn(n));for(let l of m){r(l);let d=o.get(l);d!=null&&(a=Math.min(a,d))}o.set(s,a)},"annotate");for(let s of e)r(s);return o}i(qo,"annotateMinimumLayers");function Hn(e){return(t,n)=>{let o=e[t]??0,r=e[n]??0;return o===r?t.localeCompare(n):o-r}}i(Hn,"compareByRankThenId");function Zo(e,t,n,o){let r=0;for(let l of t){let d=n[l]??0;d>r&&(r=d)}let s=Array.from({length:r+1},()=>[]),a=new Set,m=i(l=>{if(a.has(l))return;a.add(l);let d=n[l]??0;s[d]||(s[d]=[]),s[d].push(l);for(let f of o(l))m(f)},"emit");for(let l of e)m(l);for(let l of t)if(!a.has(l)){let d=n[l]??0;s[d]||(s[d]=[]),s[d].push(l),a.add(l)}return s}i(Zo,"emitNodesInTreeOrder");function Qo(e){let t=[];for(let n of e){let o=new Set,r=[];for(let s of n)o.has(s)||(o.add(s),r.push(s));t.push(r)}return t}i(Qo,"deduplicateLayers");function ys(e,t,n,o){return r=>{let s=e.get(r)??[];if(s.length===0)return[];let a=t[r]??0,m=[],l=[],d=n.get(r);for(let f of s){let y=o.get(f)??a;y>a?m.push({child:f,min:y}):l.push(f)}return m.sort((f,y)=>f.min===y.min?f.child.localeCompare(y.child):f.min-y.min),l.sort((f,y)=>{let E=d?.get(f)??0,h=d?.get(y)??0;if(E!==h)return E-h;let g=o.get(f)??a,c=o.get(y)??a;return g!==c?g-c:f.localeCompare(y)}),[...m.map(f=>f.child),...l]}}i(ys,"createChildOrderer");function Gt(e,t,n){let o=Ko(e,{rankHint:t,laneOf:n}),{children:r,roots:s}=o;for(let y of e.nodes)r.has(y)||r.set(y,[]);let a=Jo(e,t,o),m=[...s].sort(Hn(t)),l=qo(m,r,t),d=ys(r,t,a,l),f=Zo(m,e.nodes,t,d);return f=Qo(f),f}i(Gt,"buildMultitreeLayerOrder");function xs(e,t,n){let o=new Set(e),r=new Set(t),s=Mt(t),a=[];for(let m of n)o.has(m.src)&&r.has(m.dst)&&a.push(s.get(m.dst));return an(a)}i(xs,"countCrossingsBetweenAdjacent");function er(e,t,n){let o=[];for(let s of t){let a=n[s.src],m=n[s.dst];if(a==null||m==null||a===m)continue;let l=s.src,d=s.dst,f=a,y=m;a>m&&(l=s.dst,d=s.src,f=m,y=a);for(let E=f;E<y;E++)o.push({id:`${s.id}@${E}`,src:l,dst:d,ref:s.ref})}let r=0;for(let s=0;s+1<e.length;s++)r+=xs(e[s],e[s+1],o);return r}i(er,"totalCrossings");function tr(e,t){let n={...t},{preds:o}=wt(e),r=Ye(e),s=Gt(e,n,r),a=er(s,e.edges,n),m=Lt.MAX_CROSSING_OPTIMIZATION_PASSES;for(let l=0;l<m;l++){let d=!1,f=[...e.nodes].sort((y,E)=>(n[E]??0)-(n[y]??0));for(let y of f){let E=n[y]??0;if(E===0)continue;let h=0;for(let S of o.get(y)??[])h=Math.max(h,(n[S]??0)+1);if(h>=E)continue;let g=E;n[y]=h;let c=Gt(e,n,r),p=er(c,e.edges,n);p<a?(a=p,d=!0):n[y]=g}if(!d)break}return n}i(tr,"optimizeRanksByCrossings");function nr(e,t){let n=Ye(e),o=[...e.nodes].sort((r,s)=>(t[r]??0)-(t[s]??0)||r.localeCompare(s));for(let r of o){let s=n(r);if(!s)continue;let a=e.edges.filter(c=>c.src===r);if(a.length===0)continue;let m=!1,l=0;for(let c of a){let p=n(c.dst);p==null||p===s?m=!0:l++}if(l===0||m)continue;let d=0,f=!1;for(let c of e.edges){if(c.dst!==r)continue;let p=n(c.src);p&&(p===s?f=!0:d++)}if(d>0||!f)continue;let y=t[r]??0,E=y+l,h=0;for(let c of e.edges)c.dst===r&&(h=Math.max(h,(t[c.src]??0)+1));let g=Math.max(y,h,E);g!==y&&(t[r]=g)}}i(nr,"adjustCrossLaneSources");function or(e,t){let n=Qe(e),o=bt(n)??[...n.nodes].sort(),r=t?.compactSingleInput??!1,s=Ye(n),a=Object.create(null);for(let l of o){let d=rn(n,l),f=t?.ignoreCrossLaneEdges?d.filter(y=>{let E=s(y.src),h=s(l);return!E||!h?!0:E===h}):d;if(f.length===0)a[l]=0;else if(r&&f.length===1){let y=f[0].src,E=s(y),h=s(l);E!==h?a[l]=a[y]??0:a[l]=(a[y]??0)+1}else{let y=-1/0;for(let E of f)y=Math.max(y,(a[E.src]??0)+1);a[l]=y===-1/0?0:y}}return(t?.optimizeRanksByCrossings??!1)&&(a=tr(n,a)),t?.ignoreCrossLaneEdges&&nr(n,a),{layers:Gt(n,a,s),rankOf:a,dummy:new Set}}i(or,"assignLayers_LongestPath");function rr(e,t){let n=Qe(e),r={...or(n,{compactSingleInput:t?.compactSingleInput,ignoreCrossLaneEdges:t?.ignoreCrossLaneEdges,optimizeRanksByCrossings:t?.optimizeRanksByCrossings}).rankOf},s=Ye(n),{preds:a,succs:m}=wt(n,g=>{if(t?.ignoreCrossLaneEdges){let c=s(g.src),p=s(g.dst);if(c&&p&&c!==p)return!1}return!0}),l=bt(n)??[...n.nodes],d=[...l].reverse(),f=i((g,c)=>{let p=0;for(let N of a.get(g)??[])p=Math.max(p,(r[N]??0)+1);let S=Number.POSITIVE_INFINITY,I=m.get(g)??[];return I.length>0&&(S=Math.min(...I.map(N=>(r[N]??0)-1))),Number.isFinite(S)||(S=Math.max(p,c)),Math.min(Math.max(c,p),S)},"clampFeasible"),y=Lt.GRAVITY_ITERATIONS,E=i(g=>{let c=!1;for(let p of g){let S=a.get(p)??[],I=m.get(p)??[];if(S.length===0&&I.length===0)continue;let N=S.length>0?S.reduce((P,w)=>P+(r[w]??0)+1,0)/S.length:r[p]??0,O=I.length>0?I.reduce((P,w)=>P+(r[w]??0)-1,0)/I.length:r[p]??0,M=Math.round((N+O)/2),b=f(p,M);b!==r[p]&&(r[p]=b,c=!0)}return c},"relaxOrder");for(let g=0;g<y;g++){let c=E(l),p=E(d);if(!c&&!p)break}for(let g of l){let c=0;for(let p of a.get(g)??[])c=Math.max(c,(r[p]??0)+1);(r[g]??0)<c&&(r[g]=c)}for(let g of d){let c=m.get(g)??[];if(c.length>0){let p=Math.min(...c.map(S=>(r[S]??0)-1));(r[g]??0)>p&&(r[g]=p)}}return{layers:sn(n,l,r),rankOf:r,dummy:new Set}}i(rr,"assignLayers_Gravity");function bs(e){let t=Fn(e),n=Dn(e),o=Gn(t),r=[];for(;o.length>0;){let s=[];for(let a of o){r.push(a);for(let m of n.get(a)??[])t.set(m,(t.get(m)??0)-1),(t.get(m)??0)===0&&s.push(m)}o=s.sort((a,m)=>a.localeCompare(m))}return r.length===e.nodes.length?r:null}i(bs,"topoSortByGenerationIfAcyclic");function sr(e,t){let n=Qe(e),o=t?.direction==="LR"?bs(n)??[...n.nodes].sort():bt(n)??[...n.nodes].sort(),r=Ye(n),s=i(f=>r(f)??f,"laneOf"),a=Object.create(null),m=new Map,l=i((f,y)=>t?.ignoreCrossLaneEdges??!0?s(f)===s(y)?1:0:1,"edgeWeight");for(let f of o){if(n.nodeById.get(f)?.isGroup)continue;let E=rn(n,f),h=0;if(E.length>0)for(let S of E){let I=S.src,N=a[I]??0;h=Math.max(h,N+l(I,f))}let g=s(f),c=m.get(g)??0,p=Math.max(h,c);a[f]=p,m.set(g,p+1)}return{layers:sn(n,o,a,{skipGroups:!0}),rankOf:a,dummy:new Set}}i(sr,"assignLayers_LaneAwareCompact");function ir(e,t){let n=Qe(t),{rankOf:o}=e,r=e.layers.map(h=>[...h]),s=new Set(e.dummy?[...e.dummy]:[]),a=0,m=new Map(n.nodeById),l=i(h=>{let g=`placeholder-${a++}`,c={id:g,isGroup:!1,isDummy:!0,width:0,height:0};for(m.set(g,c),s.add(g);r.length<=h;)r.push([]);return r[h].push(g),o[g]=h,g},"addDummyAt"),d=[...n.edges].sort((h,g)=>h.id===g.id?h.src===g.src?h.dst.localeCompare(g.dst):h.src.localeCompare(g.src):h.id.localeCompare(g.id)),f=[];for(let h of d){let g=o[h.src]??0,c=o[h.dst]??0;if(c-g<=1){f.push(h);continue}let p=h.src;for(let I=g+1,N=0;I<c;I++,N++){let O=l(I);f.push({id:`${h.id}#${N}`,src:p,dst:O,weight:h.weight,ref:h.ref}),p=O}let S=c-g-2;f.push({id:`${h.id}#${Math.max(S+1,0)}`,src:p,dst:h.dst,weight:h.weight,ref:h.ref})}let E={nodes:[...n.nodes,...[...s].filter(h=>!n.nodes.includes(h))],edges:f,layout:n.layout,nodeById:m};return{layering:{layers:r,rankOf:o,dummy:s},graphWithDummies:E}}i(ir,"makeProperLayering");function ar(e){let t=e.length;if(t===0)return Number.POSITIVE_INFINITY;let n=[...e].sort((o,r)=>o-r);return t%2===1?n[(t-1)/2]:.5*(n[t/2-1]+n[t/2])}i(ar,"median");function cr(e){return e.length===0?Number.POSITIVE_INFINITY:e.reduce((n,o)=>n+o,0)/e.length}i(cr,"barycenter");function Is(e,t,n,o){let r=new Map;for(let s of e)r.set(s,[]);for(let s of n)o==="down"?t.has(s.src)&&r.has(s.dst)&&r.get(s.dst).push(t.get(s.src)):t.has(s.dst)&&r.has(s.src)&&r.get(s.src).push(t.get(s.dst));return r}i(Is,"neighborPositionsFor");function Ms(e,t,n){let o=n.get(e)??0,r=n.get(t)??0;return o!==r?o-r:e.localeCompare(t)}i(Ms,"currentOrderTieBreak");function dr(e,t,n){let o=new Set(e),r=new Set(t),s=Mt(e),a=Mt(t),m=[];for(let d of n)o.has(d.src)&&r.has(d.dst)&&m.push({u:s.get(d.src),v:a.get(d.dst)});m.sort((d,f)=>d.u===f.u?d.v-f.v:d.u-f.u);let l=m.map(d=>d.v);return an(l)}i(dr,"countCrossingsBetweenAdjacent");function Xn(e,t,n){return[...e].sort((o,r)=>{let s=ar(t.get(o)??[]),a=ar(t.get(r)??[]);return s===a?Ms(o,r,n):isFinite(s)?isFinite(a)?s-a:-1:1})}i(Xn,"sortByHeuristic");function lr(e,t,n,o,r,s){let a=Mt(e),m=Mt(t),l=Is(t,a,n,o);if(!r||!s||s.length===0)return Xn(t,l,m);let d=new Map;for(let E of t){let h=r(E),g=d.get(h)??[];g.push(E),d.set(h,g)}let f=[];for(let E of s){let h=d.get(E);if(!h||h.length===0)continue;let g=Xn(h,l,m);f.push(...g)}let y=d.get(null);if(y&&y.length>0){let E=Xn(y,l,m);for(let h of E){let g=cr(l.get(h)??[]),c=f.length;if(isFinite(g))for(let[p,S]of f.entries()){let I=cr(l.get(S)??[]);if(g<I){c=p;break}}f.splice(c,0,h)}}return f}i(lr,"reorderLayer");function ur(e,t,n,o,r){let s=[...t],a=new Set(e),m=new Set(t),l=o?new Set(o):null,d=n.filter(c=>a.has(c.src)&&m.has(c.dst)),f=l?n.filter(c=>m.has(c.src)&&l.has(c.dst)):void 0,y=i(c=>{let p=dr(e,c,d);return f&&o&&(p+=dr(c,o,f)),p},"crossingScore"),E=r?new Map:null;if(r&&E)for(let c of t)E.set(c,r(c));let h=!0,g=y(s);for(;h;){h=!1;for(let c=0;c+1<s.length;c++){if(E){let I=E.get(s[c]),N=E.get(s[c+1]);if(I!==N)continue}let p=g;[s[c],s[c+1]]=[s[c+1],s[c]];let S=y(s);S<p?(g=S,h=!0):[s[c],s[c+1]]=[s[c+1],s[c]]}}return s}i(ur,"transposeImprove");function fr(e,t,n){let o=e.layers.map(m=>[...m]),r=t.edges,s=Ye(t),a=dn(t,n?.laneOrder);for(let m=0;m<3;m++){for(let l=1;l<o.length;l++)o[l]=lr(o[l-1],o[l],r,"down",s,a),o[l]=ur(o[l-1],o[l],r,o[l+1],s);for(let l=o.length-2;l>=0;l--)o[l]=lr(o[l+1],o[l],r,"up",s,a),o[l]=ur(o[l+1],o[l],r,o[l-1],s)}return{layers:o}}i(fr,"orderLayers");function gr(e,t,n){let o=n?.layerGap??zn.DEFAULT_LAYER_GAP,r=n?.nodeGap??zn.DEFAULT_NODE_GAP,s=n?.laneGap??r*2,a=n?.direction??"TB",m=a==="LR"||a==="RL",l=e.layers,d=Object.create(null),f=Object.create(null),y=i(T=>t.nodeById.get(T),"getNode"),E=i(T=>y(T)?.width??0,"getWidth"),h=i(T=>y(T)?.height??0,"getHeight"),g=Ye(t),c=dn(t,n?.laneOrder),p=l.map(T=>T.reduce((D,_)=>Math.max(D,h(_)),0)),S=[];if(m)for(let T=0;T+1<l.length;T++){let D=l[T].reduce((he,Oe)=>Math.max(he,E(Oe)),0),_=l[T+1].reduce((he,Oe)=>Math.max(he,E(Oe)),0),v=p[T],z=p[T+1],Y=v/2+z/2,K=(D+_)/2,ae=Math.max(0,K-Y-o);S.push(ae)}let I=new Set;for(let T of l)for(let D of T)I.add(g(D));let N=I.has(null),O=c.filter(T=>I.has(T)),M=[...N?[null]:[],...O],b=Object.create(null);for(let T of O)b[T]=0;N&&(b.null=0);for(let T of l){let D=Object.create(null),_=[];for(let v of T){let z=g(v);z===null?_.push(v):(D[z]||=[]).push(v)}for(let[v,z]of Object.entries(D)){let Y=z.reduce((K,ae)=>K+E(ae),0)+r*Math.max(0,z.length-1);b[v]=Math.max(b[v]??0,Y)}if(N&&_.length){let v=_.reduce((z,Y)=>z+E(Y),0)+r*Math.max(0,_.length-1);b.null=Math.max(b.null??0,v)}}let P=new Map;{let T=M.map(v=>(v===null?b.null:b[v])??0),_=-(T.reduce((v,z)=>v+z,0)+s*Math.max(0,M.length-1))/2;for(let v=0;v<M.length;v++){let z=M[v],Y=T[v]??0,K=_+Y/2;P.set(z,K),_+=Y,v<M.length-1&&(_+=s)}}let w=0;for(let[T,D]of l.entries()){let _=p[T]??0,v=new Map;for(let Y of D){let K=g(Y),ae=v.get(K)??[];ae.push(Y),v.set(K,ae)}for(let Y of M){let K=v.get(Y)??[];if(K.length===0)continue;let ae=P.get(Y);if(K.length===1){let he=K[0];d[he]=ae,f[he]=w+_/2}else{let he=K.map(Q=>E(Q)),Oe=he.reduce((Q,W)=>Q+W,0)+r*(K.length-1),Be=ae-Oe/2;for(let[Q,W]of K.entries()){let te=he[Q];d[W]=Be+te/2,f[W]=w+_/2,Be+=te+r}}}let z=S[T]??0;w+=_+o+z}let B=new Map;for(let T of t.edges){let D=T.ref.id;B.has(D)||B.set(D,[]),B.get(D).push(T)}for(let[,T]of B){if(T.length===0)continue;let D=T[0].ref,_=D.start,v=D.end;if(_==null||v==null)continue;let z=Math.round(((d[_]??0)+(d[v]??0))/2),Y=new Set;for(let K of T)Y.add(K.src),Y.add(K.dst);for(let K of Y){if(K===_||K===v)continue;t.nodeById.get(K)?.isDummy&&(d[K]=z)}}return{x:d,y:f}}i(gr,"assignCoordinates");var Yn=8;function Ls(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return t>>>0}i(Ls,"hashString");function Ss(e){let t=e>>>0;return()=>{t+=1831565813;let n=t;return n=Math.imul(n^n>>>15,n|1),n^=n+Math.imul(n^n>>>7,n|61),((n^n>>>14)>>>0)/4294967296}}i(Ss,"mulberry32");function Ns(e,t){let n=[...e],o=Ss(t);for(let r=n.length-1;r>0;r--){let s=Math.floor(o()*(r+1));[n[r],n[s]]=[n[s],n[r]]}return n}i(Ns,"deterministicShuffle");function Es(e,t){let n=0;for(let[o,r]of e.entries())n+=Math.abs(o-(t.get(r)??o));return n}i(Es,"sourceDistance");function mr(e,t){let n=new Map;for(let[r,s]of e.entries())n.set(s,r);let o=0;for(let{a:r,b:s,weight:a}of t){let m=n.get(r),l=n.get(s);m==null||l==null||(o+=a*Math.abs(m-l))}return o}i(mr,"laneArrangementCost");function Rs(e){let t=cn(e);if(t.length<2)return[];let n=new Map(t.map((s,a)=>[s,a])),o=Ye(e),r=new Map;for(let s of e.layout.edges??[]){if(s.isLayoutOnly)continue;let a=typeof s.start=="string"?s.start:void 0,m=typeof s.end=="string"?s.end:void 0;if(!a||!m||!e.nodeById.has(a)||!e.nodeById.has(m))continue;let l=o(a),d=o(m);if(!l||!d||l===d)continue;let f=n.get(l),y=n.get(d);if(f==null||y==null)continue;let[E,h]=f<=y?[l,d]:[d,l],g=`${E}\0${h}`,c=r.get(g);c?c.weight++:r.set(g,{a:E,b:h,weight:1})}return[...r.values()]}i(Rs,"buildWeightedLaneEdges");function pr(e,t,n){let o=[...e],r=mr(o,t),s=!0,a=0,m=Math.max(1,o.length);for(;s&&a<m;){s=!1,a++;for(let l=0;l+1<o.length;l++){[o[l],o[l+1]]=[o[l+1],o[l]];let d=mr(o,t);d<r?(r=d,s=!0):[o[l],o[l+1]]=[o[l+1],o[l]]}}return{order:o,cost:r,sourceDistance:Es(o,n)}}i(pr,"greedySwitch");function Ps(e,t){return e.cost!==t.cost?e.cost<t.cost:e.sourceDistance<t.sourceDistance}i(Ps,"isBetterCandidate");function Cs(e,t,n){let o=[...t].sort((r,s)=>r.a===s.a?r.b.localeCompare(s.b):r.a.localeCompare(s.a)).map(({a:r,b:s,weight:a})=>`${r}:${s}:${a}`).join("|");return Ls(`${e.join("|")}#${o}#${n}`)}i(Cs,"seedForRestart");function hr(e,t={}){let n=cn(e);if(n.length<2)return n;let o=Rs(e);if(o.length===0)return n;let r=new Map(n.map((m,l)=>[m,l])),s=pr(n,o,r),a=Math.max(0,t.restarts??Yn);for(let m=0;m<a;m++){let l=Cs(n,o,m),d=Ns(n,l),f=pr(d,o,r);Ps(f,s)&&(s=f)}return s.order}i(hr,"optimizeTopLaneOrder");function yr(e,t){let n=t?.ignoreCrossLaneEdges??!0,o=t?.optimizeRanksByCrossings??!0,r=Qe(e),s=t?.automaticLaneOrdering?hr(r,{restarts:Yn}):void 0,a=Uo(r),m=a.acyclic,l=n?sr(m,{compactSingleInput:t?.compactSingleInput??Lt.DEFAULT_COMPACT_SINGLE_INPUT,ignoreCrossLaneEdges:!0,direction:t?.direction}):rr(m,{compactSingleInput:t?.compactSingleInput??Lt.DEFAULT_COMPACT_SINGLE_INPUT,ignoreCrossLaneEdges:!1,optimizeRanksByCrossings:o}),{layering:d,graphWithDummies:f}=ir(l,m),y=fr(d,f,{laneOrder:s}),E=gr(y,f,{layerGap:t?.layerGap,nodeGap:t?.nodeGap,direction:t?.direction,laneOrder:s});return{acyclic:m,reversed:a.reversed,layering:d,ordered:y,coordinates:E}}i(yr,"sugiyamaLayout");var ce=Wo.EPSILON,Ts=8,St=15,At=15,ln=25,st=20,$n=10;function xr(e,t,n){let o=e.x??0,r=e.y??0,s=t.x-o,a=t.y-r,m=Math.abs(s),l=Math.abs(a);return m<ce&&l<ce?n:l>ce&&l*3>=m?a>0?"bottom":"top":m>ce?s>0?"right":"left":n}i(xr,"chooseOrthogonalSide");function br(e,t){return Math.abs(e.to-t.from)<ce||Math.abs(e.to-t.to)<ce?e.to:e.from}i(br,"sharedLineEndpointCoord");function vt(e,t){return e.orient==="vertical"?{x:e.coord,y:t}:{x:t,y:e.coord}}i(vt,"pointOnLine");function Ir(e,t){let n=e.nodes??[],o=e.edges??[],r=[];for(let u of o)u.isLayoutOnly||r.push({...u,__originalEdge:u});let s=new Map,a=new Map,m=[],l=t==="LR";for(let u of n)s.set(u.id,u);let d=n.filter(u=>u.isGroup&&!u.parentId);for(let u of d){let x={id:u.id},L=i(R=>{a.set(R.id,x),n.filter(C=>C.parentId===R.id).forEach(L)},"assignLane");L(u)}let f=n.filter(u=>!u.isGroup&&!u.isEdgeLabel).map(u=>{let x=u.width??10,L=u.height??10,R=u.x??0,C=u.y??0,k=Ts;return{nodeId:u.id,minX:R-x/2-k,maxX:R+x/2+k,minY:C-L/2-k,maxY:C+L/2+k,visualXHalfExtent:l?L/2+k:x/2+k}}),y=i((u,x,L,R)=>{let C=m.find(k=>k.orientation===u&&Math.abs(k.coord-x)<1);return C||(C={id:`pipe-${u}-${x.toFixed(0)}`,orientation:u,coord:x,spanMin:L,spanMax:R,tracks:[]},m.push(C)),C.spanMin=Math.min(C.spanMin,L),C.spanMax=Math.max(C.spanMax,R),C},"getOrAddPipe"),E=i((u,x)=>{let L=u.width??10,R=u.height??10,C=u.x??0,k=u.y??0;switch(x){case"top":return{x:C,y:k-R/2};case"bottom":return{x:C,y:k+R/2};case"left":return{x:C-L/2,y:k};case"right":return{x:C+L/2,y:k}}},"portForSide"),h=i((u,x,L)=>E(u,xr(u,x,L?"bottom":"top")),"getOrthogonalPort"),g=[],c=[],p=new Set,S=1e3,I=i((u,x,L)=>{if(g.length===0)return 0;let R=Math.abs(x.y-L.y)<ce,C=Math.abs(x.x-L.x)<ce;if(!R&&!C)return 0;let k=0;if(R){let U=x.y,q=Math.min(x.x,L.x)-ce,j=Math.max(x.x,L.x)+ce;if(j<=q)return 0;for(let X of g)X.edgeIndex===u||X.orientation!=="vertical"||X.pipe.coord<q||X.pipe.coord>j||X.from-ce<=U&&X.to+ce>=U&&(k+=S)}else if(C){let U=x.x,q=Math.min(x.y,L.y)-ce,j=Math.max(x.y,L.y)+ce;if(j<=q)return 0;for(let X of g)X.edgeIndex===u||X.orientation!=="horizontal"||X.pipe.coord<q||X.pipe.coord>j||X.from-ce<=U&&X.to+ce>=U&&(k+=S)}return k},"crossingPenalty"),N=r.map((u,x)=>{if(!u.start||!u.end)return{idx:x,crossLane:0,dx:0,dy:0};let L=s.get(u.start),R=s.get(u.end),C=a.get(u.start),k=a.get(u.end),U=C&&k&&C.id!==k.id?1:0,q=L&&R?Math.abs((R.x??0)-(L.x??0)):0,j=L&&R?Math.abs((R.y??0)-(L.y??0)):0;return{idx:x,crossLane:U,dx:q,dy:j}}).sort((u,x)=>{if(u.crossLane!==x.crossLane)return x.crossLane-u.crossLane;let L=u.dx+u.dy,R=x.dx+x.dy;return Math.abs(L-R)>1?L-R:u.idx-x.idx}).map(u=>u.idx),O=i((u,x,L,R)=>{let C=Math.min(u.x,x.x),k=Math.max(u.x,x.x),U=Math.min(u.y,x.y),q=Math.max(u.y,x.y);return!!f.find(X=>L&&X.nodeId===L||R&&X.nodeId===R?!1:Math.abs(u.x-x.x)>ce?X.minY<u.y&&X.maxY>u.y&&X.maxX>C&&X.minX<k:X.minX<u.x&&X.maxX>u.x&&X.maxY>U&&X.minY<q)},"isSegmentBlocked"),M=new Map,b=new Map;for(let u of r)!u.start||!u.end||u.start===u.end||(b.set(u.start,(b.get(u.start)??0)+1),b.set(u.end,(b.get(u.end)??0)+1));let P=i((u,x)=>xr(u,x,"bottom"),"determineSide"),w=new Map;for(let[u,x]of r.entries()){if(!x.start||!x.end||x.start===x.end||x.points&&x.points.length>0)continue;let L=s.get(x.start),R=s.get(x.end);if(!L||!R)continue;let C=(R.x??0)-(L.x??0),k=(R.y??0)-(L.y??0);w.set(u,{edgeIdx:u,srcId:x.start,dstId:x.end,srcSide:P(L,{x:R.x??0,y:R.y??0}),dstSide:P(R,{x:L.x??0,y:L.y??0}),absDx:Math.abs(C),absDy:Math.abs(k),dxSign:Math.sign(C),dySign:Math.sign(k)})}let B=i(u=>u.srcSide==="top"||u.srcSide==="bottom"?u.absDx===0?1/0:u.absDy/u.absDx:u.absDy===0?1/0:u.absDx/u.absDy,"preferenceStrength"),T=i(u=>u.srcSide==="top"||u.srcSide==="bottom"?u.dxSign>=0?"right":"left":u.dySign>=0?"bottom":"top","secondarySide"),D=new Map;for(let u of w.values()){let x=`${u.srcId}:${u.srcSide}`;D.has(x)||D.set(x,[]),D.get(x).push(u)}let _=new Map,v=i((u,x)=>`${u}:${x}`,"loadKey");for(let u of w.values())_.set(v(u.srcId,u.srcSide),(_.get(v(u.srcId,u.srcSide))??0)+1),_.set(v(u.dstId,u.dstSide),(_.get(v(u.dstId,u.dstSide))??0)+1);for(let u of D.values())if(!(u.length<2)){u.sort((x,L)=>{let R=B(x),C=B(L);return Math.abs(R-C)>1e-9?C-R:x.edgeIdx-L.edgeIdx});for(let x=1;x<u.length;x++){let L=u[x],R=T(L),C=_.get(v(L.srcId,L.srcSide))??0,k=_.get(v(L.srcId,R))??0;k>=C||(_.set(v(L.srcId,L.srcSide),C-1),_.set(v(L.srcId,R),k+1),L.srcSide=R)}}let z=i(u=>{let x=u?.shape;return x==="question"||x==="diamond"},"isDiamondNode"),Y=new Map;for(let u of w.values())Y.has(u.dstId)||Y.set(u.dstId,new Set),Y.get(u.dstId).add(u.dstSide);for(let u of w.values()){if(!z(s.get(u.srcId)))continue;let x=Y.get(u.srcId);if(!x?.has(u.srcSide))continue;let L=T(u);if(x.has(L)||(_.get(v(u.srcId,L))??0)>0)continue;let R=_.get(v(u.srcId,u.srcSide))??0;_.set(v(u.srcId,u.srcSide),Math.max(0,R-1)),_.set(v(u.srcId,L),1),u.srcSide=L}for(let u of w.values()){let{edgeIdx:x,srcId:L,dstId:R,srcSide:C,dstSide:k}=u,U=s.get(L),q=s.get(R),j=`${L}:${C}:src`,X=C==="top"||C==="bottom"?q.x??0:q.y??0;M.has(j)||M.set(j,[]),M.get(j).push({edgeIdx:x,oppositeCoord:X});let oe=`${R}:${k}:dst`,se=k==="top"||k==="bottom"?U.x??0:U.y??0;M.has(oe)||M.set(oe,[]),M.get(oe).push({edgeIdx:x,oppositeCoord:se})}let K=new Map,ae=8;for(let[u,x]of M){if(x.length<2)continue;x.sort((Ce,Fe)=>Ce.oppositeCoord-Fe.oppositeCoord);let L=u.split(":"),R=L.slice(0,-2).join(":"),C=L[L.length-2],k=L[L.length-1],U=s.get(R);if(!U)continue;let j=C==="left"||C==="right"?U.height??10:U.width??10,X=U.shape,se=X==="question"||X==="diamond"?j*.3:j,ee=Math.min(20,Math.max(ae,se/(x.length+1))),we=-(ee*(x.length-1))/2;for(let[Ce,Fe]of x.entries()){let et=we+Ce*ee,mn=`${Fe.edgeIdx}:${k}`;K.set(mn,et)}}let he=i(u=>!!r[u]?.labelNodeId,"edgeHasLabelNode"),Oe=i((u,x)=>u?(M.get(`${u}:${x}:src`)??[]).some(({edgeIdx:L})=>he(L))||(M.get(`${u}:${x}:dst`)??[]).some(({edgeIdx:L})=>he(L)):!1,"faceHasLabelNode"),Be=i((u,x,L)=>x==="top"||x==="bottom"?{x:u.x+L,y:u.y}:{x:u.x,y:u.y+L},"applyPortOffset"),Q=i((u,x,L)=>{let R=w.get(u),C={x:L.x??0,y:L.y??0},k={x:x.x??0,y:x.y??0},U=R?.srcSide??P(x,C),q=R?.dstSide??P(L,k),j=R?E(x,R.srcSide):h(x,C,!0),X=R?E(L,R.dstSide):h(L,k,!1),oe=K.get(`${u}:src`),se=K.get(`${u}:dst`);return oe!==void 0&&(j=Be(j,U,oe)),se!==void 0&&(X=Be(X,q,se)),{pSrcPort:j,pDstPort:X,srcSide:U,dstSide:q}},"portsForEdge");for(let u of N){let x=r[u];if(c[u]=[],!x.start||!x.end||x.points&&x.points.length>0||x.start===x.end)continue;let L=s.get(x.start),R=s.get(x.end);if(!L||!R)continue;let{pSrcPort:C,pDstPort:k,srcSide:U,dstSide:q}=Q(u,L,R),j={...C},X={...k},oe=U==="top"||U==="bottom",se=q==="top"||q==="bottom";if(oe){let H=C.y>(L.y??0);j.y=H?C.y+st:C.y-st}else{let H=C.x>(L.x??0);j.x=H?C.x+st:C.x-st}if(se){let H=k.y>(R.y??0);X.y=H?k.y+st:k.y-st}else{let H=k.x>(R.x??0);X.x=H?k.x+st:k.x-st}let re=i((H,$)=>{for(let J of f)if(!$.includes(J.nodeId)&&H.x>J.minX&&H.x<J.maxX&&H.y>J.minY&&H.y<J.maxY)return{inside:!0,obstacle:J};return{inside:!1}},"isPointInObstacle"),ee=i((H,$,J,ge,Ne)=>{if(Ne){let Ae=H.y>($.y??0);return{x:(J.x??0)>=H.x?ge.maxX+St:ge.minX-St,y:Ae?ge.maxY+At:ge.minY-At,leavesPositiveSide:Ae}}let be=H.x>($.x??0),Te=(J.y??0)>=H.y;return{x:be?ge.maxX+St:ge.minX-St,y:Te?ge.maxY+At:ge.minY-At,leavesPositiveSide:be}},"obstacleDetour"),ye=[],we=[x.start,x.end],Ce=re(j,we);if(Ce.inside&&Ce.obstacle){let H=Ce.obstacle;if(oe){let $=ee(C,L,R,H,!0);j.x=$.x,j.y=$.y;let J=$.leavesPositiveSide?Math.min(H.minY-2,C.y+st):Math.max(H.maxY+2,C.y-st);ye=[{x:C.x,y:J},{x:$.x,y:J},{x:$.x,y:$.y}]}else{let $=ee(C,L,R,H,!1),J=$.leavesPositiveSide?Math.min(H.minX-2,C.x+st):Math.max(H.maxX+2,C.x-st);j.x=$.x,j.y=$.y,ye=[{x:J,y:C.y},{x:J,y:$.y},{x:$.x,y:$.y}]}}let Fe=[],et=re(X,we);if(et.inside&&et.obstacle){let H=et.obstacle;if(se){let $=ee(k,R,L,H,!0);X.x=$.x,X.y=$.y,Fe=[{x:$.x,y:$.y},{x:k.x,y:$.y}]}else{let $=ee(k,R,L,H,!1);X.x=$.x,X.y=$.y,Fe=[{x:$.x,y:$.y},{x:$.x,y:k.y}]}}if(ye.length===0&&Fe.length===0){let H=St,$=Math.abs(j.x-X.x)<H,J=Math.abs(j.y-X.y)<H,ge=K.get(`${u}:src`)!==void 0||K.get(`${u}:dst`)!==void 0,Ne=(M.get(`${x.start??""}:${U}:src`)?.length??0)+(M.get(`${x.start??""}:${U}:dst`)?.length??0),be=(M.get(`${x.end??""}:${q}:src`)?.length??0)+(M.get(`${x.end??""}:${q}:dst`)?.length??0),Te=Ne>1||be>1,Ae=b.get(x.start??"")??0,me=b.get(x.end??"")??0,He=Ne>1&&Oe(x.start,U)||be>1&&Oe(x.end,q),ot=Ne<=1||Ae<=2,ke=be<=1||me<=2;if(($||J)&&!ge&&(!Te||Te&&!He&&ot&&ke)&&!O(C,k,x.start,x.end)){x.points=[{...C},{...j},{...X},{...k}],p.add(u);let Ie=J?"horizontal":"vertical",je=J?C.y:C.x,Me=J?Math.min(C.x,k.x):Math.min(C.y,k.y),Se=J?Math.max(C.x,k.x):Math.max(C.y,k.y),Ke={id:`fast-path-${Ie}-${je.toFixed(0)}-${u}`,orientation:Ie,coord:je,spanMin:Me,spanMax:Se,tracks:[]};g.push({edgeIndex:u,segmentIndex:0,orientation:Ie,pipe:Ke,trackIndex:0,from:Me,to:Se});continue}}let mn=y("vertical",j.x,j.y,j.y);j.x=mn.coord;let Lr=y("vertical",X.x,X.y,X.y);X.x=Lr.coord;let gt=Math.min(j.x,X.x)-50,mt=Math.max(j.x,X.x)+50,Rt=Math.min(j.y,X.y)-50,Pt=Math.max(j.y,X.y)+50;for(let H of f){let $=Math.min(j.x,X.x),J=Math.max(j.x,X.x),ge=Math.min(j.y,X.y),Ne=Math.max(j.y,X.y);H.minX<J&&H.maxX>$&&H.minY<Ne&&H.maxY>ge&&(gt=Math.min(gt,H.minX-ln),mt=Math.max(mt,H.maxX+ln),Rt=Math.min(Rt,H.minY-ln),Pt=Math.max(Pt,H.maxY+ln))}for(let H of f){if(H.maxX<gt||H.minX>mt||H.maxY<Rt||H.minY>Pt)continue;let $=St;y("horizontal",H.minY-$,gt,mt),y("horizontal",H.maxY+$,gt,mt);let J=At;y("vertical",H.minX-J,Rt,Pt),y("vertical",H.maxX+J,Rt,Pt)}y("horizontal",j.y,gt,mt),y("horizontal",X.y,gt,mt);let Sr=m.filter(H=>H.orientation==="horizontal"&&H.coord>=Rt&&H.coord<=Pt),Nr=m.filter(H=>H.orientation==="vertical"&&H.coord>=gt&&H.coord<=mt),zt=i((H,$)=>`${H.toFixed(1)},${$.toFixed(1)}`,"getKey"),Ht=zt(j.x,j.y),jn=zt(X.x,X.y),Xt=new Map,pn=new Map,hn=new Map,Yt=new Set,It=[];Xt.set(Ht,0),hn.set(Ht,"n"),It.push({key:Ht,f:Math.hypot(X.x-j.x,X.y-j.y),pt:j}),Yt.add(Ht);let Ge=[],pt=i((H,$)=>O(H,$,x.start,x.end),"checkSegmentBlocked"),yn={x:X.x,y:j.y},Er=pt(j,yn),Rr=pt(yn,X),Pr=Er||Rr,xn={x:j.x,y:X.y},Cr=pt(j,xn),Tr=pt(xn,X);if(Pr?Cr||Tr||(Math.abs(j.x-X.x)<ce?Ge=[j,X]:Ge=[j,xn,X]):Math.abs(j.y-X.y)<ce||Math.abs(j.x-X.x)<ce?Ge=[j,X]:Ge=[j,yn,X],Ge.length===0)for(;It.length>0;){It.sort((me,He)=>me.f-He.f);let H=It.shift();if(Yt.delete(H.key),H.key===jn){let me=jn,He=X;for(Ge=[He];pn.has(me);){let ot=pn.get(me);Ge.unshift(ot),He=ot,me=zt(ot.x,ot.y)}break}let $=H.pt.x,J=H.pt.y,ge=Nr.sort((me,He)=>me.coord-He.coord),Ne=ge.findIndex(me=>Math.abs(me.coord-$)<1),be=Sr.sort((me,He)=>me.coord-He.coord),Te=be.findIndex(me=>Math.abs(me.coord-J)<1),Ae=[];Ne>0&&Ae.push({x:ge[Ne-1].coord,y:J}),Ne>=0&&Ne<ge.length-1&&Ae.push({x:ge[Ne+1].coord,y:J}),Te>0&&Ae.push({x:$,y:be[Te-1].coord}),Te>=0&&Te<be.length-1&&Ae.push({x:$,y:be[Te+1].coord});for(let me of Ae){let He=Math.min($,me.x),ot=Math.max($,me.x),ke=Math.min(J,me.y),$e=Math.max(J,me.y);if(f.some(tt=>tt.nodeId===x.start||tt.nodeId===x.end?!1:He!==ot?tt.minY<J&&tt.maxY>J&&tt.maxX>He&&tt.minX<ot:tt.minX<$&&tt.maxX>$&&tt.maxY>ke&&tt.minY<$e))continue;let Ie=zt(me.x,me.y),je=Math.abs(me.x-$)+Math.abs(me.y-J),Me=I(u,H.pt,me),Se=0,Ke=X.x-j.x,Ct=X.y-j.y,$t=me.x-$,bn=me.y-J;(Ct>10&&bn<-5||Ct<-10&&bn>5)&&(Se=Math.abs(bn)*100),(Ke>10&&$t<-5||Ke<-10&&$t>5)&&(Se+=Math.abs($t)*50);let Vn=0,Un=hn.get(H.key)??"n",Wn=Math.abs($t)>ce?"h":"v";Un!=="n"&&Un!==Wn&&(Vn=50);let Or=je+Me+Se+Vn,jt=(Xt.get(H.key)??1/0)+Or,Kn=Math.abs(X.x-me.x)+Math.abs(X.y-me.y);if(jt<(Xt.get(Ie)??1/0))if(pn.set(Ie,H.pt),Xt.set(Ie,jt),hn.set(Ie,Wn),!Yt.has(Ie))It.push({key:Ie,f:jt+Kn,pt:me}),Yt.add(Ie);else{let tt=It.findIndex(wr=>wr.key===Ie);tt!==-1&&(It[tt].f=jt+Kn)}}}if(Ge.length===0&&(Ge=[j,{x:j.x,y:X.y},X]),Ge.length>4){let H=Ge[0],$=Ge[Ge.length-1],J=Math.min(H.x,$.x),ge=Math.max(H.x,$.x),Ne=Math.min(H.y,$.y),be=Math.max(H.y,$.y);for(let ke of Ge)J=Math.min(J,ke.x),ge=Math.max(ge,ke.x),Ne=Math.min(Ne,ke.y),be=Math.max(be,ke.y);let Te=ge>Math.max(H.x,$.x),Ae=J<Math.min(H.x,$.x);if(l){let ke=At;if(Te){let $e=Math.max(H.x,$.x),ve=Math.min(H.y,$.y),Ie=Math.max(H.y,$.y),je=f.filter(Me=>Me.minX<$e&&Me.maxX>$e&&Me.minY<Ie&&Me.maxY>ve);if(je.length>0){let Me=Math.max(H.x,$.x);for(let Se of je){let Ke=(Se.minX+Se.maxX)/2;if(Se.visualXHalfExtent===void 0||isNaN(Se.visualXHalfExtent))continue;let Ct=Ke+Se.visualXHalfExtent+ke;Me=Math.max(Me,Ct)}isNaN(Me)||(ge=Me)}}if(Ae){let $e=f.filter(ve=>ve.minX<Math.min(H.x,$.x)+ke&&ve.minY<Math.max(H.y,$.y)&&ve.maxY>Math.min(H.y,$.y));if($e.length>0){let ve=Math.min(H.x,$.x);for(let Ie of $e){let Me=(Ie.minX+Ie.maxX)/2-Ie.visualXHalfExtent-ke;ve=Math.min(ve,Me)}J=ve}}}let me=i(ke=>{let $e=$.y>H.y,ve=f.filter(Me=>{let Se=Math.min(H.x,$.x)<Me.maxX&&Math.max(H.x,$.x)>Me.minX,Ke=Math.min(H.y,$.y)<Me.maxY&&Math.max(H.y,$.y)>Me.minY;return Se&&Ke}),Ie=ve;if(l&&ve.length>0){let Me=ve.filter(Se=>Se.minX<ke&&Se.maxX>ke);Me.length>0&&(Ie=Me)}if(Ie.length===0)return $.y;let je=St;if($e){let Se=Math.max(...Ie.map(Ke=>Ke.maxY))+je;if(Se<$.y-ce)return Se}else{let Se=Math.min(...Ie.map(Ke=>Ke.minY))-je;if(Se>$.y+ce)return Se}return $.y},"findBestReturnY"),He=i(ke=>{let $e=me(ke),ve={x:ke,y:H.y},Ie={x:ke,y:$e},je={x:$.x,y:$e},Me=pt(H,ve),Se=pt(ve,Ie),Ke=pt(Ie,je),Ct=$e!==$.y?pt(je,$):!1;return!Me&&!Se&&!Ke&&!Ct?Math.abs($e-$.y)<ce?[H,ve,Ie,$]:[H,ve,Ie,je,$]:null},"trySimplifyWithDetourX"),ot=Te&&!Ae?He(ge):Ae&&!Te?He(J):null;ot&&(Ge=ot)}let ze=[C,...ye,...Ge,...Fe.reverse(),k];if(ze.length>=3){let H=ze[ze.length-1],$=ze[ze.length-2],J=ze[ze.length-3],ge=Math.abs(J.y-$.y)<ce&&Math.abs($.y-H.y)<ce,Ne=Math.abs(J.x-$.x)<ce&&Math.abs($.x-H.x)<ce;if(ge){let be=Math.sign($.x-J.x),Te=Math.sign(H.x-J.x);be!==0&&be===Te&&Math.abs($.x-J.x)>Math.abs(H.x-J.x)&&ze.splice(-2,1)}else if(Ne){let be=Math.sign($.y-J.y),Te=Math.sign(H.y-J.y);be!==0&&be===Te&&Math.abs($.y-J.y)>Math.abs(H.y-J.y)&&ze.splice(-2,1)}}let dt=[ze[0]];for(let H=1;H<ze.length-1;H++){if(H===1){dt.push(ze[H]);continue}let $=dt[dt.length-1],J=ze[H],ge=ze[H+1];if(Math.abs($.y-J.y)<ce&&Math.abs(J.y-ge.y)<ce){let Ne=J.x>$.x,be=ge.x>J.x;if(Ne!==be){dt.push(J);continue}continue}if(Math.abs($.x-J.x)<ce&&Math.abs(J.x-ge.x)<ce){let Ne=J.y>$.y,be=ge.y>J.y;if(Ne!==be){dt.push(J);continue}continue}dt.push(J)}dt.push(ze[ze.length-1]);for(let H=0;H<dt.length-1;H++){let $=dt[H],J=dt[H+1],ge=Math.abs($.x-J.x)<ce?"vertical":"horizontal",Ne=ge==="vertical"?$.x:$.y,be=ge==="vertical"?Math.min($.y,J.y):Math.min($.x,J.x),Te=ge==="vertical"?Math.max($.y,J.y):Math.max($.x,J.x),Ae=y(ge,Ne,be,Te),me={edgeIndex:u,segmentIndex:H,orientation:ge,pipe:Ae,trackIndex:0,from:be,to:Te};g.push(me),c[u].push(g.length-1),Ae.tracks[0]||(Ae.tracks[0]={index:0,coord:Ae.coord,segments:[]}),Ae.tracks[0].segments.push({edgeIndex:u,segmentIndex:H,from:be,to:Te})}}let W=i((u,x)=>u.from<x.to&&x.from<u.to,"segmentsOverlap"),te=i((u,x,L,R)=>{let C=!R.segments.some(U=>(U.edgeIndex!==x.edgeIndex||U.segmentIndex!==x.segmentIndex)&&W(U,u)),k=!L.segments.some(U=>(U.edgeIndex!==u.edgeIndex||U.segmentIndex!==u.segmentIndex)&&W(U,x));return C&&k?(u.trackIndex=R.index,x.trackIndex=L.index,L.segments=[...L.segments.filter(U=>U.edgeIndex!==u.edgeIndex||U.segmentIndex!==u.segmentIndex),{edgeIndex:x.edgeIndex,segmentIndex:x.segmentIndex,from:x.from,to:x.to}],R.segments=[...R.segments.filter(U=>U.edgeIndex!==x.edgeIndex||U.segmentIndex!==x.segmentIndex),{edgeIndex:u.edgeIndex,segmentIndex:u.segmentIndex,from:u.from,to:u.to}],!0):!1},"trySwapSegmentsAcrossTracks"),ue=i(u=>{let x=u.tracks.length;return u.tracks[x]={index:x,coord:u.coord,segments:[]},x},"createNewTrack"),pe=i((u,x)=>{let L=u.pipe.tracks[u.trackIndex];L.segments=L.segments.filter(C=>C.edgeIndex!==u.edgeIndex||C.segmentIndex!==u.segmentIndex),u.trackIndex=x,u.pipe.tracks[x].segments.push({edgeIndex:u.edgeIndex,segmentIndex:u.segmentIndex,from:u.from,to:u.to})},"moveSegmentToTrack"),xe=i((u,x)=>{let L=c[u.edgeIndex];for(let R of L){let C=g[R];C.pipe===u.pipe&&pe(C,x)}},"moveSegmentChainToTrack"),Ee=i(u=>{let x=c[u.edgeIndex],L=x.indexOf(g.indexOf(u)),R=[];return L>0&&R.push(g[x[L-1]]),L<x.length-1&&R.push(g[x[L+1]]),R},"getAdjacentSegmentsAlongEdge"),Ve=i((u,x)=>{if(u.orientation===x.orientation)return!1;let L=u.orientation==="horizontal"?u:x,R=u.orientation==="horizontal"?x:u;return R.pipe.coord>L.from&&R.pipe.coord<L.to&&L.pipe.coord>R.from&&L.pipe.coord<R.to},"haveAnyCrossing"),Ue=i((u,x)=>{for(let L of u.tracks)if(!L.segments.some(C=>(C.edgeIndex!==x.edgeIndex||C.segmentIndex!==x.segmentIndex)&&W(C,x)))return L.index;return-1},"findAvailableTrack"),We=i((u,x)=>{if(u.trackIndex===x.trackIndex)return W(u,x);let L=Ee(u),R=Ee(x);return L.some(C=>R.some(k=>Ve(C,k)))},"segmentsConflict"),nt=i((u,x,L)=>{if(te(u,x,u.pipe.tracks[u.trackIndex],x.pipe.tracks[x.trackIndex]))return;let R=Ue(u.pipe,x);L(x,R!==-1?R:ue(u.pipe))},"resolveTrackConflict"),Nt=i(u=>{let x=0;for(let L=0;L<u.length;L++)for(let R=L+1;R<u.length;R++){let C=u[L],k=u[R];C.pipe===k.pipe&&We(C,k)&&(x++,nt(C,k,xe))}return x},"resolveHandleConflicts"),ft=new Map,Et=i(u=>{if(ft.has(u))return ft.get(u);let x=c[u];if(x.length===0){let q={dest:0,deviation:0,base:0,delta:0};return ft.set(u,q),q}let R=g[x[0]].pipe.coord,C=R;for(let q=1;q<x.length;q++){let j=g[x[q]];if(j.orientation==="horizontal"){let X=j.from,oe=j.to;C=Math.abs(X-R)>Math.abs(oe-R)?X:oe;break}}let k=Math.abs(C-R),U={dest:C,deviation:k,base:R,delta:C-R};return ft.set(u,U),U},"getDestInfo"),un=i(()=>{let u=0,x=new Map;for(let[R,C]of r.entries())c[R].length!==0&&C.start&&(x.has(C.start)||x.set(C.start,[]),x.get(C.start).push(R));let L=i(R=>{let C=r[R];if(!C.start||!C.end)return 0;let k=s.get(C.start),U=s.get(C.end);if(!k||!U)return 0;let q=(U.x??0)-(k.x??0),j=(U.y??0)-(k.y??0);return Math.abs(q)+Math.abs(j)},"getEdgeDistance");for(let R of x.values()){R.sort((k,U)=>{let q=Et(k),j=Et(U);if(Math.abs(q.deviation-j.deviation)>1)return q.deviation-j.deviation;if(Math.abs(q.dest-j.dest)>1)return q.dest-j.dest;let X=L(k),oe=L(U);if(Math.abs(X-oe)>1)return oe-X;let se=c[k].length,re=c[U].length;if(se!==re)return se-re;if(se===1){let ee=c[k][0],ye=c[U][0];if(g[ee]&&g[ye]){let we=g[ee],Ce=g[ye],Fe=Math.abs(we.to-we.from),et=Math.abs(Ce.to-Ce.from);if(Math.abs(Fe-et)>1)return Fe-et}}return 0});let C=R.map(k=>g[c[k][0]]);u+=Nt(C)}return u},"fixSourceHandleCrossings"),fn=i(()=>{let u=0,x=new Map;for(let[L,R]of r.entries())c[L].length!==0&&R.end&&(x.has(R.end)||x.set(R.end,[]),x.get(R.end).push(L));for(let L of x.values()){L.sort((C,k)=>{let U=i(X=>{let oe=c[X];if(oe.length<2)return 0;let se=g[oe[oe.length-2]];return Math.abs(se.to-se.from)},"getDist"),q=U(C),j=U(k);return Math.abs(q-j)>.1?q-j:C-k});let R=L.map(C=>g[c[C][c[C].length-1]]);u+=Nt(R)}return u},"fixTargetHandleCrossings"),gn=i(()=>{let u=0;for(let x of m){let L=[];for(let R of x.tracks)for(let C of R.segments){let k=c[C.edgeIndex].find(U=>g[U].segmentIndex===C.segmentIndex);k!==void 0&&L.push(g[k])}L.sort((R,C)=>R.edgeIndex-C.edgeIndex||R.segmentIndex-C.segmentIndex);for(let R=0;R<L.length;R++)for(let C=R+1;C<L.length;C++){let k=L[R],U=L[C];We(k,U)&&(u++,nt(k,U,pe))}}return u},"fixPipeCrossings"),A=0,F=10;for(;A<F;){let u=0;if(u+=un(),u+=fn(),u+=gn(),u===0)break;A++}let G=new Map;for(let u of m){let x=[];u.tracks.forEach(R=>{R.segments.forEach(C=>{x.push({edgeIndex:C.edgeIndex,segmentIndex:C.segmentIndex,trackIndex:R.index,from:C.from,to:C.to})})}),x.sort((R,C)=>R.from-C.from);let L=[];if(x.length>0){let R=[x[0]],C=x[0].to;for(let k=1;k<x.length;k++){let U=x[k];U.from<C?(R.push(U),C=Math.max(C,U.to)):(L.push(R),R=[U],C=U.to)}L.push(R)}for(let R of L){let C=new Set;R.forEach(ee=>C.add(ee.trackIndex));let k=new Map;R.forEach(ee=>{let ye=Et(ee.edgeIndex);k.set(ee.trackIndex,(k.get(ee.trackIndex)??0)+ye.delta)});let U=[...C].filter(ee=>(k.get(ee)??0)<-1),q=[...C].filter(ee=>(k.get(ee)??0)>1),j=[...C].filter(ee=>Math.abs(k.get(ee)??0)<=1);U.sort((ee,ye)=>(k.get(ye)??0)-(k.get(ee)??0)),q.sort((ee,ye)=>(k.get(ee)??0)-(k.get(ye)??0));let X=i((ee,ye)=>{R.filter(we=>we.trackIndex===ee).forEach(we=>{let Ce=p.has(we.edgeIndex)?u.coord:ye;G.set(`${we.edgeIndex}-${we.segmentIndex}`,Ce)})},"assignCoord"),oe=0;for(let ee of U)oe++,X(ee,u.coord-oe*$n);if(j.length===0&&C.size>0){let ee=[...C].sort((Ce,Fe)=>Math.abs(k.get(Ce)??0)-Math.abs(k.get(Fe)??0))[0],ye=U.indexOf(ee);ye!==-1&&U.splice(ye,1);let we=q.indexOf(ee);we!==-1&&q.splice(we,1),j.push(ee)}let se=0;for(let ee of j){if(se===0)X(ee,u.coord);else{let ye=se%2===1?1:-1,we=Math.ceil(se/2);X(ee,u.coord+ye*we*$n*.5)}se++}let re=0;for(let ee of q)re++,X(ee,u.coord+re*$n)}}for(let[u,x]of r.entries()){let L=c[u]??[];if(L.length===0)continue;let R=[],C=s.get(x.start),k=s.get(x.end),{pSrcPort:U,pDstPort:q}=Q(u,C,k),j=L.map(se=>{let re=g[se],ee=G.get(`${re.edgeIndex}-${re.segmentIndex}`)??re.pipe.coord;return{orient:re.orientation,coord:ee,from:re.from,to:re.to}});R.push(U);for(let se=0;se<j.length;se++){let re=j[se],ee=R[R.length-1],ye=re.orient==="vertical"?ee.y:ee.x,we=re.orient==="vertical"?ee.x:ee.y,Ce=j[se+1],Fe=se<j.length-1;if(Math.abs(we-re.coord)>ce&&R.push(vt(re,ye)),Fe&&Ce.orient===re.orient)if(Math.abs(re.coord-Ce.coord)>ce){let et=re.orient==="vertical"?(ye+Ce.from)/2:br(re,Ce);R.push(vt(re,et),vt(Ce,et))}else(se===0||se===j.length-2)&&R.push(vt(re,br(re,Ce)));else if(Fe)R.push(vt(re,Ce.coord));else{let et=Math.abs(re.from-ye)<Math.abs(re.to-ye)?re.to:re.from;R.push(vt(re,et))}}let X=R[R.length-1];(Math.abs(X.x-q.x)>ce||Math.abs(X.y-q.y)>ce)&&R.push(q);let oe=[];R.length>0&&oe.push(R[0]);for(let se=1;se<R.length;se++){let re=R[se],ee=oe[oe.length-1];(Math.abs(re.x-ee.x)>ce||Math.abs(re.y-ee.y)>ce)&&oe.push(re)}x.points=oe}for(let u of r){let x=u.__originalEdge;x&&u.points&&(x.points=u.points)}e.edges=(e.edges??[]).filter(u=>!u.isLayoutOnly);let V=i((u,x)=>{let L=x.x??0,R=x.y??0,C=x.width??0,k=x.height??0;if(C<=0||k<=0)return u;let U=L-C/2,q=L+C/2,j=R-k/2,X=R+k/2;if(u.x<U||u.x>q||u.y<j||u.y>X)return u;let oe=u.x-U,se=q-u.x,re=u.y-j,ee=X-u.y,ye=Math.min(oe,se,re,ee);return ye===oe?{x:U,y:u.y}:ye===se?{x:q,y:u.y}:ye===re?{x:u.x,y:j}:{x:u.x,y:X}},"nodeBoundaryClamp");for(let u of e.edges){let x=u.points;if(!x||x.length<2)continue;let L=u.start,R=u.end,C=L?s.get(L):void 0,k=R?s.get(R):void 0;C&&(x[0]=V(x[0],C)),k&&(x[x.length-1]=V(x[x.length-1],k))}return e}i(Ir,"routeEdgesOrthogonal");function Os(e){return e.direction??"TB"}i(Os,"getSwimlaneDirection");function Mr(e){let t=ro(e),n=e.config.flowchart?.nodeSpacing??40,o=e.config.flowchart?.rankSpacing??100,r=e.config.swimlane?.ignoreCrossLaneEdges??!0,s=e.config.swimlane?.optimizeRanksByCrossings??!0,a=e.config.swimlane?.automaticLaneOrdering??!1,m=Os(e),{ordered:l,coordinates:d}=yr(t,{nodeGap:n,layerGap:o,ignoreCrossLaneEdges:r,optimizeRanksByCrossings:s,automaticLaneOrdering:a,direction:m});so(t,l,d,{nodeGap:n,layerGap:o});for(let f of e.edges??[])delete f.points;Ir(e,m);for(let f of e.edges??[])(!f.curve||f.curve==="basis")&&(f.curve="rounded");return Vo(e,m),_n(e),m}i(Mr,"runSwimlaneLayoutCore");function ws(e){oo(e);let t=io(e);e.nodes=t.nodes,e.edges=t.edges}i(ws,"prepareSwimlaneLayout");var fc=Jn({prepareLayout:ws,runLayoutCore:Mr,afterPaint:to});export{fc as render};