UNPKG

@progress/kendo-vue-charts

Version:
9 lines (8 loc) 3.77 kB
/** * @license *------------------------------------------------------------------------------------------- * Copyright © 2025 Progress Software Corporation. All rights reserved. * Licensed under commercial license. See LICENSE.md in the package root for more information *------------------------------------------------------------------------------------------- */ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("vue"),i=require("@progress/kendo-vue-common"),k=require("../package-metadata.js"),d=require("@progress/kendo-charts"),g=require("./tooltip.js"),u={visible:!0,offset:12},y=r.defineComponent({name:"KendoSankey",emits:{linkclick:null,linkenter:null,linkleave:null,nodeclick:null,nodeenter:null,nodeleave:null},inheritAttrs:!1,props:{dataNodes:{type:Array,required:!0},dataLinks:{type:Array,required:!0},disableAutoLayout:Boolean,disableKeyboardNavigation:Boolean,dir:String,labels:Object,legend:Object,links:Object,nodes:Object,title:Object,tooltip:Object},created(){i.validatePackage(k.packageMetadata),this.instance=null},data(){return{currentTooltip:null,currentDir:void 0}},watch:{dataNodes:function(){this.update(this)},dataLinks:function(){this.update(this)},links:function(){this.update(this)},nodes:function(){this.update(this)},labels:function(){this.update(this)},title:function(){this.update(this)},legend:function(){this.update(this)},disableAutoLayout:function(){this.update(this)},disableKeyboardNavigation:function(){this.update(this)},dir:function(){this.update(this)},tooltip:function(){this.update(this)}},computed:{sankeyClasses(){const t=this.$attrs.class;return{"k-chart k-sankey":!0,[t]:!!t}}},mounted(){this.element=i.getRef(this,"element"),this.currentDir=i.getDir(this.element,this.$props.dir),this.createSankey(this)},unmounted(){this.destroySankey()},methods:{exportVisual(t){return this.instance.exportVisual(t)},destroySankey(){this.instance&&(this.instance.destroy(),this.instance=null)},createSankey(){const t=this.element;if(!t)return;const e=this.sankeyOptions(),n=d.sankeyTheme(t);this.instance=new d.Sankey(t,e,n),this.bindEvents(this.instance)},update(){this.instance&&this.instance.setOptions(this.sankeyOptions())},bindEvents(t){t.bind("nodeEnter",this.triggerEvent),t.bind("nodeLeave",this.triggerEvent),t.bind("linkEnter",this.triggerEvent),t.bind("linkLeave",this.triggerEvent),t.bind("nodeClick",this.triggerEvent),t.bind("linkClick",this.triggerEvent),t.bind("tooltipShow",this.onTooltipShow),t.bind("tooltipHide",this.onTooltipHide)},triggerEvent(t){const e={...t,target:this};this.$emit(t.type.toLowerCase(),e)},sankeyOptions(){const{dataNodes:t,dataLinks:e,links:n,nodes:o,labels:a,title:s,legend:l,disableAutoLayout:h,disableKeyboardNavigation:c,tooltip:p}=this.$props;return{data:{nodes:t,links:e},links:n,nodes:o,labels:a,title:s,legend:l,disableAutoLayout:h,disableKeyboardNavigation:c,rtl:this.currentDir==="rtl",tooltip:{...u,...p}}},onTooltipShow(t){const{visible:e}={...u,...this.$props.tooltip};if(e){const n={tooltipData:t.tooltipData,eventData:{dataItem:t.dataItem,nodeValue:t.nodeValue,targetType:t.targetType}};this.currentTooltip=n}},onTooltipHide(){this.currentTooltip=null}},render(){const{nodeContent:t,linkContent:e,offset:n}=this.$props.tooltip||{},o=i.templateRendering.call(this,t,i.getListeners.call(this)),a=i.templateRendering.call(this,e,i.getListeners.call(this)),s=this.$props.dir||this.currentDir;return[r.createVNode("div",{ref:i.setRef(this,"element"),class:this.sankeyClasses,style:this.$attrs.style,dir:s},null),this.currentTooltip&&r.createVNode(g.Tooltip,{tooltipData:this.currentTooltip.tooltipData,eventData:this.currentTooltip.eventData,dir:s,offset:n||12,nodeContent:o,linkContent:a},null)]}});exports.Sankey=y;