{"version":3,"file":"kendo.dataviz.sankey.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendodataviz","sankey","js","this","$","window","kendo","dataviz","deepExtend","Box","setDefaultOptions","constants","geometry","drawing","ChartLegend","Legend","sum","array","mapFn","map","reduce","acc","curr","sortAsc","a","b","y0","index","y1","sortSource","source","sortTarget","target","value","node","sortLinks","nodes","forEach","targetLinks","link","sourceLinks","sort","calcLayer","maxDepth","align","depth","height","length","Sankey$1","Class","extend","init","options","ref","nodesOptions","offset","data","links","width","offsetX","offsetY","nodeWidth","nodePadding","padding","reverse","targetColumnIndex","loops","autoLayout","calculate","connectLinksToNodes","calculateNodeValues","circularLinks","calculateNodeHeights","columns","calculateNodeDepths","calculateNodeColumns","calculateNodeBreadths","applyNodesOffset","calculateLinkBreadths","nodesMap","Map","i","id","undefined","label","text","set","get","sourceId","targetId","push","Math","max","current","Set","next","currDepth","size","currentNodes","Array","from","n","l","add","nodesLength","currentHeight","eachNode","d","apply","columnWidth","layer","min","x0","x1","this$1$1","kSize","c","y","uncurlLinksToRight","uncurlLinksToLeft","left","top","column","kValue","targetTopPos","dy","arrangeNodesVertically","loop","j","sourceTopPos","endIndex","arrangeUp","arrangeDown","yPos","currentY","i$1","link$1","calculateSankey","rotationDirection","p1x","p1y","p2x","p2y","p3x","p3y","expression1","expression2","SankeyElement","Class$$1","call","createVisual","__proto__","prototype","Object","create","constructor","visual","createElement","exportVisual","customVisual","sender","getSender","visualOptions","getElement","Node","SankeyElement$$1","arguments","rect","Rect","Path","fromRect","fill","color","opacity","stroke","className","role","ariaRoleDescription","ariaLabel","nodeColor","nodeColors","resolveNodeOptions","nodeOptions","defined","util","Link","xC","moveTo","curveTo","INSIDE","BEFORE","Label","totalWidth","position","visible","nodeBox","textbox","TextBox","reflow","textSizeBox","box","goesOutside","textY","center","textOrigin","textRect","translate","renderVisual","font","border","margin","paintOrder","resolveLabelOptions","Title$1","Title$$1","drawingRect","title","Title","buildTitle","CENTER","getSpacing","sortData","item","area","background","areaBackground","areaOpacity","legend","markers","type","cursor","POINTER","BOTTOM","LINK","NODE","Sankey","Observable$$1","element","theme","_initTheme","_setOptions","_initElement","_initSurface","_redraw","_initResizeObserver","destroy","unbind","_destroySurface","_destroyResizeObserver","addClass","setAttribute","tabIndex","getAttribute","description","surface","_initSurfaceElement","_createSurface","observer","ResizeObserver","entries","entry","contentRect","setSize","resize","_resizeObserver","observe","Surface","surfaceElement","mouseenter","_mouseenter","bind","mouseleave","_mouseleave","mousemove","_mousemove","click","_click","currentTheme","setLinksOpacity","linksVisuals","setOpacity","linkOptions","setLinksInactivityOpacity","inactiveOpacity","highlight","linkValue","trigger","name","ev","event","targetType","dataItem","isLink","isNode","isLegendItem","Boolean","chartElement","highlightLinks","nodeVisual","nodesVisuals","originalEvent","relatedTarget","nodeName","tooltipTimeOut","clearTimeout","tooltipShown","tooltip","followPointer","delay","tooltipElType","mouseEvent","getBoundingClientRect","isLeft","clientX","isTop","clientY","tooltipData","popupOffset","pageX","pageY","popupAlign","horizontal","vertical","ref$1","nodeValue","nextDelay","setTimeout","_destroySurfaceElement","disconnect","document","appendChild","parentNode","removeChild","setOptions","clear","_getSize","draw","_render","titleBox","legendBox","calcOptions","sankeyOptions","labels","disableAutoLayout","sankeyBox","legendArea","clone","titleHeight","TOP","unpad","shrink","legendPosition","LEFT","RIGHT","calculatedNodes","console","warn","nodeEl","nodeOps","nodeInstance","wrap","rectToBox","rawBBox","labelVisual","x2","y2","permutation","columnsLength","results","crosses","link1","link2","f1","f2","f3","f4","linksLength","lNext","nextLink","crossesValue","minCrosses","r","bestResult","find","context","sankeyContext","labelOptions","Group","clip","titleVisual","append","visualNodes","sortedLinks","slice","sourceNode","targetNode","linkOps","colorType","resolveLinkOptions","linkVisual","diagramWidth","textOps","legendVisual","exportOptions","Observable","right","lineJoin","createSankeyData","dimensions","measure","linksMap","row","dimension","key","existingValue","nodesId","nodesArray","String","linksArray","jQuery","Widget","ui","encode","htmlEncode","styleAttr","tooltipContentWrapStyle","TootipText","Square","TooltipTemplates","icon","SankeyTooltip","fn","outerWidth","outerHeight","setContent","content","html","each","el","split","filter","s","parts","style","trim","removeAttribute","setPosition","offsetOption","css","show","hide","remove","Tooltip","ContentTemplates","template","KendoSankey","userOptions","empty","wrapper","_initSankey","_attachEvents","notify","_showWatermarkOverlay","currentOptions","events","eventName","_instance","themeOptions","_getThemeOptions","seriesColors","axisDefaults","seriesDefaults","line","strokeColor","_createSankey","themeName","SASS_THEMES","indexOf","toLowerCase","autoTheme","chart","themes","_events","handler","tooltipShow","tooltipHide","e","_tooltip","doc","ownerDocument","appendTo","body","nodeTemplate","linkTemplate","currentTemplate","format","messages","tooltipUnits","ExportMixin","PDFMixin","plugin"],"sources":["kendo.dataviz.sankey.js"],"mappings":"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","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('kendo.core.js'), require('kendo.color.js'), require('kendo.drawing.js'), require('kendo.dataviz.core.js'), require('kendo.dataviz.chart.js')) :\n typeof define === 'function' && define.amd ? define(['kendo.core', 'kendo.color', 'kendo.drawing', 'kendo.dataviz.core', 'kendo.dataviz.chart'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendodataviz = global.kendodataviz || {}, global.kendodataviz.sankey = global.kendodataviz.sankey || {}, global.kendodataviz.sankey.js = factory()));\n})(this, (function () {\n /***********************************************************************\n * WARNING: this file is auto-generated. If you change it directly,\n * your modifications will eventually be lost. The source code is in\n * `kendo-charts` repository, you should make your changes there and\n * run `src-modules/sync.sh` in this repository.\n */\n\n (function($) {\n /* eslint-disable */\n\n window.kendo.dataviz = window.kendo.dataviz || {};\n var dataviz = kendo.dataviz;\n var deepExtend = dataviz.deepExtend;\n var Box = dataviz.Box;\n var setDefaultOptions = dataviz.setDefaultOptions;\n var constants = dataviz.constants;\n var geometry = kendo.geometry;\n var drawing = kendo.drawing;\n\n var ChartLegend = dataviz.Legend;\n\n var max = function (array, mapFn) { return Math.max.apply(null, array.map(mapFn)); };\n var min = function (array, mapFn) { return Math.min.apply(null, array.map(mapFn)); };\n var sum = function (array, mapFn) { return array.map(mapFn).reduce(function (acc, curr) { return (acc + curr); }, 0); };\n var sortAsc = function (a, b) { return (a.y0 === b.y0 ? a.index - b.index : a.y0 + a.y1 - b.y0 - b.y1); };\n var sortSource = function (a, b) { return sortAsc(a.source, b.source); };\n var sortTarget = function (a, b) { return sortAsc(a.target, b.target); };\n var value = function (node) { return node.value; };\n\n function sortLinks(nodes) {\n nodes.forEach(function (node) {\n node.targetLinks.forEach(function (link) {\n link.source.sourceLinks.sort(sortTarget);\n });\n node.sourceLinks.forEach(function (link) {\n link.target.targetLinks.sort(sortSource);\n });\n });\n }\n\n var calcLayer = function (node, maxDepth) {\n if (node.align === 'left') {\n return node.depth;\n }\n\n if (node.align === 'right') {\n return maxDepth - node.height;\n }\n\n return node.sourceLinks.length ? node.depth : maxDepth;\n };\n\n var Sankey$1 = kendo.Class.extend({\n init: function(options) {\n var ref = options.nodesOptions;\n var offset = ref.offset; if (offset === void 0) { offset = {}; }\n var align = ref.align;\n this.data = {\n nodes: options.nodes.map(function (node) { return deepExtend({}, { offset: offset, align: align }, node); }),\n links: options.links.map(function (link) { return deepExtend({}, link); })\n };\n\n this.width = options.width;\n this.height = options.height;\n this.offsetX = options.offsetX || 0;\n this.offsetY = options.offsetY || 0;\n this.nodeWidth = options.nodesOptions.width;\n this.nodePadding = options.nodesOptions.padding;\n this.reverse = options.reverse;\n this.targetColumnIndex = options.targetColumnIndex;\n this.loops = options.loops;\n this.autoLayout = options.autoLayout;\n },\n\n calculate: function() {\n var ref = this.data;\n var nodes = ref.nodes;\n var links = ref.links;\n this.connectLinksToNodes(nodes, links);\n this.calculateNodeValues(nodes);\n\n var circularLinks = this.calculateNodeHeights(nodes);\n\n if (circularLinks) {\n return { nodes: [], links: [], columns: [], circularLinks: circularLinks };\n }\n\n this.calculateNodeDepths(nodes);\n var columns = this.calculateNodeColumns(nodes);\n this.calculateNodeBreadths(columns);\n this.applyNodesOffset(nodes);\n this.calculateLinkBreadths(nodes);\n\n return $.extend({}, this.data, {columns: columns});\n },\n\n connectLinksToNodes: function(nodes, links) {\n var nodesMap = new Map();\n\n nodes.forEach(function (node, i) {\n node.index = i;\n node.sourceLinks = [];\n node.targetLinks = [];\n node.id = node.id !== undefined ? node.id : node.label.text;\n nodesMap.set(node.id, node);\n });\n\n links.forEach(function (link) {\n link.source = nodesMap.get(link.sourceId);\n link.target = nodesMap.get(link.targetId);\n link.source.sourceLinks.push(link);\n link.target.targetLinks.push(link);\n });\n },\n\n calculateNodeValues: function(nodes) {\n nodes.forEach(function (node) {\n node.value = Math.max(\n sum(node.sourceLinks, value),\n sum(node.targetLinks, value)\n );\n });\n },\n\n calculateNodeDepths: function(nodes) {\n var current = new Set(nodes);\n var next = new Set();\n var currDepth = 0;\n while (current.size) {\n var currentNodes = Array.from(current);\n for (var n = 0; n < currentNodes.length; n++) {\n var node = currentNodes[n];\n node.depth = currDepth;\n for (var l = 0; l < node.sourceLinks.length; l++) {\n var link = node.sourceLinks[l];\n next.add(link.target);\n }\n }\n currDepth++;\n current = next;\n next = new Set();\n }\n },\n\n calculateNodeHeights: function(nodes) {\n var nodesLength = nodes.length;\n var current = new Set(nodes);\n var next = new Set;\n var currentHeight = 0;\n var eachNode = function (node) {\n node.height = currentHeight;\n node.targetLinks.forEach(function (link) {\n next.add(link.source);\n });\n };\n while (current.size) {\n current.forEach(eachNode);\n currentHeight++;\n if (currentHeight > nodesLength) {\n return true;\n }\n current = next;\n next = new Set;\n }\n return false;\n },\n\n calculateNodeColumns: function(nodes) {\n var this$1$1 = this;\n\n var maxDepth = max(nodes, function (d) { return d.depth; });\n var columnWidth = (this.width - this.offsetX - this.nodeWidth) / maxDepth;\n var columns = new Array(maxDepth + 1);\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n var layer = Math.max(0, Math.min(maxDepth, calcLayer(node, maxDepth)));\n node.x0 = this$1$1.offsetX + layer * columnWidth;\n node.x1 = node.x0 + this$1$1.nodeWidth;\n node.layer = layer;\n columns[layer] = columns[layer] || [];\n columns[layer].push(node);\n }\n\n return columns;\n },\n\n calculateNodeBreadths: function(columns) {\n var this$1$1 = this;\n\n var kSize = min(columns, function (c) { return (this$1$1.height - this$1$1.offsetY - (c.length - 1) * this$1$1.nodePadding) / sum(c, value); });\n\n columns.forEach(function (nodes) {\n var y = this$1$1.offsetY;\n nodes.forEach(function (node) {\n node.y0 = y;\n node.y1 = y + node.value * kSize;\n y = node.y1 + this$1$1.nodePadding;\n node.sourceLinks.forEach(function (link) {\n link.width = link.value * kSize;\n });\n });\n y = (this$1$1.height - y + this$1$1.nodePadding) / (nodes.length + 1);\n nodes.forEach(function (node, i) {\n node.y0 += y * (i + 1);\n node.y1 += y * (i + 1);\n });\n });\n\n if (this.autoLayout !== false) {\n var loops = this.loops !== undefined ? this.loops : columns.length - 1;\n var targetColumnIndex = this.targetColumnIndex || 1;\n\n for (var i = 0; i < loops; i++) {\n if (!this$1$1.reverse) {\n this$1$1.uncurlLinksToLeft(columns, targetColumnIndex);\n this$1$1.uncurlLinksToRight(columns, targetColumnIndex);\n } else {\n this$1$1.uncurlLinksToRight(columns, targetColumnIndex);\n this$1$1.uncurlLinksToLeft(columns, targetColumnIndex);\n }\n }\n }\n\n columns.forEach(sortLinks);\n },\n\n applyNodesOffset: function(nodes) {\n nodes.forEach(function (node) {\n var offsetX = (node.offset ? node.offset.left : 0) || 0;\n var offsetY = (node.offset ? node.offset.top : 0) || 0;\n node.x0 += offsetX;\n node.x1 += offsetX;\n node.y0 += offsetY;\n node.y1 += offsetY;\n });\n },\n\n calculateLinkBreadths: function(nodes) {\n nodes.forEach(function (node) {\n var sourceLinks = node.sourceLinks;\n var targetLinks = node.targetLinks;\n var y = node.y0;\n var y1 = y;\n sourceLinks.forEach(function (link) {\n link.x0 = link.source.x1;\n link.y0 = y + link.width / 2;\n y += link.width;\n });\n targetLinks.forEach(function (link) {\n link.x1 = link.target.x0;\n link.y1 = y1 + link.width / 2;\n y1 += link.width;\n });\n });\n },\n\n uncurlLinksToRight: function(columns, targetColumnIndex) {\n var this$1$1 = this;\n\n var n = columns.length;\n for (var i = targetColumnIndex; i < n; i++) {\n var column = columns[i];\n column.forEach(function (target) {\n var y = 0;\n var sum = 0;\n target.targetLinks.forEach(function (link) {\n var kValue = link.value * (target.layer - link.source.layer);\n y += this$1$1.targetTopPos(link.source, target) * kValue;\n sum += kValue;\n });\n\n var dy = y === 0 ? 0 : (y / sum - target.y0);\n target.y0 += dy;\n target.y1 += dy;\n sortLinks([target]);\n });\n column.sort(sortAsc);\n this$1$1.arrangeNodesVertically(column);\n }\n },\n\n uncurlLinksToLeft: function(columns, targetColumnIndex) {\n var this$1$1 = this;\n\n var l = columns.length;\n var startIndex = l - 1 - targetColumnIndex;\n for (var i = startIndex; i >= 0; i--) {\n var column = columns[i];\n var loop = function ( j ) {\n var source = column[j];\n var y = 0;\n var sum = 0;\n source.sourceLinks.forEach(function (link) {\n var kValue = link.value * (link.target.layer - source.layer);\n y += this$1$1.sourceTopPos(source, link.target) * kValue;\n sum += kValue;\n });\n var dy = y === 0 ? 0 : (y / sum - source.y0);\n source.y0 += dy;\n source.y1 += dy;\n sortLinks([source]);\n };\n\n for (var j = 0; j < column.length; j++) loop( j );\n\n column.sort(sortAsc);\n this$1$1.arrangeNodesVertically(column);\n }\n },\n\n arrangeNodesVertically: function(nodes) {\n var startIndex = 0;\n var endIndex = nodes.length - 1;\n\n this.arrangeUp(nodes, this.height, endIndex);\n this.arrangeDown(nodes, this.offsetY, startIndex);\n },\n\n arrangeDown: function(nodes, yPos, index) {\n var this$1$1 = this;\n\n var currentY = yPos;\n\n for (var i = index; i < nodes.length; i++) {\n var node = nodes[i];\n var dy = Math.max(0, currentY - node.y0);\n node.y0 += dy;\n node.y1 += dy;\n currentY = node.y1 + this$1$1.nodePadding;\n }\n },\n\n arrangeUp: function(nodes, yPos, index) {\n var this$1$1 = this;\n\n var currentY = yPos;\n for (var i = index; i >= 0; --i) {\n var node = nodes[i];\n var dy = Math.max(0, node.y1 - currentY);\n node.y0 -= dy;\n node.y1 -= dy;\n currentY = node.y0 - this$1$1.nodePadding;\n }\n },\n\n sourceTopPos: function(source, target) {\n var this$1$1 = this;\n\n var y = target.y0 - ((target.targetLinks.length - 1) * this.nodePadding) / 2;\n for (var i = 0; i < target.targetLinks.length; i++) {\n var link = target.targetLinks[i];\n if (link.source === source) {\n break;\n }\n y += link.width + this$1$1.nodePadding;\n }\n for (var i$1 = 0; i$1 < source.sourceLinks.length; i$1++) {\n var link$1 = source.sourceLinks[i$1];\n if (link$1.target === target) {\n break;\n }\n y -= link$1.width;\n }\n return y;\n },\n\n targetTopPos: function(source, target) {\n var this$1$1 = this;\n\n var y = source.y0 - ((source.sourceLinks.length - 1) * this.nodePadding) / 2;\n for (var i = 0; i < source.sourceLinks.length; i++) {\n var link = source.sourceLinks[i];\n if (link.target === target) {\n break;\n }\n y += link.width + this$1$1.nodePadding;\n }\n for (var i$1 = 0; i$1 < target.targetLinks.length; i$1++) {\n var link$1 = target.targetLinks[i$1];\n if (link$1.source === source) {\n break;\n }\n y -= link$1.width;\n }\n return y;\n }\n });\n\n var calculateSankey = function (options) { return new Sankey$1(options).calculate(); };\n\n var crossesValue = function (links) {\n var value = 0;\n var linksLength = links.length;\n\n for (var i = 0; i < linksLength; i++) {\n var link = links[i];\n\n for (var lNext = i + 1; lNext < linksLength; lNext++) {\n var nextLink = links[lNext];\n\n if (intersect(link, nextLink)) {\n value += Math.min(link.value, nextLink.value);\n }\n }\n }\n\n return value;\n };\n\n function rotationDirection(p1x, p1y, p2x, p2y, p3x, p3y) {\n var expression1 = (p3y - p1y) * (p2x - p1x);\n var expression2 = (p2y - p1y) * (p3x - p1x);\n\n if (expression1 > expression2) {\n return 1;\n } else if (expression1 === expression2) {\n return 0;\n }\n\n return -1;\n }\n\n function intersect(link1, link2) {\n var f1 = rotationDirection(link1.x0, link1.y0, link1.x1, link1.y1, link2.x1, link2.y1);\n var f2 = rotationDirection(link1.x0, link1.y0, link1.x1, link1.y1, link2.x0, link2.y0);\n var f3 = rotationDirection(link1.x0, link1.y0, link2.x0, link2.y0, link2.x1, link2.y1);\n var f4 = rotationDirection(link1.x1, link1.y1, link2.x0, link2.y0, link2.x1, link2.y1);\n\n return f1 !== f2 && f3 !== f4;\n }\n\n var SankeyElement = (function (Class$$1) {\n function SankeyElement(options) {\n Class$$1.call(this);\n this.options = deepExtend({}, this.options, options);\n this.createVisual();\n }\n\n if ( Class$$1 ) SankeyElement.__proto__ = Class$$1;\n SankeyElement.prototype = Object.create( Class$$1 && Class$$1.prototype );\n SankeyElement.prototype.constructor = SankeyElement;\n\n SankeyElement.prototype.createVisual = function createVisual () {\n this.visual = this.createElement();\n };\n\n SankeyElement.prototype.exportVisual = function exportVisual () {\n return this.visual;\n };\n\n SankeyElement.prototype.createElement = function createElement () {\n var this$1$1 = this;\n\n var customVisual = this.options.visual;\n var visual;\n\n if (customVisual) {\n visual = customVisual({\n sender: this.getSender(),\n options: this.visualOptions(),\n createVisual: function () { return this$1$1.getElement(); }\n });\n } else {\n visual = this.getElement();\n }\n\n return visual;\n };\n\n SankeyElement.prototype.getSender = function getSender () {\n return this;\n };\n\n return SankeyElement;\n }(dataviz.Class));\n\n var Node = (function (SankeyElement$$1) {\n function Node () {\n SankeyElement$$1.apply(this, arguments);\n }\n\n if ( SankeyElement$$1 ) Node.__proto__ = SankeyElement$$1;\n Node.prototype = Object.create( SankeyElement$$1 && SankeyElement$$1.prototype );\n Node.prototype.constructor = Node;\n\n Node.prototype.getElement = function getElement () {\n var options = this.options;\n var node = options.node;\n var rect = new geometry.Rect([node.x0, node.y0], [node.x1 - node.x0, node.y1 - node.y0]);\n\n return drawing.Path.fromRect(rect, this.visualOptions());\n };\n\n Node.prototype.visualOptions = function visualOptions () {\n var options = deepExtend({}, this.options, this.options.node);\n\n return {\n fill: {\n color: options.color,\n opacity: options.opacity\n },\n stroke: { width: 0 },\n className: 'k-sankey-node',\n role: 'graphics-symbol',\n ariaRoleDescription: 'Node',\n ariaLabel: options.node.label.text\n };\n };\n\n return Node;\n }(SankeyElement));\n\n var nodeColor = function (node, nodeColors, index) { return node.color || nodeColors[index % nodeColors.length]; };\n\n var resolveNodeOptions = function (node, options, nodeColors, index) {\n var nodeOptions = deepExtend({}, options, options.node);\n return deepExtend({},\n { color: nodeColor(node, nodeColors, index) },\n nodeOptions,\n { node: node },\n {\n visual: node.visual,\n opacity: node.opacity,\n offset: node.offset,\n color: node.color\n }\n );\n };\n\n var ref = drawing.util;\n var defined = ref.defined;\n\n var Link = (function (SankeyElement$$1) {\n function Link () {\n SankeyElement$$1.apply(this, arguments);\n }\n\n if ( SankeyElement$$1 ) Link.__proto__ = SankeyElement$$1;\n Link.prototype = Object.create( SankeyElement$$1 && SankeyElement$$1.prototype );\n Link.prototype.constructor = Link;\n\n Link.prototype.getElement = function getElement () {\n var link = this.options.link;\n var x0 = link.x0;\n var x1 = link.x1;\n var y0 = link.y0;\n var y1 = link.y1;\n var xC = (x0 + x1) / 2;\n\n return new drawing.Path(this.visualOptions())\n .moveTo(x0, y0).curveTo([xC, y0], [xC, y1], [x1, y1]);\n };\n\n Link.prototype.visualOptions = function visualOptions () {\n var options = this.options;\n var link = this.options.link;\n return {\n stroke: {\n width: options.link.width,\n color: link.color || options.color,\n opacity: defined(link.opacity) ? link.opacity : options.opacity\n }\n };\n };\n\n return Link;\n }(SankeyElement));\n\n var resolveLinkOptions = function (link, options, sourceNode, targetNode) {\n var linkOptions = deepExtend({},\n options,\n {\n link: link,\n opacity: link.opacity,\n color: link.color,\n colorType: link.colorType,\n visual: link.visual,\n highlight: link.highlight\n }\n );\n\n if (linkOptions.colorType === 'source') {\n linkOptions.color = sourceNode.options.fill.color;\n } else if (linkOptions.colorType === 'target') {\n linkOptions.color = targetNode.options.fill.color;\n }\n\n return linkOptions;\n };\n\n var INSIDE = 'inside';\n var BEFORE = 'before';\n var AFTER = 'after';\n\n var Label = (function (SankeyElement$$1) {\n function Label () {\n SankeyElement$$1.apply(this, arguments);\n }\n\n if ( SankeyElement$$1 ) Label.__proto__ = SankeyElement$$1;\n Label.prototype = Object.create( SankeyElement$$1 && SankeyElement$$1.prototype );\n Label.prototype.constructor = Label;\n\n Label.prototype.getElement = function getElement () {\n var options = deepExtend({}, this.options, this.options.node.label);\n var node = options.node;\n var totalWidth = options.totalWidth;\n var position = options.position;\n var text = options.text;\n var offset = options.offset;\n\n if (!options.visible || !text) {\n return null;\n }\n\n var nodeBox = new Box(node.x0, node.y0, node.x1, node.y1);\n var visualOptions = this.visualOptions();\n var textbox = new dataviz.TextBox(text, visualOptions);\n textbox.reflow(new Box());\n var textSizeBox = textbox.box;\n\n var goesOutside = node.x1 + textSizeBox.width() > totalWidth;\n var textY = nodeBox.center().y - (textSizeBox.height() / 2);\n var side = position === BEFORE || (position === INSIDE && goesOutside) ? BEFORE : AFTER;\n var textOrigin = [side === BEFORE ? node.x0 - textSizeBox.width() : node.x1, textY];\n\n var textRect = new Box(textOrigin[0], textOrigin[1], textOrigin[0] + textSizeBox.width(), textOrigin[1] + textSizeBox.height());\n textRect.translate(offset.left || 0, offset.top || 0);\n textbox.reflow(textRect);\n\n textbox.renderVisual();\n\n return textbox.visual;\n };\n\n Label.prototype.visualOptions = function visualOptions () {\n var options = deepExtend({}, this.options, this.options.node.label);\n return {\n color: options.color,\n font: options.font,\n border: options.border,\n margin: options.margin,\n padding: options.padding,\n align: options.align,\n paintOrder: options.paintOrder,\n stroke: options.stroke,\n };\n };\n\n return Label;\n }(SankeyElement));\n\n setDefaultOptions(Label, {\n position: INSIDE, // inside, before, after\n });\n\n var resolveLabelOptions = function (node, options, totalWidth) { return deepExtend({},\n options,\n {\n node: node,\n totalWidth: totalWidth,\n visual: node.label.visual,\n visible: node.label.visible,\n margin: node.label.margin,\n padding: node.label.padding,\n border: node.label.border,\n align: node.label.align,\n offset: node.label.offset\n }\n ); };\n\n var Title$1 = (function (SankeyElement$$1) {\n function Title$$1 () {\n SankeyElement$$1.apply(this, arguments);\n }\n\n if ( SankeyElement$$1 ) Title$$1.__proto__ = SankeyElement$$1;\n Title$$1.prototype = Object.create( SankeyElement$$1 && SankeyElement$$1.prototype );\n Title$$1.prototype.constructor = Title$$1;\n\n Title$$1.prototype.getElement = function getElement () {\n var options = this.options;\n var drawingRect = options.drawingRect;\n var text = options.text;\n\n if (options.visible === false || !text) {\n return null;\n }\n\n var title = dataviz.Title.buildTitle(text, options);\n\n title.reflow(drawingRect);\n\n title.renderVisual();\n return title.visual;\n };\n\n Title$$1.prototype.createElement = function createElement () {\n return this.getElement();\n };\n\n return Title$$1;\n }(SankeyElement));\n\n setDefaultOptions(Title$1, {\n align: constants.CENTER, // 'left', 'right', 'center'\n border: {\n width: 0\n },\n margin: dataviz.getSpacing(5),\n padding: dataviz.getSpacing(5)\n });\n\n var AREA = \"area\";\n\n var sortData = function (a, b) {\n if (a.node.x0 - b.node.x0 !== 0) {\n return a.node.x0 - b.node.x0;\n }\n return a.node.y0 - b.node.y0;\n };\n\n var Legend = (function (SankeyElement$$1) {\n function Legend () {\n SankeyElement$$1.apply(this, arguments);\n }\n\n if ( SankeyElement$$1 ) Legend.__proto__ = SankeyElement$$1;\n Legend.prototype = Object.create( SankeyElement$$1 && SankeyElement$$1.prototype );\n Legend.prototype.constructor = Legend;\n\n Legend.prototype.getElement = function getElement () {\n var options = this.options;\n var drawingRect = options.drawingRect;\n var nodes = options.nodes; if (nodes === void 0) { nodes = []; }\n var item = options.item;\n\n if (options.visible === false || !nodes.length) {\n return null;\n }\n\n var data = nodes.map(function (node) { return ({\n text: (node.label && node.label.text) || '',\n area: {\n background: item.areaBackground !== undefined ? item.areaBackground : node.color,\n opacity: item.areaOpacity !== undefined ? item.areaOpacity : node.opacity\n },\n node: node,\n }); });\n\n data.sort(sortData);\n\n var legend = new ChartLegend($.extend({}, options, {data: data}));\n legend.reflow(drawingRect);\n\n legend.renderVisual();\n return legend.visual;\n };\n\n Legend.prototype.createElement = function createElement () {\n return this.getElement();\n };\n\n return Legend;\n }(SankeyElement));\n\n setDefaultOptions(Legend, {\n markers: { visible: false },\n item: {\n type: AREA,\n cursor: constants.POINTER,\n opacity: 1\n },\n position: constants.BOTTOM,\n align: constants.CENTER,\n border: {\n width: 0\n }\n });\n\n var LINK = 'link';\n var NODE = 'node';\n\n var Sankey = (function (Observable$$1) {\n function Sankey(element, options, theme) {\n Observable$$1.call(this);\n\n this._initTheme(theme);\n this._setOptions(options);\n this._initElement(element);\n this._initSurface();\n\n if (options && options.data) {\n this._redraw();\n this._initResizeObserver();\n }\n }\n\n if ( Observable$$1 ) Sankey.__proto__ = Observable$$1;\n Sankey.prototype = Object.create( Observable$$1 && Observable$$1.prototype );\n Sankey.prototype.constructor = Sankey;\n\n Sankey.prototype.destroy = function destroy () {\n this.unbind();\n this._destroySurface();\n this._destroyResizeObserver();\n };\n\n Sankey.prototype._initElement = function _initElement (element) {\n this.element = element;\n dataviz.addClass(element, [ \"k-chart\", \"k-sankey\" ]);\n element.setAttribute('role', 'graphics-document');\n element.tabIndex = element.getAttribute(\"tabindex\") || 0;\n\n var ref = this.options;\n var title = ref.title;\n\n if (title.text) {\n element.setAttribute('aria-label', title.text);\n }\n\n if (title.description) {\n element.setAttribute(\"aria-roledescription\", title.description);\n }\n };\n\n Sankey.prototype._initSurface = function _initSurface () {\n if (!this.surface) {\n this._destroySurface();\n this._initSurfaceElement();\n this.surface = this._createSurface();\n }\n };\n\n Sankey.prototype._initResizeObserver = function _initResizeObserver () {\n var this$1$1 = this;\n\n var observer = new ResizeObserver(function (entries) {\n entries.forEach(function (entry) {\n var ref = entry.contentRect;\n var width = ref.width;\n var height = ref.height;\n if (entry.target !== this$1$1.element ||\n (this$1$1.size && this$1$1.size.width === width && this$1$1.size.height === height)) {\n return;\n }\n this$1$1.size = { width: width, height: height };\n this$1$1.surface.setSize(this$1$1.size);\n this$1$1.resize = true;\n this$1$1._redraw();\n });\n });\n this._resizeObserver = observer;\n observer.observe(this.element);\n };\n\n Sankey.prototype._createSurface = function _createSurface () {\n return drawing.Surface.create(this.surfaceElement, {\n mouseenter: this._mouseenter.bind(this),\n mouseleave: this._mouseleave.bind(this),\n mousemove: this._mousemove.bind(this),\n click: this._click.bind(this)\n });\n };\n\n Sankey.prototype._initTheme = function _initTheme (theme) {\n var currentTheme = theme || this.theme || {};\n this.theme = currentTheme;\n this.options = deepExtend({}, currentTheme, this.options);\n };\n\n Sankey.prototype.setLinksOpacity = function setLinksOpacity (opacity) {\n var this$1$1 = this;\n\n this.linksVisuals.forEach(function (link) {\n this$1$1.setOpacity(link, opacity, link.linkOptions.opacity);\n });\n };\n\n Sankey.prototype.setLinksInactivityOpacity = function setLinksInactivityOpacity (inactiveOpacity) {\n var this$1$1 = this;\n\n this.linksVisuals.forEach(function (link) {\n this$1$1.setOpacity(link, inactiveOpacity, link.linkOptions.highlight.inactiveOpacity);\n });\n };\n\n Sankey.prototype.setOpacity = function setOpacity (link, opacity, linkValue) {\n link.options.set('stroke', $.extend({}, link.options.stroke,\n {opacity: defined(linkValue) ? linkValue : opacity}));\n };\n\n Sankey.prototype.trigger = function trigger (name, ev) {\n var event = $.extend({}, ev,\n {type: name,\n targetType: ev.element.type,\n dataItem: ev.element.dataItem});\n\n return Observable$$1.prototype.trigger.call(this, name, event);\n };\n\n Sankey.prototype._mouseenter = function _mouseenter (ev) {\n var element = ev.element;\n var isLink = element.type === LINK;\n var isNode = element.type === NODE;\n var isLegendItem = Boolean(element.chartElement && element.chartElement.options.node);\n\n if ((isLink && this.trigger('linkEnter', ev)) ||\n (isNode && this.trigger('nodeEnter', ev))) {\n return;\n }\n\n var ref = this.options.links;\n var highlight = ref.highlight;\n if (isLink) {\n this.setLinksInactivityOpacity(highlight.inactiveOpacity);\n this.setOpacity(element, highlight.opacity, element.linkOptions.highlight.opacity);\n } else if (isNode) {\n this.highlightLinks(element, highlight);\n } else if (isLegendItem) {\n var nodeVisual = this.nodesVisuals.get(element.chartElement.options.node.id);\n this.highlightLinks(nodeVisual, highlight);\n }\n };\n\n Sankey.prototype._mouseleave = function _mouseleave (ev) {\n var this$1$1 = this;\n\n var element = ev.element;\n var isLink = element.type === LINK;\n var isNode = element.type === NODE;\n var isLegendItem = Boolean(element.chartElement && element.chartElement.options.node);\n var target = ev.originalEvent.relatedTarget;\n\n if (isLink && target && target.nodeName === 'text') {\n return;\n }\n\n if (isLink || isNode) {\n if (this.tooltipTimeOut) {\n clearTimeout(this.tooltipTimeOut);\n this.tooltipTimeOut = null;\n }\n this.tooltipShown = false;\n this.trigger('tooltipHide', ev);\n }\n\n if ((isLink && this.trigger('linkLeave', ev)) ||\n (isNode && this.trigger('nodeLeave', ev))) {\n return;\n }\n\n if (isLink || isNode || isLegendItem) {\n this.linksVisuals.forEach(function (link) {\n this$1$1.setOpacity(link, this$1$1.options.links.opacity, link.linkOptions.opacity);\n });\n }\n };\n\n Sankey.prototype._mousemove = function _mousemove (ev) {\n var this$1$1 = this;\n\n var ref = this.options.tooltip;\n var followPointer = ref.followPointer;\n var delay = ref.delay;\n var element = ev.element;\n var tooltipElType = element.type;\n\n if ((tooltipElType !== LINK && tooltipElType !== NODE) || (this.tooltipShown && !followPointer)) {\n return;\n }\n\n var mouseEvent = ev.originalEvent;\n var rect = this.element.getBoundingClientRect();\n var isLeft = mouseEvent.clientX - rect.left < rect.width / 2;\n var isTop = mouseEvent.clientY - rect.top < rect.height / 2;\n\n ev.tooltipData = {\n popupOffset: {\n left: mouseEvent.pageX,\n top: mouseEvent.pageY\n },\n popupAlign: {\n horizontal: isLeft ? 'left' : 'right',\n vertical: isTop ? 'top' : 'bottom'\n }\n };\n\n if (tooltipElType === NODE) {\n var ref$1 = element.dataItem;\n var sourceLinks = ref$1.sourceLinks;\n var targetLinks = ref$1.targetLinks;\n var links = targetLinks.length ? targetLinks : sourceLinks;\n ev.nodeValue = links.reduce(function (acc, link) { return acc + link.value; }, 0);\n }\n\n if (this.tooltipTimeOut) {\n clearTimeout(this.tooltipTimeOut);\n this.tooltipTimeOut = null;\n }\n\n var nextDelay = followPointer && this.tooltipShown ? 0 : delay;\n\n this.tooltipTimeOut = setTimeout(function () {\n this$1$1.trigger('tooltipShow', ev);\n this$1$1.tooltipShown = true;\n this$1$1.tooltipTimeOut = null;\n }, nextDelay);\n };\n\n Sankey.prototype._click = function _click (ev) {\n var element = ev.element;\n var isLink = element.type === LINK;\n var isNode = element.type === NODE;\n\n if (isNode) {\n this.trigger('nodeClick', ev);\n } else if (isLink) {\n this.trigger('linkClick', ev);\n }\n };\n\n Sankey.prototype.highlightLinks = function highlightLinks (node, highlight) {\n var this$1$1 = this;\n\n if (node) {\n this.setLinksInactivityOpacity(highlight.inactiveOpacity);\n node.links.forEach(function (link) {\n this$1$1.setOpacity(link, highlight.opacity, link.linkOptions.highlight.opacity);\n });\n }\n };\n\n Sankey.prototype._destroySurface = function _destroySurface () {\n if (this.surface) {\n this.surface.destroy();\n this.surface = null;\n this._destroySurfaceElement();\n }\n };\n\n Sankey.prototype._destroyResizeObserver = function _destroyResizeObserver () {\n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n this._resizeObserver = null;\n }\n };\n\n Sankey.prototype._initSurfaceElement = function _initSurfaceElement () {\n if (!this.surfaceElement) {\n this.surfaceElement = document.createElement('div');\n this.element.appendChild(this.surfaceElement);\n }\n };\n\n Sankey.prototype._destroySurfaceElement = function _destroySurfaceElement () {\n if (this.surfaceElement && this.surfaceElement.parentNode) {\n this.surfaceElement.parentNode.removeChild(this.surfaceElement);\n this.surfaceElement = null;\n }\n };\n\n Sankey.prototype.setOptions = function setOptions (options, theme) {\n this._setOptions(options);\n this._initTheme(theme);\n this._initSurface();\n this._redraw();\n };\n\n Sankey.prototype._redraw = function _redraw () {\n this.surface.clear();\n\n var ref = this._getSize();\n var width = ref.width;\n var height = ref.height;\n this.size = { width: width, height: height };\n this.surface.setSize(this.size);\n\n this.createVisual();\n\n this.surface.draw(this.visual);\n };\n\n Sankey.prototype._getSize = function _getSize () {\n return this.element.getBoundingClientRect();\n };\n\n Sankey.prototype.createVisual = function createVisual () {\n this.visual = this._render();\n };\n\n Sankey.prototype.titleBox = function titleBox (title, drawingRect) {\n if (!title || title.visible === false || !title.text) {\n return null;\n }\n\n var titleElement = new Title$1($.extend({}, {drawingRect: drawingRect}, title));\n var titleVisual = titleElement.exportVisual();\n return titleVisual.chartElement.box;\n };\n\n Sankey.prototype.legendBox = function legendBox (options, nodes, drawingRect) {\n if (!options || options.visible === false) {\n return null;\n }\n\n var legend = new Legend($.extend({}, {nodes: nodes}, options, {drawingRect: drawingRect}));\n var legendVisual = legend.exportVisual();\n\n return legendVisual.chartElement.box;\n };\n\n Sankey.prototype.calculateSankey = function calculateSankey$1 (calcOptions, sankeyOptions) {\n var title = sankeyOptions.title;\n var legend = sankeyOptions.legend;\n var data = sankeyOptions.data;\n var nodes = sankeyOptions.nodes;\n var labels = sankeyOptions.labels;\n var nodeColors = sankeyOptions.nodeColors;\n var disableAutoLayout = sankeyOptions.disableAutoLayout;\n var autoLayout = !disableAutoLayout;\n\n var sankeyBox = new Box(0, 0, calcOptions.width, calcOptions.height);\n var titleBox = this.titleBox(title, sankeyBox);\n\n var legendArea = sankeyBox.clone();\n\n if (titleBox) {\n var titleHeight = titleBox.height();\n if (title.position === constants.TOP) {\n sankeyBox.unpad({ top: titleHeight });\n legendArea = new Box(0, titleHeight, calcOptions.width, calcOptions.height);\n } else {\n sankeyBox.shrink(0, titleHeight);\n legendArea = new Box(0, 0, calcOptions.width, calcOptions.height - titleHeight);\n }\n }\n\n var legendBox = this.legendBox(legend, data.nodes, legendArea);\n var legendPosition = (legend && legend.position) || Legend.prototype.options.position;\n\n if (legendBox) {\n if (legendPosition === constants.LEFT) {\n sankeyBox.unpad({ left: legendBox.width() });\n }\n\n if (legendPosition === constants.RIGHT) {\n sankeyBox.shrink(legendBox.width(), 0);\n }\n\n if (legendPosition === constants.TOP) {\n sankeyBox.unpad({ top: legendBox.height() });\n }\n\n if (legendPosition === constants.BOTTOM) {\n sankeyBox.shrink(0, legendBox.height());\n }\n }\n\n var ref = calculateSankey($.extend({}, calcOptions, {offsetX: 0, offsetY: 0, width: sankeyBox.width(), height: sankeyBox.height()}));\n var calculatedNodes = ref.nodes;\n var circularLinks = ref.circularLinks;\n if (circularLinks) {\n console.warn('Circular links detected. Kendo Sankey diagram does not support circular links.');\n return { sankey: { nodes: [], links: [], circularLinks: circularLinks }, legendBox: legendBox, titleBox: titleBox };\n }\n\n var box = new Box();\n\n calculatedNodes.forEach(function (nodeEl, i) {\n var nodeOps = resolveNodeOptions(nodeEl, nodes, nodeColors, i);\n var nodeInstance = new Node(nodeOps);\n box.wrap(dataviz.rectToBox(nodeInstance.exportVisual().rawBBox()));\n\n var labelInstance = new Label(resolveLabelOptions(nodeEl, labels, sankeyBox.width()));\n var labelVisual = labelInstance.exportVisual();\n if (labelVisual) {\n box.wrap(dataviz.rectToBox(labelVisual.rawBBox()));\n }\n });\n\n var offsetX = sankeyBox.x1;\n var offsetY = sankeyBox.y1;\n\n var width = sankeyBox.width() + offsetX;\n var height = sankeyBox.height() + offsetY;\n\n width -= box.x2 > sankeyBox.width() ? box.x2 - sankeyBox.width() : 0;\n height -= box.y2 > sankeyBox.height() ? box.y2 - sankeyBox.height() : 0;\n\n offsetX += box.x1 < 0 ? -box.x1 : 0;\n offsetY += box.y1 < 0 ? -box.y1 : 0;\n\n if (autoLayout === false) {\n return {\n sankey: calculateSankey($.extend({}, calcOptions, {offsetX: offsetX, offsetY: offsetY, width: width, height: height, autoLayout: false})),\n legendBox: legendBox,\n titleBox: titleBox\n };\n }\n\n if (this.resize && autoLayout && this.permutation) {\n this.resize = false;\n return {\n sankey: calculateSankey($.extend({}, calcOptions, {offsetX: offsetX, offsetY: offsetY, width: width, height: height}, this.permutation)),\n legendBox: legendBox,\n titleBox: titleBox\n };\n }\n\n var startColumn = 1;\n var loops = 2;\n var columnsLength = calculateSankey($.extend({}, calcOptions, {offsetX: offsetX, offsetY: offsetY, width: width, height: height, autoLayout: false})).columns.length;\n var results = [];\n\n var permutation = function (targetColumnIndex, reverse) {\n var currPerm = calculateSankey($.extend({}, calcOptions, {offsetX: offsetX, offsetY: offsetY, width: width, height: height, loops: loops, targetColumnIndex: targetColumnIndex, reverse: reverse}));\n var crosses = crossesValue(currPerm.links);\n results.push({\n crosses: crosses,\n reverse: reverse,\n targetColumnIndex: targetColumnIndex\n });\n return crosses === 0;\n };\n\n for (var index = startColumn; index <= columnsLength - 1; index++) {\n if (permutation(index, false) || permutation(index, true)) {\n break;\n }\n }\n\n var minCrosses = Math.min.apply(null, results.map(function (r) { return r.crosses; }));\n var bestResult = results.find(function (r) { return r.crosses === minCrosses; });\n this.permutation = { targetColumnIndex: bestResult.targetColumnIndex, reverse: bestResult.reverse };\n var result = calculateSankey($.extend({}, calcOptions, {offsetX: offsetX, offsetY: offsetY, width: width, height: height}, this.permutation));\n\n return {\n sankey: result,\n legendBox: legendBox,\n titleBox: titleBox\n };\n };\n\n Sankey.prototype._render = function _render (options, context) {\n var sankeyOptions = options || this.options;\n var sankeyContext = context || this;\n\n var data = sankeyOptions.data;\n var labelOptions = sankeyOptions.labels;\n var nodesOptions = sankeyOptions.nodes;\n var linkOptions = sankeyOptions.links;\n var nodeColors = sankeyOptions.nodeColors;\n var title = sankeyOptions.title;\n var legend = sankeyOptions.legend;\n var ref = sankeyContext.size;\n var width = ref.width;\n var height = ref.height;\n\n var calcOptions = $.extend({}, data, {width: width, height: height, nodesOptions: nodesOptions, title: title, legend: legend});\n var ref$1 = this.calculateSankey(calcOptions, sankeyOptions);\n var sankey = ref$1.sankey;\n var titleBox = ref$1.titleBox;\n var legendBox = ref$1.legendBox;\n var nodes = sankey.nodes;\n var links = sankey.links;\n\n var visual = new drawing.Group({\n clip: drawing.Path.fromRect(new geometry.Rect([0, 0], [width, height]))\n });\n\n if (titleBox) {\n var titleElement = new Title$1($.extend({}, title, {drawingRect: titleBox}));\n var titleVisual = titleElement.exportVisual();\n visual.append(titleVisual);\n }\n\n if (sankey.circularLinks) {\n return visual;\n }\n\n var visualNodes = new Map();\n sankeyContext.nodesVisuals = visualNodes;\n\n nodes.forEach(function (node, i) {\n var nodeOps = resolveNodeOptions(node, nodesOptions, nodeColors, i);\n\n var nodeInstance = new Node(nodeOps);\n var nodeVisual = nodeInstance.exportVisual();\n nodeVisual.links = [];\n nodeVisual.type = NODE;\n\n node.color = nodeOps.color;\n node.opacity = nodeOps.opacity;\n\n nodeVisual.dataItem = $.extend({}, data.nodes[i],\n {color: nodeOps.color,\n opacity: nodeOps.opacity,\n sourceLinks: node.sourceLinks.map(function (link) { return ({ sourceId: link.sourceId, targetId: link.targetId, value: link.value }); }),\n targetLinks: node.targetLinks.map(function (link) { return ({ sourceId: link.sourceId, targetId: link.targetId, value: link.value }); })});\n visualNodes.set(node.id, nodeVisual);\n\n visual.append(nodeVisual);\n });\n\n var sortedLinks = links.slice().sort(function (a, b) { return b.value - a.value; });\n\n var linksVisuals = [];\n sankeyContext.linksVisuals = linksVisuals;\n\n sortedLinks.forEach(function (link) {\n var source = link.source;\n var target = link.target;\n var sourceNode = visualNodes.get(source.id);\n var targetNode = visualNodes.get(target.id);\n var linkOps = resolveLinkOptions(link, linkOptions, sourceNode, targetNode);\n var linkInstance = new Link(linkOps);\n var linkVisual = linkInstance.exportVisual();\n\n linkVisual.type = LINK;\n linkVisual.dataItem = {\n source: $.extend({}, sourceNode.dataItem),\n target: $.extend({}, targetNode.dataItem),\n value: link.value\n };\n linkVisual.linkOptions = linkOps;\n linksVisuals.push(linkVisual);\n\n sourceNode.links.push(linkVisual);\n targetNode.links.push(linkVisual);\n\n visual.append(linkVisual);\n });\n\n var diagramWidth = nodes.reduce(function (acc, node) { return Math.max(acc, node.x1); }, 0);\n nodes.forEach(function (node) {\n var textOps = resolveLabelOptions(node, labelOptions, diagramWidth);\n var labelInstance = new Label(textOps);\n var labelVisual = labelInstance.exportVisual();\n\n if (labelVisual) {\n visual.append(labelVisual);\n }\n });\n\n if (legendBox) {\n var legendElement = new Legend($.extend({}, legend, {drawingRect: legendBox, nodes: nodes}));\n var legendVisual = legendElement.exportVisual();\n visual.append(legendVisual);\n }\n\n return visual;\n };\n\n Sankey.prototype.exportVisual = function exportVisual (exportOptions) {\n var options = (exportOptions && exportOptions.options) ?\n deepExtend({}, this.options, exportOptions.options) : this.options;\n\n var context = {\n size: {\n width: defined(exportOptions && exportOptions.width) ? exportOptions.width : this.size.width,\n height: defined(exportOptions && exportOptions.height) ? exportOptions.height : this.size.height\n }\n };\n\n return this._render(options, context);\n };\n\n Sankey.prototype._setOptions = function _setOptions (options) {\n this.options = deepExtend({}, this.options, options);\n };\n\n return Sankey;\n }(dataviz.Observable));\n\n setDefaultOptions(Sankey, {\n title: {\n position: constants.TOP, // 'top', 'bottom'\n },\n labels: {\n visible: true,\n margin: {\n left: 8,\n right: 8\n },\n padding: 0,\n border: {\n width: 0\n },\n paintOrder: 'stroke',\n stroke: {\n lineJoin: \"round\",\n width: 1\n },\n align: constants.LEFT,\n offset: { left: 0, top: 0 }\n },\n nodes: {\n width: 24,\n padding: 16,\n opacity: 1,\n align: 'stretch', // 'left', 'right', 'stretch'\n offset: { left: 0, top: 0 }\n },\n links: {\n colorType: 'static', // 'source', 'target', 'static'\n opacity: 0.4,\n highlight: {\n opacity: 0.8,\n inactiveOpacity: 0.2\n }\n },\n tooltip: {\n followPointer: false,\n delay: 200\n }\n });\n\n var createSankeyData = function (data, dimensions, measure) {\n var nodes = new Set();\n var links = new Map();\n var linksMap = new Map();\n\n data.forEach(function (row) {\n dimensions.forEach(function (dimension) {\n nodes.add(dimension.value(row));\n });\n\n for (var i = 0; i < dimensions.length - 1; i++) {\n var source = dimensions[i].value(row);\n var target = dimensions[i + 1].value(row);\n var key = source + \"_\" + target;\n var value = measure.value(row);\n var existingValue = links.get(key);\n\n if (existingValue !== undefined) {\n links.set(key, existingValue + value);\n } else {\n links.set(key, value);\n linksMap.set(key, { source: source, target: target });\n }\n }\n });\n\n var nodesId = new Map();\n var nodesArray = Array.from(nodes).map(function (node, index) {\n nodesId.set(node, index);\n return { id: index, label: { text: String(node) } };\n });\n\n var linksArray = Array.from(links).map(function (ref) {\n var key = ref[0];\n var value = ref[1];\n\n var ref$1 = linksMap.get(key);\n var source = ref$1.source;\n var target = ref$1.target;\n return {\n sourceId: nodesId.get(source),\n targetId: nodesId.get(target),\n value: value\n };\n });\n\n return { nodes: nodesArray, links: linksArray };\n };\n\n kendo.deepExtend(kendo.dataviz, {\n Sankey: Sankey,\n createSankeyData: createSankeyData\n });\n\n })(window.kendo.jQuery);\n\n (function($) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n\n var encode = kendo.htmlEncode;\n var styleAttr = '__style';\n var tooltipContentWrapStyle = `${styleAttr}=\"display: flex; align-items: center;\"`;\n var space = 3;\n var TootipText = (text) => `${text}`;\n var Square = (color) => `
`;\n var TooltipTemplates = {\n node: function({ dataItem, value }) {\n const { color, label } = dataItem;\n return (\n `
\n ${Square(color)}\n ${TootipText(encode(label.text))}\n ${TootipText(value)}\n
`\n );\n },\n link: function({ dataItem, value }) {\n const { source, target } = dataItem;\n return (\n `
\n ${Square(source.color)}\n ${TootipText(encode(source.label.text))}\n ${TootipText(kendo.ui.icon({ icon: \"arrow-right\" }))}\n ${Square(target.color)}\n ${TootipText(encode(target.label.text))}\n ${TootipText(value)}\n
`\n );\n }\n };\n\n var SankeyTooltip = Widget.extend({\n init: function(element, options) {\n this.options = options;\n\n Widget.fn.init.call(this, element);\n\n this.element.addClass('k-tooltip k-chart-tooltip k-chart-shared-tooltip')\n .append('
');\n },\n\n size: function() {\n return {\n width: this.element.outerWidth(),\n height: this.element.outerHeight()\n };\n },\n\n setContent: function(content) {\n this.element.find('.k-tooltip-content').html(content);\n this.element.find(`[${styleAttr}]`).each((i, el) => {\n el.getAttribute(styleAttr)\n .split(';')\n .filter(s => s !== '')\n .forEach(s => {\n const parts = s.split(':');\n el.style[parts[0].trim()] = parts[1].trim();\n });\n el.removeAttribute(styleAttr);\n });\n },\n\n setPosition: function(popupAlign, popupOffset, offsetOption) {\n const size = this.size();\n const offset = { ...popupOffset };\n\n offset.left += (popupAlign.horizontal === 'left') ? offsetOption : (-1 * offsetOption);\n if (popupAlign.horizontal === 'right') {\n offset.left -= size.width;\n }\n\n if (popupAlign.vertical === 'bottom') {\n offset.top -= size.height + offsetOption;\n } else {\n offset.top += offsetOption;\n }\n\n this.element.css(offset);\n },\n\n show: function() {\n this.element.show();\n },\n\n hide: function() {\n this.element.hide();\n },\n\n destroy: function() {\n this.element.remove();\n }\n });\n\n kendo.deepExtend(kendo.dataviz, {\n SankeyTooltip: {\n Tooltip: SankeyTooltip,\n ContentTemplates: TooltipTemplates\n }\n });\n })(window.kendo.jQuery);\n\n (function($) {\n var kendo = window.kendo;\n var template = kendo.template;\n var Widget = kendo.ui.Widget;\n var dataviz = kendo.dataviz;\n var defined = dataviz.defined;\n var encode = kendo.htmlEncode;\n var KendoSankey = dataviz.Sankey;\n var NODE_CLICK = \"nodeClick\";\n var LINK_CLICK = \"linkClick\";\n var NODE_ENTER = \"nodeEnter\";\n var NODE_LEAVE = \"nodeLeave\";\n var LINK_ENTER = \"linkEnter\";\n var LINK_LEAVE = \"linkLeave\";\n var TOOLTIP_SHOW = \"tooltipShow\";\n var TOOLTIP_HIDE = \"tooltipHide\";\n var NODE = 'node';\n\n const { Tooltip, ContentTemplates } = dataviz.SankeyTooltip;\n\n var Sankey = Widget.extend({\n init: function(element, userOptions) {\n kendo.destroy(element);\n $(element).empty();\n\n this.options = kendo.deepExtend(this.options, userOptions);\n\n Widget.fn.init.call(this, element);\n\n this.wrapper = this.element;\n this._initSankey();\n\n this._attachEvents();\n\n kendo.notify(this, dataviz.ui);\n\n if (this._showWatermarkOverlay) {\n this._showWatermarkOverlay(this.wrapper[0]);\n }\n },\n\n setOptions: function(options) {\n var currentOptions = this.options;\n\n this.events.forEach(eventName => {\n if (currentOptions[eventName]) {\n this.unbind(eventName, currentOptions[eventName]);\n }\n });\n\n this._instance.setOptions(options);\n\n this.bind(this.events, this._instance.options);\n },\n\n _initSankey: function() {\n const themeOptions = this._getThemeOptions(this.options);\n const { seriesColors: nodeColors, axisDefaults, seriesDefaults, legend, title } = themeOptions;\n const { line: links, labels } = axisDefaults;\n const strokeColor = seriesDefaults.labels.background;\n\n this._createSankey(this.options, { nodeColors, links, labels: { ...labels, stroke: { color: strokeColor } }, legend, title });\n this.options = this._instance.options;\n },\n\n _createSankey: function(options, themeOptions) {\n this._instance = new KendoSankey(this.element[0], options, themeOptions);\n },\n\n _getThemeOptions: function(userOptions) {\n var themeName = (userOptions || {}).theme;\n\n if (themeName && dataviz.SASS_THEMES.indexOf(themeName.toLowerCase()) !== -1) {\n return dataviz.autoTheme().chart;\n }\n\n if (defined(themeName)) {\n var themes = dataviz.ui.themes || {};\n var theme = themes[themeName] || themes[themeName.toLowerCase()] || {};\n return theme.chart || {};\n }\n },\n\n _attachEvents: function() {\n this.events.forEach(eventName => {\n this._instance.bind(eventName, event => {\n if (this._events[eventName]) {\n this._events[eventName].forEach(handler => handler.call(undefined, event));\n }\n });\n });\n\n this._instance.bind(TOOLTIP_SHOW, this.tooltipShow.bind(this));\n this._instance.bind(TOOLTIP_HIDE, this.tooltipHide.bind(this));\n },\n\n tooltipShow: function(e) {\n if (!this._tooltip) {\n const doc = this.element[0].ownerDocument;\n this._tooltip = new Tooltip(doc.createElement('div'), {});\n const { appendTo = doc.body } = this.options.tooltip;\n this._tooltip.element.appendTo($(appendTo));\n }\n\n const { nodeTemplate, linkTemplate, offset } = this.options.tooltip;\n const currentTemplate = template((e.targetType === NODE ? nodeTemplate : linkTemplate) || ContentTemplates[e.targetType]);\n const value = encode(kendo.format(this.options.messages.tooltipUnits, defined(e.nodeValue) ? e.nodeValue : e.dataItem.value));\n\n this._tooltip.setContent(currentTemplate({ dataItem: e.dataItem, value }));\n this._tooltip.setPosition(e.tooltipData.popupAlign, e.tooltipData.popupOffset, offset);\n this._tooltip.show();\n },\n\n tooltipHide: function() {\n if (this._tooltip) {\n this._tooltip.destroy();\n this._tooltip = null;\n }\n },\n\n exportVisual: function(exportOptions) {\n return this._instance.exportVisual(exportOptions);\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n this.tooltipHide();\n this._instance.destroy();\n this._instance = null;\n },\n\n events: [\n NODE_CLICK,\n LINK_CLICK,\n NODE_ENTER,\n NODE_LEAVE,\n LINK_ENTER,\n LINK_LEAVE\n ],\n options: {\n name: \"Sankey\",\n theme: \"default\",\n tooltip: {\n offset: 12\n },\n messages: {\n tooltipUnits: \"({0} Units)\"\n }\n }\n });\n\n dataviz.ExportMixin.extend(Sankey.fn);\n\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(Sankey.fn);\n }\n\n dataviz.ui.plugin(Sankey);\n\n kendo.deepExtend(dataviz, {\n Sankey\n });\n\n })(window.kendo.jQuery);\n\n let __meta__ = {\n id: \"dataviz.sankey\",\n name: \"Sankey\",\n category: \"dataviz\",\n description: \"The Sankey widget uses modern browser technologies to render high-quality data visualizations in the browser.\",\n depends: [ \"data\", \"userevents\", \"drawing\", \"dataviz.core\", \"dataviz.themes\" ],\n features: [{\n id: \"dataviz.sankey-pdf-export\",\n name: \"PDF export\",\n description: \"Export Sankey as PDF\",\n depends: [ \"pdf\" ]\n }]\n };\n\n var kendo$1 = kendo;\n\n return kendo$1;\n\n}));\n"]}