@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 CHANGED
@@ -1693,10 +1693,6 @@ interface GraphState {
1693
1693
  };
1694
1694
  /** Флаг необходимости остановки распространения события */
1695
1695
  mustBeStoppedPropagation: boolean;
1696
- /** Последний узел, над которым был курсор */
1697
- lastHoveredNode: NodeObject | null;
1698
- /** Кэшированная ссылка на последний узел, над которым был курсор (для избежания лишних вычислений) */
1699
- lastHoveredNodeRef: NodeObject | null;
1700
1696
  /** Начальная позиция курсора при начале перетаскивания */
1701
1697
  mouseStartPos: {
1702
1698
  x: number;
package/dist/index.d.ts CHANGED
@@ -1693,10 +1693,6 @@ interface GraphState {
1693
1693
  };
1694
1694
  /** Флаг необходимости остановки распространения события */
1695
1695
  mustBeStoppedPropagation: boolean;
1696
- /** Последний узел, над которым был курсор */
1697
- lastHoveredNode: NodeObject | null;
1698
- /** Кэшированная ссылка на последний узел, над которым был курсор (для избежания лишних вычислений) */
1699
- lastHoveredNodeRef: NodeObject | null;
1700
1696
  /** Начальная позиция курсора при начале перетаскивания */
1701
1697
  mouseStartPos: {
1702
1698
  x: number;
package/dist/index.js CHANGED
@@ -1137,7 +1137,7 @@
1137
1137
  display: flex;
1138
1138
  align-items: center;
1139
1139
  justify-content: center;
1140
- `,d9=t(({width:e=280,height:o=280})=>{let r=x1.useTheme();return jsxRuntime.jsx(s9,{children:jsxRuntime.jsxs(N8__default.default,{foregroundColor:r.contentLoader.foreground,backgroundColor:r.contentLoader.background,width:e,height:o,viewBox:"0 0 280 280",children:[jsxRuntime.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"}),jsxRuntime.jsx("circle",{cx:"229.92",cy:"63.7318",r:"5",transform:"rotate(173.661 229.92 63.7318)"}),jsxRuntime.jsx("circle",{cx:"227.711",cy:"43.8541",r:"5",transform:"rotate(173.661 227.711 43.8541)"}),jsxRuntime.jsx("circle",{cx:"211.478",cy:"60.7499",r:"5",transform:"rotate(173.661 211.478 60.7499)"}),jsxRuntime.jsx("circle",{cx:"218.434",cy:"78.0877",r:"5",transform:"rotate(173.661 218.434 78.0877)"}),jsxRuntime.jsx("circle",{cx:"246.705",cy:"51.8054",r:"5",transform:"rotate(173.661 246.705 51.8054)"}),jsxRuntime.jsx("circle",{cx:"42",cy:"48",r:"5"}),jsxRuntime.jsx("circle",{cx:"55",cy:"38",r:"5"}),jsxRuntime.jsx("circle",{cx:"73",cy:"43",r:"5"}),jsxRuntime.jsx("circle",{cx:"63",cy:"72",r:"5"}),jsxRuntime.jsx("circle",{cx:"50",cy:"86",r:"5"}),jsxRuntime.jsx("circle",{cx:"78",cy:"91",r:"5"}),jsxRuntime.jsx("circle",{cx:"73",cy:"165",r:"5"}),jsxRuntime.jsx("circle",{cx:"73",cy:"185",r:"5"}),jsxRuntime.jsx("circle",{cx:"91",cy:"170",r:"5"}),jsxRuntime.jsx("circle",{cx:"86",cy:"152",r:"5"}),jsxRuntime.jsx("circle",{cx:"148",cy:"130",r:"5"}),jsxRuntime.jsx("circle",{cx:"189",cy:"185",r:"5"}),jsxRuntime.jsx("circle",{cx:"163",cy:"107",r:"5"}),jsxRuntime.jsx("circle",{cx:"140",cy:"102",r:"5"}),jsxRuntime.jsx("circle",{cx:"117",cy:"135",r:"5"}),jsxRuntime.jsx("circle",{cx:"125",cy:"117",r:"5"}),jsxRuntime.jsx("circle",{cx:"208",cy:"198",r:"5"}),jsxRuntime.jsx("circle",{cx:"189",cy:"203",r:"5"}),jsxRuntime.jsx("circle",{cx:"198",cy:"221",r:"5"}),jsxRuntime.jsx("circle",{cx:"178",cy:"221",r:"5"}),jsxRuntime.jsx("circle",{cx:"184",cy:"239",r:"5"}),jsxRuntime.jsx("circle",{cx:"213",cy:"213",r:"5"}),jsxRuntime.jsx("circle",{cx:"173",cy:"130",r:"5"}),jsxRuntime.jsx("circle",{cx:"163",cy:"155",r:"5"}),jsxRuntime.jsx("circle",{cx:"135",cy:"155",r:"5"}),jsxRuntime.jsx("circle",{cx:"55",cy:"175",r:"5"})]})})},"GraphLoader"),Q4=d9;var y2=window.devicePixelRatio||1;function M9(e){return !e||e.length===0?[]:e.map(o=>{let r=new Image;r.src=o.img;let a=new Image;return a.src=o.hoverImg,{...o,normalImg:r,hoverImg:a}})}t(M9,"prepareButtonImages");var D={fontSize:3,nodeSizeBase:30,nodeAreaFactor:2,textPaddingFactor:.9,gridSpacing:20,dotSize:1,maxZoom:4},H9=S6.forwardRef(({loading:e,width:o,height:r,graphData:a,buttons:l=[],onNodeClick:C,onBackgroundClick:h,onNodeHover:S,onLinkHover:x,onLinkClick:y},P)=>{let M=x1.useTheme(),[k,J]=S6.useState(true),d=S6.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*y2,height:r*y2}),{nodes:q,links:Q}=S6.useMemo(()=>u9__default.default(a),[a]),[W,w2]=S6.useState([]),N=S6.useRef(null),Z=S6.useRef(null),_=S6.useRef(null),v2=d3.scaleOrdinal(d3.schemeCategory10),L2=S6.useCallback(()=>{if(!N.current)return false;try{let n=N.current.getContext("2d");return n?(_.current=n,!0):(console.error("Failed to get 2D context"),!1)}catch(n){return console.error("Error initializing Canvas 2D context:",n),false}},[]),o1=S6.useCallback(()=>Z.current?Z.current.nodes():null,[]),Z1=S6.useCallback(()=>{if(!Z.current)return null;let n=Z.current.force("link");return n?n.links():null},[]),y5=S6.useCallback(n=>{n.save(),n.setTransform(1,0,0,1,0,0);let{width:g,height:c}=d.current,p=D.gridSpacing,f=D.dotSize;n.fillStyle=M.graph2D.grid.dotColor;for(let m=p/2;m<=g;m+=p)for(let u=p/2;u<=c;u+=p)n.beginPath(),n.arc(m,u,f,0,2*Math.PI),n.fill();n.restore();},[M.graph2D.grid.dotColor,D.gridSpacing,D.dotSize]),r6=S6.useCallback((n,g,c)=>{if(!n)return "";if(c.measureText(n).width<=g)return n;let f=n,m="...";for(;c.measureText(f+m).width>g&&f.length>0;)f=f.slice(0,-1);return f+m},[]),M2=t(n=>{let c=Math.min(n,D.maxZoom)/D.maxZoom;return Math.max(D.fontSize*c,D.fontSize)},"calculateFontSize"),w5=S6.useCallback(n=>{let g=Z1(),c=o1();!g||g.length===0||!c||c.length===0||(n.lineWidth=.5,n.globalAlpha=1,g.forEach(p=>{let f=typeof p.source=="object"?p.source:c.find(n1=>n1.id===p.source),m=typeof p.target=="object"?p.target:c.find(n1=>n1.id===p.target);if(!f||!m)return;let u={x:f.x||0,y:f.y||0},b={x:m.x||0,y:m.y||0},v=b.x-u.x,L=b.y-u.y,H=Math.sqrt(v*v+L*L),T=v/H,z=L/H,Y=D.nodeSizeBase/2,A=D.nodeSizeBase/2,O=4,w={x:u.x+T*Y,y:u.y+z*Y},$={x:b.x-T*(A+O),y:b.y-z*(A+O)},V={x:b.x-T*(A+1),y:b.y-z*(A+1)},j=d.current.highlightLinks.has(p),X=j?M.graph2D.link.highlighted:M.graph2D.link.normal,U=j?1.5:.5,e1=u.x+(b.x-u.x)/2,S1=u.y+(b.y-u.y)/2,s1=Math.atan2(L,v);if(p.label){let n1=d.current.transform.k,d1=M2(n1);n.font=`${d1}px Sans-Serif`;let I5=n.measureText(p.label).width,E5=10;n.beginPath(),n.moveTo(w.x,w.y);let $5=H/2-(I5+E5)/2,Z5={x:u.x+T*$5,y:u.y+z*$5};n.lineTo(Z5.x,Z5.y),n.strokeStyle=X,n.lineWidth=U,n.stroke(),n.beginPath();let B5=H/2+(I5+E5)/2,T5={x:u.x+T*B5,y:u.y+z*B5};n.moveTo(T5.x,T5.y),n.lineTo($.x,$.y),n.strokeStyle=X,n.lineWidth=U,n.stroke();}else n.beginPath(),n.moveTo(w.x,w.y),n.lineTo($.x,$.y),n.strokeStyle=X,n.lineWidth=U,n.stroke();let y1=2;if(n.save(),n.translate(V.x,V.y),n.rotate(s1),n.beginPath(),n.moveTo(0,0),n.lineTo(-4,y1),n.lineTo(-4,0),n.lineTo(-4,-2),n.closePath(),n.fillStyle=X,n.fill(),n.restore(),p.label){let n1=d.current.transform.k,d1=M2(n1);n.font=`${d1}px Sans-Serif`,n.textAlign="center",n.textBaseline="middle",n.save(),n.translate(e1,S1),Math.abs(s1)>Math.PI/2?n.rotate(s1+Math.PI):n.rotate(s1),n.fillStyle=j?M.graph2D.link.highlightedTextColor:M.graph2D.link.textColor,n.fillText(p.label,0,0),n.restore();}}));},[D,M.graph2D.link]),v5=S6.useCallback((n,g)=>{if(!W||W.length===0||!n||!n.x||!n.y)return;let{x:c,y:p}=n,f=D.nodeSizeBase*D.nodeAreaFactor/2;g.save();let m=Math.min(W.length,8),u=Math.min(Math.PI*2/m,Math.PI);for(let b=0;b<m;b++){let v=b*u,L=(b+1)*u,H=d.current.hoveredButtonIndex===b;g.beginPath(),g.arc(c,p,f,v,L,false),g.lineTo(c,p),g.closePath(),g.lineWidth=1,g.strokeStyle=M.graph2D?.button?.stroke||"#FFFFFF",g.stroke(),g.fillStyle=H?M.graph2D?.button?.hoverFill||"rgba(255, 255, 255, 0.3)":M.graph2D?.button?.normalFill||"rgba(255, 255, 255, 0.1)",g.fill();let T=f*.2,z=(v+L)/2,Y=f-D.nodeSizeBase/2+T,A=c+Math.cos(z)*Y,O=p+Math.sin(z)*Y,w=W[b],$=H?w.hoverImg:w.normalImg;if($.complete)try{g.drawImage($,A-T/2,O-T/2,T,T);}catch(V){console.warn("Error rendering button icon:",V);}else $.onload=()=>{if(_.current)try{g.drawImage($,A-T/2,O-T/2,T,T);}catch(V){console.warn("Error rendering button icon after load:",V);}};}g.restore();},[W,M.graph2D?.button]),L5=S6.useCallback(n=>{let g=o1();!g||g.length===0||(n.globalAlpha=1,g.forEach(c=>{let{x:p,y:f,color:m,fontColor:u,label:b}=c,v=d.current.highlightNodes.has(c)||c===d.current.hoveredNode||c===d.current.draggedNode,L=c===d.current.selectedNode,H=D.nodeSizeBase,T=D.nodeSizeBase/2;if(v&&!L){let z=D.nodeSizeBase*D.nodeAreaFactor*.75/2;n.beginPath(),n.arc(p,f,z,0,2*Math.PI,false),n.fillStyle=M.graph2D.ring.highlightFill,n.fill();}if(L)if(l&&l.length>0)v5(c,n);else {let z=D.nodeSizeBase*D.nodeAreaFactor/2;n.beginPath(),n.arc(p,f,z,0,2*Math.PI,false),n.fillStyle=M.graph2D.ring.selectionFill||M.graph2D.ring.highlightFill,n.fill();}if(n.beginPath(),n.arc(p,f,T,0,2*Math.PI),n.fillStyle=m||v2(c.group||"0"),n.fill(),b){n.save(),n.translate(p,f);let z=d.current.transform.k,Y=M2(z),A=H*D.textPaddingFactor;n.font=`${Y}px Sans-Serif`,n.textAlign="center",n.textBaseline="middle",n.fillStyle=u||"#000";let O=r6(b,A,n);n.fillText(O,0,0),n.restore();}}));},[M.graph2D.ring,l,v5]),K=S6.useCallback(()=>{let n=_.current;n&&(n.clearRect(0,0,d.current.width,d.current.height),y5(n),n.save(),n.setTransform(d.current.transform.k,0,0,d.current.transform.k,d.current.transform.x,d.current.transform.y),w5(n),L5(n),n.restore());},[w5,L5,y5]),M5=S6.useCallback((n,g=[],c)=>{let p=Z1()||[],f=o1()||[];if(!Z.current||!n.length)return;let{width:m,height:u}=d.current,b=c?.smoothAppearance??false,v=c?.transitionDuration??1e3,L=new Set(f.map(w=>w.id)),H=n.filter(w=>!L.has(w.id)),T=new Set(p.map(w=>`${typeof w.source=="object"?w.source.id:w.source}-${typeof w.target=="object"?w.target.id:w.target}`)),z=g.filter(w=>{let $=`${typeof w.source=="object"?w.source.id:w.source}-${typeof w.target=="object"?w.target.id:w.target}`;return !T.has($)});if(H.length===0&&z.length===0)return;let Y=[...f,...H],A=[...p,...z];b&&(H.forEach(w=>{let $=z.filter(V=>{let j=typeof V.source=="object"?V.source.id:V.source,X=typeof V.target=="object"?V.target.id:V.target;return j===w.id&&L.has(X)||X===w.id&&L.has(j)});if($.length>0){let V=$[0],j=typeof V.source=="object"?V.source.id===w.id?V.target:V.source.id:V.source===w.id?V.target:V.source,X=Y.find(U=>U.id===j);if(X&&X.x!==void 0&&X.y!==void 0){let U=30+Math.random()*20,e1=Math.random()*Math.PI*2;w.x=X.x+Math.cos(e1)*U,w.y=X.y+Math.sin(e1)*U,w.vx=0,w.vy=0;}}else {let V=m/2,j=u/2,X=Math.min(m,u)/4,U=Math.random()*Math.PI*2;w.x=V+Math.cos(U)*(X*Math.random()),w.y=j+Math.sin(U)*(X*Math.random()),w.vx=0,w.vy=0;}}),f.forEach(w=>{w.fx=w.x,w.fy=w.y;})),Z.current.nodes(Y);let O=Z.current.force("link");O&&O.links(A),z.forEach(w=>{let $=typeof w.source=="object"?w.source:Y.find(j=>j.id===w.source),V=typeof w.target=="object"?w.target:Y.find(j=>j.id===w.target);!$||!V||(!$.neighbors&&($.neighbors=[]),!V.neighbors&&(V.neighbors=[]),$.neighbors.push(V),V.neighbors.push($),!$.links&&($.links=[]),!V.links&&(V.links=[]),$.links.push(w),V.links.push(w));}),b?(Z.current.alphaTarget(.3),Z.current.alpha(.3),Z.current.velocityDecay(.7),Z.current.restart(),setTimeout(()=>{f.forEach(w=>{w.fx=void 0,w.fy=void 0;}),Z.current?.alphaTarget(0),Z.current?.alpha(.1),Z.current?.velocityDecay(.6);},v)):Z.current.alpha(.1).restart(),K();},[q,K]),H5=S6.useCallback(n=>{let g=o1(),c=Z1();if(!Z.current||!n.length||!g||g.length===0||!c||c.length===0)return;let p=new Set(n);if(d.current.selectedNode&&d.current.selectedNode.id!==void 0&&p.has(d.current.selectedNode.id)&&(d.current.selectedNode=null),d.current.hoveredNode&&d.current.hoveredNode.id!==void 0&&p.has(d.current.hoveredNode.id)&&(d.current.hoveredNode=null,d.current.highlightNodes=new Set,d.current.highlightLinks=new Set),d.current.hoveredLink){let b=typeof d.current.hoveredLink.source=="object"?d.current.hoveredLink.source.id:d.current.hoveredLink.source,v=typeof d.current.hoveredLink.target=="object"?d.current.hoveredLink.target.id:d.current.hoveredLink.target;(b!==void 0&&p.has(b)||v!==void 0&&p.has(v))&&(d.current.hoveredLink=null,d.current.highlightNodes=new Set,d.current.highlightLinks=new Set);}d.current.draggedNode&&d.current.draggedNode.id!==void 0&&p.has(d.current.draggedNode.id)&&(d.current.draggedNode=null);let f=g.filter(b=>b.id!==void 0&&!p.has(b.id)),m=c.filter(b=>{let v=typeof b.source=="object"?b.source.id:b.source,L=typeof b.target=="object"?b.target.id:b.target;return v!==void 0&&!p.has(v)&&L!==void 0&&!p.has(L)});f.forEach(b=>{b.neighbors=[],b.links=[];}),m.forEach(b=>{let v=typeof b.source=="object"?b.source:f.find(H=>H.id===b.source),L=typeof b.target=="object"?b.target:f.find(H=>H.id===b.target);!v||!L||(v.neighbors=v.neighbors||[],L.neighbors=L.neighbors||[],v.neighbors.push(L),L.neighbors.push(v),v.links=v.links||[],L.links=L.links||[],v.links.push(b),L.links.push(b));}),Z.current.nodes(f);let u=Z.current.force("link");u&&u.links(m),K();},[K]),B1=S6.useCallback((n=0,g=20)=>{let c=o1();if(!_.current||!N.current||!c||!c.length)return;let f=1/0,m=1/0,u=-1/0,b=-1/0;if(c.forEach(v=>{if(v.x===void 0||v.y===void 0)return;let L=v.x,H=v.y;f=Math.min(f,L),m=Math.min(m,H),u=Math.max(u,L),b=Math.max(b,H);}),isFinite(f)&&isFinite(u)&&isFinite(m)&&isFinite(b)){let{width:v,height:L}=d.current;f-=g,m-=g,u+=g,b+=g;let H=u-f,T=b-m,z=H>0?v/H:1,Y=T>0?L/T:1,A=Math.min(z,Y,10),O=f+H/2,w=m+T/2,$={k:A,x:v/2-O*A,y:L/2-w*A};if(n>0){let V={...d.current.transform},j=Date.now(),X=t(()=>{let U=Math.min(1,(Date.now()-j)/n),e1=U===1?1:1-Math.pow(1-U,3),S1={k:V.k+($.k-V.k)*e1,x:V.x+($.x-V.x)*e1,y:V.y+($.y-V.y)*e1};d.current.transform=S1,K(),U<1&&requestAnimationFrame(X);},"animateZoom");requestAnimationFrame(X);}else d.current.transform=$,K();}},[]),T1=S6.useCallback((n,g)=>{let c=o1();if(!c||c.length===0)return null;let p=D.nodeSizeBase/2,f=window.devicePixelRatio||1,m=(n*f-d.current.transform.x)/d.current.transform.k,u=(g*f-d.current.transform.y)/d.current.transform.k;return c.find(b=>{let v=(b.x||0)-m,L=(b.y||0)-u;return Math.sqrt(v*v+L*L)<=p})||null},[]),z1=S6.useCallback((n,g)=>{let c=Z1(),p=o1();if(!c||c.length===0||!p||p.length===0)return null;let f=window.devicePixelRatio||1,m=(n*f-d.current.transform.x)/d.current.transform.k,u=(g*f-d.current.transform.y)/d.current.transform.k,b=5;return c.find(v=>{let L=typeof v.source=="object"?v.source:p.find(d1=>d1.id===v.source),H=typeof v.target=="object"?v.target:p.find(d1=>d1.id===v.target);if(!L||!H)return false;let T=L.x||0,z=L.y||0,Y=H.x||0,A=H.y||0,O=m-T,w=u-z,$=Y-T,V=A-z,j=O*$+w*V,X=$*$+V*V;if(X===0)return false;let U=j/X;U=Math.max(0,Math.min(1,U));let e1=T+U*$,S1=z+U*V,s1=m-e1,y1=u-S1;return Math.sqrt(s1*s1+y1*y1)<=b})||null},[]),V5=S6.useCallback((n,g,c,p,f,m,u)=>{let b=n-c,v=g-p,L=Math.sqrt(b*b+v*v),H=Math.atan2(v,b);H<0&&(H+=2*Math.PI);let Y=L>=f*.5&&L<=f*1,A=false;return m===Math.PI&&u===Math.PI*2?A=H>=Math.PI&&H<=Math.PI*2:m===0&&u===Math.PI?A=H>=0&&H<=Math.PI:A=m<=u&&H>=m&&H<=u||m>u&&(H>=m||H<=u),Y&&A},[]),H2=S6.useCallback(n=>{if(n===d.current.lastHoveredNodeRef)return;d.current.lastHoveredNodeRef=n;let g=new Set,c=new Set;n&&(g.add(n),n.neighbors&&n.neighbors.forEach(p=>g.add(p)),n.links&&n.links.forEach(p=>c.add(p))),d.current.hoveredNode=n,S&&S(n),d.current.highlightNodes=g,d.current.highlightLinks=c;},[S]),V2=S6.useCallback(n=>{if(n===d.current.hoveredLink)return;let g=new Set,c=new Set;if(n){c.add(n);let p=o1();if(p){let f=typeof n.source=="object"?n.source:p.find(u=>u.id===n.source),m=typeof n.target=="object"?n.target:p.find(u=>u.id===n.target);f&&g.add(f),m&&g.add(m);}}d.current.hoveredLink=n,x&&x(n),d.current.highlightNodes=g,d.current.highlightLinks=c;},[x,o1]),F5=S6.useCallback(n=>{y&&y(n);},[y]),P5=S6.useCallback(n=>{d.current.selectedNode=n,C&&C(n);},[C]),k5=S6.useCallback(()=>{d.current.selectedNode=null,h&&h();},[h]),F2=S6.useCallback(n=>{if(!N.current||!Z.current)return;let g=N.current.getBoundingClientRect(),c=n.clientX-g.left,p=n.clientY-g.top;d.current.mouseStartPos={x:c,y:p},d.current.isDragging=false;let f=T1(c,p);f?(d.current.draggedNode=f,f.fx=f.x,f.fy=f.y):(d.current.isPanning=true,d.current.lastMousePos={x:c,y:p});},[T1]),G1=S6.useCallback((n,g)=>{let c=null;if(N.current&&d.current&&W.length>0){let p=D.nodeSizeBase*D.nodeAreaFactor/2,f=N.current.getBoundingClientRect(),m=N.current.width/f.width,u=N.current.height/f.height,b=n*m,v=g*u,L=(b-d.current.transform.x)/d.current.transform.k,H=(v-d.current.transform.y)/d.current.transform.k,T=d.current.selectedNode?.x||0,z=d.current.selectedNode?.y||0,Y=Math.min(W.length,8),A=Math.min(Math.PI*2/Y,Math.PI);for(let O=0;O<Y;O++){let w=O*A,$=(O+1)*A;if(V5(L,H,T,z,p,w,$)){c=O;break}}}return c},[W]),P2=S6.useCallback(n=>{if(!N.current)return;let g=N.current.getBoundingClientRect(),c=n.clientX-g.left,p=n.clientY-g.top;if(d.current.draggedNode&&d.current.mouseStartPos&&Z.current){let u=d.current.mouseStartPos.x,b=d.current.mouseStartPos.y,v=c-u,L=p-b;Math.sqrt(v*v+L*L)>3&&(d.current.isDragging=true,Z.current.alphaTarget()===0&&Z.current.alphaTarget(0).restart());let z=window.devicePixelRatio||1,Y=(c*z-d.current.transform.x)/d.current.transform.k,A=(p*z-d.current.transform.y)/d.current.transform.k;d.current.draggedNode.fx=Y,d.current.draggedNode.fy=A;return}if(d.current.isPanning&&d.current.mouseStartPos){let u=c-d.current.lastMousePos.x,b=p-d.current.lastMousePos.y,v=d.current.mouseStartPos.x,L=d.current.mouseStartPos.y;Math.sqrt(Math.pow(c-v,2)+Math.pow(p-L,2))>3&&(d.current.isDragging=true),d.current.transform={...d.current.transform,x:d.current.transform.x+u,y:d.current.transform.y+b},d.current.lastMousePos={x:c,y:p},K();return}let f,m;if(d.current.selectedNode&&N.current&&W.length>0){let u=G1(c,p);u!==null&&(m=d.current.selectedNode),u!==d.current.hoveredButtonIndex&&(f=true),d.current.hoveredButtonIndex=u;}else d.current.hoveredButtonIndex!==null&&(d.current.hoveredButtonIndex=null);if(!m&&(m=T1(c,p),!m)){let u=z1(c,p),b=u!==d.current.hoveredLink;u&&d.current.hoveredNode&&H2(null),V2(u),N.current&&(N.current.style.cursor=u?"pointer":"default"),b&&K();return}m&&d.current.hoveredLink&&V2(null),m!==d.current.hoveredNode&&(f=true),H2(m),N.current&&(N.current.style.cursor=m?"pointer":"default"),f&&K();},[W,T1,z1,H2,V2,K,V5,G1]),n6=S6.useCallback(n=>{d.current.mustBeStoppedPropagation&&(n.stopPropagation(),n.preventDefault()),d.current.mustBeStoppedPropagation=false;},[]),R1=S6.useCallback(n=>{let g=d.current.isDragging;if(g&&(d.current.mustBeStoppedPropagation=true),!g&&d.current.mouseStartPos){let c=N.current?.getBoundingClientRect();if(c){let p=n.clientX-c.left,f=n.clientY-c.top;W.length>0&&d.current.hoveredButtonIndex===null&&(d.current.hoveredButtonIndex=G1(p,f));let m=false;if(d.current.selectedNode&&d.current.hoveredButtonIndex!==null&&l[d.current.hoveredButtonIndex]){let u=l[d.current.hoveredButtonIndex];u&&u.onClick&&(u.onClick(d.current.selectedNode),m=true,d.current.hoveredButtonIndex=null);}if(!m&&d.current.draggedNode)P5(d.current.draggedNode);else if(!m&&!d.current.draggedNode){let u=z1(p,f);u?F5(u):k5();}}}if(d.current.draggedNode&&Z.current){if(g){Z.current.alphaTarget(0);let c=.05,p=.04,f=.6;Z.current.alpha(c).alphaDecay(p),Z.current.velocityDecay(f);}else Z.current.alphaTarget(0);d.current.draggedNode.fx=void 0,d.current.draggedNode.fy=void 0,d.current.draggedNode=null;}d.current.isDragging=false,d.current.mouseStartPos=null,d.current.isPanning&&(d.current.isPanning=false),K();},[l,K,P5,k5,z1,F5,G1,W]),k2=S6.useCallback(n=>{if(n.stopPropagation(),n.preventDefault(),!N.current)return;let g=N.current.getBoundingClientRect(),c=n.clientX-g.left,p=n.clientY-g.top,m=-n.deltaY>0?1.1:1/1.1,u=d.current.transform,b=u.k*m;if(b<.01||b>10)return;let v=u.k*m,L=c-(c-u.x)*m,H=p-(p-u.y)*m;d.current.transform={k:v,x:L,y:H},K();},[K]),I2=t((n,g)=>{let c=n.touches[0];if(c){let p={clientX:c.clientX,clientY:c.clientY};g(p);}},"convertTouchToMouseEvent"),i6=S6.useCallback(n=>{I2(n,F2);},[F2]),E2=S6.useCallback(n=>{d.current.mustBeStoppedPropagation&&(n.preventDefault(),n.stopPropagation()),d.current.mustBeStoppedPropagation=false,I2(n,R1);},[R1]),a6=S6.useCallback(n=>{I2(n,P2);},[P2]);return S6.useImperativeHandle(P,()=>({zoomToFit:B1,addNodes:M5,removeNodes:H5}),[B1,M5,H5]),S6.useEffect(()=>{let n=N.current,{width:g,height:c}=d.current;if(!n)return;L2(),J(true);let p=g/2,f=c/2,m=D.nodeSizeBase,u=m/2,b=m*2.5;Z.current&&Z.current.stop();let v=Z.current=d3.forceSimulation(q).force("link",d3.forceLink(Q).id(L=>L.id).distance(b).strength(.9)).force("charge",d3.forceManyBody().strength(-m/10*200).theta(.5).distanceMin(m*2)).force("x",d3.forceX().strength(.03)).force("y",d3.forceY().strength(.03)).force("center",d3.forceCenter(p,f).strength(.05)).force("collide",d3.forceCollide().radius(u*2).iterations(2).strength(1)).velocityDecay(.6);return ()=>{v.stop();}},[q,Q]),S6.useLayoutEffect(()=>{let n=N.current;n&&(d.current.width=o*y2,d.current.height=r*y2,n.width=d.current.width,n.height=d.current.height);},[o,r]),S6.useEffect(()=>{if(Z.current){let n=Z.current;n.on("tick",()=>{K();}),n.on("end",()=>{k&&(B1(0,20),setTimeout(()=>{J(false);},200));});}k||K();},[q,Q,k,K,B1]),S6.useEffect(()=>{!q||!Q||Q.forEach(n=>{let g=typeof n.source=="object"?n.source:q.find(p=>p.id===n.source),c=typeof n.target=="object"?n.target:q.find(p=>p.id===n.target);!g||!c||(!g.neighbors&&(g.neighbors=[]),!c.neighbors&&(c.neighbors=[]),g.neighbors.push(c),c.neighbors.push(g),!g.links&&(g.links=[]),!c.links&&(c.links=[]),g.links.push(n),c.links.push(n));});},[q,Q]),S6.useEffect(()=>{l&&l.length>0&&w2(M9(l));},[l]),S6.useEffect(()=>{let n=N.current;if(n)return n.addEventListener("wheel",k2,{passive:false}),n.addEventListener("touchend",E2,{passive:false}),()=>{n.removeEventListener("wheel",k2),n.removeEventListener("touchend",E2);}},[k2,E2]),jsxRuntime.jsxs(V9,{children:[(e||k)&&jsxRuntime.jsx(Q4,{width:o,height:r}),jsxRuntime.jsx(F9,{ref:N,style:{width:o,height:r,display:e||k?"none":"block"},onMouseDown:F2,onMouseMove:P2,onMouseUp:R1,onMouseLeave:R1,onClick:n6,onTouchStart:i6,onTouchMove:a6})]})}),V9=x1.styled.div`
1140
+ `,d9=t(({width:e=280,height:o=280})=>{let r=x1.useTheme();return jsxRuntime.jsx(s9,{children:jsxRuntime.jsxs(N8__default.default,{foregroundColor:r.contentLoader.foreground,backgroundColor:r.contentLoader.background,width:e,height:o,viewBox:"0 0 280 280",children:[jsxRuntime.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"}),jsxRuntime.jsx("circle",{cx:"229.92",cy:"63.7318",r:"5",transform:"rotate(173.661 229.92 63.7318)"}),jsxRuntime.jsx("circle",{cx:"227.711",cy:"43.8541",r:"5",transform:"rotate(173.661 227.711 43.8541)"}),jsxRuntime.jsx("circle",{cx:"211.478",cy:"60.7499",r:"5",transform:"rotate(173.661 211.478 60.7499)"}),jsxRuntime.jsx("circle",{cx:"218.434",cy:"78.0877",r:"5",transform:"rotate(173.661 218.434 78.0877)"}),jsxRuntime.jsx("circle",{cx:"246.705",cy:"51.8054",r:"5",transform:"rotate(173.661 246.705 51.8054)"}),jsxRuntime.jsx("circle",{cx:"42",cy:"48",r:"5"}),jsxRuntime.jsx("circle",{cx:"55",cy:"38",r:"5"}),jsxRuntime.jsx("circle",{cx:"73",cy:"43",r:"5"}),jsxRuntime.jsx("circle",{cx:"63",cy:"72",r:"5"}),jsxRuntime.jsx("circle",{cx:"50",cy:"86",r:"5"}),jsxRuntime.jsx("circle",{cx:"78",cy:"91",r:"5"}),jsxRuntime.jsx("circle",{cx:"73",cy:"165",r:"5"}),jsxRuntime.jsx("circle",{cx:"73",cy:"185",r:"5"}),jsxRuntime.jsx("circle",{cx:"91",cy:"170",r:"5"}),jsxRuntime.jsx("circle",{cx:"86",cy:"152",r:"5"}),jsxRuntime.jsx("circle",{cx:"148",cy:"130",r:"5"}),jsxRuntime.jsx("circle",{cx:"189",cy:"185",r:"5"}),jsxRuntime.jsx("circle",{cx:"163",cy:"107",r:"5"}),jsxRuntime.jsx("circle",{cx:"140",cy:"102",r:"5"}),jsxRuntime.jsx("circle",{cx:"117",cy:"135",r:"5"}),jsxRuntime.jsx("circle",{cx:"125",cy:"117",r:"5"}),jsxRuntime.jsx("circle",{cx:"208",cy:"198",r:"5"}),jsxRuntime.jsx("circle",{cx:"189",cy:"203",r:"5"}),jsxRuntime.jsx("circle",{cx:"198",cy:"221",r:"5"}),jsxRuntime.jsx("circle",{cx:"178",cy:"221",r:"5"}),jsxRuntime.jsx("circle",{cx:"184",cy:"239",r:"5"}),jsxRuntime.jsx("circle",{cx:"213",cy:"213",r:"5"}),jsxRuntime.jsx("circle",{cx:"173",cy:"130",r:"5"}),jsxRuntime.jsx("circle",{cx:"163",cy:"155",r:"5"}),jsxRuntime.jsx("circle",{cx:"135",cy:"155",r:"5"}),jsxRuntime.jsx("circle",{cx:"55",cy:"175",r:"5"})]})})},"GraphLoader"),Q4=d9;var y2=window.devicePixelRatio||1;function M9(e){return !e||e.length===0?[]:e.map(o=>{let r=new Image;r.src=o.img;let a=new Image;return a.src=o.hoverImg,{...o,normalImg:r,hoverImg:a}})}t(M9,"prepareButtonImages");var D={fontSize:3,nodeSizeBase:30,nodeAreaFactor:2,textPaddingFactor:.9,gridSpacing:20,dotSize:1,maxZoom:4},H9=S6.forwardRef(({loading:e,width:o,height:r,graphData:a,buttons:l=[],onNodeClick:C,onBackgroundClick:h,onNodeHover:S,onLinkHover:x,onLinkClick:y},P)=>{let M=x1.useTheme(),[k,J]=S6.useState(true),d=S6.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*y2,height:r*y2}),{nodes:q,links:Q}=S6.useMemo(()=>u9__default.default(a),[a]),[W,w2]=S6.useState([]),N=S6.useRef(null),Z=S6.useRef(null),_=S6.useRef(null),v2=d3.scaleOrdinal(d3.schemeCategory10),L2=S6.useCallback(()=>{if(!N.current)return false;try{let n=N.current.getContext("2d");return n?(_.current=n,!0):(console.error("Failed to get 2D context"),!1)}catch(n){return console.error("Error initializing Canvas 2D context:",n),false}},[]),o1=S6.useCallback(()=>Z.current?Z.current.nodes():null,[]),Z1=S6.useCallback(()=>{if(!Z.current)return null;let n=Z.current.force("link");return n?n.links():null},[]),y5=S6.useCallback(n=>{n.save(),n.setTransform(1,0,0,1,0,0);let{width:g,height:c}=d.current,p=D.gridSpacing,f=D.dotSize;n.fillStyle=M.graph2D.grid.dotColor;for(let m=p/2;m<=g;m+=p)for(let u=p/2;u<=c;u+=p)n.beginPath(),n.arc(m,u,f,0,2*Math.PI),n.fill();n.restore();},[M.graph2D.grid.dotColor,D.gridSpacing,D.dotSize]),r6=S6.useCallback((n,g,c)=>{if(!n)return "";if(c.measureText(n).width<=g)return n;let f=n,m="...";for(;c.measureText(f+m).width>g&&f.length>0;)f=f.slice(0,-1);return f+m},[]),M2=t(n=>{let c=Math.min(n,D.maxZoom)/D.maxZoom;return Math.max(D.fontSize*c,D.fontSize)},"calculateFontSize"),w5=S6.useCallback(n=>{let g=Z1(),c=o1();!g||g.length===0||!c||c.length===0||(n.lineWidth=.5,n.globalAlpha=1,g.forEach(p=>{let f=typeof p.source=="object"?p.source:c.find(n1=>n1.id===p.source),m=typeof p.target=="object"?p.target:c.find(n1=>n1.id===p.target);if(!f||!m)return;let u={x:f.x||0,y:f.y||0},b={x:m.x||0,y:m.y||0},v=b.x-u.x,L=b.y-u.y,H=Math.sqrt(v*v+L*L),T=v/H,z=L/H,Y=D.nodeSizeBase/2,A=D.nodeSizeBase/2,O=4,w={x:u.x+T*Y,y:u.y+z*Y},$={x:b.x-T*(A+O),y:b.y-z*(A+O)},V={x:b.x-T*(A+1),y:b.y-z*(A+1)},j=d.current.highlightLinks.has(p),X=j?M.graph2D.link.highlighted:M.graph2D.link.normal,U=j?1.5:.5,e1=u.x+(b.x-u.x)/2,S1=u.y+(b.y-u.y)/2,s1=Math.atan2(L,v);if(p.label){let n1=d.current.transform.k,d1=M2(n1);n.font=`${d1}px Sans-Serif`;let I5=n.measureText(p.label).width,E5=10;n.beginPath(),n.moveTo(w.x,w.y);let $5=H/2-(I5+E5)/2,Z5={x:u.x+T*$5,y:u.y+z*$5};n.lineTo(Z5.x,Z5.y),n.strokeStyle=X,n.lineWidth=U,n.stroke(),n.beginPath();let B5=H/2+(I5+E5)/2,T5={x:u.x+T*B5,y:u.y+z*B5};n.moveTo(T5.x,T5.y),n.lineTo($.x,$.y),n.strokeStyle=X,n.lineWidth=U,n.stroke();}else n.beginPath(),n.moveTo(w.x,w.y),n.lineTo($.x,$.y),n.strokeStyle=X,n.lineWidth=U,n.stroke();let y1=2;if(n.save(),n.translate(V.x,V.y),n.rotate(s1),n.beginPath(),n.moveTo(0,0),n.lineTo(-4,y1),n.lineTo(-4,0),n.lineTo(-4,-2),n.closePath(),n.fillStyle=X,n.fill(),n.restore(),p.label){let n1=d.current.transform.k,d1=M2(n1);n.font=`${d1}px Sans-Serif`,n.textAlign="center",n.textBaseline="middle",n.save(),n.translate(e1,S1),Math.abs(s1)>Math.PI/2?n.rotate(s1+Math.PI):n.rotate(s1),n.fillStyle=j?M.graph2D.link.highlightedTextColor:M.graph2D.link.textColor,n.fillText(p.label,0,0),n.restore();}}));},[D,M.graph2D.link]),v5=S6.useCallback((n,g)=>{if(!W||W.length===0||!n||!n.x||!n.y)return;let{x:c,y:p}=n,f=D.nodeSizeBase*D.nodeAreaFactor/2;g.save();let m=Math.min(W.length,8),u=Math.min(Math.PI*2/m,Math.PI);for(let b=0;b<m;b++){let v=b*u,L=(b+1)*u,H=d.current.hoveredButtonIndex===b;g.beginPath(),g.arc(c,p,f,v,L,false),g.lineTo(c,p),g.closePath(),g.lineWidth=1,g.strokeStyle=M.graph2D?.button?.stroke||"#FFFFFF",g.stroke(),g.fillStyle=H?M.graph2D?.button?.hoverFill||"rgba(255, 255, 255, 0.3)":M.graph2D?.button?.normalFill||"rgba(255, 255, 255, 0.1)",g.fill();let T=f*.2,z=(v+L)/2,Y=f-D.nodeSizeBase/2+T,A=c+Math.cos(z)*Y,O=p+Math.sin(z)*Y,w=W[b],$=H?w.hoverImg:w.normalImg;if($.complete)try{g.drawImage($,A-T/2,O-T/2,T,T);}catch(V){console.warn("Error rendering button icon:",V);}else $.onload=()=>{if(_.current)try{g.drawImage($,A-T/2,O-T/2,T,T);}catch(V){console.warn("Error rendering button icon after load:",V);}};}g.restore();},[W,M.graph2D?.button]),L5=S6.useCallback(n=>{let g=o1();!g||g.length===0||(n.globalAlpha=1,g.forEach(c=>{let{x:p,y:f,color:m,fontColor:u,label:b}=c,v=d.current.highlightNodes.has(c)||c===d.current.hoveredNode||c===d.current.draggedNode,L=c===d.current.selectedNode,H=D.nodeSizeBase,T=D.nodeSizeBase/2;if(v&&!L){let z=D.nodeSizeBase*D.nodeAreaFactor*.75/2;n.beginPath(),n.arc(p,f,z,0,2*Math.PI,false),n.fillStyle=M.graph2D.ring.highlightFill,n.fill();}if(L)if(l&&l.length>0)v5(c,n);else {let z=D.nodeSizeBase*D.nodeAreaFactor/2;n.beginPath(),n.arc(p,f,z,0,2*Math.PI,false),n.fillStyle=M.graph2D.ring.selectionFill||M.graph2D.ring.highlightFill,n.fill();}if(n.beginPath(),n.arc(p,f,T,0,2*Math.PI),n.fillStyle=m||v2(c.group||"0"),n.fill(),b){n.save(),n.translate(p,f);let z=d.current.transform.k,Y=M2(z),A=H*D.textPaddingFactor;n.font=`${Y}px Sans-Serif`,n.textAlign="center",n.textBaseline="middle",n.fillStyle=u||"#000";let O=r6(b,A,n);n.fillText(O,0,0),n.restore();}}));},[M.graph2D.ring,l,v5]),K=S6.useCallback(()=>{let n=_.current;n&&(n.clearRect(0,0,d.current.width,d.current.height),y5(n),n.save(),n.setTransform(d.current.transform.k,0,0,d.current.transform.k,d.current.transform.x,d.current.transform.y),w5(n),L5(n),n.restore());},[w5,L5,y5]),M5=S6.useCallback((n,g=[],c)=>{let p=Z1()||[],f=o1()||[];if(!Z.current||!n.length)return;let{width:m,height:u}=d.current,b=c?.smoothAppearance??false,v=c?.transitionDuration??1e3,L=new Set(f.map(w=>w.id)),H=n.filter(w=>!L.has(w.id)),T=new Set(p.map(w=>`${typeof w.source=="object"?w.source.id:w.source}-${typeof w.target=="object"?w.target.id:w.target}`)),z=g.filter(w=>{let $=`${typeof w.source=="object"?w.source.id:w.source}-${typeof w.target=="object"?w.target.id:w.target}`;return !T.has($)});if(H.length===0&&z.length===0)return;let Y=[...f,...H],A=[...p,...z];b&&(H.forEach(w=>{let $=z.filter(V=>{let j=typeof V.source=="object"?V.source.id:V.source,X=typeof V.target=="object"?V.target.id:V.target;return j===w.id&&L.has(X)||X===w.id&&L.has(j)});if($.length>0){let V=$[0],j=typeof V.source=="object"?V.source.id===w.id?V.target:V.source.id:V.source===w.id?V.target:V.source,X=Y.find(U=>U.id===j);if(X&&X.x!==void 0&&X.y!==void 0){let U=30+Math.random()*20,e1=Math.random()*Math.PI*2;w.x=X.x+Math.cos(e1)*U,w.y=X.y+Math.sin(e1)*U,w.vx=0,w.vy=0;}}else {let V=m/2,j=u/2,X=Math.min(m,u)/4,U=Math.random()*Math.PI*2;w.x=V+Math.cos(U)*(X*Math.random()),w.y=j+Math.sin(U)*(X*Math.random()),w.vx=0,w.vy=0;}}),f.forEach(w=>{w.fx=w.x,w.fy=w.y;})),Z.current.nodes(Y);let O=Z.current.force("link");O&&O.links(A),z.forEach(w=>{let $=typeof w.source=="object"?w.source:Y.find(j=>j.id===w.source),V=typeof w.target=="object"?w.target:Y.find(j=>j.id===w.target);!$||!V||(!$.neighbors&&($.neighbors=[]),!V.neighbors&&(V.neighbors=[]),$.neighbors.push(V),V.neighbors.push($),!$.links&&($.links=[]),!V.links&&(V.links=[]),$.links.push(w),V.links.push(w));}),b?(Z.current.alphaTarget(.3),Z.current.alpha(.3),Z.current.velocityDecay(.7),Z.current.restart(),setTimeout(()=>{f.forEach(w=>{w.fx=void 0,w.fy=void 0;}),Z.current?.alphaTarget(0),Z.current?.alpha(.1),Z.current?.velocityDecay(.6);},v)):Z.current.alpha(.1).restart(),K();},[q,K]),H5=S6.useCallback(n=>{let g=o1(),c=Z1();if(!Z.current||!n.length||!g||g.length===0||!c||c.length===0)return;let p=new Set(n);if(d.current.selectedNode&&d.current.selectedNode.id!==void 0&&p.has(d.current.selectedNode.id)&&(d.current.selectedNode=null),d.current.hoveredNode&&d.current.hoveredNode.id!==void 0&&p.has(d.current.hoveredNode.id)&&(d.current.hoveredNode=null,d.current.highlightNodes=new Set,d.current.highlightLinks=new Set),d.current.hoveredLink){let b=typeof d.current.hoveredLink.source=="object"?d.current.hoveredLink.source.id:d.current.hoveredLink.source,v=typeof d.current.hoveredLink.target=="object"?d.current.hoveredLink.target.id:d.current.hoveredLink.target;(b!==void 0&&p.has(b)||v!==void 0&&p.has(v))&&(d.current.hoveredLink=null,d.current.highlightNodes=new Set,d.current.highlightLinks=new Set);}d.current.draggedNode&&d.current.draggedNode.id!==void 0&&p.has(d.current.draggedNode.id)&&(d.current.draggedNode=null);let f=g.filter(b=>b.id!==void 0&&!p.has(b.id)),m=c.filter(b=>{let v=typeof b.source=="object"?b.source.id:b.source,L=typeof b.target=="object"?b.target.id:b.target;return v!==void 0&&!p.has(v)&&L!==void 0&&!p.has(L)});f.forEach(b=>{b.neighbors=[],b.links=[];}),m.forEach(b=>{let v=typeof b.source=="object"?b.source:f.find(H=>H.id===b.source),L=typeof b.target=="object"?b.target:f.find(H=>H.id===b.target);!v||!L||(v.neighbors=v.neighbors||[],L.neighbors=L.neighbors||[],v.neighbors.push(L),L.neighbors.push(v),v.links=v.links||[],L.links=L.links||[],v.links.push(b),L.links.push(b));}),Z.current.nodes(f);let u=Z.current.force("link");u&&u.links(m),K();},[K]),B1=S6.useCallback((n=0,g=20)=>{let c=o1();if(!_.current||!N.current||!c||!c.length)return;let f=1/0,m=1/0,u=-1/0,b=-1/0;if(c.forEach(v=>{if(v.x===void 0||v.y===void 0)return;let L=v.x,H=v.y;f=Math.min(f,L),m=Math.min(m,H),u=Math.max(u,L),b=Math.max(b,H);}),isFinite(f)&&isFinite(u)&&isFinite(m)&&isFinite(b)){let{width:v,height:L}=d.current;f-=g,m-=g,u+=g,b+=g;let H=u-f,T=b-m,z=H>0?v/H:1,Y=T>0?L/T:1,A=Math.min(z,Y,10),O=f+H/2,w=m+T/2,$={k:A,x:v/2-O*A,y:L/2-w*A};if(n>0){let V={...d.current.transform},j=Date.now(),X=t(()=>{let U=Math.min(1,(Date.now()-j)/n),e1=U===1?1:1-Math.pow(1-U,3),S1={k:V.k+($.k-V.k)*e1,x:V.x+($.x-V.x)*e1,y:V.y+($.y-V.y)*e1};d.current.transform=S1,K(),U<1&&requestAnimationFrame(X);},"animateZoom");requestAnimationFrame(X);}else d.current.transform=$,K();}},[]),T1=S6.useCallback((n,g)=>{let c=o1();if(!c||c.length===0)return null;let p=D.nodeSizeBase/2,f=window.devicePixelRatio||1,m=(n*f-d.current.transform.x)/d.current.transform.k,u=(g*f-d.current.transform.y)/d.current.transform.k;return c.find(b=>{let v=(b.x||0)-m,L=(b.y||0)-u;return Math.sqrt(v*v+L*L)<=p})||null},[]),z1=S6.useCallback((n,g)=>{let c=Z1(),p=o1();if(!c||c.length===0||!p||p.length===0)return null;let f=window.devicePixelRatio||1,m=(n*f-d.current.transform.x)/d.current.transform.k,u=(g*f-d.current.transform.y)/d.current.transform.k,b=5;return c.find(v=>{let L=typeof v.source=="object"?v.source:p.find(d1=>d1.id===v.source),H=typeof v.target=="object"?v.target:p.find(d1=>d1.id===v.target);if(!L||!H)return false;let T=L.x||0,z=L.y||0,Y=H.x||0,A=H.y||0,O=m-T,w=u-z,$=Y-T,V=A-z,j=O*$+w*V,X=$*$+V*V;if(X===0)return false;let U=j/X;U=Math.max(0,Math.min(1,U));let e1=T+U*$,S1=z+U*V,s1=m-e1,y1=u-S1;return Math.sqrt(s1*s1+y1*y1)<=b})||null},[]),V5=S6.useCallback((n,g,c,p,f,m,u)=>{let b=n-c,v=g-p,L=Math.sqrt(b*b+v*v),H=Math.atan2(v,b);H<0&&(H+=2*Math.PI);let Y=L>=f*.5&&L<=f*1,A=false;return m===Math.PI&&u===Math.PI*2?A=H>=Math.PI&&H<=Math.PI*2:m===0&&u===Math.PI?A=H>=0&&H<=Math.PI:A=m<=u&&H>=m&&H<=u||m>u&&(H>=m||H<=u),Y&&A},[]),H2=S6.useCallback(n=>{if(n===d.current.hoveredNode)return;let g=new Set,c=new Set;n&&(g.add(n),n.neighbors&&n.neighbors.forEach(p=>g.add(p)),n.links&&n.links.forEach(p=>c.add(p))),d.current.hoveredNode=n,S&&S(n),d.current.highlightNodes=g,d.current.highlightLinks=c;},[S]),V2=S6.useCallback(n=>{if(n===d.current.hoveredLink)return;let g=new Set,c=new Set;if(n){c.add(n);let p=o1();if(p){let f=typeof n.source=="object"?n.source:p.find(u=>u.id===n.source),m=typeof n.target=="object"?n.target:p.find(u=>u.id===n.target);f&&g.add(f),m&&g.add(m);}}d.current.hoveredLink=n,x&&x(n),d.current.highlightNodes=g,d.current.highlightLinks=c;},[x,o1]),F5=S6.useCallback(n=>{y&&y(n);},[y]),P5=S6.useCallback(n=>{d.current.selectedNode=n,C&&C(n);},[C]),k5=S6.useCallback(()=>{d.current.selectedNode=null,h&&h();},[h]),F2=S6.useCallback(n=>{if(!N.current||!Z.current)return;let g=N.current.getBoundingClientRect(),c=n.clientX-g.left,p=n.clientY-g.top;d.current.mouseStartPos={x:c,y:p},d.current.isDragging=false;let f=T1(c,p);f?(d.current.draggedNode=f,f.fx=f.x,f.fy=f.y):(d.current.isPanning=true,d.current.lastMousePos={x:c,y:p});},[T1]),G1=S6.useCallback((n,g)=>{let c=null;if(N.current&&d.current&&W.length>0){let p=D.nodeSizeBase*D.nodeAreaFactor/2,f=N.current.getBoundingClientRect(),m=N.current.width/f.width,u=N.current.height/f.height,b=n*m,v=g*u,L=(b-d.current.transform.x)/d.current.transform.k,H=(v-d.current.transform.y)/d.current.transform.k,T=d.current.selectedNode?.x||0,z=d.current.selectedNode?.y||0,Y=Math.min(W.length,8),A=Math.min(Math.PI*2/Y,Math.PI);for(let O=0;O<Y;O++){let w=O*A,$=(O+1)*A;if(V5(L,H,T,z,p,w,$)){c=O;break}}}return c},[W]),P2=S6.useCallback(n=>{if(!N.current)return;let g=N.current.getBoundingClientRect(),c=n.clientX-g.left,p=n.clientY-g.top;if(d.current.draggedNode&&d.current.mouseStartPos&&Z.current){let u=d.current.mouseStartPos.x,b=d.current.mouseStartPos.y,v=c-u,L=p-b;Math.sqrt(v*v+L*L)>3&&(d.current.isDragging=true,Z.current.alphaTarget()===0&&Z.current.alphaTarget(0).restart());let z=window.devicePixelRatio||1,Y=(c*z-d.current.transform.x)/d.current.transform.k,A=(p*z-d.current.transform.y)/d.current.transform.k;d.current.draggedNode.fx=Y,d.current.draggedNode.fy=A;return}if(d.current.isPanning&&d.current.mouseStartPos){let u=c-d.current.lastMousePos.x,b=p-d.current.lastMousePos.y,v=d.current.mouseStartPos.x,L=d.current.mouseStartPos.y;Math.sqrt(Math.pow(c-v,2)+Math.pow(p-L,2))>3&&(d.current.isDragging=true),d.current.transform={...d.current.transform,x:d.current.transform.x+u,y:d.current.transform.y+b},d.current.lastMousePos={x:c,y:p},K();return}let f,m;if(d.current.selectedNode&&N.current&&W.length>0){let u=G1(c,p);u!==null&&(m=d.current.selectedNode),u!==d.current.hoveredButtonIndex&&(f=true),d.current.hoveredButtonIndex=u;}else d.current.hoveredButtonIndex!==null&&(d.current.hoveredButtonIndex=null);if(!m&&(m=T1(c,p),!m)){let u=z1(c,p),b=u!==d.current.hoveredLink;if(u&&d.current.hoveredNode&&H2(null),V2(u),N.current&&(N.current.style.cursor=u?"pointer":"default"),b){K();return}}m&&d.current.hoveredLink&&V2(null),m!==d.current.hoveredNode&&(f=true),H2(m),N.current&&(N.current.style.cursor=m?"pointer":"default"),f&&K();},[W,T1,z1,H2,V2,K,V5,G1]),n6=S6.useCallback(n=>{d.current.mustBeStoppedPropagation&&(n.stopPropagation(),n.preventDefault()),d.current.mustBeStoppedPropagation=false;},[]),R1=S6.useCallback(n=>{let g=d.current.isDragging;if(g&&(d.current.mustBeStoppedPropagation=true),!g&&d.current.mouseStartPos){let c=N.current?.getBoundingClientRect();if(c){let p=n.clientX-c.left,f=n.clientY-c.top;W.length>0&&d.current.hoveredButtonIndex===null&&(d.current.hoveredButtonIndex=G1(p,f));let m=false;if(d.current.selectedNode&&d.current.hoveredButtonIndex!==null&&l[d.current.hoveredButtonIndex]){let u=l[d.current.hoveredButtonIndex];u&&u.onClick&&(u.onClick(d.current.selectedNode),m=true,d.current.hoveredButtonIndex=null);}if(!m&&d.current.draggedNode)P5(d.current.draggedNode);else if(!m&&!d.current.draggedNode){let u=z1(p,f);u?F5(u):k5();}}}if(d.current.draggedNode&&Z.current){if(g){Z.current.alphaTarget(0);let c=.05,p=.04,f=.6;Z.current.alpha(c).alphaDecay(p),Z.current.velocityDecay(f);}else Z.current.alphaTarget(0);d.current.draggedNode.fx=void 0,d.current.draggedNode.fy=void 0,d.current.draggedNode=null;}d.current.isDragging=false,d.current.mouseStartPos=null,d.current.isPanning&&(d.current.isPanning=false),K();},[l,K,P5,k5,z1,F5,G1,W]),k2=S6.useCallback(n=>{if(n.stopPropagation(),n.preventDefault(),!N.current)return;let g=N.current.getBoundingClientRect(),c=n.clientX-g.left,p=n.clientY-g.top,m=-n.deltaY>0?1.1:1/1.1,u=d.current.transform,b=u.k*m;if(b<.01||b>10)return;let v=u.k*m,L=c-(c-u.x)*m,H=p-(p-u.y)*m;d.current.transform={k:v,x:L,y:H},K();},[K]),I2=t((n,g)=>{let c=n.touches[0];if(c){let p={clientX:c.clientX,clientY:c.clientY};g(p);}},"convertTouchToMouseEvent"),i6=S6.useCallback(n=>{I2(n,F2);},[F2]),E2=S6.useCallback(n=>{d.current.mustBeStoppedPropagation&&(n.preventDefault(),n.stopPropagation()),d.current.mustBeStoppedPropagation=false,I2(n,R1);},[R1]),a6=S6.useCallback(n=>{I2(n,P2);},[P2]);return S6.useImperativeHandle(P,()=>({zoomToFit:B1,addNodes:M5,removeNodes:H5}),[B1,M5,H5]),S6.useEffect(()=>{let n=N.current,{width:g,height:c}=d.current;if(!n)return;L2(),J(true);let p=g/2,f=c/2,m=D.nodeSizeBase,u=m/2,b=m*2.5;Z.current&&Z.current.stop();let v=Z.current=d3.forceSimulation(q).force("link",d3.forceLink(Q).id(L=>L.id).distance(b).strength(.9)).force("charge",d3.forceManyBody().strength(-m/10*200).theta(.5).distanceMin(m*2)).force("x",d3.forceX().strength(.03)).force("y",d3.forceY().strength(.03)).force("center",d3.forceCenter(p,f).strength(.05)).force("collide",d3.forceCollide().radius(u*2).iterations(2).strength(1)).velocityDecay(.6);return ()=>{v.stop();}},[q,Q]),S6.useLayoutEffect(()=>{let n=N.current;n&&(d.current.width=o*y2,d.current.height=r*y2,n.width=d.current.width,n.height=d.current.height);},[o,r]),S6.useEffect(()=>{if(Z.current){let n=Z.current;n.on("tick",()=>{K();}),n.on("end",()=>{k&&(B1(0,20),setTimeout(()=>{J(false);},200));});}k||K();},[q,Q,k,K,B1]),S6.useEffect(()=>{!q||!Q||Q.forEach(n=>{let g=typeof n.source=="object"?n.source:q.find(p=>p.id===n.source),c=typeof n.target=="object"?n.target:q.find(p=>p.id===n.target);!g||!c||(!g.neighbors&&(g.neighbors=[]),!c.neighbors&&(c.neighbors=[]),g.neighbors.push(c),c.neighbors.push(g),!g.links&&(g.links=[]),!c.links&&(c.links=[]),g.links.push(n),c.links.push(n));});},[q,Q]),S6.useEffect(()=>{l&&l.length>0&&w2(M9(l));},[l]),S6.useEffect(()=>{let n=N.current;if(n)return n.addEventListener("wheel",k2,{passive:false}),n.addEventListener("touchend",E2,{passive:false}),()=>{n.removeEventListener("wheel",k2),n.removeEventListener("touchend",E2);}},[k2,E2]),jsxRuntime.jsxs(V9,{children:[(e||k)&&jsxRuntime.jsx(Q4,{width:o,height:r}),jsxRuntime.jsx(F9,{ref:N,style:{width:o,height:r,display:e||k?"none":"block"},onMouseDown:F2,onMouseMove:P2,onMouseUp:R1,onMouseLeave:R1,onClick:n6,onTouchStart:i6,onTouchMove:a6})]})}),V9=x1.styled.div`
1141
1141
  display: flex;
1142
1142
  align-items: center;
1143
1143
  justify-content: center;