@progress/kendo-react-charts
Version:
React Chart renders a wide range of high-quality data visualizations. KendoReact Charts package
9 lines (8 loc) • 3.01 kB
JavaScript
/**
* @license
*-------------------------------------------------------------------------------------------
* Copyright © 2025 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the package root for more information
*-------------------------------------------------------------------------------------------
*/
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const W=require("react"),j=require("@progress/kendo-charts"),d=require("@progress/kendo-react-common"),_=require("../package-metadata.js"),I=require("./propTypes.js"),y=require("./SankeyTooltip.js");function K(e){const c=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(c,r,o.get?o:{enumerable:!0,get:()=>e[r]})}}return c.default=e,Object.freeze(c)}const t=K(W),w=12,m={offset:w,visible:!0},V=["nodeEnter","nodeLeave","linkEnter","linkLeave","nodeClick","linkClick"],z=(e,c)=>{e&&(e.unbind(),V.forEach(r=>{c[r]&&e.bind(r,c[r])}))},b=t.forwardRef((e,c)=>{const r=!d.validatePackage(_.packageMetadata,{component:"Sankey"}),o=t.useRef(null),a=t.useRef(null),u=d.useRtl(o,e.dir,[e.dir,o.current]),p=t.useRef(null),g=d.useDocument(o),{data:v,links:C,nodes:E,labels:T,title:L,legend:R,tooltip:k=m,disableAutoLayout:S,disableKeyboardNavigation:O}=e,h=t.useRef(void 0);h.current=e;const[N,P]=t.useState(null),q=t.useCallback(l=>{const{visible:s,appendTo:n=g().body,offset:f=w,nodeComponent:M=y.NodeTooltipContent,linkComponent:x=y.LinkTooltipContent}={...m,...k};if(s){const H={appendTo:n,event:l,offset:f,dir:u,Content:l.targetType==="node"?M:x};P(H)}},[k,u,g]),D=t.useCallback(()=>{P(null)},[]),i=t.useCallback((l,s)=>{const n=h.current[l];if(n){const f={...s,nativeEvent:s.originalEvent,target:p.current};n.call(void 0,f)}},[]);return t.useEffect(()=>{const l={data:v,links:C,nodes:E,labels:T,title:L,legend:R,disableAutoLayout:S,disableKeyboardNavigation:O,rtl:u==="rtl",tooltip:{...m,...k}};if(a.current)a.current.setOptions(l);else if(d.canUseDOM&&o.current){const s=j.sankeyTheme(o.current);a.current=new j.Sankey(o.current,l,s),z(a.current,{nodeEnter:n=>{i("onNodeEnter",n)},nodeLeave:n=>{i("onNodeLeave",n)},linkEnter:n=>{i("onLinkEnter",n)},linkLeave:n=>{i("onLinkLeave",n)},nodeClick:n=>{i("onNodeClick",n)},linkClick:n=>{i("onLinkClick",n)}}),a.current.bind("tooltipShow",q),a.current.bind("tooltipHide",D)}return()=>{a.current&&(a.current.destroy(),a.current=null)}},[v,C,E,T,L,R,S,O,u,k,D,q,i]),t.useImperativeHandle(p,()=>({get element(){return o.current},exportVisual:l=>a.current.exportVisual(l),props:e}),[]),t.useImperativeHandle(c,()=>p.current),t.createElement(t.Fragment,null,t.createElement("div",{ref:o,className:e.className,style:e.style,dir:u}),N&&t.createElement(y.TooltipComponent,{...N}),r&&t.createElement(d.WatermarkOverlay,null))});b.propTypes=I.sankeyPropTypes;b.displayName="KendoReactSankey";exports.Sankey=b;