@cyber-harbour/ui 1.0.68 → 1.0.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +0 -4
- package/dist/index.d.ts +0 -4
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/Graph2D/Graph2D.tsx +2 -7
- package/src/Graph2D/types.ts +0 -4
package/dist/index.mjs
CHANGED
|
@@ -1137,7 +1137,7 @@ import x1,{createGlobalStyle,styled,useTheme,css,StyleSheetManager,ThemeProvider
|
|
|
1137
1137
|
display: flex;
|
|
1138
1138
|
align-items: center;
|
|
1139
1139
|
justify-content: center;
|
|
1140
|
-
`,s9=t(({width:e=280,height:o=280})=>{let r=useTheme();return jsx(i9,{children:jsxs(D8,{foregroundColor:r.contentLoader.foreground,backgroundColor:r.contentLoader.background,width:e,height:o,viewBox:"0 0 280 280",children:[jsx("path",{d:"m55 38-0.97266 0.22852 7.0801 30.092-18.355-20.979-0.75195 0.6582 19.596 22.395 0.43164 1.834 0.97266-0.22852 0.75195-0.6582-0.37695-0.42969 9.625-27.912-0.94531-0.32617-9.4375 27.371-0.10547-0.12109zm8 34-0.78516 0.61914 0.0957 0.12305-12.311 13.258 0.73242 0.67969 12.205-13.145 14.277 18.084 0.78516-0.61914-14.373-18.207 0.10547-0.11328zm15 19-0.48438 0.875 46.992 25.996 8e-3 4e-3 20.506 11.592-28.182 4.5449 0.15998 0.98819 29.418-4.7441 0.25 0.14062-12.555 24.143 0.88672 0.46094 13-25 15 25 26 30v18l-11 18 0.85352 0.52148 9.8008-16.039-4.6543 33.518 0.99023 0.13867 4.7793-34.408 7.2305 16.27 0.91406-0.40625-7.9141-17.807v-17.104l18 12.316 0.56445-0.82617-18.896-12.928-25.855-29.836-14.633-24.387 0.01562-0.02344h23.805v-1h-23.152l13.848-21.234 55.201-28.791-0.45898-0.88476 0.77734 0.62305 11.402-14.25 16.668-11.842-0.58008-0.81641-16.785 11.928-11.486 14.355-55.434 28.912-14.277 21.893-7.7617-27.166-0.96094 0.27344 7.7227 27.031-1.1191 0.17969-21.604-12.211zm140.43-12.912-6.957-17.338-0.92773 0.37305 6.957 17.338zm-6.957-17.338 0.72266 0.69336 16.232-16.896-0.7207-0.69336zm-3.4766 137.25 5 15 0.94922-0.31641-5-15zm-91-63-0.48047-0.87695-31 17 0.48047 0.87695zm-31 17 5 18 0.96289-0.26758-5-18zm0 0-0.70703-0.70703-12.898 12.898-17.881 9.9336 0.48633 0.875 18-10zm5 18-0.64062-0.76758-18 15 0.64062 0.76758z"}),jsx("circle",{cx:"229.92",cy:"63.7318",r:"5",transform:"rotate(173.661 229.92 63.7318)"}),jsx("circle",{cx:"227.711",cy:"43.8541",r:"5",transform:"rotate(173.661 227.711 43.8541)"}),jsx("circle",{cx:"211.478",cy:"60.7499",r:"5",transform:"rotate(173.661 211.478 60.7499)"}),jsx("circle",{cx:"218.434",cy:"78.0877",r:"5",transform:"rotate(173.661 218.434 78.0877)"}),jsx("circle",{cx:"246.705",cy:"51.8054",r:"5",transform:"rotate(173.661 246.705 51.8054)"}),jsx("circle",{cx:"42",cy:"48",r:"5"}),jsx("circle",{cx:"55",cy:"38",r:"5"}),jsx("circle",{cx:"73",cy:"43",r:"5"}),jsx("circle",{cx:"63",cy:"72",r:"5"}),jsx("circle",{cx:"50",cy:"86",r:"5"}),jsx("circle",{cx:"78",cy:"91",r:"5"}),jsx("circle",{cx:"73",cy:"165",r:"5"}),jsx("circle",{cx:"73",cy:"185",r:"5"}),jsx("circle",{cx:"91",cy:"170",r:"5"}),jsx("circle",{cx:"86",cy:"152",r:"5"}),jsx("circle",{cx:"148",cy:"130",r:"5"}),jsx("circle",{cx:"189",cy:"185",r:"5"}),jsx("circle",{cx:"163",cy:"107",r:"5"}),jsx("circle",{cx:"140",cy:"102",r:"5"}),jsx("circle",{cx:"117",cy:"135",r:"5"}),jsx("circle",{cx:"125",cy:"117",r:"5"}),jsx("circle",{cx:"208",cy:"198",r:"5"}),jsx("circle",{cx:"189",cy:"203",r:"5"}),jsx("circle",{cx:"198",cy:"221",r:"5"}),jsx("circle",{cx:"178",cy:"221",r:"5"}),jsx("circle",{cx:"184",cy:"239",r:"5"}),jsx("circle",{cx:"213",cy:"213",r:"5"}),jsx("circle",{cx:"173",cy:"130",r:"5"}),jsx("circle",{cx:"163",cy:"155",r:"5"}),jsx("circle",{cx:"135",cy:"155",r:"5"}),jsx("circle",{cx:"55",cy:"175",r:"5"})]})})},"GraphLoader"),Q4=s9;var S2=window.devicePixelRatio||1;function L9(e){return !e||e.length===0?[]:e.map(o=>{let r=new Image;r.src=o.img;let i=new Image;return i.src=o.hoverImg,{...o,normalImg:r,hoverImg:i}})}t(L9,"prepareButtonImages");var A={fontSize:3,nodeSizeBase:30,nodeAreaFactor:2,textPaddingFactor:.9,gridSpacing:20,dotSize:1,maxZoom:4},M9=forwardRef(({loading:e,width:o,height:r,graphData:i,buttons:C=[],onNodeClick:d,onBackgroundClick:g,onNodeHover:m,onLinkHover:x,onLinkClick:S},F)=>{let L=useTheme(),[P,J]=useState(true),s=useRef({transform:{x:0,y:0,k:1},isPanning:false,hoveredNode:null,hoveredLink:null,draggedNode:null,selectedNode:null,hoveredButtonIndex:null,highlightNodes:new Set,highlightLinks:new Set,lastMousePos:{x:0,y:0},mustBeStoppedPropagation:false,lastHoveredNode:null,mouseStartPos:null,isDragging:false,lastHoveredNodeRef:null,width:o*S2,height:r*S2}),{nodes:U,links:Q}=useMemo(()=>u9(i),[i]),[W,w2]=useState([]),D=useRef(null),$=useRef(null),X=useRef(null),y2=scaleOrdinal(schemeCategory10),v2=useCallback(()=>{if(!D.current)return false;try{let n=D.current.getContext("2d");return n?(X.current=n,!0):(console.error("Failed to get 2D context"),!1)}catch(n){return console.error("Error initializing Canvas 2D context:",n),false}},[]),e1=useCallback(()=>$.current?$.current.nodes():null,[]),$1=useCallback(()=>{if(!$.current)return null;let n=$.current.force("link");return n?n.links():null},[]),S5=useCallback(n=>{n.save(),n.setTransform(1,0,0,1,0,0);let{width:p,height:c}=s.current,l=A.gridSpacing,f=A.dotSize;n.fillStyle=L.graph2D.grid.dotColor;for(let b=l/2;b<=p;b+=l)for(let u=l/2;u<=c;u+=l)n.beginPath(),n.arc(b,u,f,0,2*Math.PI),n.fill();n.restore();},[L.graph2D.grid.dotColor,A.gridSpacing,A.dotSize]),t6=useCallback((n,p,c)=>{if(!n)return "";if(c.measureText(n).width<=p)return n;let f=n,b="...";for(;c.measureText(f+b).width>p&&f.length>0;)f=f.slice(0,-1);return f+b},[]),L2=t(n=>{let c=Math.min(n,A.maxZoom)/A.maxZoom;return Math.max(A.fontSize*c,A.fontSize)},"calculateFontSize"),w5=useCallback(n=>{let p=$1(),c=e1();!p||p.length===0||!c||c.length===0||(n.lineWidth=.5,n.globalAlpha=1,p.forEach(l=>{let f=typeof l.source=="object"?l.source:c.find(r1=>r1.id===l.source),b=typeof l.target=="object"?l.target:c.find(r1=>r1.id===l.target);if(!f||!b)return;let u={x:f.x||0,y:f.y||0},h={x:b.x||0,y:b.y||0},y=h.x-u.x,v=h.y-u.y,M=Math.sqrt(y*y+v*v),B=y/M,T=v/M,O=A.nodeSizeBase/2,R=A.nodeSizeBase/2,N=4,w={x:u.x+B*O,y:u.y+T*O},E={x:h.x-B*(R+N),y:h.y-T*(R+N)},H={x:h.x-B*(R+1),y:h.y-T*(R+1)},q=s.current.highlightLinks.has(l),Y=q?L.graph2D.link.highlighted:L.graph2D.link.normal,_=q?1.5:.5,j=u.x+(h.x-u.x)/2,m1=u.y+(h.y-u.y)/2,i1=Math.atan2(v,y);if(l.label){let r1=s.current.transform.k,s1=L2(r1);n.font=`${s1}px Sans-Serif`;let k5=n.measureText(l.label).width,I5=10;n.beginPath(),n.moveTo(w.x,w.y);let E5=M/2-(k5+I5)/2,$5={x:u.x+B*E5,y:u.y+T*E5};n.lineTo($5.x,$5.y),n.strokeStyle=Y,n.lineWidth=_,n.stroke(),n.beginPath();let Z5=M/2+(k5+I5)/2,B5={x:u.x+B*Z5,y:u.y+T*Z5};n.moveTo(B5.x,B5.y),n.lineTo(E.x,E.y),n.strokeStyle=Y,n.lineWidth=_,n.stroke();}else n.beginPath(),n.moveTo(w.x,w.y),n.lineTo(E.x,E.y),n.strokeStyle=Y,n.lineWidth=_,n.stroke();let S1=2;if(n.save(),n.translate(H.x,H.y),n.rotate(i1),n.beginPath(),n.moveTo(0,0),n.lineTo(-4,S1),n.lineTo(-4,0),n.lineTo(-4,-2),n.closePath(),n.fillStyle=Y,n.fill(),n.restore(),l.label){let r1=s.current.transform.k,s1=L2(r1);n.font=`${s1}px Sans-Serif`,n.textAlign="center",n.textBaseline="middle",n.save(),n.translate(j,m1),Math.abs(i1)>Math.PI/2?n.rotate(i1+Math.PI):n.rotate(i1),n.fillStyle=q?L.graph2D.link.highlightedTextColor:L.graph2D.link.textColor,n.fillText(l.label,0,0),n.restore();}}));},[A,L.graph2D.link]),y5=useCallback((n,p)=>{if(!W||W.length===0||!n||!n.x||!n.y)return;let{x:c,y:l}=n,f=A.nodeSizeBase*A.nodeAreaFactor/2;p.save();let b=Math.min(W.length,8),u=Math.min(Math.PI*2/b,Math.PI);for(let h=0;h<b;h++){let y=h*u,v=(h+1)*u,M=s.current.hoveredButtonIndex===h;p.beginPath(),p.arc(c,l,f,y,v,false),p.lineTo(c,l),p.closePath(),p.lineWidth=1,p.strokeStyle=L.graph2D?.button?.stroke||"#FFFFFF",p.stroke(),p.fillStyle=M?L.graph2D?.button?.hoverFill||"rgba(255, 255, 255, 0.3)":L.graph2D?.button?.normalFill||"rgba(255, 255, 255, 0.1)",p.fill();let B=f*.2,T=(y+v)/2,O=f-A.nodeSizeBase/2+B,R=c+Math.cos(T)*O,N=l+Math.sin(T)*O,w=W[h],E=M?w.hoverImg:w.normalImg;if(E.complete)try{p.drawImage(E,R-B/2,N-B/2,B,B);}catch(H){console.warn("Error rendering button icon:",H);}else E.onload=()=>{if(X.current)try{p.drawImage(E,R-B/2,N-B/2,B,B);}catch(H){console.warn("Error rendering button icon after load:",H);}};}p.restore();},[W,L.graph2D?.button]),v5=useCallback(n=>{let p=e1();!p||p.length===0||(n.globalAlpha=1,p.forEach(c=>{let{x:l,y:f,color:b,fontColor:u,label:h}=c,y=s.current.highlightNodes.has(c)||c===s.current.hoveredNode||c===s.current.draggedNode,v=c===s.current.selectedNode,M=A.nodeSizeBase,B=A.nodeSizeBase/2;if(y&&!v){let T=A.nodeSizeBase*A.nodeAreaFactor*.75/2;n.beginPath(),n.arc(l,f,T,0,2*Math.PI,false),n.fillStyle=L.graph2D.ring.highlightFill,n.fill();}if(v)if(C&&C.length>0)y5(c,n);else {let T=A.nodeSizeBase*A.nodeAreaFactor/2;n.beginPath(),n.arc(l,f,T,0,2*Math.PI,false),n.fillStyle=L.graph2D.ring.selectionFill||L.graph2D.ring.highlightFill,n.fill();}if(n.beginPath(),n.arc(l,f,B,0,2*Math.PI),n.fillStyle=b||y2(c.group||"0"),n.fill(),h){n.save(),n.translate(l,f);let T=s.current.transform.k,O=L2(T),R=M*A.textPaddingFactor;n.font=`${O}px Sans-Serif`,n.textAlign="center",n.textBaseline="middle",n.fillStyle=u||"#000";let N=t6(h,R,n);n.fillText(N,0,0),n.restore();}}));},[L.graph2D.ring,C,y5]),K=useCallback(()=>{let n=X.current;n&&(n.clearRect(0,0,s.current.width,s.current.height),S5(n),n.save(),n.setTransform(s.current.transform.k,0,0,s.current.transform.k,s.current.transform.x,s.current.transform.y),w5(n),v5(n),n.restore());},[w5,v5,S5]),L5=useCallback((n,p=[],c)=>{let l=$1()||[],f=e1()||[];if(!$.current||!n.length)return;let{width:b,height:u}=s.current,h=c?.smoothAppearance??false,y=c?.transitionDuration??1e3,v=new Set(f.map(w=>w.id)),M=n.filter(w=>!v.has(w.id)),B=new Set(l.map(w=>`${typeof w.source=="object"?w.source.id:w.source}-${typeof w.target=="object"?w.target.id:w.target}`)),T=p.filter(w=>{let E=`${typeof w.source=="object"?w.source.id:w.source}-${typeof w.target=="object"?w.target.id:w.target}`;return !B.has(E)});if(M.length===0&&T.length===0)return;let O=[...f,...M],R=[...l,...T];h&&(M.forEach(w=>{let E=T.filter(H=>{let q=typeof H.source=="object"?H.source.id:H.source,Y=typeof H.target=="object"?H.target.id:H.target;return q===w.id&&v.has(Y)||Y===w.id&&v.has(q)});if(E.length>0){let H=E[0],q=typeof H.source=="object"?H.source.id===w.id?H.target:H.source.id:H.source===w.id?H.target:H.source,Y=O.find(_=>_.id===q);if(Y&&Y.x!==void 0&&Y.y!==void 0){let _=30+Math.random()*20,j=Math.random()*Math.PI*2;w.x=Y.x+Math.cos(j)*_,w.y=Y.y+Math.sin(j)*_,w.vx=0,w.vy=0;}}else {let H=b/2,q=u/2,Y=Math.min(b,u)/4,_=Math.random()*Math.PI*2;w.x=H+Math.cos(_)*(Y*Math.random()),w.y=q+Math.sin(_)*(Y*Math.random()),w.vx=0,w.vy=0;}}),f.forEach(w=>{w.fx=w.x,w.fy=w.y;})),$.current.nodes(O);let N=$.current.force("link");N&&N.links(R),T.forEach(w=>{let E=typeof w.source=="object"?w.source:O.find(q=>q.id===w.source),H=typeof w.target=="object"?w.target:O.find(q=>q.id===w.target);!E||!H||(!E.neighbors&&(E.neighbors=[]),!H.neighbors&&(H.neighbors=[]),E.neighbors.push(H),H.neighbors.push(E),!E.links&&(E.links=[]),!H.links&&(H.links=[]),E.links.push(w),H.links.push(w));}),h?($.current.alphaTarget(.3),$.current.alpha(.3),$.current.velocityDecay(.7),$.current.restart(),setTimeout(()=>{f.forEach(w=>{w.fx=void 0,w.fy=void 0;}),$.current?.alphaTarget(0),$.current?.alpha(.1),$.current?.velocityDecay(.6);},y)):$.current.alpha(.1).restart(),K();},[U,K]),M5=useCallback(n=>{let p=e1(),c=$1();if(!$.current||!n.length||!p||p.length===0||!c||c.length===0)return;let l=new Set(n);if(s.current.selectedNode&&s.current.selectedNode.id!==void 0&&l.has(s.current.selectedNode.id)&&(s.current.selectedNode=null),s.current.hoveredNode&&s.current.hoveredNode.id!==void 0&&l.has(s.current.hoveredNode.id)&&(s.current.hoveredNode=null,s.current.highlightNodes=new Set,s.current.highlightLinks=new Set),s.current.hoveredLink){let h=typeof s.current.hoveredLink.source=="object"?s.current.hoveredLink.source.id:s.current.hoveredLink.source,y=typeof s.current.hoveredLink.target=="object"?s.current.hoveredLink.target.id:s.current.hoveredLink.target;(h!==void 0&&l.has(h)||y!==void 0&&l.has(y))&&(s.current.hoveredLink=null,s.current.highlightNodes=new Set,s.current.highlightLinks=new Set);}s.current.draggedNode&&s.current.draggedNode.id!==void 0&&l.has(s.current.draggedNode.id)&&(s.current.draggedNode=null);let f=p.filter(h=>h.id!==void 0&&!l.has(h.id)),b=c.filter(h=>{let y=typeof h.source=="object"?h.source.id:h.source,v=typeof h.target=="object"?h.target.id:h.target;return y!==void 0&&!l.has(y)&&v!==void 0&&!l.has(v)});f.forEach(h=>{h.neighbors=[],h.links=[];}),b.forEach(h=>{let y=typeof h.source=="object"?h.source:f.find(M=>M.id===h.source),v=typeof h.target=="object"?h.target:f.find(M=>M.id===h.target);!y||!v||(y.neighbors=y.neighbors||[],v.neighbors=v.neighbors||[],y.neighbors.push(v),v.neighbors.push(y),y.links=y.links||[],v.links=v.links||[],y.links.push(h),v.links.push(h));}),$.current.nodes(f);let u=$.current.force("link");u&&u.links(b),K();},[K]),Z1=useCallback((n=0,p=20)=>{let c=e1();if(!X.current||!D.current||!c||!c.length)return;let f=1/0,b=1/0,u=-1/0,h=-1/0;if(c.forEach(y=>{if(y.x===void 0||y.y===void 0)return;let v=y.x,M=y.y;f=Math.min(f,v),b=Math.min(b,M),u=Math.max(u,v),h=Math.max(h,M);}),isFinite(f)&&isFinite(u)&&isFinite(b)&&isFinite(h)){let{width:y,height:v}=s.current;f-=p,b-=p,u+=p,h+=p;let M=u-f,B=h-b,T=M>0?y/M:1,O=B>0?v/B:1,R=Math.min(T,O,10),N=f+M/2,w=b+B/2,E={k:R,x:y/2-N*R,y:v/2-w*R};if(n>0){let H={...s.current.transform},q=Date.now(),Y=t(()=>{let _=Math.min(1,(Date.now()-q)/n),j=_===1?1:1-Math.pow(1-_,3),m1={k:H.k+(E.k-H.k)*j,x:H.x+(E.x-H.x)*j,y:H.y+(E.y-H.y)*j};s.current.transform=m1,K(),_<1&&requestAnimationFrame(Y);},"animateZoom");requestAnimationFrame(Y);}else s.current.transform=E,K();}},[]),B1=useCallback((n,p)=>{let c=e1();if(!c||c.length===0)return null;let l=A.nodeSizeBase/2,f=window.devicePixelRatio||1,b=(n*f-s.current.transform.x)/s.current.transform.k,u=(p*f-s.current.transform.y)/s.current.transform.k;return c.find(h=>{let y=(h.x||0)-b,v=(h.y||0)-u;return Math.sqrt(y*y+v*v)<=l})||null},[]),T1=useCallback((n,p)=>{let c=$1(),l=e1();if(!c||c.length===0||!l||l.length===0)return null;let f=window.devicePixelRatio||1,b=(n*f-s.current.transform.x)/s.current.transform.k,u=(p*f-s.current.transform.y)/s.current.transform.k,h=5;return c.find(y=>{let v=typeof y.source=="object"?y.source:l.find(s1=>s1.id===y.source),M=typeof y.target=="object"?y.target:l.find(s1=>s1.id===y.target);if(!v||!M)return false;let B=v.x||0,T=v.y||0,O=M.x||0,R=M.y||0,N=b-B,w=u-T,E=O-B,H=R-T,q=N*E+w*H,Y=E*E+H*H;if(Y===0)return false;let _=q/Y;_=Math.max(0,Math.min(1,_));let j=B+_*E,m1=T+_*H,i1=b-j,S1=u-m1;return Math.sqrt(i1*i1+S1*S1)<=h})||null},[]),H5=useCallback((n,p,c,l,f,b,u)=>{let h=n-c,y=p-l,v=Math.sqrt(h*h+y*y),M=Math.atan2(y,h);M<0&&(M+=2*Math.PI);let O=v>=f*.5&&v<=f*1,R=false;return b===Math.PI&&u===Math.PI*2?R=M>=Math.PI&&M<=Math.PI*2:b===0&&u===Math.PI?R=M>=0&&M<=Math.PI:R=b<=u&&M>=b&&M<=u||b>u&&(M>=b||M<=u),O&&R},[]),M2=useCallback(n=>{if(n===s.current.lastHoveredNodeRef)return;s.current.lastHoveredNodeRef=n;let p=new Set,c=new Set;n&&(p.add(n),n.neighbors&&n.neighbors.forEach(l=>p.add(l)),n.links&&n.links.forEach(l=>c.add(l))),s.current.hoveredNode=n,m&&m(n),s.current.highlightNodes=p,s.current.highlightLinks=c;},[m]),H2=useCallback(n=>{if(n===s.current.hoveredLink)return;let p=new Set,c=new Set;if(n){c.add(n);let l=e1();if(l){let f=typeof n.source=="object"?n.source:l.find(u=>u.id===n.source),b=typeof n.target=="object"?n.target:l.find(u=>u.id===n.target);f&&p.add(f),b&&p.add(b);}}s.current.hoveredLink=n,x&&x(n),s.current.highlightNodes=p,s.current.highlightLinks=c;},[x,e1]),V5=useCallback(n=>{S&&S(n);},[S]),F5=useCallback(n=>{s.current.selectedNode=n,d&&d(n);},[d]),P5=useCallback(()=>{s.current.selectedNode=null,g&&g();},[g]),V2=useCallback(n=>{if(!D.current||!$.current)return;let p=D.current.getBoundingClientRect(),c=n.clientX-p.left,l=n.clientY-p.top;s.current.mouseStartPos={x:c,y:l},s.current.isDragging=false;let f=B1(c,l);f?(s.current.draggedNode=f,f.fx=f.x,f.fy=f.y):(s.current.isPanning=true,s.current.lastMousePos={x:c,y:l});},[B1]),G1=useCallback((n,p)=>{let c=null;if(D.current&&s.current&&W.length>0){let l=A.nodeSizeBase*A.nodeAreaFactor/2,f=D.current.getBoundingClientRect(),b=D.current.width/f.width,u=D.current.height/f.height,h=n*b,y=p*u,v=(h-s.current.transform.x)/s.current.transform.k,M=(y-s.current.transform.y)/s.current.transform.k,B=s.current.selectedNode?.x||0,T=s.current.selectedNode?.y||0,O=Math.min(W.length,8),R=Math.min(Math.PI*2/O,Math.PI);for(let N=0;N<O;N++){let w=N*R,E=(N+1)*R;if(H5(v,M,B,T,l,w,E)){c=N;break}}}return c},[W]),F2=useCallback(n=>{if(!D.current)return;let p=D.current.getBoundingClientRect(),c=n.clientX-p.left,l=n.clientY-p.top;if(s.current.draggedNode&&s.current.mouseStartPos&&$.current){let u=s.current.mouseStartPos.x,h=s.current.mouseStartPos.y,y=c-u,v=l-h;Math.sqrt(y*y+v*v)>3&&(s.current.isDragging=true,$.current.alphaTarget()===0&&$.current.alphaTarget(0).restart());let T=window.devicePixelRatio||1,O=(c*T-s.current.transform.x)/s.current.transform.k,R=(l*T-s.current.transform.y)/s.current.transform.k;s.current.draggedNode.fx=O,s.current.draggedNode.fy=R;return}if(s.current.isPanning&&s.current.mouseStartPos){let u=c-s.current.lastMousePos.x,h=l-s.current.lastMousePos.y,y=s.current.mouseStartPos.x,v=s.current.mouseStartPos.y;Math.sqrt(Math.pow(c-y,2)+Math.pow(l-v,2))>3&&(s.current.isDragging=true),s.current.transform={...s.current.transform,x:s.current.transform.x+u,y:s.current.transform.y+h},s.current.lastMousePos={x:c,y:l},K();return}let f,b;if(s.current.selectedNode&&D.current&&W.length>0){let u=G1(c,l);u!==null&&(b=s.current.selectedNode),u!==s.current.hoveredButtonIndex&&(f=true),s.current.hoveredButtonIndex=u;}else s.current.hoveredButtonIndex!==null&&(s.current.hoveredButtonIndex=null);if(!b&&(b=B1(c,l),!b)){let u=T1(c,l),h=u!==s.current.hoveredLink;u&&s.current.hoveredNode&&M2(null),H2(u),D.current&&(D.current.style.cursor=u?"pointer":"default"),h&&K();return}b&&s.current.hoveredLink&&H2(null),b!==s.current.hoveredNode&&(f=true),M2(b),D.current&&(D.current.style.cursor=b?"pointer":"default"),f&&K();},[W,B1,T1,M2,H2,K,H5,G1]),r6=useCallback(n=>{s.current.mustBeStoppedPropagation&&(n.stopPropagation(),n.preventDefault()),s.current.mustBeStoppedPropagation=false;},[]),z1=useCallback(n=>{let p=s.current.isDragging;if(p&&(s.current.mustBeStoppedPropagation=true),!p&&s.current.mouseStartPos){let c=D.current?.getBoundingClientRect();if(c){let l=n.clientX-c.left,f=n.clientY-c.top;W.length>0&&s.current.hoveredButtonIndex===null&&(s.current.hoveredButtonIndex=G1(l,f));let b=false;if(s.current.selectedNode&&s.current.hoveredButtonIndex!==null&&C[s.current.hoveredButtonIndex]){let u=C[s.current.hoveredButtonIndex];u&&u.onClick&&(u.onClick(s.current.selectedNode),b=true,s.current.hoveredButtonIndex=null);}if(!b&&s.current.draggedNode)F5(s.current.draggedNode);else if(!b&&!s.current.draggedNode){let u=T1(l,f);u?V5(u):P5();}}}if(s.current.draggedNode&&$.current){if(p){$.current.alphaTarget(0);let c=.05,l=.04,f=.6;$.current.alpha(c).alphaDecay(l),$.current.velocityDecay(f);}else $.current.alphaTarget(0);s.current.draggedNode.fx=void 0,s.current.draggedNode.fy=void 0,s.current.draggedNode=null;}s.current.isDragging=false,s.current.mouseStartPos=null,s.current.isPanning&&(s.current.isPanning=false),K();},[C,K,F5,P5,T1,V5,G1,W]),P2=useCallback(n=>{if(n.stopPropagation(),n.preventDefault(),!D.current)return;let p=D.current.getBoundingClientRect(),c=n.clientX-p.left,l=n.clientY-p.top,b=-n.deltaY>0?1.1:1/1.1,u=s.current.transform,h=u.k*b;if(h<.01||h>10)return;let y=u.k*b,v=c-(c-u.x)*b,M=l-(l-u.y)*b;s.current.transform={k:y,x:v,y:M},K();},[K]),k2=t((n,p)=>{let c=n.touches[0];if(c){let l={clientX:c.clientX,clientY:c.clientY};p(l);}},"convertTouchToMouseEvent"),n6=useCallback(n=>{k2(n,V2);},[V2]),I2=useCallback(n=>{s.current.mustBeStoppedPropagation&&(n.preventDefault(),n.stopPropagation()),s.current.mustBeStoppedPropagation=false,k2(n,z1);},[z1]),a6=useCallback(n=>{k2(n,F2);},[F2]);return useImperativeHandle(F,()=>({zoomToFit:Z1,addNodes:L5,removeNodes:M5}),[Z1,L5,M5]),useEffect(()=>{let n=D.current,{width:p,height:c}=s.current;if(!n)return;v2(),J(true);let l=p/2,f=c/2,b=A.nodeSizeBase,u=b/2,h=b*2.5;$.current&&$.current.stop();let y=$.current=forceSimulation(U).force("link",forceLink(Q).id(v=>v.id).distance(h).strength(.9)).force("charge",forceManyBody().strength(-b/10*200).theta(.5).distanceMin(b*2)).force("x",forceX().strength(.03)).force("y",forceY().strength(.03)).force("center",forceCenter(l,f).strength(.05)).force("collide",forceCollide().radius(u*2).iterations(2).strength(1)).velocityDecay(.6);return ()=>{y.stop();}},[U,Q]),useLayoutEffect(()=>{let n=D.current;n&&(s.current.width=o*S2,s.current.height=r*S2,n.width=s.current.width,n.height=s.current.height);},[o,r]),useEffect(()=>{if($.current){let n=$.current;n.on("tick",()=>{K();}),n.on("end",()=>{P&&(Z1(0,20),setTimeout(()=>{J(false);},200));});}P||K();},[U,Q,P,K,Z1]),useEffect(()=>{!U||!Q||Q.forEach(n=>{let p=typeof n.source=="object"?n.source:U.find(l=>l.id===n.source),c=typeof n.target=="object"?n.target:U.find(l=>l.id===n.target);!p||!c||(!p.neighbors&&(p.neighbors=[]),!c.neighbors&&(c.neighbors=[]),p.neighbors.push(c),c.neighbors.push(p),!p.links&&(p.links=[]),!c.links&&(c.links=[]),p.links.push(n),c.links.push(n));});},[U,Q]),useEffect(()=>{C&&C.length>0&&w2(L9(C));},[C]),useEffect(()=>{let n=D.current;if(n)return n.addEventListener("wheel",P2,{passive:false}),n.addEventListener("touchend",I2,{passive:false}),()=>{n.removeEventListener("wheel",P2),n.removeEventListener("touchend",I2);}},[P2,I2]),jsxs(H9,{children:[(e||P)&&jsx(Q4,{width:o,height:r}),jsx(V9,{ref:D,style:{width:o,height:r,display:e||P?"none":"block"},onMouseDown:V2,onMouseMove:F2,onMouseUp:z1,onMouseLeave:z1,onClick:r6,onTouchStart:n6,onTouchMove:a6})]})}),H9=styled.div`
|
|
1140
|
+
`,s9=t(({width:e=280,height:o=280})=>{let r=useTheme();return jsx(i9,{children:jsxs(D8,{foregroundColor:r.contentLoader.foreground,backgroundColor:r.contentLoader.background,width:e,height:o,viewBox:"0 0 280 280",children:[jsx("path",{d:"m55 38-0.97266 0.22852 7.0801 30.092-18.355-20.979-0.75195 0.6582 19.596 22.395 0.43164 1.834 0.97266-0.22852 0.75195-0.6582-0.37695-0.42969 9.625-27.912-0.94531-0.32617-9.4375 27.371-0.10547-0.12109zm8 34-0.78516 0.61914 0.0957 0.12305-12.311 13.258 0.73242 0.67969 12.205-13.145 14.277 18.084 0.78516-0.61914-14.373-18.207 0.10547-0.11328zm15 19-0.48438 0.875 46.992 25.996 8e-3 4e-3 20.506 11.592-28.182 4.5449 0.15998 0.98819 29.418-4.7441 0.25 0.14062-12.555 24.143 0.88672 0.46094 13-25 15 25 26 30v18l-11 18 0.85352 0.52148 9.8008-16.039-4.6543 33.518 0.99023 0.13867 4.7793-34.408 7.2305 16.27 0.91406-0.40625-7.9141-17.807v-17.104l18 12.316 0.56445-0.82617-18.896-12.928-25.855-29.836-14.633-24.387 0.01562-0.02344h23.805v-1h-23.152l13.848-21.234 55.201-28.791-0.45898-0.88476 0.77734 0.62305 11.402-14.25 16.668-11.842-0.58008-0.81641-16.785 11.928-11.486 14.355-55.434 28.912-14.277 21.893-7.7617-27.166-0.96094 0.27344 7.7227 27.031-1.1191 0.17969-21.604-12.211zm140.43-12.912-6.957-17.338-0.92773 0.37305 6.957 17.338zm-6.957-17.338 0.72266 0.69336 16.232-16.896-0.7207-0.69336zm-3.4766 137.25 5 15 0.94922-0.31641-5-15zm-91-63-0.48047-0.87695-31 17 0.48047 0.87695zm-31 17 5 18 0.96289-0.26758-5-18zm0 0-0.70703-0.70703-12.898 12.898-17.881 9.9336 0.48633 0.875 18-10zm5 18-0.64062-0.76758-18 15 0.64062 0.76758z"}),jsx("circle",{cx:"229.92",cy:"63.7318",r:"5",transform:"rotate(173.661 229.92 63.7318)"}),jsx("circle",{cx:"227.711",cy:"43.8541",r:"5",transform:"rotate(173.661 227.711 43.8541)"}),jsx("circle",{cx:"211.478",cy:"60.7499",r:"5",transform:"rotate(173.661 211.478 60.7499)"}),jsx("circle",{cx:"218.434",cy:"78.0877",r:"5",transform:"rotate(173.661 218.434 78.0877)"}),jsx("circle",{cx:"246.705",cy:"51.8054",r:"5",transform:"rotate(173.661 246.705 51.8054)"}),jsx("circle",{cx:"42",cy:"48",r:"5"}),jsx("circle",{cx:"55",cy:"38",r:"5"}),jsx("circle",{cx:"73",cy:"43",r:"5"}),jsx("circle",{cx:"63",cy:"72",r:"5"}),jsx("circle",{cx:"50",cy:"86",r:"5"}),jsx("circle",{cx:"78",cy:"91",r:"5"}),jsx("circle",{cx:"73",cy:"165",r:"5"}),jsx("circle",{cx:"73",cy:"185",r:"5"}),jsx("circle",{cx:"91",cy:"170",r:"5"}),jsx("circle",{cx:"86",cy:"152",r:"5"}),jsx("circle",{cx:"148",cy:"130",r:"5"}),jsx("circle",{cx:"189",cy:"185",r:"5"}),jsx("circle",{cx:"163",cy:"107",r:"5"}),jsx("circle",{cx:"140",cy:"102",r:"5"}),jsx("circle",{cx:"117",cy:"135",r:"5"}),jsx("circle",{cx:"125",cy:"117",r:"5"}),jsx("circle",{cx:"208",cy:"198",r:"5"}),jsx("circle",{cx:"189",cy:"203",r:"5"}),jsx("circle",{cx:"198",cy:"221",r:"5"}),jsx("circle",{cx:"178",cy:"221",r:"5"}),jsx("circle",{cx:"184",cy:"239",r:"5"}),jsx("circle",{cx:"213",cy:"213",r:"5"}),jsx("circle",{cx:"173",cy:"130",r:"5"}),jsx("circle",{cx:"163",cy:"155",r:"5"}),jsx("circle",{cx:"135",cy:"155",r:"5"}),jsx("circle",{cx:"55",cy:"175",r:"5"})]})})},"GraphLoader"),Q4=s9;var S2=window.devicePixelRatio||1;function L9(e){return !e||e.length===0?[]:e.map(o=>{let r=new Image;r.src=o.img;let i=new Image;return i.src=o.hoverImg,{...o,normalImg:r,hoverImg:i}})}t(L9,"prepareButtonImages");var A={fontSize:3,nodeSizeBase:30,nodeAreaFactor:2,textPaddingFactor:.9,gridSpacing:20,dotSize:1,maxZoom:4},M9=forwardRef(({loading:e,width:o,height:r,graphData:i,buttons:C=[],onNodeClick:d,onBackgroundClick:g,onNodeHover:m,onLinkHover:x,onLinkClick:S},F)=>{let L=useTheme(),[P,J]=useState(true),s=useRef({transform:{x:0,y:0,k:1},isPanning:false,hoveredNode:null,hoveredLink:null,draggedNode:null,selectedNode:null,hoveredButtonIndex:null,highlightNodes:new Set,highlightLinks:new Set,lastMousePos:{x:0,y:0},mustBeStoppedPropagation:false,mouseStartPos:null,isDragging:false,width:o*S2,height:r*S2}),{nodes:U,links:Q}=useMemo(()=>u9(i),[i]),[W,w2]=useState([]),D=useRef(null),$=useRef(null),X=useRef(null),y2=scaleOrdinal(schemeCategory10),v2=useCallback(()=>{if(!D.current)return false;try{let n=D.current.getContext("2d");return n?(X.current=n,!0):(console.error("Failed to get 2D context"),!1)}catch(n){return console.error("Error initializing Canvas 2D context:",n),false}},[]),e1=useCallback(()=>$.current?$.current.nodes():null,[]),$1=useCallback(()=>{if(!$.current)return null;let n=$.current.force("link");return n?n.links():null},[]),S5=useCallback(n=>{n.save(),n.setTransform(1,0,0,1,0,0);let{width:p,height:c}=s.current,l=A.gridSpacing,f=A.dotSize;n.fillStyle=L.graph2D.grid.dotColor;for(let b=l/2;b<=p;b+=l)for(let u=l/2;u<=c;u+=l)n.beginPath(),n.arc(b,u,f,0,2*Math.PI),n.fill();n.restore();},[L.graph2D.grid.dotColor,A.gridSpacing,A.dotSize]),t6=useCallback((n,p,c)=>{if(!n)return "";if(c.measureText(n).width<=p)return n;let f=n,b="...";for(;c.measureText(f+b).width>p&&f.length>0;)f=f.slice(0,-1);return f+b},[]),L2=t(n=>{let c=Math.min(n,A.maxZoom)/A.maxZoom;return Math.max(A.fontSize*c,A.fontSize)},"calculateFontSize"),w5=useCallback(n=>{let p=$1(),c=e1();!p||p.length===0||!c||c.length===0||(n.lineWidth=.5,n.globalAlpha=1,p.forEach(l=>{let f=typeof l.source=="object"?l.source:c.find(r1=>r1.id===l.source),b=typeof l.target=="object"?l.target:c.find(r1=>r1.id===l.target);if(!f||!b)return;let u={x:f.x||0,y:f.y||0},h={x:b.x||0,y:b.y||0},y=h.x-u.x,v=h.y-u.y,M=Math.sqrt(y*y+v*v),B=y/M,T=v/M,O=A.nodeSizeBase/2,R=A.nodeSizeBase/2,N=4,w={x:u.x+B*O,y:u.y+T*O},E={x:h.x-B*(R+N),y:h.y-T*(R+N)},H={x:h.x-B*(R+1),y:h.y-T*(R+1)},q=s.current.highlightLinks.has(l),Y=q?L.graph2D.link.highlighted:L.graph2D.link.normal,_=q?1.5:.5,j=u.x+(h.x-u.x)/2,m1=u.y+(h.y-u.y)/2,i1=Math.atan2(v,y);if(l.label){let r1=s.current.transform.k,s1=L2(r1);n.font=`${s1}px Sans-Serif`;let k5=n.measureText(l.label).width,I5=10;n.beginPath(),n.moveTo(w.x,w.y);let E5=M/2-(k5+I5)/2,$5={x:u.x+B*E5,y:u.y+T*E5};n.lineTo($5.x,$5.y),n.strokeStyle=Y,n.lineWidth=_,n.stroke(),n.beginPath();let Z5=M/2+(k5+I5)/2,B5={x:u.x+B*Z5,y:u.y+T*Z5};n.moveTo(B5.x,B5.y),n.lineTo(E.x,E.y),n.strokeStyle=Y,n.lineWidth=_,n.stroke();}else n.beginPath(),n.moveTo(w.x,w.y),n.lineTo(E.x,E.y),n.strokeStyle=Y,n.lineWidth=_,n.stroke();let S1=2;if(n.save(),n.translate(H.x,H.y),n.rotate(i1),n.beginPath(),n.moveTo(0,0),n.lineTo(-4,S1),n.lineTo(-4,0),n.lineTo(-4,-2),n.closePath(),n.fillStyle=Y,n.fill(),n.restore(),l.label){let r1=s.current.transform.k,s1=L2(r1);n.font=`${s1}px Sans-Serif`,n.textAlign="center",n.textBaseline="middle",n.save(),n.translate(j,m1),Math.abs(i1)>Math.PI/2?n.rotate(i1+Math.PI):n.rotate(i1),n.fillStyle=q?L.graph2D.link.highlightedTextColor:L.graph2D.link.textColor,n.fillText(l.label,0,0),n.restore();}}));},[A,L.graph2D.link]),y5=useCallback((n,p)=>{if(!W||W.length===0||!n||!n.x||!n.y)return;let{x:c,y:l}=n,f=A.nodeSizeBase*A.nodeAreaFactor/2;p.save();let b=Math.min(W.length,8),u=Math.min(Math.PI*2/b,Math.PI);for(let h=0;h<b;h++){let y=h*u,v=(h+1)*u,M=s.current.hoveredButtonIndex===h;p.beginPath(),p.arc(c,l,f,y,v,false),p.lineTo(c,l),p.closePath(),p.lineWidth=1,p.strokeStyle=L.graph2D?.button?.stroke||"#FFFFFF",p.stroke(),p.fillStyle=M?L.graph2D?.button?.hoverFill||"rgba(255, 255, 255, 0.3)":L.graph2D?.button?.normalFill||"rgba(255, 255, 255, 0.1)",p.fill();let B=f*.2,T=(y+v)/2,O=f-A.nodeSizeBase/2+B,R=c+Math.cos(T)*O,N=l+Math.sin(T)*O,w=W[h],E=M?w.hoverImg:w.normalImg;if(E.complete)try{p.drawImage(E,R-B/2,N-B/2,B,B);}catch(H){console.warn("Error rendering button icon:",H);}else E.onload=()=>{if(X.current)try{p.drawImage(E,R-B/2,N-B/2,B,B);}catch(H){console.warn("Error rendering button icon after load:",H);}};}p.restore();},[W,L.graph2D?.button]),v5=useCallback(n=>{let p=e1();!p||p.length===0||(n.globalAlpha=1,p.forEach(c=>{let{x:l,y:f,color:b,fontColor:u,label:h}=c,y=s.current.highlightNodes.has(c)||c===s.current.hoveredNode||c===s.current.draggedNode,v=c===s.current.selectedNode,M=A.nodeSizeBase,B=A.nodeSizeBase/2;if(y&&!v){let T=A.nodeSizeBase*A.nodeAreaFactor*.75/2;n.beginPath(),n.arc(l,f,T,0,2*Math.PI,false),n.fillStyle=L.graph2D.ring.highlightFill,n.fill();}if(v)if(C&&C.length>0)y5(c,n);else {let T=A.nodeSizeBase*A.nodeAreaFactor/2;n.beginPath(),n.arc(l,f,T,0,2*Math.PI,false),n.fillStyle=L.graph2D.ring.selectionFill||L.graph2D.ring.highlightFill,n.fill();}if(n.beginPath(),n.arc(l,f,B,0,2*Math.PI),n.fillStyle=b||y2(c.group||"0"),n.fill(),h){n.save(),n.translate(l,f);let T=s.current.transform.k,O=L2(T),R=M*A.textPaddingFactor;n.font=`${O}px Sans-Serif`,n.textAlign="center",n.textBaseline="middle",n.fillStyle=u||"#000";let N=t6(h,R,n);n.fillText(N,0,0),n.restore();}}));},[L.graph2D.ring,C,y5]),K=useCallback(()=>{let n=X.current;n&&(n.clearRect(0,0,s.current.width,s.current.height),S5(n),n.save(),n.setTransform(s.current.transform.k,0,0,s.current.transform.k,s.current.transform.x,s.current.transform.y),w5(n),v5(n),n.restore());},[w5,v5,S5]),L5=useCallback((n,p=[],c)=>{let l=$1()||[],f=e1()||[];if(!$.current||!n.length)return;let{width:b,height:u}=s.current,h=c?.smoothAppearance??false,y=c?.transitionDuration??1e3,v=new Set(f.map(w=>w.id)),M=n.filter(w=>!v.has(w.id)),B=new Set(l.map(w=>`${typeof w.source=="object"?w.source.id:w.source}-${typeof w.target=="object"?w.target.id:w.target}`)),T=p.filter(w=>{let E=`${typeof w.source=="object"?w.source.id:w.source}-${typeof w.target=="object"?w.target.id:w.target}`;return !B.has(E)});if(M.length===0&&T.length===0)return;let O=[...f,...M],R=[...l,...T];h&&(M.forEach(w=>{let E=T.filter(H=>{let q=typeof H.source=="object"?H.source.id:H.source,Y=typeof H.target=="object"?H.target.id:H.target;return q===w.id&&v.has(Y)||Y===w.id&&v.has(q)});if(E.length>0){let H=E[0],q=typeof H.source=="object"?H.source.id===w.id?H.target:H.source.id:H.source===w.id?H.target:H.source,Y=O.find(_=>_.id===q);if(Y&&Y.x!==void 0&&Y.y!==void 0){let _=30+Math.random()*20,j=Math.random()*Math.PI*2;w.x=Y.x+Math.cos(j)*_,w.y=Y.y+Math.sin(j)*_,w.vx=0,w.vy=0;}}else {let H=b/2,q=u/2,Y=Math.min(b,u)/4,_=Math.random()*Math.PI*2;w.x=H+Math.cos(_)*(Y*Math.random()),w.y=q+Math.sin(_)*(Y*Math.random()),w.vx=0,w.vy=0;}}),f.forEach(w=>{w.fx=w.x,w.fy=w.y;})),$.current.nodes(O);let N=$.current.force("link");N&&N.links(R),T.forEach(w=>{let E=typeof w.source=="object"?w.source:O.find(q=>q.id===w.source),H=typeof w.target=="object"?w.target:O.find(q=>q.id===w.target);!E||!H||(!E.neighbors&&(E.neighbors=[]),!H.neighbors&&(H.neighbors=[]),E.neighbors.push(H),H.neighbors.push(E),!E.links&&(E.links=[]),!H.links&&(H.links=[]),E.links.push(w),H.links.push(w));}),h?($.current.alphaTarget(.3),$.current.alpha(.3),$.current.velocityDecay(.7),$.current.restart(),setTimeout(()=>{f.forEach(w=>{w.fx=void 0,w.fy=void 0;}),$.current?.alphaTarget(0),$.current?.alpha(.1),$.current?.velocityDecay(.6);},y)):$.current.alpha(.1).restart(),K();},[U,K]),M5=useCallback(n=>{let p=e1(),c=$1();if(!$.current||!n.length||!p||p.length===0||!c||c.length===0)return;let l=new Set(n);if(s.current.selectedNode&&s.current.selectedNode.id!==void 0&&l.has(s.current.selectedNode.id)&&(s.current.selectedNode=null),s.current.hoveredNode&&s.current.hoveredNode.id!==void 0&&l.has(s.current.hoveredNode.id)&&(s.current.hoveredNode=null,s.current.highlightNodes=new Set,s.current.highlightLinks=new Set),s.current.hoveredLink){let h=typeof s.current.hoveredLink.source=="object"?s.current.hoveredLink.source.id:s.current.hoveredLink.source,y=typeof s.current.hoveredLink.target=="object"?s.current.hoveredLink.target.id:s.current.hoveredLink.target;(h!==void 0&&l.has(h)||y!==void 0&&l.has(y))&&(s.current.hoveredLink=null,s.current.highlightNodes=new Set,s.current.highlightLinks=new Set);}s.current.draggedNode&&s.current.draggedNode.id!==void 0&&l.has(s.current.draggedNode.id)&&(s.current.draggedNode=null);let f=p.filter(h=>h.id!==void 0&&!l.has(h.id)),b=c.filter(h=>{let y=typeof h.source=="object"?h.source.id:h.source,v=typeof h.target=="object"?h.target.id:h.target;return y!==void 0&&!l.has(y)&&v!==void 0&&!l.has(v)});f.forEach(h=>{h.neighbors=[],h.links=[];}),b.forEach(h=>{let y=typeof h.source=="object"?h.source:f.find(M=>M.id===h.source),v=typeof h.target=="object"?h.target:f.find(M=>M.id===h.target);!y||!v||(y.neighbors=y.neighbors||[],v.neighbors=v.neighbors||[],y.neighbors.push(v),v.neighbors.push(y),y.links=y.links||[],v.links=v.links||[],y.links.push(h),v.links.push(h));}),$.current.nodes(f);let u=$.current.force("link");u&&u.links(b),K();},[K]),Z1=useCallback((n=0,p=20)=>{let c=e1();if(!X.current||!D.current||!c||!c.length)return;let f=1/0,b=1/0,u=-1/0,h=-1/0;if(c.forEach(y=>{if(y.x===void 0||y.y===void 0)return;let v=y.x,M=y.y;f=Math.min(f,v),b=Math.min(b,M),u=Math.max(u,v),h=Math.max(h,M);}),isFinite(f)&&isFinite(u)&&isFinite(b)&&isFinite(h)){let{width:y,height:v}=s.current;f-=p,b-=p,u+=p,h+=p;let M=u-f,B=h-b,T=M>0?y/M:1,O=B>0?v/B:1,R=Math.min(T,O,10),N=f+M/2,w=b+B/2,E={k:R,x:y/2-N*R,y:v/2-w*R};if(n>0){let H={...s.current.transform},q=Date.now(),Y=t(()=>{let _=Math.min(1,(Date.now()-q)/n),j=_===1?1:1-Math.pow(1-_,3),m1={k:H.k+(E.k-H.k)*j,x:H.x+(E.x-H.x)*j,y:H.y+(E.y-H.y)*j};s.current.transform=m1,K(),_<1&&requestAnimationFrame(Y);},"animateZoom");requestAnimationFrame(Y);}else s.current.transform=E,K();}},[]),B1=useCallback((n,p)=>{let c=e1();if(!c||c.length===0)return null;let l=A.nodeSizeBase/2,f=window.devicePixelRatio||1,b=(n*f-s.current.transform.x)/s.current.transform.k,u=(p*f-s.current.transform.y)/s.current.transform.k;return c.find(h=>{let y=(h.x||0)-b,v=(h.y||0)-u;return Math.sqrt(y*y+v*v)<=l})||null},[]),T1=useCallback((n,p)=>{let c=$1(),l=e1();if(!c||c.length===0||!l||l.length===0)return null;let f=window.devicePixelRatio||1,b=(n*f-s.current.transform.x)/s.current.transform.k,u=(p*f-s.current.transform.y)/s.current.transform.k,h=5;return c.find(y=>{let v=typeof y.source=="object"?y.source:l.find(s1=>s1.id===y.source),M=typeof y.target=="object"?y.target:l.find(s1=>s1.id===y.target);if(!v||!M)return false;let B=v.x||0,T=v.y||0,O=M.x||0,R=M.y||0,N=b-B,w=u-T,E=O-B,H=R-T,q=N*E+w*H,Y=E*E+H*H;if(Y===0)return false;let _=q/Y;_=Math.max(0,Math.min(1,_));let j=B+_*E,m1=T+_*H,i1=b-j,S1=u-m1;return Math.sqrt(i1*i1+S1*S1)<=h})||null},[]),H5=useCallback((n,p,c,l,f,b,u)=>{let h=n-c,y=p-l,v=Math.sqrt(h*h+y*y),M=Math.atan2(y,h);M<0&&(M+=2*Math.PI);let O=v>=f*.5&&v<=f*1,R=false;return b===Math.PI&&u===Math.PI*2?R=M>=Math.PI&&M<=Math.PI*2:b===0&&u===Math.PI?R=M>=0&&M<=Math.PI:R=b<=u&&M>=b&&M<=u||b>u&&(M>=b||M<=u),O&&R},[]),M2=useCallback(n=>{if(n===s.current.hoveredNode)return;let p=new Set,c=new Set;n&&(p.add(n),n.neighbors&&n.neighbors.forEach(l=>p.add(l)),n.links&&n.links.forEach(l=>c.add(l))),s.current.hoveredNode=n,m&&m(n),s.current.highlightNodes=p,s.current.highlightLinks=c;},[m]),H2=useCallback(n=>{if(n===s.current.hoveredLink)return;let p=new Set,c=new Set;if(n){c.add(n);let l=e1();if(l){let f=typeof n.source=="object"?n.source:l.find(u=>u.id===n.source),b=typeof n.target=="object"?n.target:l.find(u=>u.id===n.target);f&&p.add(f),b&&p.add(b);}}s.current.hoveredLink=n,x&&x(n),s.current.highlightNodes=p,s.current.highlightLinks=c;},[x,e1]),V5=useCallback(n=>{S&&S(n);},[S]),F5=useCallback(n=>{s.current.selectedNode=n,d&&d(n);},[d]),P5=useCallback(()=>{s.current.selectedNode=null,g&&g();},[g]),V2=useCallback(n=>{if(!D.current||!$.current)return;let p=D.current.getBoundingClientRect(),c=n.clientX-p.left,l=n.clientY-p.top;s.current.mouseStartPos={x:c,y:l},s.current.isDragging=false;let f=B1(c,l);f?(s.current.draggedNode=f,f.fx=f.x,f.fy=f.y):(s.current.isPanning=true,s.current.lastMousePos={x:c,y:l});},[B1]),G1=useCallback((n,p)=>{let c=null;if(D.current&&s.current&&W.length>0){let l=A.nodeSizeBase*A.nodeAreaFactor/2,f=D.current.getBoundingClientRect(),b=D.current.width/f.width,u=D.current.height/f.height,h=n*b,y=p*u,v=(h-s.current.transform.x)/s.current.transform.k,M=(y-s.current.transform.y)/s.current.transform.k,B=s.current.selectedNode?.x||0,T=s.current.selectedNode?.y||0,O=Math.min(W.length,8),R=Math.min(Math.PI*2/O,Math.PI);for(let N=0;N<O;N++){let w=N*R,E=(N+1)*R;if(H5(v,M,B,T,l,w,E)){c=N;break}}}return c},[W]),F2=useCallback(n=>{if(!D.current)return;let p=D.current.getBoundingClientRect(),c=n.clientX-p.left,l=n.clientY-p.top;if(s.current.draggedNode&&s.current.mouseStartPos&&$.current){let u=s.current.mouseStartPos.x,h=s.current.mouseStartPos.y,y=c-u,v=l-h;Math.sqrt(y*y+v*v)>3&&(s.current.isDragging=true,$.current.alphaTarget()===0&&$.current.alphaTarget(0).restart());let T=window.devicePixelRatio||1,O=(c*T-s.current.transform.x)/s.current.transform.k,R=(l*T-s.current.transform.y)/s.current.transform.k;s.current.draggedNode.fx=O,s.current.draggedNode.fy=R;return}if(s.current.isPanning&&s.current.mouseStartPos){let u=c-s.current.lastMousePos.x,h=l-s.current.lastMousePos.y,y=s.current.mouseStartPos.x,v=s.current.mouseStartPos.y;Math.sqrt(Math.pow(c-y,2)+Math.pow(l-v,2))>3&&(s.current.isDragging=true),s.current.transform={...s.current.transform,x:s.current.transform.x+u,y:s.current.transform.y+h},s.current.lastMousePos={x:c,y:l},K();return}let f,b;if(s.current.selectedNode&&D.current&&W.length>0){let u=G1(c,l);u!==null&&(b=s.current.selectedNode),u!==s.current.hoveredButtonIndex&&(f=true),s.current.hoveredButtonIndex=u;}else s.current.hoveredButtonIndex!==null&&(s.current.hoveredButtonIndex=null);if(!b&&(b=B1(c,l),!b)){let u=T1(c,l),h=u!==s.current.hoveredLink;if(u&&s.current.hoveredNode&&M2(null),H2(u),D.current&&(D.current.style.cursor=u?"pointer":"default"),h){K();return}}b&&s.current.hoveredLink&&H2(null),b!==s.current.hoveredNode&&(f=true),M2(b),D.current&&(D.current.style.cursor=b?"pointer":"default"),f&&K();},[W,B1,T1,M2,H2,K,H5,G1]),r6=useCallback(n=>{s.current.mustBeStoppedPropagation&&(n.stopPropagation(),n.preventDefault()),s.current.mustBeStoppedPropagation=false;},[]),z1=useCallback(n=>{let p=s.current.isDragging;if(p&&(s.current.mustBeStoppedPropagation=true),!p&&s.current.mouseStartPos){let c=D.current?.getBoundingClientRect();if(c){let l=n.clientX-c.left,f=n.clientY-c.top;W.length>0&&s.current.hoveredButtonIndex===null&&(s.current.hoveredButtonIndex=G1(l,f));let b=false;if(s.current.selectedNode&&s.current.hoveredButtonIndex!==null&&C[s.current.hoveredButtonIndex]){let u=C[s.current.hoveredButtonIndex];u&&u.onClick&&(u.onClick(s.current.selectedNode),b=true,s.current.hoveredButtonIndex=null);}if(!b&&s.current.draggedNode)F5(s.current.draggedNode);else if(!b&&!s.current.draggedNode){let u=T1(l,f);u?V5(u):P5();}}}if(s.current.draggedNode&&$.current){if(p){$.current.alphaTarget(0);let c=.05,l=.04,f=.6;$.current.alpha(c).alphaDecay(l),$.current.velocityDecay(f);}else $.current.alphaTarget(0);s.current.draggedNode.fx=void 0,s.current.draggedNode.fy=void 0,s.current.draggedNode=null;}s.current.isDragging=false,s.current.mouseStartPos=null,s.current.isPanning&&(s.current.isPanning=false),K();},[C,K,F5,P5,T1,V5,G1,W]),P2=useCallback(n=>{if(n.stopPropagation(),n.preventDefault(),!D.current)return;let p=D.current.getBoundingClientRect(),c=n.clientX-p.left,l=n.clientY-p.top,b=-n.deltaY>0?1.1:1/1.1,u=s.current.transform,h=u.k*b;if(h<.01||h>10)return;let y=u.k*b,v=c-(c-u.x)*b,M=l-(l-u.y)*b;s.current.transform={k:y,x:v,y:M},K();},[K]),k2=t((n,p)=>{let c=n.touches[0];if(c){let l={clientX:c.clientX,clientY:c.clientY};p(l);}},"convertTouchToMouseEvent"),n6=useCallback(n=>{k2(n,V2);},[V2]),I2=useCallback(n=>{s.current.mustBeStoppedPropagation&&(n.preventDefault(),n.stopPropagation()),s.current.mustBeStoppedPropagation=false,k2(n,z1);},[z1]),a6=useCallback(n=>{k2(n,F2);},[F2]);return useImperativeHandle(F,()=>({zoomToFit:Z1,addNodes:L5,removeNodes:M5}),[Z1,L5,M5]),useEffect(()=>{let n=D.current,{width:p,height:c}=s.current;if(!n)return;v2(),J(true);let l=p/2,f=c/2,b=A.nodeSizeBase,u=b/2,h=b*2.5;$.current&&$.current.stop();let y=$.current=forceSimulation(U).force("link",forceLink(Q).id(v=>v.id).distance(h).strength(.9)).force("charge",forceManyBody().strength(-b/10*200).theta(.5).distanceMin(b*2)).force("x",forceX().strength(.03)).force("y",forceY().strength(.03)).force("center",forceCenter(l,f).strength(.05)).force("collide",forceCollide().radius(u*2).iterations(2).strength(1)).velocityDecay(.6);return ()=>{y.stop();}},[U,Q]),useLayoutEffect(()=>{let n=D.current;n&&(s.current.width=o*S2,s.current.height=r*S2,n.width=s.current.width,n.height=s.current.height);},[o,r]),useEffect(()=>{if($.current){let n=$.current;n.on("tick",()=>{K();}),n.on("end",()=>{P&&(Z1(0,20),setTimeout(()=>{J(false);},200));});}P||K();},[U,Q,P,K,Z1]),useEffect(()=>{!U||!Q||Q.forEach(n=>{let p=typeof n.source=="object"?n.source:U.find(l=>l.id===n.source),c=typeof n.target=="object"?n.target:U.find(l=>l.id===n.target);!p||!c||(!p.neighbors&&(p.neighbors=[]),!c.neighbors&&(c.neighbors=[]),p.neighbors.push(c),c.neighbors.push(p),!p.links&&(p.links=[]),!c.links&&(c.links=[]),p.links.push(n),c.links.push(n));});},[U,Q]),useEffect(()=>{C&&C.length>0&&w2(L9(C));},[C]),useEffect(()=>{let n=D.current;if(n)return n.addEventListener("wheel",P2,{passive:false}),n.addEventListener("touchend",I2,{passive:false}),()=>{n.removeEventListener("wheel",P2),n.removeEventListener("touchend",I2);}},[P2,I2]),jsxs(H9,{children:[(e||P)&&jsx(Q4,{width:o,height:r}),jsx(V9,{ref:D,style:{width:o,height:r,display:e||P?"none":"block"},onMouseDown:V2,onMouseMove:F2,onMouseUp:z1,onMouseLeave:z1,onClick:r6,onTouchStart:n6,onTouchMove:a6})]})}),H9=styled.div`
|
|
1141
1141
|
display: flex;
|
|
1142
1142
|
align-items: center;
|
|
1143
1143
|
justify-content: center;
|