sankyy
Version:
<a href="https://nivo.rocks"><img alt="nivo" src="https://raw.githubusercontent.com/plouc/nivo/master/nivo.png" width="216" height="68"/></a>
3 lines (2 loc) • 20.5 kB
JavaScript
import{useState as n,useMemo as e,useCallback as o,createElement as t,Fragment as r,forwardRef as i,useRef as a,useEffect as l,useImperativeHandle as d}from"react";import c from"lodash/uniq.js";import{usePropertyAccessor as s,useValueFormatter as u,useMotionConfig as h,useAnimatedPath as v,Container as f,useDimensions as p,SvgWrapper as y,ResponsiveWrapper as g}from"@nivo/core";import{BoxLegendSvg as m}from"@nivo/legends";import{sankeyCenter as k,sankeyJustify as x,sankeyLeft as b,sankeyRight as C,sankey as O}from"d3-sankey";import{Text as L}from"@nivo/text";import{BasicTooltip as M,Chip as w,useTooltip as E}from"@nivo/tooltip";import{jsx as I,jsxs as P,Fragment as B}from"react/jsx-runtime";import T from"lodash/cloneDeep.js";import{useTheme as N}from"@nivo/theming";import{useOrdinalColorScale as H,useInheritedColor as W}from"@nivo/colors";import{useSpring as z,animated as S,useSprings as R}from"@react-spring/web";import{line as j,curveMonotoneX as F,curveMonotoneY as X}from"d3-shape";function Y(){return Y=Object.assign?Object.assign.bind():function(n){for(var e=1;e<arguments.length;e++){var o=arguments[e];for(var t in o)({}).hasOwnProperty.call(o,t)&&(n[t]=o[t])}return n},Y.apply(null,arguments)}function D(n,e){if(null==n)return{};var o={};for(var t in n)if({}.hasOwnProperty.call(n,t)){if(-1!==e.indexOf(t))continue;o[t]=n[t]}return o}var G={container:{display:"flex",alignItems:"center"},sourceChip:{marginRight:7},targetChip:{marginLeft:7,marginRight:7}},A={center:k,justify:x,start:b,end:C},V=Object.keys(A),Z=function(n){return A[n]},q={layout:"horizontal",align:"center",sort:"auto",colors:{scheme:"nivo"},nodeOpacity:.75,nodeHoverOpacity:1,nodeHoverOthersOpacity:.15,nodeThickness:12,nodeSpacing:12,nodeInnerPadding:0,nodeBorderWidth:1,nodeBorderColor:{from:"color",modifiers:[["darker",.5]]},nodeBorderRadius:0,linkOpacity:.25,linkHoverOpacity:.6,linkHoverOthersOpacity:.15,linkContract:0,linkBlendMode:"multiply",enableLinkGradient:!1,enableLabels:!0,label:"id",labelPosition:"inside",labelPadding:9,labelOrientation:"horizontal",labelTextColor:{from:"color",modifiers:[["darker",.8]]},labelComponent:L,isInteractive:!0,nodeTooltip:function(n){var e=n.node;return I(M,{id:e.label,enableChip:!0,color:e.color})},linkTooltip:function(n){var e=n.link;return I(M,{id:P("span",{style:G.container,children:[I(w,{color:e.source.color,style:G.sourceChip}),I("strong",{children:e.source.label})," > ",I("strong",{children:e.target.label}),I(w,{color:e.target.color,style:G.targetChip}),I("strong",{children:e.formattedValue})]})})},legends:[],layers:["links","nodes","labels","legends"],role:"img",animate:!0,motionConfig:"gentle"},U=function(n){return n.id},J=function(o){var t=o.data,r=o.valueFormat,i=o.layout,a=o.width,l=o.height,d=o.sort,c=o.align,h=o.colors,v=o.nodeThickness,f=o.nodeSpacing,p=o.nodeInnerPadding,y=o.nodeBorderColor,g=o.label,m=o.labelTextColor,k=o.nodePositions,x=n(null),b=x[0],C=x[1],L=n(null),M=L[0],w=L[1],E=e((function(){if("auto"!==d)return"input"===d?null:"ascending"===d?function(n,e){return n.value-e.value}:"descending"===d?function(n,e){return e.value-n.value}:d}),[d]),I="input"===d?null:void 0,P=e((function(){return"function"==typeof c?c:Z(c)}),[c]),B=N(),z=H(h,"id"),S=W(y,B),R=s(g),j=W(m,B),F=u(r),X=e((function(){return function(n){var e=n.data,o=n.formatValue,t=n.layout,r=n.alignFunction,i=n.sortFunction,a=n.linkSortMode,l=n.nodeThickness,d=n.nodeSpacing,c=n.nodeInnerPadding,s=n.width,u=n.height,h=n.getColor,v=n.getLabel,f=n.nodePositions,p=O().nodeAlign(r).nodeSort(i).linkSort(a).nodeWidth(l).nodePadding(d).size("horizontal"===t?[s,u]:[u,s]).nodeId(U),y=T(e);p(y);var g=new Map;y.nodes.forEach((function(n){var e=n.depth;g.has(e)||g.set(e,[]),g.get(e).push(n)}));for(var m=Array.from(g.keys()).sort((function(n,e){return n-e})),k=function(){var n=g.get(m[x-1]),e=g.get(m[x]);if(!n||!e)return 1;var o=Math.max.apply(Math,n.map((function(n){return"horizontal"===t?n.y1:n.x1}))),r=function(n){return n.sourceLinks.length>0&&n.targetLinks.length>0},i=e.filter(r).sort((function(n,e){return"horizontal"===t?n.y0-e.y0:n.x0-e.x0})),a=e.filter((function(n){return!r(n)})),l=a.length?Math.max.apply(Math,a.map((function(n){return"horizontal"===t?n.y1:n.x1}))):0;if(i.length){var d=Math.max(o,l)+30,c=[].concat(i).sort((function(n,e){return"horizontal"===t?e.y1-n.y1:e.x1-n.x1})),s=d;c.forEach((function(n){var e="horizontal"===t?n.y1-n.y0:n.x1-n.x0,o=s-e,r=o-("horizontal"===t?n.y0:n.x0);"horizontal"===t?(n.y0+=r,n.y1+=r,n.y+=r):(n.x0+=r,n.x1+=r,n.x+=r),s=o-30}))}},x=1;x<m.length;x++)k();y.nodes.forEach((function(n){if(f){var e=f[n.id];e&&(void 0!==e.x&&(n.manualX=e.x),void 0!==e.y&&(n.manualY=e.y))}if(n.color=h(n),n.label=v(n),n.formattedValue=o(n.value),"manualX"in n&&void 0!==n.manualX){var r=n.x1-n.x0;n.x0=n.manualX,n.x1=n.manualX+r}if("manualY"in n&&void 0!==n.manualY){var i=n.y1-n.y0;n.y0=n.manualY,n.y1=n.manualY+i}if("horizontal"===t)n.x=n.x0+c,n.y=n.y0,n.width=Math.max(n.x1-n.x0-2*c,0),n.height=Math.max(n.y1-n.y0,0);else{n.x=n.y0,n.y=n.x0+c,n.width=Math.max(n.y1-n.y0,0),n.height=Math.max(n.x1-n.x0-2*c,0);var a=n.x0,l=n.x1;n.x0=n.y0,n.x1=n.y1,n.y0=a,n.y1=l}})),y.links.forEach((function(n){n.formattedValue=o(n.value),n.color=n.source.color,n.thickness=n.width}));var b=Math.max.apply(Math,y.nodes.map((function(n){return n.depth})));return y.nodes.forEach((function(n){if("horizontal"===t){var e=0;(0===n.depth?[].concat(n.sourceLinks).sort((function(n,e){return(n.target.depth===b?0:1)-(e.target.depth===b?0:1)})):n.sourceLinks).forEach((function(o){o.pos0=n.y0+e+o.thickness/2,e+=o.thickness}));var o=0;n.targetLinks.forEach((function(e){e.pos1=n.y0+o+e.thickness/2,o+=e.thickness}))}else{var r=0;n.sourceLinks.forEach((function(e){e.pos0=n.x0+r+e.thickness/2,r+=e.thickness}));var i=0;n.targetLinks.forEach((function(e){e.pos1=n.x0+i+e.thickness/2,i+=e.thickness}))}})),y}({data:t,formatValue:F,layout:i,alignFunction:P,sortFunction:E,linkSortMode:I,nodeThickness:v,nodeSpacing:f,nodeInnerPadding:p,width:a,height:l,getColor:z,getLabel:R,nodePositions:k})}),[t,F,i,P,E,I,v,f,p,a,l,z,R,k]),Y=X.nodes,D=X.links,G=e((function(){return Y.map((function(n){return{id:n.id,label:n.label,color:n.color}}))}),[Y]);return{nodes:Y,links:D,legendData:G,getNodeBorderColor:S,currentNode:b,setCurrentNode:C,currentLink:M,setCurrentLink:w,getLabelTextColor:j}},K=function(n){var e=n.node,r=n.x,i=n.y,a=n.width,l=n.height,d=n.color,c=n.opacity,s=n.borderWidth,u=n.borderColor,v=n.borderRadius,f=n.setCurrent,p=n.isInteractive,y=n.onClick,g=n.tooltip,m=h(),k=m.animate,x=m.config,b=z({x:r,y:i,width:a,height:l,opacity:c,color:d,config:x,immediate:!k}),C=E(),O=C.showTooltipFromEvent,L=C.hideTooltip,M=o((function(n){f(e),O(t(g,{node:e}),n,"left")}),[f,e,O,g]),w=o((function(n){O(t(g,{node:e}),n,"left")}),[O,e,g]),P=o((function(){f(null),L()}),[f,L]),B=o((function(n){null==y||y(e,n)}),[y,e]);return I(S.rect,{x:b.x,y:b.y,rx:v,ry:v,width:b.width.to((function(n){return Math.max(n,0)})),height:b.height.to((function(n){return Math.max(n,0)})),fill:b.color,fillOpacity:b.opacity,strokeWidth:s,stroke:u,strokeOpacity:c,onMouseEnter:p?M:void 0,onMouseMove:p?w:void 0,onMouseLeave:p?P:void 0,onClick:p?B:void 0})},Q=function(n){var e=n.nodes,o=n.nodeOpacity,t=n.nodeHoverOpacity,r=n.nodeHoverOthersOpacity,i=n.borderWidth,a=n.getBorderColor,l=n.borderRadius,d=n.setCurrentNode,c=n.currentNode,s=n.currentLink,u=n.isCurrentNode,h=n.isInteractive,v=n.onClick,f=n.tooltip,p=function(n){return c||s?u(n)?t:r:o};return I(B,{children:e.map((function(n){return I(K,{node:n,x:n.x,y:n.y,width:n.width,height:n.height,color:n.color,opacity:p(n),borderWidth:i,borderColor:a(n),borderRadius:l,setCurrent:d,isInteractive:h,onClick:v,tooltip:f},n.id)}))})},$=function(n){var e=n.id,o=n.layout,t=n.startColor,r=n.endColor;return P("linearGradient",Y({id:e,spreadMethod:"pad"},"horizontal"===o?{x1:"0%",x2:"100%",y1:"0%",y2:"0%"}:{x1:"0%",x2:"0%",y1:"0%",y2:"100%"},{children:[I("stop",{offset:"0%",stopColor:t}),I("stop",{offset:"100%",stopColor:r})]}))},_=function(n){var e=n.link,r=n.layout,i=n.path,a=n.color,l=n.opacity,d=n.blendMode,c=n.enableGradient,s=n.setCurrent,u=n.tooltip,f=n.isInteractive,p=n.onClick,y=e.source.id+"."+e.target.id+"."+e.index,g=h(),m=g.animate,k=g.config,x=v(i),b=z({color:a,opacity:l,config:k,immediate:!m}),C=E(),O=C.showTooltipFromEvent,L=C.hideTooltip,M=o((function(n){s(e),O(t(u,{link:e}),n,"left")}),[s,e,O,u]),w=o((function(n){O(t(u,{link:e}),n,"left")}),[O,e,u]),T=o((function(){s(null),L()}),[s,L]),N=o((function(n){null==p||p(e,n)}),[p,e]);return P(B,{children:[c&&I($,{id:y,layout:r,startColor:e.startColor||e.source.color,endColor:e.endColor||e.target.color}),I(S.path,{fill:c?'url("#'+encodeURI(y)+'")':b.color,d:x,fillOpacity:b.opacity,onMouseEnter:f?M:void 0,onMouseMove:f?w:void 0,onMouseLeave:f?T:void 0,onClick:f?N:void 0,style:{mixBlendMode:d}})]})},nn=function(n){var o=n.links,t=n.layout,r=n.linkOpacity,i=n.linkHoverOpacity,a=n.linkHoverOthersOpacity,l=n.linkContract,d=n.linkBlendMode,c=n.enableLinkGradient,s=n.setCurrentLink,u=n.currentLink,h=n.currentNode,v=n.isCurrentLink,f=n.isInteractive,p=n.onClick,y=n.tooltip,g=function(n){return h||u?v(n)?i:a:r},m=e((function(){return"horizontal"===t?(n=j().curve(F),function(e,o){var t=Math.max(1,e.thickness-2*o)/2,r=.12*(e.target.x0-e.source.x1),i=[[e.source.x1,e.pos0-t],[e.source.x1+r,e.pos0-t],[e.target.x0-r,e.pos1-t],[e.target.x0,e.pos1-t],[e.target.x0,e.pos1+t],[e.target.x0-r,e.pos1+t],[e.source.x1+r,e.pos0+t],[e.source.x1,e.pos0+t],[e.source.x1,e.pos0-t]];return n(i)+"Z"}):function(){var n=j().curve(X);return function(e,o){var t=Math.max(1,e.thickness-2*o)/2,r=.12*(e.target.y0-e.source.y1),i=[[e.pos0+t,e.source.y1],[e.pos0+t,e.source.y1+r],[e.pos1+t,e.target.y0-r],[e.pos1+t,e.target.y0],[e.pos1-t,e.target.y0],[e.pos1-t,e.target.y0-r],[e.pos0-t,e.source.y1+r],[e.pos0-t,e.source.y1],[e.pos0+t,e.source.y1]];return n(i)+"Z"}}();var n}),[t]);return I(B,{children:o.map((function(n){return I(_,{link:n,layout:t,path:m(n,l),color:n.color,opacity:g(n),blendMode:d,enableGradient:c,setCurrent:s,isInteractive:f,onClick:p,tooltip:y},n.source.id+"."+n.target.id+"."+n.index)}))})},en=function(n){var e=n.nodes,o=n.layout,t=n.width,r=n.height,i=n.labelPosition,a=n.labelPadding,l=n.labelOrientation,d=n.getLabelTextColor,c=n.labelComponent,s=N(),u="vertical"===l?-90:0,v=e.map((function(n){var e,c,s;return"horizontal"===o?(c=n.y+n.height/2,n.x<t/2?"inside"===i?(e=n.x1+a,s="vertical"===l?"middle":"start"):(e=n.x-a,s="vertical"===l?"middle":"end"):"inside"===i?(e=n.x-a,s="vertical"===l?"middle":"end"):(e=n.x1+a,s="vertical"===l?"middle":"start")):"vertical"===o&&(e=n.x+n.width/2,n.y<r/2?"inside"===i?(c=n.y1+a,s="vertical"===l?"end":"middle"):(c=n.y-a,s="vertical"===l?"start":"middle"):"inside"===i?(c=n.y-a,s="vertical"===l?"start":"middle"):(c=n.y1+a,s="vertical"===l?"end":"middle")),{id:n.id,label:n.label,x:e,y:c,textAnchor:s,color:d(n)}})),f=h(),p=f.animate,y=f.config,g=R(v.length,v.map((function(n){return{transform:"translate("+n.x+", "+n.y+") rotate("+u+")",color:n.color,config:y,immediate:!p}})));return I(B,{children:g.map((function(n,o){var t=v[o];return I(c,{dominantBaseline:"central",textAnchor:t.textAnchor,transform:n.transform,style:Y({},s.labels.text,{fill:n.color,pointerEvents:"none"}),node:e[o],children:t.label},t.id)}))})},on=["isInteractive","animate","motionConfig","theme","renderWrapper"],tn=function(n){var o=n.data,i=n.valueFormat,a=n.layout,l=void 0===a?q.layout:a,d=n.sort,s=void 0===d?q.sort:d,u=n.align,h=void 0===u?q.align:u,v=n.width,f=n.height,g=n.margin,k=n.colors,x=void 0===k?q.colors:k,b=n.nodeThickness,C=void 0===b?q.nodeThickness:b,O=n.nodeSpacing,L=void 0===O?q.nodeThickness:O,M=n.nodeInnerPadding,w=void 0===M?q.nodeInnerPadding:M,E=n.nodePositions,P=n.nodeBorderColor,B=void 0===P?q.nodeBorderColor:P,T=n.nodeOpacity,N=void 0===T?q.nodeOpacity:T,H=n.nodeHoverOpacity,W=void 0===H?q.nodeHoverOpacity:H,z=n.nodeHoverOthersOpacity,S=void 0===z?q.nodeHoverOthersOpacity:z,R=n.nodeBorderWidth,j=void 0===R?q.nodeBorderWidth:R,F=n.nodeBorderRadius,X=void 0===F?q.nodeBorderRadius:F,D=n.linkOpacity,G=void 0===D?q.linkOpacity:D,A=n.linkHoverOpacity,V=void 0===A?q.linkHoverOpacity:A,Z=n.linkHoverOthersOpacity,U=void 0===Z?q.linkHoverOthersOpacity:Z,K=n.linkContract,$=void 0===K?q.linkContract:K,_=n.linkBlendMode,on=void 0===_?q.linkBlendMode:_,tn=n.enableLinkGradient,rn=void 0===tn?q.enableLinkGradient:tn,an=n.enableLabels,ln=void 0===an?q.enableLabels:an,dn=n.labelComponent,cn=void 0===dn?q.labelComponent:dn,sn=n.labelPosition,un=void 0===sn?q.labelPosition:sn,hn=n.labelPadding,vn=void 0===hn?q.labelPadding:hn,fn=n.labelOrientation,pn=void 0===fn?q.labelOrientation:fn,yn=n.label,gn=void 0===yn?q.label:yn,mn=n.labelTextColor,kn=void 0===mn?q.labelTextColor:mn,xn=n.nodeTooltip,bn=void 0===xn?q.nodeTooltip:xn,Cn=n.linkTooltip,On=void 0===Cn?q.linkTooltip:Cn,Ln=n.isInteractive,Mn=void 0===Ln?q.isInteractive:Ln,wn=n.onClick,En=n.legends,In=void 0===En?q.legends:En,Pn=n.layers,Bn=void 0===Pn?q.layers:Pn,Tn=n.role,Nn=void 0===Tn?q.role:Tn,Hn=n.ariaLabel,Wn=n.ariaLabelledBy,zn=n.ariaDescribedBy,Sn=p(v,f,g),Rn=Sn.margin,jn=Sn.innerWidth,Fn=Sn.innerHeight,Xn=Sn.outerWidth,Yn=Sn.outerHeight,Dn=J({data:o,valueFormat:i,layout:l,width:jn,height:Fn,sort:s,align:h,colors:x,nodeThickness:C,nodeSpacing:L,nodeInnerPadding:w,nodePositions:E,nodeBorderColor:B,label:gn,labelTextColor:kn}),Gn=Dn.nodes,An=Dn.links,Vn=Dn.legendData,Zn=Dn.getNodeBorderColor,qn=Dn.currentNode,Un=Dn.setCurrentNode,Jn=Dn.currentLink,Kn=Dn.setCurrentLink,Qn=Dn.getLabelTextColor,$n=e((function(){var n=function(){return!1},e=function(){return!1};if(Jn&&(n=function(n){var e=n.id;return e===Jn.source.id||e===Jn.target.id},e=function(n){var e=n.source,o=n.target;return e.id===Jn.source.id&&o.id===Jn.target.id}),qn){var o=[qn.id];An.filter((function(n){var e=n.source,o=n.target;return e.id===qn.id||o.id===qn.id})).forEach((function(n){var e=n.source,t=n.target;o.push(e.id),o.push(t.id)})),o=c(o),n=function(n){var e=n.id;return o.includes(e)},e=function(n){var e=n.source,o=n.target;return e.id===qn.id||o.id===qn.id}}return{isCurrentNode:n,isCurrentLink:e}}),[Jn,qn,An]),_n=$n.isCurrentNode,ne=$n.isCurrentLink,ee=e((function(){return{links:An,nodes:Gn,margin:Rn,width:v,height:f,outerWidth:Xn,outerHeight:Yn,currentNode:qn,isCurrentNode:_n,setCurrentNode:Un,currentLink:Jn,isCurrentLink:ne,setCurrentLink:Kn,isInteractive:Mn}}),[An,Gn,Rn,v,f,Xn,Yn,qn,_n,Un,Jn,ne,Kn,Mn]),oe={links:null,nodes:null,labels:null,legends:null};return Bn.includes("links")&&(oe.links=I(nn,{links:An,layout:l,linkContract:$,linkOpacity:G,linkHoverOpacity:V,linkHoverOthersOpacity:U,linkBlendMode:on,enableLinkGradient:rn,setCurrentLink:Kn,currentNode:qn,currentLink:Jn,isCurrentLink:ne,isInteractive:Mn,onClick:wn,tooltip:On},"links")),Bn.includes("nodes")&&(oe.nodes=I(Q,{nodes:Gn,nodeOpacity:N,nodeHoverOpacity:W,nodeHoverOthersOpacity:S,borderWidth:j,borderRadius:X,getBorderColor:Zn,setCurrentNode:Un,currentNode:qn,currentLink:Jn,isCurrentNode:_n,isInteractive:Mn,onClick:wn,tooltip:bn},"nodes")),Bn.includes("labels")&&ln&&(oe.labels=I(en,{nodes:Gn,layout:l,width:jn,height:Fn,labelPosition:un,labelPadding:vn,labelOrientation:pn,getLabelTextColor:Qn,labelComponent:cn},"labels")),Bn.includes("legends")&&(oe.legends=I(r,{children:In.map((function(n,e){return I(m,Y({},n,{containerWidth:jn,containerHeight:Fn,data:Vn}),"legend"+e)}))},"legends")),I(y,{width:Xn,height:Yn,margin:Rn,role:Nn,ariaLabel:Hn,ariaLabelledBy:Wn,ariaDescribedBy:zn,children:Bn.map((function(n,e){var o;return"function"==typeof n?I(r,{children:t(n,ee)},e):null!=(o=null==oe?void 0:oe[n])?o:null}))})},rn=function(n){var e=n.isInteractive,o=void 0===e?q.isInteractive:e,t=n.animate,r=void 0===t?q.animate:t,i=n.motionConfig,a=void 0===i?q.motionConfig:i,l=n.theme,d=n.renderWrapper,c=D(n,on);return I(f,{animate:r,isInteractive:o,motionConfig:a,renderWrapper:d,theme:l,children:I(tn,Y({isInteractive:o},c))})},an=function(n){return I(g,{children:function(e){var o=e.width,t=e.height;return I(rn,Y({width:o,height:t},n))}})},ln=["onNodeDrag","onNodeDragEnd","layers","initialNodePositions"],dn=i((function(t,r){var i=t.onNodeDrag,c=t.onNodeDragEnd,s=t.layers,u=t.initialNodePositions,h=D(t,ln),v=e((function(){return null!=u?u:{}}),[u]),f=n(v),p=f[0],y=f[1],g=a(!1),m=a(null),k=a(!1);l((function(){g.current||y((function(n){var e=Object.keys(n),o=Object.keys(v);return e.length===o.length&&e.every((function(e){var o=n[e],t=v[e];return(null==o?void 0:o.x)===(null==t?void 0:t.x)&&(null==o?void 0:o.y)===(null==t?void 0:t.y)}))?n:v}))}),[v]),d(r,(function(){return{resetNodePositions:function(){g.current=!1,y(u||v||{})}}}));var x,b,C=o((function(n){var e=n.nodes,o=n.isCurrentNode;k.current||(k.current=!0);var t=function(n){if(m.current){var e=m.current,o=e.nodeId,t=e.startClientX,r=e.startClientY,a=e.startX,l=e.startY,d=n.clientX-t,c=n.clientY-r,s=a+d,u=l+c;y((function(n){var e;return Y({},n,((e={})[o]={x:s,y:u},e))})),null==i||i(o,s,u)}},r=function(){var n,e;if(m.current){var o=m.current.nodeId;m.current=null,window.removeEventListener("mousemove",t),window.removeEventListener("mouseup",r);var i=p[o];null==c||c(o,null!=(n=null==i?void 0:i.x)?n:0,null!=(e=null==i?void 0:i.y)?e:0)}};return I(B,{children:e.map((function(n){var e,i,a,l,d=o(n);return I("g",{transform:"translate("+n.x+","+n.y+")",style:{cursor:"move"},onMouseDown:function(e){var o,i,a,l;e.stopPropagation(),m.current={nodeId:String(n.id),startClientX:e.clientX,startClientY:e.clientY,startX:null!=(o=null==(i=p[n.id])?void 0:i.x)?o:n.x,startY:null!=(a=null==(l=p[n.id])?void 0:l.y)?a:n.y},g.current=!0,window.addEventListener("mousemove",t),window.addEventListener("mouseup",r)},children:I("rect",{width:n.width,height:n.height,fill:n.color,opacity:d?null!=(e=h.nodeHoverOpacity)?e:1:null!=(i=h.nodeOpacity)?i:1,stroke:n.color,strokeWidth:null!=(a=h.nodeBorderWidth)?a:0,rx:null!=(l=h.nodeBorderRadius)?l:0})},n.id)}))})}),[p,i,c,h.nodeHoverOpacity,h.nodeOpacity,h.nodeBorderRadius,h.nodeBorderWidth]),O=-1!==(b=(x=null!=s?s:["links","nodes","labels","legends"]).indexOf("nodes"))?[].concat(x.slice(0,b),[C],x.slice(b+1)):[].concat(x,[C]);return I(rn,Y({},h,{layers:O,nodePositions:p}))})),cn=function(n,e){var o=e.width,t=e.height,r=e.layout,i=void 0===r?q.layout:r,a=e.nodeThickness,l=void 0===a?q.nodeThickness:a,d=e.nodeSpacing,c=void 0===d?q.nodeSpacing:d,s=e.align,u=void 0===s?q.align:s,h=e.collisionGap,v=void 0===h?4:h,f=e.staggerGap,p=void 0===f?12:f,y=O().nodeWidth(l).nodePadding(c).size("horizontal"===i?[o,t]:[t,o]).nodeAlign(Z(u)).nodeId((function(n){return n.id})),g=T(n);y(g);var m={};g.nodes.forEach((function(n){m[n.depth]=m[n.depth]||[],m[n.depth].push(n)})),Object.values(m).forEach((function(n){n.sort((function(n,e){return n.y0-e.y0}));var e=0;n.forEach((function(n){0!==e&&(n.y0+=e,n.y1+=e),n.sourceLinks.length>0&&n.targetLinks.length>0&&(e+=p)}))})),g.links.forEach((function(n){n.thickness=n.width})),g.nodes.forEach((function(n){if("horizontal"===i){var e=0;n.sourceLinks.forEach((function(o){o.pos0=n.y0+e+o.thickness/2,e+=o.thickness}));var o=0;n.targetLinks.forEach((function(e){e.pos1=n.y0+o+e.thickness/2,o+=e.thickness}))}else{var t=0;n.sourceLinks.forEach((function(e){e.pos0=n.x0+t+e.thickness/2,t+=e.thickness}));var r=0;n.targetLinks.forEach((function(e){e.pos1=n.x0+r+e.thickness/2,r+=e.thickness}))}})),g.links.forEach((function(n){if(!(Math.abs(n.target.depth-n.source.depth)<=1)){var e=n.thickness/2,o=Math.min(n.pos0-e,n.pos1-e),t=Math.max(n.pos0+e,n.pos1+e),r=Math.min(n.source.depth,n.target.depth),i=Math.max(n.source.depth,n.target.depth);g.nodes.forEach((function(n){if(!(n.depth<=r||n.depth>=i)){var e=n.y1+v<o,a=n.y0-v>t;if(!(e||a)){var l=t-n.y0+v;n.y0+=l,n.y1+=l}}}))}})),Object.values(m).forEach((function(n){n.sort((function(n,e){return n.y0-e.y0}));for(var e=1;e<n.length;e++){var o=n[e-1],t=n[e],r=o.y1+c;if(t.y0<r){var i=r-t.y0;t.y0+=i,t.y1+=i}}}));var k=Math.max.apply(Math,g.nodes.map((function(n){return n.y1})));if(k>t-300){var x=k-t;g.nodes.forEach((function(n){n.y0-=x,n.y1-=x}))}var b=Math.min.apply(Math,g.nodes.map((function(n){return n.y0})));b<0&&g.nodes.forEach((function(n){n.y0-=b,n.y1-=b}));var C={};return g.nodes.forEach((function(n){var e=Number.isFinite(n.y0)?n.y0:0;C[n.id]={y:e}})),C};export{dn as DraggableSankey,an as ResponsiveSankey,rn as Sankey,cn as calculateOptimalNodePositions,Z as sankeyAlignmentFromProp,V as sankeyAlignmentPropKeys,A as sankeyAlignmentPropMapping,q as svgDefaultProps};
//# sourceMappingURL=nivo-sankey.mjs.map