UNPKG

ranui

Version:

A framework-agnostic Web Components UI library built on native custom elements, with TypeScript types, light/dark theming, SSR and PWA support.

5 lines (4 loc) 9.37 kB
const b=require("./chunk-Y2CYZVJY-DPaYLFFP.cjs"),c=require("./src-C9EhKhbk.cjs"),R=require("./chunk-WYO6CB5R-u4mJNOcO.cjs");require("./chunk-ICXQ74PX-BbT9JaEW.cjs");require("./chunk-HOUHSVGY-BGB3dOvI.cjs");require("./chunk-Q4XR5HBZ-aBnPq509.cjs");require("./chunk-7BUUIJ7U-DMv_UkjI.cjs");const M=require("./chunk-OGEWGWER-DX8sW1dT.cjs"),k=require("./graphlib-Du-578Js.cjs"),G=require("./dagre-D1-W1tt6.cjs"),w=require("./chunk-RYQCIY6F-DVRzSnsI.cjs");require("./chunk-C7G6YPKG-CKEeW9TM.cjs");const E=require("./chunk-ZGVPDNZ5-Cw5_HJba.cjs"),_=require("./chunk-52WLFC77-BChUrU24.cjs");var q=b.__name((r,t,f)=>Math.max(t,Math.min(f,r)),"clamp"),I=b.__name((r="TB")=>{switch(r){case"BT":return"bottom";case"LR":return"right";case"RL":return"left";default:return"top"}},"getDefaultSelfLoopSide"),D=b.__name(r=>r==="flowchart"||r==="flowchart-v2"||r==="stateDiagram","shouldMergeSelfLoopSegments"),B=b.__name((r,t,f,y,a)=>{const o=[],s=new Set;if(f.forEach(({start:i,end:n})=>{i!==y&&s.add(i),n!==y&&s.add(n)}),s.forEach(i=>{const n=r.node(i);typeof n?.x=="number"&&typeof n?.y=="number"&&o.push(n)}),o.length===0&&f.forEach(({edge:i})=>{(i.points??[]).forEach(n=>{typeof n?.x=="number"&&typeof n?.y=="number"&&o.push(n)})}),o.length===0)return I(a);const g=o.reduce((i,n)=>({x:i.x+n.x/o.length,y:i.y+n.y/o.length}),{x:0,y:0}),u=g.x-t.x,l=g.y-t.y;return Math.abs(u)>Math.abs(l)?u>0?"right":"left":Math.abs(l)>0?l>0?"bottom":"top":I(a)},"getSelfLoopSide"),O=b.__name((r,t="top",f=0,y=0)=>{const a=r.x,o=r.y-f,s=r.width/2,g=r.height/2,u=Math.max(36,Math.min(100,r.width*.8)),l=q(Math.max(y,r.width*.35),36,u),i=q(Math.min(r.width,r.height)*.45,24,48);switch(t){case"bottom":{const n=o+g;return[{x:a-l/2,y:n},{x:a-l/2,y:n+i},{x:a+l/2,y:n+i},{x:a+l/2,y:n}]}case"right":{const n=a+s;return[{x:n,y:o-l/2},{x:n+i,y:o-l/2},{x:n+i,y:o+l/2},{x:n,y:o+l/2}]}case"left":{const n=a-s;return[{x:n,y:o-l/2},{x:n-i,y:o-l/2},{x:n-i,y:o+l/2},{x:n,y:o+l/2}]}default:{const n=o-g;return[{x:a-l/2,y:n},{x:a-l/2,y:n-i},{x:a+l/2,y:n-i},{x:a+l/2,y:n}]}}},"getSelfLoopPoints"),Y=b.__name((r,t,f="top",y=0,a={})=>{const s=r.x,g=r.y-y,u=a.width??0,l=a.height??0;switch(f){case"bottom":return{x:s,y:Math.max(...t.map(i=>i.y))+l/2+4};case"right":return{x:Math.max(...t.map(i=>i.x))+u/2+4,y:g};case"left":return{x:Math.min(...t.map(i=>i.x))-u/2-4,y:g};default:return{x:s,y:Math.min(...t.map(i=>i.y))-l/2-4}}},"getSelfLoopLabelPosition"),C=b.__name((r,t=0,{mergeSelfLoops:f=!0}={})=>{const y=new Map,a=[],o=r.graph()?.rankdir;return r.edges().forEach(s=>{const g=r.edge(s);if(f&&g.selfLoop){const u=g.selfLoop.id;y.has(u)||y.set(u,[]),y.get(u).push({edge:g,start:s.v,end:s.w})}else a.push({edge:g,start:s.v,end:s.w})}),y.forEach(s=>{if(s.length!==3){s.forEach(e=>a.push(e));return}s.sort((e,h)=>e.edge.selfLoop.order-h.edge.selfLoop.order);const[g,u,l]=s,i=g.edge.originalEdge??u.edge.originalEdge??l.edge.originalEdge??u.edge,n=r.node(i.start);if(!n){s.forEach(e=>a.push(e));return}const p={width:u.edge.width,height:u.edge.height},m=B(r,n,s,i.start,o),S=O(n,m,t,p.width??0),L=Y(n,S,m,t,p),d={...u.edge,...i,id:i.id,points:S,start:i.start,end:i.end,x:L.x,y:L.y,width:p.width,height:p.height,labelStyle:u.edge.labelStyle,fromCluster:g.edge.fromCluster??u.edge.fromCluster??l.edge.fromCluster,toCluster:g.edge.toCluster??u.edge.toCluster??l.edge.toCluster};delete d.selfLoop,delete d.originalEdge,a.push({edge:d,start:d.start,end:d.end})}),a},"getEdgesToRender"),P=b.__name(async(r,t,f,y,a,o)=>{c.log.warn("Graph in recursive render:XAX",w.write(t),a);const s=t.graph().rankdir;c.log.trace("Dir in recursive render - dir:",s);const g=r.insert("g").attr("class","root");t.nodes()?c.log.info("Recursive render XXX",t.nodes()):c.log.info("No nodes found for",t),t.edges().length>0&&c.log.info("Recursive edges",t.edge(t.edges()[0]));const u=g.insert("g").attr("class","clusters"),l=g.insert("g").attr("class","edgePaths"),i=g.insert("g").attr("class","edgeLabels"),n=g.insert("g").attr("class","nodes"),p=D(f);await Promise.all(t.nodes().map(async function(d){const e=t.node(d);if(a!==void 0){const h=JSON.parse(JSON.stringify(a.clusterData));c.log.trace(`Setting data for parent cluster XXX Node.id = `,d,` data=`,h.height,` Parent cluster`,a.height),t.setNode(a.id,h),t.parent(d)||(c.log.trace("Setting parent",d,a.id),t.setParent(d,a.id,h))}if(c.log.info("(Insert) Node XXX"+d+": "+JSON.stringify(t.node(d))),e?.clusterNode){c.log.info("Cluster identified XBX",d,e.width,t.node(d));const{ranksep:h,nodesep:x}=t.graph();e.graph.setGraph({...e.graph.graph(),ranksep:h+25,nodesep:x});const X=await P(n,e.graph,f,y,t.node(d),o),N=X.elem;E.updateNodeBounds(e,N),e.diff=X.diff||0,c.log.info("New compound node after recursive render XAX",d,"width",e.width,"height",e.height),E.setNodeElem(N,e)}else t.children(d).length>0?(c.log.trace("Cluster - the non recursive path XBX",d,e.id,e,e.width,"Graph:",t),c.log.trace(w.findNonClusterChild(e.id,t)),w.clusterDb.set(e.id,{id:w.findNonClusterChild(e.id,t),node:e})):(c.log.trace("Node - the non recursive path XAX",d,n,t.node(d),s),await E.insertNode(n,t.node(d),{config:o,dir:s}))})),await b.__name(async()=>{const d=t.edges().map(async function(e){const h=t.edge(e.v,e.w,e.name);if(c.log.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e)),c.log.info("Edge "+e.v+" -> "+e.w+": ",e," ",JSON.stringify(t.edge(e))),c.log.info("Fix",w.clusterDb,"ids:",e.v,e.w,"Translating: ",w.clusterDb.get(e.v),w.clusterDb.get(e.w)),p&&h.selfLoop){if(h.selfLoop.order!==1)return;const x=h.id;h.id=h.selfLoop.id,await _.insertEdgeLabel(i,h),h.id=x;return}await _.insertEdgeLabel(i,h)});await Promise.all(d)},"processEdges")(),c.log.info("Graph before layout:",JSON.stringify(w.write(t))),c.log.info("############################################# XXX"),c.log.info("### Layout ### XXX"),c.log.info("############################################# XXX"),G.layout(t),c.log.info("Graph after layout:",JSON.stringify(w.write(t)));let m=0,{subGraphTitleTotalMargin:S}=M.getSubGraphTitleMargins(o);await Promise.all(w.sortNodesByHierarchy(t).map(async function(d){const e=t.node(d);if(c.log.info("Position XBX => "+d+": ("+e.x,","+e.y,") width: ",e.width," height: ",e.height),e?.clusterNode)e.y+=S,c.log.info("A tainted cluster node XBX1",d,e.id,e.width,e.height,e.x,e.y,t.parent(d)),w.clusterDb.get(e.id).node=e,E.positionNode(e);else if(t.children(d).length>0){c.log.info("A pure cluster node XBX1",d,e.id,e.x,e.y,e.width,e.height,t.parent(d)),e.height+=S,t.node(e.parentId);const h=e?.padding/2||0,x=e?.labelBBox?.height||0,X=x-h||0;c.log.debug("OffsetY",X,"labelHeight",x,"halfPadding",h),await E.insertCluster(u,e),w.clusterDb.get(e.id).node=e}else{const h=t.node(e.parentId);e.y+=S/2,c.log.info("A regular node XBX1 - using the padding",e.id,"parent",e.parentId,e.width,e.height,e.x,e.y,"offsetY",e.offsetY,"parent",h,h?.offsetY,e),E.positionNode(e)}}));const L=S/2;return C(t,L,{mergeSelfLoops:p}).forEach(function({edge:d,start:e,end:h}){c.log.info("Edge "+e+" -> "+h+": "+JSON.stringify(d),d),d.points.forEach(N=>N.y+=L);const x=t.node(e),X=t.node(h);_.positionEdgeLabel(d,_.insertEdge(l,d,w.clusterDb,f,x,X,y))}),t.nodes().forEach(function(d){const e=t.node(d);c.log.info(d,e.type,e.diff),e.isGroup&&(m=e.diff)}),c.log.warn("Returning from recursive render XAX",g,m),{elem:g,diff:m}},"recursiveRender"),J=b.__name(async(r,t)=>{const f=new k.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:r.direction,nodesep:r.config?.nodeSpacing||r.config?.flowchart?.nodeSpacing||r.nodeSpacing,ranksep:r.config?.rankSpacing||r.config?.flowchart?.rankSpacing||r.rankSpacing,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),y=t.select("g");_.markers_default(y,r.markers,r.type,r.diagramId),E.clear2(),_.clear(),E.clear(),w.clear(),r.nodes.forEach(o=>{f.setNode(o.id,{...o}),o.parentId&&f.setParent(o.id,o.parentId)}),c.log.debug("Edges:",r.edges),r.edges.forEach(o=>{if(o.start===o.end){const s=o.start,g=s+"---"+s+"---1",u=s+"---"+s+"---2",l=f.node(s);f.setNode(g,{domId:g,id:g,parentId:l.parentId,labelStyle:"",label:"",padding:0,shape:"labelRect",style:"",width:10,height:10}),f.setParent(g,l.parentId),f.setNode(u,{domId:u,id:u,parentId:l.parentId,labelStyle:"",padding:0,shape:"labelRect",label:"",style:"",width:10,height:10}),f.setParent(u,l.parentId);const i=structuredClone(o),n=structuredClone(o),p=structuredClone(o),m=structuredClone(o);n.originalEdge=i,n.selfLoop={id:i.id,order:0},p.originalEdge=i,p.selfLoop={id:i.id,order:1},m.originalEdge=i,m.selfLoop={id:i.id,order:2},n.label="",n.arrowTypeEnd="none",n.endLabelLeft="",n.endLabelRight="",n.startLabelLeft="",n.id=s+"-cyclic-special-1",p.startLabelRight="",p.startLabelLeft="",p.endLabelLeft="",p.endLabelRight="",p.arrowTypeStart="none",p.arrowTypeEnd="none",p.id=s+"-cyclic-special-mid",m.label="",m.startLabelRight="",m.startLabelLeft="",m.arrowTypeStart="none",l.isGroup&&(n.fromCluster=s,m.toCluster=s),m.id=s+"-cyclic-special-2",m.arrowTypeStart="none",f.setEdge(s,g,n,s+"-cyclic-special-0"),f.setEdge(g,u,p,s+"-cyclic-special-1"),f.setEdge(u,s,m,s+"-cyclic-special-2")}else f.setEdge(o.start,o.end,{...o},o.id)}),c.log.warn("Graph at first:",JSON.stringify(w.write(f))),w.adjustClustersAndEdges(f),c.log.warn("Graph after XAX:",JSON.stringify(w.write(f)));const a=R.getConfig2();await P(y,f,r.type,r.diagramId,void 0,a)},"render");exports.getEdgesToRender=C;exports.render=J;