Hacked By AnonymousFox
{"version":3,"sources":["<anon>"],"sourcesContent":["/**\n * @license Highcharts JS v12.1.2 (2025-01-09)\n * @module highcharts/modules/sankey\n * @requires highcharts\n *\n * Sankey diagram module\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"highcharts\"), require(\"highcharts\")[\"SeriesRegistry\"], require(\"highcharts\")[\"Point\"], require(\"highcharts\")[\"Color\"], require(\"highcharts\")[\"SVGElement\"]);\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"highcharts/modules/sankey\", [[\"highcharts/highcharts\"], [\"highcharts/highcharts\",\"SeriesRegistry\"], [\"highcharts/highcharts\",\"Point\"], [\"highcharts/highcharts\",\"Color\"], [\"highcharts/highcharts\",\"SVGElement\"]], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"highcharts/modules/sankey\"] = factory(require(\"highcharts\"), require(\"highcharts\")[\"SeriesRegistry\"], require(\"highcharts\")[\"Point\"], require(\"highcharts\")[\"Color\"], require(\"highcharts\")[\"SVGElement\"]);\n\telse\n\t\troot[\"Highcharts\"] = factory(root[\"Highcharts\"], root[\"Highcharts\"][\"SeriesRegistry\"], root[\"Highcharts\"][\"Point\"], root[\"Highcharts\"][\"Color\"], root[\"Highcharts\"][\"SVGElement\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE__944__, __WEBPACK_EXTERNAL_MODULE__512__, __WEBPACK_EXTERNAL_MODULE__260__, __WEBPACK_EXTERNAL_MODULE__620__, __WEBPACK_EXTERNAL_MODULE__28__) {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 620:\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__620__;\n\n/***/ }),\n\n/***/ 260:\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__260__;\n\n/***/ }),\n\n/***/ 28:\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__28__;\n\n/***/ }),\n\n/***/ 512:\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__512__;\n\n/***/ }),\n\n/***/ 944:\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__944__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": function() { return /* binding */ sankey_src; }\n});\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\"],\"commonjs\":[\"highcharts\"],\"commonjs2\":[\"highcharts\"],\"root\":[\"Highcharts\"]}\nvar highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_ = __webpack_require__(944);\nvar highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default = /*#__PURE__*/__webpack_require__.n(highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_);\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"SeriesRegistry\"],\"commonjs\":[\"highcharts\",\"SeriesRegistry\"],\"commonjs2\":[\"highcharts\",\"SeriesRegistry\"],\"root\":[\"Highcharts\",\"SeriesRegistry\"]}\nvar highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_ = __webpack_require__(512);\nvar highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default = /*#__PURE__*/__webpack_require__.n(highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_);\n;// ./code/es5/es-modules/Series/NodesComposition.js\n/* *\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar _a = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).series, seriesProto = _a.prototype, pointProto = _a.prototype.pointClass.prototype;\n\nvar defined = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defined, extend = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).extend, find = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).find, merge = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).merge, pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick;\n/* *\n *\n * Composition\n *\n * */\nvar NodesComposition;\n(function (NodesComposition) {\n /* *\n *\n * Declarations\n *\n * */\n /* *\n *\n * Functions\n *\n * */\n /**\n * @private\n */\n function compose(PointClass, SeriesClass) {\n var pointProto = PointClass.prototype,\n seriesProto = SeriesClass.prototype;\n pointProto.setNodeState = setNodeState;\n pointProto.setState = setNodeState;\n pointProto.update = updateNode;\n seriesProto.destroy = destroy;\n seriesProto.setData = setData;\n return SeriesClass;\n }\n NodesComposition.compose = compose;\n /**\n * Create a single node that holds information on incoming and outgoing\n * links.\n * @private\n */\n function createNode(id) {\n var PointClass = this.pointClass,\n findById = function (nodes,\n id) { return find(nodes,\n function (node) { return node.id === id; }); };\n var node = findById(this.nodes,\n id),\n options;\n if (!node) {\n options = this.options.nodes && findById(this.options.nodes, id);\n var newNode_1 = new PointClass(this,\n extend({\n className: 'highcharts-node',\n isNode: true,\n id: id,\n y: 1 // Pass isNull test\n },\n options));\n newNode_1.linksTo = [];\n newNode_1.linksFrom = [];\n /**\n * Return the largest sum of either the incoming or outgoing links.\n * @private\n */\n newNode_1.getSum = function () {\n var sumTo = 0,\n sumFrom = 0;\n newNode_1.linksTo.forEach(function (link) {\n sumTo += link.weight || 0;\n });\n newNode_1.linksFrom.forEach(function (link) {\n sumFrom += link.weight || 0;\n });\n return Math.max(sumTo, sumFrom);\n };\n /**\n * Get the offset in weight values of a point/link.\n * @private\n */\n newNode_1.offset = function (point, coll) {\n var offset = 0;\n for (var i = 0; i < newNode_1[coll].length; i++) {\n if (newNode_1[coll][i] === point) {\n return offset;\n }\n offset += newNode_1[coll][i].weight;\n }\n };\n // Return true if the node has a shape, otherwise all links are\n // outgoing.\n newNode_1.hasShape = function () {\n var outgoing = 0;\n newNode_1.linksTo.forEach(function (link) {\n if (link.outgoing) {\n outgoing++;\n }\n });\n return (!newNode_1.linksTo.length ||\n outgoing !== newNode_1.linksTo.length);\n };\n newNode_1.index = this.nodes.push(newNode_1) - 1;\n node = newNode_1;\n }\n node.formatPrefix = 'node';\n // For use in formats\n node.name = node.name || node.options.id || '';\n // Mass is used in networkgraph:\n node.mass = pick(\n // Node:\n node.options.mass, node.options.marker && node.options.marker.radius, \n // Series:\n this.options.marker && this.options.marker.radius, \n // Default:\n 4);\n return node;\n }\n NodesComposition.createNode = createNode;\n /**\n * Destroy all nodes and links.\n * @private\n */\n function destroy() {\n // Nodes must also be destroyed (#8682, #9300)\n this.data = []\n .concat(this.points || [], this.nodes);\n return seriesProto.destroy.apply(this, arguments);\n }\n NodesComposition.destroy = destroy;\n /**\n * Extend generatePoints by adding the nodes, which are Point objects but\n * pushed to the this.nodes array.\n * @private\n */\n function generatePoints() {\n var _this = this;\n var chart = this.chart,\n nodeLookup = {};\n seriesProto.generatePoints.call(this);\n if (!this.nodes) {\n this.nodes = []; // List of Point-like node items\n }\n this.colorCounter = 0;\n // Reset links from previous run\n this.nodes.forEach(function (node) {\n node.linksFrom.length = 0;\n node.linksTo.length = 0;\n node.level = node.options.level;\n });\n // Create the node list and set up links\n this.points.forEach(function (point) {\n if (defined(point.from)) {\n if (!nodeLookup[point.from]) {\n nodeLookup[point.from] = _this.createNode(point.from);\n }\n nodeLookup[point.from].linksFrom.push(point);\n point.fromNode = nodeLookup[point.from];\n // Point color defaults to the fromNode's color\n if (chart.styledMode) {\n point.colorIndex = pick(point.options.colorIndex, nodeLookup[point.from].colorIndex);\n }\n else {\n point.color =\n point.options.color || nodeLookup[point.from].color;\n }\n }\n if (defined(point.to)) {\n if (!nodeLookup[point.to]) {\n nodeLookup[point.to] = _this.createNode(point.to);\n }\n nodeLookup[point.to].linksTo.push(point);\n point.toNode = nodeLookup[point.to];\n }\n point.name = point.name || point.id; // For use in formats\n }, this);\n // Store lookup table for later use\n this.nodeLookup = nodeLookup;\n }\n NodesComposition.generatePoints = generatePoints;\n /**\n * Destroy all nodes on setting new data\n * @private\n */\n function setData() {\n if (this.nodes) {\n this.nodes.forEach(function (node) {\n node.destroy();\n });\n this.nodes.length = 0;\n }\n seriesProto.setData.apply(this, arguments);\n }\n /**\n * When hovering node, highlight all connected links. When hovering a link,\n * highlight all connected nodes.\n * @private\n */\n function setNodeState(state) {\n var args = arguments,\n others = this.isNode ? this.linksTo.concat(this.linksFrom) :\n [this.fromNode,\n this.toNode];\n if (state !== 'select') {\n others.forEach(function (linkOrNode) {\n if (linkOrNode && linkOrNode.series) {\n pointProto.setState.apply(linkOrNode, args);\n if (!linkOrNode.isNode) {\n if (linkOrNode.fromNode.graphic) {\n pointProto.setState.apply(linkOrNode.fromNode, args);\n }\n if (linkOrNode.toNode && linkOrNode.toNode.graphic) {\n pointProto.setState.apply(linkOrNode.toNode, args);\n }\n }\n }\n });\n }\n pointProto.setState.apply(this, args);\n }\n NodesComposition.setNodeState = setNodeState;\n /**\n * When updating a node, don't update `series.options.data`, but\n * `series.options.nodes`\n * @private\n */\n function updateNode(options, redraw, animation, runEvent) {\n var _this = this;\n var nodes = this.series.options.nodes,\n data = this.series.options.data,\n dataLength = (data === null || data === void 0 ? void 0 : data.length) || 0,\n linkConfig = data === null || data === void 0 ? void 0 : data[this.index];\n pointProto.update.call(this, options, this.isNode ? false : redraw, // Hold the redraw for nodes\n animation, runEvent);\n if (this.isNode) {\n // `this.index` refers to `series.nodes`, not `options.nodes` array\n var nodeIndex = (nodes || [])\n .reduce(// Array.findIndex needs a polyfill\n function (prevIndex,\n n,\n index) {\n return (_this.id === n.id ? index : prevIndex);\n }, -1), \n // Merge old config with new config. New config is stored in\n // options.data, because of default logic in point.update()\n nodeConfig = merge(nodes && nodes[nodeIndex] || {}, (data === null || data === void 0 ? void 0 : data[this.index]) || {});\n // Restore link config\n if (data) {\n if (linkConfig) {\n data[this.index] = linkConfig;\n }\n else {\n // Remove node from config if there's more nodes than links\n data.length = dataLength;\n }\n }\n // Set node config\n if (nodes) {\n if (nodeIndex >= 0) {\n nodes[nodeIndex] = nodeConfig;\n }\n else {\n nodes.push(nodeConfig);\n }\n }\n else {\n this.series.options.nodes = [nodeConfig];\n }\n if (pick(redraw, true)) {\n this.series.chart.redraw(animation);\n }\n }\n }\n NodesComposition.updateNode = updateNode;\n})(NodesComposition || (NodesComposition = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Series_NodesComposition = (NodesComposition);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Point\"],\"commonjs\":[\"highcharts\",\"Point\"],\"commonjs2\":[\"highcharts\",\"Point\"],\"root\":[\"Highcharts\",\"Point\"]}\nvar highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_ = __webpack_require__(260);\nvar highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default = /*#__PURE__*/__webpack_require__.n(highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_);\n;// ./code/es5/es-modules/Series/Sankey/SankeyPoint.js\n/* *\n *\n * Sankey diagram module\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d,\n b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d,\n b) { d.__proto__ = b; }) ||\n function (d,\n b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\nvar ColumnSeries = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes.column;\n\nvar SankeyPoint_defined = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defined;\n/* *\n *\n * Class\n *\n * */\nvar SankeyPoint = /** @class */ (function (_super) {\n __extends(SankeyPoint, _super);\n function SankeyPoint() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * @private\n */\n SankeyPoint.prototype.applyOptions = function (options, x) {\n highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default().prototype.applyOptions.call(this, options, x);\n // Treat point.level as a synonym of point.column\n if (SankeyPoint_defined(this.options.level)) {\n this.options.column = this.column = this.options.level;\n }\n return this;\n };\n /**\n * @private\n */\n SankeyPoint.prototype.getClassName = function () {\n return (this.isNode ? 'highcharts-node ' : 'highcharts-link ') +\n highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default().prototype.getClassName.call(this);\n };\n /**\n * If there are incoming links, place it to the right of the\n * highest order column that links to this one.\n *\n * @private\n */\n SankeyPoint.prototype.getFromNode = function () {\n var node = this;\n var fromColumn = -1,\n fromNode;\n for (var i = 0; i < node.linksTo.length; i++) {\n var point = node.linksTo[i];\n if (point.fromNode.column > fromColumn &&\n point.fromNode !== node // #16080\n ) {\n fromNode = point.fromNode;\n fromColumn = fromNode.column;\n }\n }\n return { fromNode: fromNode, fromColumn: fromColumn };\n };\n /**\n * Calculate node.column if it's not set by user\n * @private\n */\n SankeyPoint.prototype.setNodeColumn = function () {\n var node = this;\n if (!SankeyPoint_defined(node.options.column)) {\n // No links to this node, place it left\n if (node.linksTo.length === 0) {\n node.column = 0;\n }\n else {\n node.column = node.getFromNode().fromColumn + 1;\n }\n }\n };\n /**\n * @private\n */\n SankeyPoint.prototype.isValid = function () {\n return this.isNode || typeof this.weight === 'number';\n };\n return SankeyPoint;\n}(ColumnSeries.prototype.pointClass));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Sankey_SankeyPoint = (SankeyPoint);\n\n;// ./code/es5/es-modules/Series/Sankey/SankeySeriesDefaults.js\n/* *\n *\n * Sankey diagram module\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n * API Options\n *\n * */\n/**\n * A sankey diagram is a type of flow diagram, in which the width of the\n * link between two nodes is shown proportionally to the flow quantity.\n *\n * @sample highcharts/demo/sankey-diagram/\n * Sankey diagram\n * @sample highcharts/plotoptions/sankey-inverted/\n * Inverted sankey diagram\n * @sample highcharts/plotoptions/sankey-outgoing\n * Sankey diagram with outgoing links\n *\n * @extends plotOptions.column\n * @since 6.0.0\n * @product highcharts\n * @excluding animationLimit, boostBlending, boostThreshold, borderRadius,\n * crisp, cropThreshold, colorAxis, colorKey, dataSorting, depth,\n * dragDrop, edgeColor, edgeWidth, findNearestPointBy, grouping,\n * groupPadding, groupZPadding, legendSymbolColor, maxPointWidth,\n * minPointLength, negativeColor, pointInterval,\n * pointIntervalUnit, pointPadding, pointPlacement, pointRange,\n * pointStart, pointWidth, shadow, softThreshold, stacking,\n * threshold, zoneAxis, zones\n * @requires modules/sankey\n * @optionparent plotOptions.sankey\n *\n * @private\n */\nvar SankeySeriesDefaults = {\n borderWidth: 0,\n colorByPoint: true,\n /**\n * Higher numbers makes the links in a sankey diagram or dependency\n * wheelrender more curved. A `curveFactor` of 0 makes the lines\n * straight.\n *\n * @private\n */\n curveFactor: 0.33,\n /**\n * Options for the data labels appearing on top of the nodes and links.\n * For sankey charts, data labels are visible for the nodes by default,\n * but hidden for links. This is controlled by modifying the\n * `nodeFormat`, and the `format` that applies to links and is an empty\n * string by default.\n *\n * @declare Highcharts.SeriesSankeyDataLabelsOptionsObject\n *\n * @private\n */\n dataLabels: {\n enabled: true,\n backgroundColor: 'none', // Enable padding\n crop: false,\n /**\n * The\n * [format string](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting)\n * specifying what to show for _nodes_ in the sankey diagram. By\n * default the `nodeFormatter` returns `{point.name}`.\n *\n * @sample highcharts/plotoptions/sankey-link-datalabels/\n * Node and link data labels\n *\n * @type {string}\n */\n nodeFormat: void 0,\n /**\n * Callback to format data labels for _nodes_ in the sankey diagram.\n * The `nodeFormat` option takes precedence over the\n * `nodeFormatter`.\n *\n * @type {Highcharts.SeriesSankeyDataLabelsFormatterCallbackFunction}\n * @since 6.0.2\n */\n nodeFormatter: function () {\n return this.point.name;\n },\n format: void 0,\n /**\n * @type {Highcharts.SeriesSankeyDataLabelsFormatterCallbackFunction}\n */\n formatter: function () {\n return;\n },\n inside: true\n },\n /**\n * @default true\n * @extends plotOptions.series.inactiveOtherPoints\n * @private\n */\n inactiveOtherPoints: true,\n /**\n * Set options on specific levels. Takes precedence over series options,\n * but not node and link options.\n *\n * @sample highcharts/demo/sunburst\n * Sunburst chart\n *\n * @type {Array<*>}\n * @since 7.1.0\n * @apioption plotOptions.sankey.levels\n */\n /**\n * Can set `borderColor` on all nodes which lay on the same level.\n *\n * @type {Highcharts.ColorString}\n * @apioption plotOptions.sankey.levels.borderColor\n */\n /**\n * Can set `borderWidth` on all nodes which lay on the same level.\n *\n * @type {number}\n * @apioption plotOptions.sankey.levels.borderWidth\n */\n /**\n * Can set `color` on all nodes which lay on the same level.\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @apioption plotOptions.sankey.levels.color\n */\n /**\n * Can set `colorByPoint` on all nodes which lay on the same level.\n *\n * @type {boolean}\n * @default true\n * @apioption plotOptions.sankey.levels.colorByPoint\n */\n /**\n * Can set `dataLabels` on all points which lay on the same level.\n *\n * @extends plotOptions.sankey.dataLabels\n * @apioption plotOptions.sankey.levels.dataLabels\n */\n /**\n * Decides which level takes effect from the options set in the levels\n * object.\n *\n * @type {number}\n * @apioption plotOptions.sankey.levels.level\n */\n /**\n * Can set `linkOpacity` on all points which lay on the same level.\n *\n * @type {number}\n * @default 0.5\n * @apioption plotOptions.sankey.levels.linkOpacity\n */\n /**\n * Can set `states` on all nodes and points which lay on the same level.\n *\n * @extends plotOptions.sankey.states\n * @apioption plotOptions.sankey.levels.states\n */\n /**\n * Determines color mode for sankey links. Available options:\n *\n * - `from` color of the sankey link will be the same as the 'from node'\n *\n * - `gradient` color of the sankey link will be set to gradient between\n * colors of 'from node' and 'to node'\n *\n * - `to` color of the sankey link will be same as the 'to node'.\n *\n * @sample highcharts/demo/vertical-sankey\n * Vertical sankey diagram with gradients\n * @sample highcharts/series-sankey/link-color-mode\n * Sankey diagram with gradients and explanation\n *\n * @type {('from'|'gradient'|'to')}\n * @since 11.2.0\n */\n linkColorMode: 'from',\n /**\n * Opacity for the links between nodes in the sankey diagram.\n *\n * @private\n */\n linkOpacity: 0.5,\n /**\n * Opacity for the nodes in the sankey diagram.\n *\n * @private\n */\n opacity: 1,\n /**\n * The minimal width for a line of a sankey. By default,\n * 0 values are not shown.\n *\n * @sample highcharts/plotoptions/sankey-minlinkwidth\n * Sankey diagram with minimal link height\n *\n * @type {number}\n * @since 7.1.3\n * @default 0\n * @apioption plotOptions.sankey.minLinkWidth\n *\n * @private\n */\n minLinkWidth: 0,\n /**\n * Determines which side of the chart the nodes are to be aligned to. When\n * the chart is inverted, `top` aligns to the left and `bottom` to the\n * right.\n *\n * @sample highcharts/plotoptions/sankey-nodealignment\n * Node alignment demonstrated\n *\n * @type {'top'|'center'|'bottom'}\n * @apioption plotOptions.sankey.nodeAlignment\n */\n nodeAlignment: 'center',\n /**\n * The pixel width of each node in a sankey diagram or dependency wheel, or\n * the height in case the chart is inverted.\n *\n * Can be a number or a percentage string.\n *\n * Sankey series also support setting it to `auto`. With this setting, the\n * nodes are sized to fill up the plot area in the longitudinal direction,\n * regardless of the number of levels.\n *\n * @see [sankey.nodeDistance](#nodeDistance)\n * @sample highcharts/series-sankey/node-distance\n * Sankey with auto node width combined with node distance\n * @sample highcharts/series-organization/node-distance\n * Organization chart with node distance of 50%\n *\n * @type {number|string}\n */\n nodeWidth: 20,\n /**\n * The padding between nodes in a sankey diagram or dependency wheel, in\n * pixels. For sankey charts, this applies to the nodes of the same column,\n * so vertical distance by default, or horizontal distance in an inverted\n * (vertical) sankey.\n *\n * If the number of nodes is so great that it is impossible to lay them out\n * within the plot area with the given `nodePadding`, they will be rendered\n * with a smaller padding as a strategy to avoid overflow.\n */\n nodePadding: 10,\n /**\n * The distance between nodes in a sankey diagram in the longitudinal\n * direction. The longitudinal direction means the direction that the chart\n * flows - in a horizontal chart the distance is horizontal, in an inverted\n * chart (vertical), the distance is vertical.\n *\n * If a number is given, it denotes pixels. If a percentage string is given,\n * the distance is a percentage of the rendered node width. A `nodeDistance`\n * of `100%` will render equal widths for the nodes and the gaps between\n * them.\n *\n * This option applies only when the `nodeWidth` option is `auto`, making\n * the node width respond to the number of columns.\n *\n * @since 11.4.0\n * @sample highcharts/series-sankey/node-distance\n * Sankey with dnode distance of 100% means equal to node width\n * @sample highcharts/series-organization/node-distance\n * Organization chart with node distance of 50%\n * @type {number|string}\n */\n nodeDistance: 30,\n showInLegend: false,\n states: {\n hover: {\n /**\n * Opacity for the links between nodes in the sankey diagram in\n * hover mode.\n */\n linkOpacity: 1,\n /**\n * Opacity for the nodes in the sankey diagram in hover mode.\n */\n opacity: 1\n },\n /**\n * The opposite state of a hover for a single point node/link.\n *\n * @declare Highcharts.SeriesStatesInactiveOptionsObject\n */\n inactive: {\n /**\n * Opacity for the links between nodes in the sankey diagram in\n * inactive mode.\n */\n linkOpacity: 0.1,\n /**\n * Opacity of the nodes in the sankey diagram in inactive mode.\n */\n opacity: 0.1,\n /**\n * Animation when not hovering over the marker.\n *\n * @type {boolean|Partial<Highcharts.AnimationOptionsObject>}\n * @apioption plotOptions.series.states.inactive.animation\n */\n animation: {\n /** @internal */\n duration: 50\n }\n }\n },\n tooltip: {\n /**\n * A callback for defining the format for _nodes_ in the chart's\n * tooltip, as opposed to links.\n *\n * @type {Highcharts.FormatterCallbackFunction<Highcharts.SankeyNodeObject>}\n * @since 6.0.2\n * @apioption plotOptions.sankey.tooltip.nodeFormatter\n */\n /**\n * Whether the tooltip should follow the pointer or stay fixed on\n * the item.\n */\n followPointer: true,\n headerFormat: '<span style=\"font-size: 0.8em\">{series.name}</span><br/>',\n pointFormat: '{point.fromNode.name} \\u2192 {point.toNode.name}: <b>{point.weight}</b><br/>',\n /**\n * The\n * [format string](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting)\n * specifying what to show for _nodes_ in tooltip of a diagram\n * series, as opposed to links.\n */\n nodeFormat: '{point.name}: <b>{point.sum}</b><br/>'\n }\n};\n/**\n * A `sankey` series. If the [type](#series.sankey.type) option is not\n * specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends series,plotOptions.sankey\n * @excluding animationLimit, boostBlending, boostThreshold, borderColor,\n * borderRadius, borderWidth, crisp, cropThreshold, dataParser,\n * dataURL, depth, dragDrop, edgeColor, edgeWidth,\n * findNearestPointBy, getExtremesFromAll, grouping, groupPadding,\n * groupZPadding, label, maxPointWidth, negativeColor, pointInterval,\n * pointIntervalUnit, pointPadding, pointPlacement, pointRange,\n * pointStart, pointWidth, shadow, softThreshold, stacking,\n * threshold, zoneAxis, zones, dataSorting\n * @product highcharts\n * @requires modules/sankey\n * @apioption series.sankey\n */\n/**\n * A collection of options for the individual nodes. The nodes in a sankey\n * diagram are auto-generated instances of `Highcharts.Point`, but options can\n * be applied here and linked by the `id`.\n *\n * @sample highcharts/css/sankey/\n * Sankey diagram with node options\n *\n * @declare Highcharts.SeriesSankeyNodesOptionsObject\n * @type {Array<*>}\n * @product highcharts\n * @apioption series.sankey.nodes\n */\n/**\n * The id of the auto-generated node, referring to the `from` or `to` setting of\n * the link.\n *\n * @type {string}\n * @product highcharts\n * @apioption series.sankey.nodes.id\n */\n/**\n * The color of the auto generated node.\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @product highcharts\n * @apioption series.sankey.nodes.color\n */\n/**\n * The color index of the auto generated node, especially for use in styled\n * mode.\n *\n * @type {number}\n * @product highcharts\n * @apioption series.sankey.nodes.colorIndex\n */\n/**\n * An optional column index of where to place the node. The default behaviour is\n * to place it next to the preceding node. Note that this option name is\n * counter intuitive in inverted charts, like for example an organization chart\n * rendered top down. In this case the \"columns\" are horizontal.\n *\n * @sample highcharts/plotoptions/sankey-node-column/\n * Specified node column\n *\n * @type {number}\n * @since 6.0.5\n * @product highcharts\n * @apioption series.sankey.nodes.column\n */\n/**\n * Individual data label for each node. The options are the same as\n * the ones for [series.sankey.dataLabels](#series.sankey.dataLabels).\n *\n * @extends plotOptions.sankey.dataLabels\n * @apioption series.sankey.nodes.dataLabels\n */\n/**\n * The height of the node.\n *\n * @sample highcharts/series-sankey/height/\n * Sankey diagram with height options\n *\n * @type {number}\n * @since 11.3.0\n * @apioption series.sankey.nodes.height\n */\n/**\n * An optional level index of where to place the node. The default behaviour is\n * to place it next to the preceding node. Alias of `nodes.column`, but in\n * inverted sankeys and org charts, the levels are laid out as rows.\n *\n * @type {number}\n * @since 7.1.0\n * @product highcharts\n * @apioption series.sankey.nodes.level\n */\n/**\n * The name to display for the node in data labels and tooltips. Use this when\n * the name is different from the `id`. Where the id must be unique for each\n * node, this is not necessary for the name.\n *\n * @sample highcharts/css/sankey/\n * Sankey diagram with node options\n *\n * @type {string}\n * @product highcharts\n * @apioption series.sankey.nodes.name\n */\n/**\n * This option is deprecated, use\n * [offsetHorizontal](#series.sankey.nodes.offsetHorizontal) and\n * [offsetVertical](#series.sankey.nodes.offsetVertical) instead.\n *\n * In a horizontal layout, the vertical offset of a node in terms of weight.\n * Positive values shift the node downwards, negative shift it upwards. In a\n * vertical layout, like organization chart, the offset is horizontal.\n *\n * If a percentage string is given, the node is offset by the percentage of the\n * node size plus `nodePadding`.\n *\n * @deprecated\n * @type {number|string}\n * @default 0\n * @since 6.0.5\n * @product highcharts\n * @apioption series.sankey.nodes.offset\n */\n/**\n * The horizontal offset of a node. Positive values shift the node right,\n * negative shift it left.\n *\n * If a percentage string is given, the node is offset by the percentage of the\n * node size.\n *\n * @sample highcharts/plotoptions/sankey-node-column/\n * Specified node offset\n *\n * @type {number|string}\n * @since 9.3.0\n * @product highcharts\n * @apioption series.sankey.nodes.offsetHorizontal\n */\n/**\n * The vertical offset of a node. Positive values shift the node down,\n * negative shift it up.\n *\n * If a percentage string is given, the node is offset by the percentage of the\n * node size.\n *\n * @sample highcharts/plotoptions/sankey-node-column/\n * Specified node offset\n *\n * @type {number|string}\n * @since 9.3.0\n * @product highcharts\n * @apioption series.sankey.nodes.offsetVertical\n */\n/**\n * An array of data points for the series. For the `sankey` series type,\n * points can be given in the following way:\n *\n * An array of objects with named values. The following snippet shows only a\n * few settings, see the complete options set below. If the total number of data\n * points exceeds the series' [turboThreshold](#series.area.turboThreshold),\n * this option is not available.\n *\n * ```js\n * data: [{\n * from: 'Category1',\n * to: 'Category2',\n * weight: 2\n * }, {\n * from: 'Category1',\n * to: 'Category3',\n * weight: 5\n * }]\n * ```\n *\n * When you provide the data as tuples, the keys option has to be set as well.\n *\n * ```js\n * keys: ['from', 'to', 'weight'],\n * data: [\n * ['Category1', 'Category2', 2],\n * ['Category1', 'Category3', 5]\n * ]\n * ```\n *\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Config objects\n *\n * @declare Highcharts.SeriesSankeyPointOptionsObject\n * @type {Array<*>|Array<Array<(string|number)>>}\n * @extends series.line.data\n * @excluding dragDrop, drilldown, marker, x, y\n * @product highcharts\n * @apioption series.sankey.data\n */\n/**\n * The color for the individual _link_. By default, the link color is the same\n * as the node it extends from. The `series.fillOpacity` option also applies to\n * the points, so when setting a specific link color, consider setting the\n * `fillOpacity` to 1.\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @product highcharts\n * @apioption series.sankey.data.color\n */\n/**\n * @type {Highcharts.SeriesSankeyDataLabelsOptionsObject|Array<Highcharts.SeriesSankeyDataLabelsOptionsObject>}\n * @product highcharts\n * @apioption series.sankey.data.dataLabels\n */\n/**\n * The node that the link runs from.\n *\n * @type {string}\n * @product highcharts\n * @apioption series.sankey.data.from\n */\n/**\n * The node that the link runs to.\n *\n * @type {string}\n * @product highcharts\n * @apioption series.sankey.data.to\n */\n/**\n * Whether the link goes out of the system.\n *\n * @sample highcharts/plotoptions/sankey-outgoing\n * Sankey chart with outgoing links\n *\n * @type {boolean}\n * @default false\n * @product highcharts\n * @apioption series.sankey.data.outgoing\n */\n/**\n * The weight of the link.\n *\n * @type {number|null}\n * @product highcharts\n * @apioption series.sankey.data.weight\n */\n''; // Adds doclets above to transpiled file\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Sankey_SankeySeriesDefaults = (SankeySeriesDefaults);\n\n;// ./code/es5/es-modules/Series/Sankey/SankeyColumnComposition.js\n/* *\n *\n * Sankey diagram module\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar SankeyColumnComposition_defined = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defined, getAlignFactor = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).getAlignFactor, relativeLength = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).relativeLength;\n/* *\n *\n * Composition\n *\n * */\nvar SankeyColumnComposition;\n(function (SankeyColumnComposition) {\n /* *\n *\n * Declarations\n *\n * */\n /* *\n *\n * Functions\n *\n * */\n /**\n * SankeyColumn Composition\n * @private\n * @function Highcharts.SankeyColumn#compose\n *\n * @param {Array<SankeyPoint>} points\n * The array of nodes\n * @param {SankeySeries} series\n * Series connected to column\n * @return {ArrayComposition} SankeyColumnArray\n */\n function compose(points, series) {\n var sankeyColumnArray = points;\n sankeyColumnArray.sankeyColumn =\n new SankeyColumnAdditions(sankeyColumnArray, series);\n return sankeyColumnArray;\n }\n SankeyColumnComposition.compose = compose;\n /* *\n *\n * Classes\n *\n * */\n var SankeyColumnAdditions = /** @class */ (function () {\n /* *\n *\n * Constructor\n *\n * */\n function SankeyColumnAdditions(points, series) {\n this.points = points;\n this.series = series;\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Calculate translation factor used in column and nodes distribution\n * @private\n * @function Highcharts.SankeyColumn#getTranslationFactor\n *\n * @param {SankeySeries} series\n * The Series\n * @return {number} TranslationFactor\n * Translation Factor\n */\n SankeyColumnAdditions.prototype.getTranslationFactor = function (series) {\n var column = this.points,\n nodes = column.slice(),\n chart = series.chart,\n minLinkWidth = series.options.minLinkWidth || 0;\n var skipPoint,\n factor = 0,\n i,\n remainingHeight = ((chart.plotSizeY || 0) -\n (series.options.borderWidth || 0) -\n (column.length - 1) * series.nodePadding);\n // Because the minLinkWidth option doesn't obey the direct\n // translation, we need to run translation iteratively, check\n // node heights, remove those nodes affected by minLinkWidth,\n // check again, etc.\n while (column.length) {\n factor = remainingHeight / column.sankeyColumn.sum();\n skipPoint = false;\n i = column.length;\n while (i--) {\n if (column[i].getSum() * factor < minLinkWidth) {\n column.splice(i, 1);\n remainingHeight =\n Math.max(0, remainingHeight - minLinkWidth);\n skipPoint = true;\n }\n }\n if (!skipPoint) {\n break;\n }\n }\n // Re-insert original nodes\n column.length = 0;\n for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {\n var node = nodes_1[_i];\n column.push(node);\n }\n return factor;\n };\n /**\n * Get the top position of the column in pixels\n * @private\n * @function Highcharts.SankeyColumn#top\n *\n * @param {number} factor\n * The Translation Factor\n * @return {number} top\n * The top position of the column\n */\n SankeyColumnAdditions.prototype.top = function (factor) {\n var series = this.series,\n nodePadding = series.nodePadding,\n height = this.points.reduce(function (height,\n node) {\n if (height > 0) {\n height += nodePadding;\n }\n var nodeHeight = Math.max(node.getSum() * factor,\n series.options.minLinkWidth || 0);\n height += nodeHeight;\n return height;\n }, 0);\n // Node alignment option handling #19096\n return getAlignFactor(series.options.nodeAlignment || 'center') * ((series.chart.plotSizeY || 0) - height);\n };\n /**\n * Get the left position of the column in pixels\n * @private\n * @function Highcharts.SankeyColumn#top\n *\n * @param {number} factor\n * The Translation Factor\n * @return {number} left\n * The left position of the column\n */\n SankeyColumnAdditions.prototype.left = function (factor) {\n var series = this.series,\n chart = series.chart,\n equalNodes = series.options.equalNodes,\n maxNodesLength = (chart.inverted ? chart.plotHeight : chart.plotWidth),\n nodePadding = series.nodePadding,\n width = this.points.reduce(function (width,\n node) {\n if (width > 0) {\n width += nodePadding;\n }\n var nodeWidth = equalNodes ?\n maxNodesLength / node.series.nodes.length -\n nodePadding :\n Math.max(node.getSum() * factor,\n series.options.minLinkWidth || 0);\n width += nodeWidth;\n return width;\n }, 0);\n return ((chart.plotSizeX || 0) - Math.round(width)) / 2;\n };\n /**\n * Calculate sum of all nodes inside specific column\n * @private\n * @function Highcharts.SankeyColumn#sum\n *\n * @param {ArrayComposition} this\n * Sankey Column Array\n *\n * @return {number} sum\n * Sum of all nodes inside column\n */\n SankeyColumnAdditions.prototype.sum = function () {\n return this.points.reduce(function (sum, node) { return (sum + node.getSum()); }, 0);\n };\n /**\n * Get the offset in pixels of a node inside the column\n * @private\n * @function Highcharts.SankeyColumn#offset\n *\n * @param {SankeyPoint} node\n * Sankey node\n * @param {number} factor\n * Translation Factor\n * @return {number} offset\n * Offset of a node inside column\n */\n SankeyColumnAdditions.prototype.offset = function (node, factor) {\n var column = this.points,\n series = this.series,\n nodePadding = series.nodePadding;\n var offset = 0,\n totalNodeOffset;\n if (series.is('organization') && node.hangsFrom) {\n return {\n absoluteTop: node.hangsFrom.nodeY\n };\n }\n for (var i = 0; i < column.length; i++) {\n var sum = column[i].getSum();\n var height = Math.max(sum * factor,\n series.options.minLinkWidth || 0);\n var directionOffset = node.options[series.chart.inverted ?\n 'offsetHorizontal' :\n 'offsetVertical'],\n optionOffset = node.options.offset || 0;\n if (sum) {\n totalNodeOffset = height + nodePadding;\n }\n else {\n // If node sum equals 0 nodePadding is missed #12453\n totalNodeOffset = 0;\n }\n if (column[i] === node) {\n return {\n relativeTop: offset + (SankeyColumnComposition_defined(directionOffset) ?\n // `directionOffset` is a percent of the node\n // height\n relativeLength(directionOffset, height) :\n relativeLength(optionOffset, totalNodeOffset))\n };\n }\n offset += totalNodeOffset;\n }\n };\n return SankeyColumnAdditions;\n }());\n SankeyColumnComposition.SankeyColumnAdditions = SankeyColumnAdditions;\n})(SankeyColumnComposition || (SankeyColumnComposition = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Sankey_SankeyColumnComposition = (SankeyColumnComposition);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Color\"],\"commonjs\":[\"highcharts\",\"Color\"],\"commonjs2\":[\"highcharts\",\"Color\"],\"root\":[\"Highcharts\",\"Color\"]}\nvar highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_ = __webpack_require__(620);\nvar highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default = /*#__PURE__*/__webpack_require__.n(highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_);\n;// ./code/es5/es-modules/Series/TreeUtilities.js\n/* *\n *\n * (c) 2014-2024 Highsoft AS\n *\n * Authors: Jon Arild Nygard / Oystein Moseng\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar TreeUtilities_extend = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).extend, isArray = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isArray, isNumber = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isNumber, isObject = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isObject, TreeUtilities_merge = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).merge, TreeUtilities_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick, TreeUtilities_relativeLength = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).relativeLength;\n/* *\n *\n * Functions\n *\n * */\n/* eslint-disable valid-jsdoc */\n/**\n * @private\n */\nfunction getColor(node, options) {\n var index = options.index,\n mapOptionsToLevel = options.mapOptionsToLevel,\n parentColor = options.parentColor,\n parentColorIndex = options.parentColorIndex,\n series = options.series,\n colors = options.colors,\n siblings = options.siblings,\n points = series.points,\n chartOptionsChart = series.chart.options.chart;\n var getColorByPoint,\n point,\n level,\n colorByPoint,\n colorIndexByPoint,\n color,\n colorIndex;\n /**\n * @private\n */\n var variateColor = function (color) {\n var colorVariation = level && level.colorVariation;\n if (colorVariation &&\n colorVariation.key === 'brightness' &&\n index &&\n siblings) {\n return highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default().parse(color).brighten(colorVariation.to * (index / siblings)).get();\n }\n return color;\n };\n if (node) {\n point = points[node.i];\n level = mapOptionsToLevel[node.level] || {};\n getColorByPoint = point && level.colorByPoint;\n if (getColorByPoint) {\n colorIndexByPoint = point.index % (colors ?\n colors.length :\n chartOptionsChart.colorCount);\n colorByPoint = colors && colors[colorIndexByPoint];\n }\n // Select either point color, level color or inherited color.\n if (!series.chart.styledMode) {\n color = TreeUtilities_pick(point && point.options.color, level && level.color, colorByPoint, parentColor && variateColor(parentColor), series.color);\n }\n colorIndex = TreeUtilities_pick(point && point.options.colorIndex, level && level.colorIndex, colorIndexByPoint, parentColorIndex, options.colorIndex);\n }\n return {\n color: color,\n colorIndex: colorIndex\n };\n}\n/**\n * Creates a map from level number to its given options.\n *\n * @private\n *\n * @param {Object} params\n * Object containing parameters.\n * - `defaults` Object containing default options. The default options are\n * merged with the userOptions to get the final options for a specific\n * level.\n * - `from` The lowest level number.\n * - `levels` User options from series.levels.\n * - `to` The highest level number.\n *\n * @return {Highcharts.Dictionary<object>|null}\n * Returns a map from level number to its given options.\n */\nfunction getLevelOptions(params) {\n var result = {};\n var defaults,\n converted,\n i,\n from,\n to,\n levels;\n if (isObject(params)) {\n from = isNumber(params.from) ? params.from : 1;\n levels = params.levels;\n converted = {};\n defaults = isObject(params.defaults) ? params.defaults : {};\n if (isArray(levels)) {\n converted = levels.reduce(function (obj, item) {\n var level,\n levelIsConstant,\n options;\n if (isObject(item) && isNumber(item.level)) {\n options = TreeUtilities_merge({}, item);\n levelIsConstant = TreeUtilities_pick(options.levelIsConstant, defaults.levelIsConstant);\n // Delete redundant properties.\n delete options.levelIsConstant;\n delete options.level;\n // Calculate which level these options apply to.\n level = item.level + (levelIsConstant ? 0 : from - 1);\n if (isObject(obj[level])) {\n TreeUtilities_merge(true, obj[level], options); // #16329\n }\n else {\n obj[level] = options;\n }\n }\n return obj;\n }, {});\n }\n to = isNumber(params.to) ? params.to : 1;\n for (i = 0; i <= to; i++) {\n result[i] = TreeUtilities_merge({}, defaults, isObject(converted[i]) ? converted[i] : {});\n }\n }\n return result;\n}\n/**\n * @private\n * @todo Combine buildTree and buildNode with setTreeValues\n * @todo Remove logic from Treemap and make it utilize this mixin.\n */\nfunction setTreeValues(tree, options) {\n var before = options.before,\n idRoot = options.idRoot,\n mapIdToNode = options.mapIdToNode,\n nodeRoot = mapIdToNode[idRoot],\n levelIsConstant = (options.levelIsConstant !== false),\n points = options.points,\n point = points[tree.i],\n optionsPoint = point && point.options || {},\n children = [];\n var childrenTotal = 0;\n tree.levelDynamic = tree.level - (levelIsConstant ? 0 : nodeRoot.level);\n tree.name = TreeUtilities_pick(point && point.name, '');\n tree.visible = (idRoot === tree.id ||\n options.visible === true);\n if (typeof before === 'function') {\n tree = before(tree, options);\n }\n // First give the children some values\n tree.children.forEach(function (child, i) {\n var newOptions = TreeUtilities_extend({},\n options);\n TreeUtilities_extend(newOptions, {\n index: i,\n siblings: tree.children.length,\n visible: tree.visible\n });\n child = setTreeValues(child, newOptions);\n children.push(child);\n if (child.visible) {\n childrenTotal += child.val;\n }\n });\n // Set the values\n var value = TreeUtilities_pick(optionsPoint.value,\n childrenTotal);\n tree.visible = value >= 0 && (childrenTotal > 0 || tree.visible);\n tree.children = children;\n tree.childrenTotal = childrenTotal;\n tree.isLeaf = tree.visible && !childrenTotal;\n tree.val = value;\n return tree;\n}\n/**\n * Update the rootId property on the series. Also makes sure that it is\n * accessible to exporting.\n *\n * @private\n *\n * @param {Object} series\n * The series to operate on.\n *\n * @return {string}\n * Returns the resulting rootId after update.\n */\nfunction updateRootId(series) {\n var rootId,\n options;\n if (isObject(series)) {\n // Get the series options.\n options = isObject(series.options) ? series.options : {};\n // Calculate the rootId.\n rootId = TreeUtilities_pick(series.rootNode, options.rootId, '');\n // Set rootId on series.userOptions to pick it up in exporting.\n if (isObject(series.userOptions)) {\n series.userOptions.rootId = rootId;\n }\n // Set rootId on series to pick it up on next update.\n series.rootNode = rootId;\n }\n return rootId;\n}\n/**\n * Get the node width, which relies on the plot width and the nodeDistance\n * option.\n *\n * @private\n */\nfunction getNodeWidth(series, columnCount) {\n var chart = series.chart,\n options = series.options,\n _a = options.nodeDistance,\n nodeDistance = _a === void 0 ? 0 : _a,\n _b = options.nodeWidth,\n nodeWidth = _b === void 0 ? 0 : _b,\n _c = chart.plotSizeX,\n plotSizeX = _c === void 0 ? 1 : _c;\n // Node width auto means they are evenly distributed along the width of\n // the plot area\n if (nodeWidth === 'auto') {\n if (typeof nodeDistance === 'string' && /%$/.test(nodeDistance)) {\n var fraction = parseFloat(nodeDistance) / 100,\n total = columnCount + fraction * (columnCount - 1);\n return plotSizeX / total;\n }\n var nDistance = Number(nodeDistance);\n return ((plotSizeX + nDistance) /\n (columnCount || 1)) - nDistance;\n }\n return TreeUtilities_relativeLength(nodeWidth, plotSizeX);\n}\n/* *\n *\n * Default Export\n *\n * */\nvar TreeUtilities = {\n getColor: getColor,\n getLevelOptions: getLevelOptions,\n getNodeWidth: getNodeWidth,\n setTreeValues: setTreeValues,\n updateRootId: updateRootId\n};\n/* harmony default export */ var Series_TreeUtilities = (TreeUtilities);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"SVGElement\"],\"commonjs\":[\"highcharts\",\"SVGElement\"],\"commonjs2\":[\"highcharts\",\"SVGElement\"],\"root\":[\"Highcharts\",\"SVGElement\"]}\nvar highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_ = __webpack_require__(28);\nvar highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_default = /*#__PURE__*/__webpack_require__.n(highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_);\n;// ./code/es5/es-modules/Extensions/TextPath.js\n/* *\n *\n * Highcharts module with textPath functionality.\n *\n * (c) 2009-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar deg2rad = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).deg2rad;\nvar addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, TextPath_merge = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).merge, uniqueKey = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).uniqueKey, TextPath_defined = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defined, TextPath_extend = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).extend;\n/**\n * Set a text path for a `text` or `label` element, allowing the text to\n * flow along a path.\n *\n * In order to unset the path for an existing element, call `setTextPath`\n * with `{ enabled: false }` as the second argument.\n *\n * Text path support is not bundled into `highcharts.js`, and requires the\n * `modules/textpath.js` file. However, it is included in the script files of\n * those series types that use it by default\n *\n * @sample highcharts/members/renderer-textpath/ Text path demonstrated\n *\n * @function Highcharts.SVGElement#setTextPath\n *\n * @param {Highcharts.SVGElement|undefined} path\n * Path to follow. If undefined, it allows changing options for the\n * existing path.\n *\n * @param {Highcharts.DataLabelsTextPathOptionsObject} textPathOptions\n * Options.\n *\n * @return {Highcharts.SVGElement} Returns the SVGElement for chaining.\n */\nfunction setTextPath(path, textPathOptions) {\n var _this = this;\n // Defaults\n textPathOptions = TextPath_merge(true, {\n enabled: true,\n attributes: {\n dy: -5,\n startOffset: '50%',\n textAnchor: 'middle'\n }\n }, textPathOptions);\n var url = this.renderer.url,\n textWrapper = this.text || this,\n textPath = textWrapper.textPath,\n attributes = textPathOptions.attributes,\n enabled = textPathOptions.enabled;\n path = path || (textPath && textPath.path);\n // Remove previously added event\n if (textPath) {\n textPath.undo();\n }\n if (path && enabled) {\n var undo = addEvent(textWrapper, 'afterModifyTree',\n function (e) {\n if (path && enabled) {\n // Set ID for the path\n var textPathId = path.attr('id');\n if (!textPathId) {\n path.attr('id', textPathId = uniqueKey());\n }\n // Set attributes for the <text>\n var textAttribs = {\n // `dx`/`dy` options must by set on <text> (parent), the\n // rest should be set on <textPath>\n x: 0,\n y: 0\n };\n if (TextPath_defined(attributes.dx)) {\n textAttribs.dx = attributes.dx;\n delete attributes.dx;\n }\n if (TextPath_defined(attributes.dy)) {\n textAttribs.dy = attributes.dy;\n delete attributes.dy;\n }\n textWrapper.attr(textAttribs);\n // Handle label properties\n _this.attr({ transform: '' });\n if (_this.box) {\n _this.box = _this.box.destroy();\n }\n // Wrap the nodes in a textPath\n var children = e.nodes.slice(0);\n e.nodes.length = 0;\n e.nodes[0] = {\n tagName: 'textPath',\n attributes: TextPath_extend(attributes, {\n 'text-anchor': attributes.textAnchor,\n href: \"\" + url + \"#\".concat(textPathId)\n }),\n children: children\n };\n }\n });\n // Set the reference\n textWrapper.textPath = { path: path, undo: undo };\n }\n else {\n textWrapper.attr({ dx: 0, dy: 0 });\n delete textWrapper.textPath;\n }\n if (this.added) {\n // Rebuild text after added\n textWrapper.textCache = '';\n this.renderer.buildText(textWrapper);\n }\n return this;\n}\n/**\n * Attach a polygon to a bounding box if the element contains a textPath.\n *\n * @function Highcharts.SVGElement#setPolygon\n *\n * @param {any} event\n * An event containing a bounding box object\n *\n * @return {Highcharts.BBoxObject} Returns the bounding box object.\n */\nfunction setPolygon(event) {\n var _a;\n var bBox = event.bBox,\n tp = (_a = this.element) === null || _a === void 0 ? void 0 : _a.querySelector('textPath');\n if (tp) {\n var polygon = [], _b = this.renderer.fontMetrics(this.element), b_1 = _b.b, h = _b.h, descender_1 = h - b_1, lineCleanerRegex = new RegExp('(<tspan>|' +\n '<tspan(?!\\\\sclass=\"highcharts-br\")[^>]*>|' +\n '<\\\\/tspan>)', 'g'), lines = tp\n .innerHTML\n .replace(lineCleanerRegex, '')\n .split(/<tspan class=\"highcharts-br\"[^>]*>/), numOfLines = lines.length;\n // Calculate top and bottom coordinates for\n // either the start or the end of a single\n // character, and append it to the polygon.\n var appendTopAndBottom = function (charIndex,\n positionOfChar) {\n var x = positionOfChar.x,\n y = positionOfChar.y,\n rotation = (tp.getRotationOfChar(charIndex) - 90) * deg2rad,\n cosRot = Math.cos(rotation),\n sinRot = Math.sin(rotation);\n return [\n [\n x - descender_1 * cosRot,\n y - descender_1 * sinRot\n ],\n [\n x + b_1 * cosRot,\n y + b_1 * sinRot\n ]\n ];\n };\n for (var i = 0, lineIndex = 0; lineIndex < numOfLines; lineIndex++) {\n var line = lines[lineIndex],\n lineLen = line.length;\n for (var lineCharIndex = 0; lineCharIndex < lineLen; lineCharIndex += 5) {\n try {\n var srcCharIndex = (i +\n lineCharIndex +\n lineIndex),\n _c = appendTopAndBottom(srcCharIndex,\n tp.getStartPositionOfChar(srcCharIndex)),\n lower = _c[0],\n upper = _c[1];\n if (lineCharIndex === 0) {\n polygon.push(upper);\n polygon.push(lower);\n }\n else {\n if (lineIndex === 0) {\n polygon.unshift(upper);\n }\n if (lineIndex === numOfLines - 1) {\n polygon.push(lower);\n }\n }\n }\n catch (e) {\n // Safari fails on getStartPositionOfChar even if the\n // character is within the `textContent.length`\n break;\n }\n }\n i += lineLen - 1;\n try {\n var srcCharIndex = i + lineIndex,\n charPos = tp.getEndPositionOfChar(srcCharIndex),\n _d = appendTopAndBottom(srcCharIndex,\n charPos),\n lower = _d[0],\n upper = _d[1];\n polygon.unshift(upper);\n polygon.unshift(lower);\n }\n catch (e) {\n // Safari fails on getStartPositionOfChar even if the character\n // is within the `textContent.length`\n break;\n }\n }\n // Close it\n if (polygon.length) {\n polygon.push(polygon[0].slice());\n }\n bBox.polygon = polygon;\n }\n return bBox;\n}\n/**\n * Draw text along a textPath for a dataLabel.\n *\n * @function Highcharts.SVGElement#setTextPath\n *\n * @param {any} event\n * An event containing label options\n *\n * @return {void}\n */\nfunction drawTextPath(event) {\n var _a;\n var labelOptions = event.labelOptions,\n point = event.point,\n textPathOptions = (labelOptions[point.formatPrefix + 'TextPath'] ||\n labelOptions.textPath);\n if (textPathOptions && !labelOptions.useHTML) {\n this.setTextPath(((_a = point.getDataLabelPath) === null || _a === void 0 ? void 0 : _a.call(point, this)) || point.graphic, textPathOptions);\n if (point.dataLabelPath &&\n !textPathOptions.enabled) {\n // Clean the DOM\n point.dataLabelPath = (point.dataLabelPath.destroy());\n }\n }\n}\nfunction compose(SVGElementClass) {\n addEvent(SVGElementClass, 'afterGetBBox', setPolygon);\n addEvent(SVGElementClass, 'beforeAddingDataLabel', drawTextPath);\n var svgElementProto = SVGElementClass.prototype;\n if (!svgElementProto.setTextPath) {\n svgElementProto.setTextPath = setTextPath;\n }\n}\nvar TextPath = {\n compose: compose\n};\n/* harmony default export */ var Extensions_TextPath = (TextPath);\n\n;// ./code/es5/es-modules/Series/Sankey/SankeySeries.js\n/* *\n *\n * Sankey diagram module\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar SankeySeries_extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d,\n b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d,\n b) { d.__proto__ = b; }) ||\n function (d,\n b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\nvar SankeySeries_a = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes, SankeySeries_ColumnSeries = SankeySeries_a.column, LineSeries = SankeySeries_a.line;\n\nvar color = (highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default()).parse;\n\nvar SankeySeries_getLevelOptions = Series_TreeUtilities.getLevelOptions, SankeySeries_getNodeWidth = Series_TreeUtilities.getNodeWidth;\n\nvar clamp = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).clamp, crisp = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).crisp, SankeySeries_extend = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).extend, SankeySeries_isObject = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isObject, SankeySeries_merge = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).merge, SankeySeries_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick, SankeySeries_relativeLength = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).relativeLength, stableSort = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).stableSort;\n\n\nExtensions_TextPath.compose((highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_default()));\n/* *\n *\n * Class\n *\n * */\n/**\n * @private\n * @class\n * @name Highcharts.seriesTypes.sankey\n *\n * @augments Highcharts.Series\n */\nvar SankeySeries = /** @class */ (function (_super) {\n SankeySeries_extends(SankeySeries, _super);\n function SankeySeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /* *\n *\n * Static Functions\n *\n * */\n /**\n * @private\n */\n SankeySeries.getDLOptions = function (params) {\n var optionsPoint = (SankeySeries_isObject(params.optionsPoint) ?\n params.optionsPoint.dataLabels :\n {}),\n optionsLevel = (SankeySeries_isObject(params.level) ?\n params.level.dataLabels :\n {}),\n options = SankeySeries_merge({\n style: {}\n },\n optionsLevel,\n optionsPoint);\n return options;\n };\n /* *\n *\n * Functions\n *\n * */\n /**\n * Create node columns by analyzing the nodes and the relations between\n * incoming and outgoing links.\n * @private\n */\n SankeySeries.prototype.createNodeColumns = function () {\n var columns = [];\n for (var _i = 0, _a = this.nodes; _i < _a.length; _i++) {\n var node = _a[_i];\n node.setNodeColumn();\n if (!columns[node.column]) {\n columns[node.column] =\n Sankey_SankeyColumnComposition.compose([], this);\n }\n columns[node.column].push(node);\n }\n // Fill in empty columns (#8865)\n for (var i = 0; i < columns.length; i++) {\n if (typeof columns[i] === 'undefined') {\n columns[i] =\n Sankey_SankeyColumnComposition.compose([], this);\n }\n }\n return columns;\n };\n /**\n * Order the nodes, starting with the root node(s). (#9818)\n * @private\n */\n SankeySeries.prototype.order = function (node, level) {\n var series = this;\n // Prevents circular recursion:\n if (typeof node.level === 'undefined') {\n node.level = level;\n for (var _i = 0, _a = node.linksFrom; _i < _a.length; _i++) {\n var link = _a[_i];\n if (link.toNode) {\n series.order(link.toNode, level + 1);\n }\n }\n }\n };\n /**\n * Extend generatePoints by adding the nodes, which are Point objects\n * but pushed to the this.nodes array.\n * @private\n */\n SankeySeries.prototype.generatePoints = function () {\n Series_NodesComposition.generatePoints.apply(this, arguments);\n if (this.orderNodes) {\n for (var _i = 0, _a = this.nodes; _i < _a.length; _i++) {\n var node = _a[_i];\n // Identify the root node(s)\n if (node.linksTo.length === 0) {\n // Start by the root node(s) and recursively set the level\n // on all following nodes.\n this.order(node, 0);\n }\n }\n stableSort(this.nodes, function (a, b) { return (a.level - b.level); });\n }\n };\n /**\n * Overridable function to get node padding, overridden in dependency\n * wheel series type.\n * @private\n */\n SankeySeries.prototype.getNodePadding = function () {\n var nodePadding = this.options.nodePadding || 0;\n // If the number of columns is so great that they will overflow with\n // the given nodePadding, we sacrifice the padding in order to\n // render all nodes within the plot area (#11917).\n if (this.nodeColumns) {\n var maxLength = this.nodeColumns.reduce(function (acc,\n col) { return Math.max(acc,\n col.length); }, 0);\n if (maxLength * nodePadding > this.chart.plotSizeY) {\n nodePadding = this.chart.plotSizeY / maxLength;\n }\n }\n return nodePadding;\n };\n /**\n * Define hasData function for non-cartesian series.\n * @private\n * @return {boolean}\n * Returns true if the series has points at all.\n */\n SankeySeries.prototype.hasData = function () {\n return !!this.dataTable.rowCount;\n };\n /**\n * Return the presentational attributes.\n * @private\n */\n SankeySeries.prototype.pointAttribs = function (point, state) {\n if (!point) {\n return {};\n }\n var series = this,\n level = point.isNode ? point.level : point.fromNode.level,\n levelOptions = series.mapOptionsToLevel[level || 0] || {},\n options = point.options,\n stateOptions = (levelOptions.states && levelOptions.states[state || '']) || {},\n values = [\n 'colorByPoint',\n 'borderColor',\n 'borderWidth',\n 'linkOpacity',\n 'opacity'\n ].reduce(function (obj,\n key) {\n obj[key] = SankeySeries_pick(stateOptions[key],\n options[key],\n levelOptions[key],\n series.options[key]);\n return obj;\n }, {}), color = SankeySeries_pick(stateOptions.color, options.color, values.colorByPoint ? point.color : levelOptions.color);\n // Node attributes\n if (point.isNode) {\n return {\n fill: color,\n stroke: values.borderColor,\n 'stroke-width': values.borderWidth,\n opacity: values.opacity\n };\n }\n // Link attributes\n return {\n fill: highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default().parse(color).setOpacity(values.linkOpacity).get()\n };\n };\n SankeySeries.prototype.drawTracker = function () {\n SankeySeries_ColumnSeries.prototype.drawTracker.call(this, this.points);\n SankeySeries_ColumnSeries.prototype.drawTracker.call(this, this.nodes);\n };\n SankeySeries.prototype.drawPoints = function () {\n SankeySeries_ColumnSeries.prototype.drawPoints.call(this, this.points);\n SankeySeries_ColumnSeries.prototype.drawPoints.call(this, this.nodes);\n };\n SankeySeries.prototype.drawDataLabels = function () {\n SankeySeries_ColumnSeries.prototype.drawDataLabels.call(this, this.points);\n SankeySeries_ColumnSeries.prototype.drawDataLabels.call(this, this.nodes);\n };\n /**\n * Run pre-translation by generating the nodeColumns.\n * @private\n */\n SankeySeries.prototype.translate = function () {\n this.generatePoints();\n this.nodeColumns = this.createNodeColumns();\n var series = this,\n chart = this.chart,\n options = this.options,\n nodeColumns = this.nodeColumns,\n columnCount = nodeColumns.length;\n this.nodeWidth = SankeySeries_getNodeWidth(this, columnCount);\n this.nodePadding = this.getNodePadding();\n // Find out how much space is needed. Base it on the translation\n // factor of the most spacious column.\n this.translationFactor = nodeColumns.reduce(function (translationFactor, column) { return Math.min(translationFactor, column.sankeyColumn.getTranslationFactor(series)); }, Infinity);\n this.colDistance =\n (chart.plotSizeX - this.nodeWidth -\n options.borderWidth) / Math.max(1, nodeColumns.length - 1);\n // Calculate level options used in sankey and organization\n series.mapOptionsToLevel = SankeySeries_getLevelOptions({\n // NOTE: if support for allowTraversingTree is added, then from\n // should be the level of the root node.\n from: 1,\n levels: options.levels,\n to: nodeColumns.length - 1, // Height of the tree\n defaults: {\n borderColor: options.borderColor,\n borderRadius: options.borderRadius, // Organization series\n borderWidth: options.borderWidth,\n color: series.color,\n colorByPoint: options.colorByPoint,\n // NOTE: if support for allowTraversingTree is added, then\n // levelIsConstant should be optional.\n levelIsConstant: true,\n linkColor: options.linkColor, // Organization series\n linkLineWidth: options.linkLineWidth, // Organization series\n linkOpacity: options.linkOpacity,\n states: options.states\n }\n });\n // First translate all nodes so we can use them when drawing links\n for (var _i = 0, nodeColumns_1 = nodeColumns; _i < nodeColumns_1.length; _i++) {\n var column = nodeColumns_1[_i];\n for (var _a = 0, column_1 = column; _a < column_1.length; _a++) {\n var node = column_1[_a];\n series.translateNode(node, column);\n }\n }\n // Then translate links\n for (var _b = 0, _c = this.nodes; _b < _c.length; _b++) {\n var node = _c[_b];\n // Translate the links from this node\n for (var _d = 0, _e = node.linksFrom; _d < _e.length; _d++) {\n var linkPoint = _e[_d];\n // If weight is 0 - don't render the link path #12453,\n // render null points (for organization chart)\n if ((linkPoint.weight || linkPoint.isNull) && linkPoint.to) {\n series.translateLink(linkPoint);\n linkPoint.allowShadow = false;\n }\n }\n }\n };\n /**\n * Run translation operations for one link.\n * @private\n */\n SankeySeries.prototype.translateLink = function (point) {\n var getY = function (node,\n fromOrTo) {\n var linkTop = (node.offset(point,\n fromOrTo) *\n translationFactor);\n var y = Math.min(node.nodeY + linkTop, \n // Prevent links from spilling below the node (#12014)\n node.nodeY + (node.shapeArgs && node.shapeArgs.height || 0) - linkHeight);\n return y;\n };\n var fromNode = point.fromNode,\n toNode = point.toNode,\n chart = this.chart,\n inverted = chart.inverted,\n translationFactor = this.translationFactor,\n options = this.options,\n linkColorMode = SankeySeries_pick(point.linkColorMode,\n options.linkColorMode),\n curvy = ((chart.inverted ? -this.colDistance : this.colDistance) *\n options.curveFactor),\n nodeLeft = fromNode.nodeX,\n right = toNode.nodeX,\n outgoing = point.outgoing;\n var linkHeight = Math.max(point.weight * translationFactor, this.options.minLinkWidth), fromY = getY(fromNode, 'linksFrom'), toY = getY(toNode, 'linksTo'), nodeW = this.nodeWidth, straight = right > nodeLeft + nodeW;\n if (chart.inverted) {\n fromY = chart.plotSizeY - fromY;\n toY = (chart.plotSizeY || 0) - toY;\n nodeW = -nodeW;\n linkHeight = -linkHeight;\n straight = nodeLeft > right;\n }\n point.shapeType = 'path';\n point.linkBase = [\n fromY,\n fromY + linkHeight,\n toY,\n toY + linkHeight\n ];\n // Links going from left to right\n if (straight && typeof toY === 'number') {\n point.shapeArgs = {\n d: [\n ['M', nodeLeft + nodeW, fromY],\n [\n 'C',\n nodeLeft + nodeW + curvy,\n fromY,\n right - curvy,\n toY,\n right,\n toY\n ],\n ['L', right + (outgoing ? nodeW : 0), toY + linkHeight / 2],\n ['L', right, toY + linkHeight],\n [\n 'C',\n right - curvy,\n toY + linkHeight,\n nodeLeft + nodeW + curvy,\n fromY + linkHeight,\n nodeLeft + nodeW, fromY + linkHeight\n ],\n ['Z']\n ]\n };\n // Experimental: Circular links pointing backwards. In\n // v6.1.0 this breaks the rendering completely, so even\n // this experimental rendering is an improvement. #8218.\n // @todo\n // - Make room for the link in the layout\n // - Automatically determine if the link should go up or\n // down.\n }\n else if (typeof toY === 'number') {\n var bend = 20,\n vDist = chart.plotHeight - fromY - linkHeight,\n x1 = right - bend - linkHeight,\n x2 = right - bend,\n x3 = right,\n x4 = nodeLeft + nodeW,\n x5 = x4 + bend,\n x6 = x5 + linkHeight,\n fy1 = fromY,\n fy2 = fromY + linkHeight,\n fy3 = fy2 + bend,\n y4 = fy3 + vDist,\n y5 = y4 + bend,\n y6 = y5 + linkHeight,\n ty1 = toY,\n ty2 = ty1 + linkHeight,\n ty3 = ty2 + bend,\n cfy1 = fy2 - linkHeight * 0.7,\n cy2 = y5 + linkHeight * 0.7,\n cty1 = ty2 - linkHeight * 0.7,\n cx1 = x3 - linkHeight * 0.7,\n cx2 = x4 + linkHeight * 0.7;\n point.shapeArgs = {\n d: [\n ['M', x4, fy1],\n ['C', cx2, fy1, x6, cfy1, x6, fy3],\n ['L', x6, y4],\n ['C', x6, cy2, cx2, y6, x4, y6],\n ['L', x3, y6],\n ['C', cx1, y6, x1, cy2, x1, y4],\n ['L', x1, ty3],\n ['C', x1, cty1, cx1, ty1, x3, ty1],\n ['L', x3, ty2],\n ['C', x2, ty2, x2, ty2, x2, ty3],\n ['L', x2, y4],\n ['C', x2, y5, x2, y5, x3, y5],\n ['L', x4, y5],\n ['C', x5, y5, x5, y5, x5, y4],\n ['L', x5, fy3],\n ['C', x5, fy2, x5, fy2, x4, fy2],\n ['Z']\n ]\n };\n }\n // Place data labels in the middle\n point.dlBox = {\n x: nodeLeft + (right - nodeLeft + nodeW) / 2,\n y: fromY + (toY - fromY) / 2,\n height: linkHeight,\n width: 0\n };\n // And set the tooltip anchor in the middle\n point.tooltipPos = chart.inverted ? [\n chart.plotSizeY - point.dlBox.y - linkHeight / 2,\n chart.plotSizeX - point.dlBox.x\n ] : [\n point.dlBox.x,\n point.dlBox.y + linkHeight / 2\n ];\n // Pass test in drawPoints. plotX/Y needs to be defined for dataLabels.\n // #15863\n point.y = point.plotY = 1;\n point.x = point.plotX = 1;\n if (!point.options.color) {\n if (linkColorMode === 'from') {\n point.color = fromNode.color;\n }\n else if (linkColorMode === 'to') {\n point.color = toNode.color;\n }\n else if (linkColorMode === 'gradient') {\n var fromColor = color(fromNode.color).get(),\n toColor = color(toNode.color).get();\n point.color = {\n linearGradient: {\n x1: 1,\n x2: 0,\n y1: 0,\n y2: 0\n },\n stops: [\n [0, inverted ? fromColor : toColor],\n [1, inverted ? toColor : fromColor]\n ]\n };\n }\n }\n };\n /**\n * Run translation operations for one node.\n * @private\n */\n SankeySeries.prototype.translateNode = function (node, column) {\n var translationFactor = this.translationFactor,\n chart = this.chart,\n options = this.options,\n borderRadius = options.borderRadius,\n _a = options.borderWidth,\n borderWidth = _a === void 0 ? 0 : _a,\n sum = node.getSum(),\n nodeHeight = Math.max(Math.round(sum * translationFactor),\n this.options.minLinkWidth),\n nodeWidth = Math.round(this.nodeWidth),\n nodeOffset = column.sankeyColumn.offset(node,\n translationFactor),\n fromNodeTop = crisp(SankeySeries_pick(nodeOffset.absoluteTop, (column.sankeyColumn.top(translationFactor) +\n nodeOffset.relativeTop)),\n borderWidth),\n left = crisp(this.colDistance * node.column +\n borderWidth / 2,\n borderWidth) + SankeySeries_relativeLength(node.options[chart.inverted ?\n 'offsetVertical' :\n 'offsetHorizontal'] || 0,\n nodeWidth),\n nodeLeft = chart.inverted ?\n chart.plotSizeX - left :\n left;\n node.sum = sum;\n // If node sum is 0, don't render the rect #12453\n if (sum) {\n // Draw the node\n node.shapeType = 'roundedRect';\n node.nodeX = nodeLeft;\n node.nodeY = fromNodeTop;\n var x = nodeLeft,\n y = fromNodeTop,\n width = node.options.width || options.width || nodeWidth,\n height = node.options.height || options.height || nodeHeight;\n // Border radius should not greater than half the height of the node\n // #18956\n var r = clamp(SankeySeries_relativeLength((typeof borderRadius === 'object' ?\n borderRadius.radius :\n borderRadius || 0),\n width), 0,\n nodeHeight / 2);\n if (chart.inverted) {\n x = nodeLeft - nodeWidth;\n y = chart.plotSizeY - fromNodeTop - nodeHeight;\n width = node.options.height || options.height || nodeWidth;\n height = node.options.width || options.width || nodeHeight;\n }\n // Calculate data label options for the point\n node.dlOptions = SankeySeries.getDLOptions({\n level: this.mapOptionsToLevel[node.level],\n optionsPoint: node.options\n });\n // Pass test in drawPoints\n node.plotX = 1;\n node.plotY = 1;\n // Set the anchor position for tooltips\n node.tooltipPos = chart.inverted ? [\n chart.plotSizeY - y - height / 2,\n chart.plotSizeX - x - width / 2\n ] : [\n x + width / 2,\n y + height / 2\n ];\n node.shapeArgs = {\n x: x,\n y: y,\n width: width,\n height: height,\n r: r,\n display: node.hasShape() ? '' : 'none'\n };\n }\n else {\n node.dlOptions = {\n enabled: false\n };\n }\n };\n /* *\n *\n * Static Properties\n *\n * */\n SankeySeries.defaultOptions = SankeySeries_merge(SankeySeries_ColumnSeries.defaultOptions, Sankey_SankeySeriesDefaults);\n return SankeySeries;\n}(SankeySeries_ColumnSeries));\nSeries_NodesComposition.compose(Sankey_SankeyPoint, SankeySeries);\nSankeySeries_extend(SankeySeries.prototype, {\n animate: LineSeries.prototype.animate,\n // Create a single node that holds information on incoming and outgoing\n // links.\n createNode: Series_NodesComposition.createNode,\n forceDL: true,\n invertible: true,\n isCartesian: false,\n orderNodes: true,\n noSharedTooltip: true,\n pointArrayMap: ['from', 'to', 'weight'],\n pointClass: Sankey_SankeyPoint,\n searchPoint: (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).noop\n});\nhighcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default().registerSeriesType('sankey', SankeySeries);\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Sankey_SankeySeries = ((/* unused pure expression or super */ null && (SankeySeries)));\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * A node in a sankey diagram.\n *\n * @interface Highcharts.SankeyNodeObject\n * @extends Highcharts.Point\n * @product highcharts\n */ /**\n* The color of the auto generated node.\n*\n* @name Highcharts.SankeyNodeObject#color\n* @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n*/ /**\n* The color index of the auto generated node, especially for use in styled\n* mode.\n*\n* @name Highcharts.SankeyNodeObject#colorIndex\n* @type {number}\n*/ /**\n* An optional column index of where to place the node. The default behaviour is\n* to place it next to the preceding node.\n*\n* @see {@link https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/plotoptions/sankey-node-column/|Highcharts-Demo:}\n* Specified node column\n*\n* @name Highcharts.SankeyNodeObject#column\n* @type {number}\n* @since 6.0.5\n*/ /**\n* The id of the auto-generated node, refering to the `from` or `to` setting of\n* the link.\n*\n* @name Highcharts.SankeyNodeObject#id\n* @type {string}\n*/ /**\n* The name to display for the node in data labels and tooltips. Use this when\n* the name is different from the `id`. Where the id must be unique for each\n* node, this is not necessary for the name.\n*\n* @see {@link https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/css/sankey/|Highcharts-Demo:}\n* Sankey diagram with node options\n*\n* @name Highcharts.SankeyNodeObject#name\n* @type {string}\n* @product highcharts\n*/ /**\n* This option is deprecated, use\n* {@link Highcharts.SankeyNodeObject#offsetHorizontal} and\n* {@link Highcharts.SankeyNodeObject#offsetVertical} instead.\n*\n* The vertical offset of a node in terms of weight. Positive values shift the\n* node downwards, negative shift it upwards.\n*\n* If a percentage string is given, the node is offset by the percentage of the\n* node size plus `nodePadding`.\n*\n* @see {@link https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/plotoptions/sankey-node-column/|Highcharts-Demo:}\n* Specified node offset\n*\n* @deprecated\n* @name Highcharts.SankeyNodeObject#offset\n* @type {number|string}\n* @default 0\n* @since 6.0.5\n*/ /**\n* The horizontal offset of a node. Positive values shift the node right,\n* negative shift it left.\n*\n* If a percentage string is given, the node is offset by the percentage of the\n* node size.\n*\n* @see {@link https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/plotoptions/sankey-node-column/|Highcharts-Demo:}\n* Specified node offset\n*\n* @name Highcharts.SankeyNodeObject#offsetHorizontal\n* @type {number|string}\n* @since 9.3.0\n*/ /**\n* The vertical offset of a node. Positive values shift the node down,\n* negative shift it up.\n*\n* If a percentage string is given, the node is offset by the percentage of the\n* node size.\n*\n* @see {@link https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/plotoptions/sankey-node-column/|Highcharts-Demo:}\n* Specified node offset\n*\n* @name Highcharts.SankeyNodeObject#offsetVertical\n* @type {number|string}\n* @since 9.3.0\n*/\n/**\n * Formatter callback function.\n *\n * @callback Highcharts.SeriesSankeyDataLabelsFormatterCallbackFunction\n *\n * @param {Highcharts.Point} this\n * Data label context to format\n *\n * @return {string|undefined}\n * Formatted data label text\n */\n''; // Detach doclets above\n\n;// ./code/es5/es-modules/masters/modules/sankey.src.js\n\n\n\n\n/* harmony default export */ var sankey_src = ((highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()));\n\n__webpack_exports__ = __webpack_exports__[\"default\"];\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});"],"names":["root","factory","exports","module","require","define","amd","__WEBPACK_EXTERNAL_MODULE__944__","__WEBPACK_EXTERNAL_MODULE__512__","__WEBPACK_EXTERNAL_MODULE__260__","__WEBPACK_EXTERNAL_MODULE__620__","__WEBPACK_EXTERNAL_MODULE__28__","extendStatics","SankeyColumnComposition","SankeyColumnAdditions","NodesComposition","__webpack_modules__","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","n","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","__webpack_exports__","sankey_src","highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_","highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default","highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_","highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default","_a","series","seriesProto","pointProto","pointClass","defined","extend","find","merge","pick","destroy","data","concat","points","nodes","apply","arguments","setData","forEach","node","length","setNodeState","state","args","others","isNode","linksTo","linksFrom","fromNode","toNode","linkOrNode","setState","graphic","updateNode","options","redraw","animation","runEvent","_this","dataLength","linkConfig","index","update","nodeIndex","reduce","prevIndex","id","nodeConfig","push","chart","compose","PointClass","SeriesClass","createNode","findById","newNode_1","className","y","getSum","sumTo","sumFrom","link","weight","Math","max","offset","point","coll","i","hasShape","outgoing","formatPrefix","name","mass","marker","radius","generatePoints","nodeLookup","colorCounter","level","from","styledMode","colorIndex","color","to","Series_NodesComposition","highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_","highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default","__extends","b","setPrototypeOf","__proto__","Array","p","__","constructor","create","ColumnSeries","seriesTypes","column","SankeyPoint_defined","SankeyPoint","_super","applyOptions","x","getClassName","getFromNode","fromColumn","setNodeColumn","isValid","Sankey_SankeySeriesDefaults","borderWidth","colorByPoint","curveFactor","dataLabels","enabled","backgroundColor","crop","nodeFormat","nodeFormatter","format","formatter","inside","inactiveOtherPoints","linkColorMode","linkOpacity","opacity","minLinkWidth","nodeAlignment","nodeWidth","nodePadding","nodeDistance","showInLegend","states","hover","inactive","duration","tooltip","followPointer","headerFormat","pointFormat","SankeyColumnComposition_defined","getAlignFactor","relativeLength","sankeyColumnArray","sankeyColumn","getTranslationFactor","skipPoint","slice","factor","remainingHeight","plotSizeY","sum","splice","_i","nodes_1","top","height","left","equalNodes","maxNodesLength","inverted","plotHeight","plotWidth","width","plotSizeX","round","totalNodeOffset","is","hangsFrom","absoluteTop","nodeY","directionOffset","optionOffset","relativeTop","Sankey_SankeyColumnComposition","highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_","highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default","isArray","isNumber","isObject","TreeUtilities_merge","TreeUtilities_pick","TreeUtilities_relativeLength","params","defaults","converted","levels","result","item","levelIsConstant","columnCount","_b","_c","test","fraction","parseFloat","nDistance","Number","highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_","highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_default","deg2rad","addEvent","TextPath_merge","uniqueKey","TextPath_defined","TextPath_extend","setTextPath","path","textPathOptions","attributes","dy","startOffset","textAnchor","url","renderer","textWrapper","text","textPath","undo","e","textPathId","attr","textAttribs","dx","transform","box","children","tagName","href","added","textCache","buildText","setPolygon","event","bBox","tp","element","querySelector","polygon","fontMetrics","b_1","descender_1","h","lineCleanerRegex","RegExp","lines","innerHTML","replace","split","numOfLines","appendTopAndBottom","charIndex","positionOfChar","rotation","getRotationOfChar","cosRot","cos","sinRot","sin","lineIndex","lineLen","line","lineCharIndex","srcCharIndex","getStartPositionOfChar","lower","upper","unshift","charPos","getEndPositionOfChar","_d","drawTextPath","labelOptions","useHTML","getDataLabelPath","dataLabelPath","SankeySeries_extends","TypeError","String","SankeySeries_a","SankeySeries_ColumnSeries","LineSeries","parse","clamp","crisp","SankeySeries_extend","SankeySeries_isObject","SankeySeries_merge","SankeySeries_pick","SankeySeries_relativeLength","stableSort","Extensions_TextPath","SVGElementClass","svgElementProto","SankeySeries","getDLOptions","optionsPoint","style","createNodeColumns","columns","order","orderNodes","getNodePadding","nodeColumns","maxLength","acc","col","hasData","dataTable","rowCount","pointAttribs","levelOptions","mapOptionsToLevel","stateOptions","values","fill","stroke","borderColor","setOpacity","drawTracker","drawPoints","drawDataLabels","translate","SankeySeries_getNodeWidth","translationFactor","min","Infinity","colDistance","SankeySeries_getLevelOptions","borderRadius","linkColor","linkLineWidth","nodeColumns_1","column_1","translateNode","_e","linkPoint","isNull","translateLink","allowShadow","getY","fromOrTo","linkTop","shapeArgs","linkHeight","curvy","nodeLeft","nodeX","right","fromY","toY","nodeW","straight","shapeType","linkBase","vDist","x1","x2","x4","x5","x6","fy1","fy2","fy3","y4","y5","y6","ty1","ty2","ty3","cfy1","cy2","cty1","cx1","x3","cx2","dlBox","tooltipPos","plotY","plotX","fromColor","toColor","linearGradient","y1","y2","stops","nodeHeight","nodeOffset","fromNodeTop","r","dlOptions","display","defaultOptions","animate","forceDL","invertible","isCartesian","noSharedTooltip","pointArrayMap","searchPoint","noop","registerSeriesType"],"mappings":"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"}
Hacked By AnonymousFox1.0, Coded By AnonymousFox