Hacked By AnonymousFox

Current Path : C:/AppServ/www/financial/stacked/code/modules/
Upload File :
Current File : C:/AppServ/www/financial/stacked/code/modules/sankey.js.map

{"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(root[\"_Highcharts\"], root[\"_Highcharts\"][\"SeriesRegistry\"], root[\"_Highcharts\"][\"Point\"], root[\"_Highcharts\"][\"Color\"], root[\"_Highcharts\"][\"SVGElement\"]);\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"highcharts/modules/sankey\", [\"highcharts/highcharts\"], function (amd1) {return factory(amd1,amd1[\"SeriesRegistry\"],amd1[\"Point\"],amd1[\"Color\"],amd1[\"SVGElement\"]);});\n\telse if(typeof exports === 'object')\n\t\texports[\"highcharts/modules/sankey\"] = factory(root[\"_Highcharts\"], root[\"_Highcharts\"][\"SeriesRegistry\"], root[\"_Highcharts\"][\"Point\"], root[\"_Highcharts\"][\"Color\"], root[\"_Highcharts\"][\"SVGElement\"]);\n\telse\n\t\troot[\"Highcharts\"] = factory(root[\"Highcharts\"], root[\"Highcharts\"][\"SeriesRegistry\"], root[\"Highcharts\"][\"Point\"], root[\"Highcharts\"][\"Color\"], root[\"Highcharts\"][\"SVGElement\"]);\n})(typeof window === 'undefined' ? this : window, (__WEBPACK_EXTERNAL_MODULE__944__, __WEBPACK_EXTERNAL_MODULE__512__, __WEBPACK_EXTERNAL_MODULE__260__, __WEBPACK_EXTERNAL_MODULE__620__, __WEBPACK_EXTERNAL_MODULE__28__) => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 620:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__620__;\n\n/***/ }),\n\n/***/ 260:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__260__;\n\n/***/ }),\n\n/***/ 28:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__28__;\n\n/***/ }),\n\n/***/ 512:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__512__;\n\n/***/ }),\n\n/***/ 944:\n/***/ ((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(() => {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = (module) => {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\t() => (module['default']) :\n/******/ \t\t\t\t() => (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(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (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(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (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\": () => (/* 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/es-modules/Series/NodesComposition.js\n/* *\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { series: { prototype: seriesProto, prototype: { pointClass: { prototype: pointProto } } } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default());\n\nconst { defined, extend, find, merge, pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\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        const pointProto = PointClass.prototype, 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        const PointClass = this.pointClass, findById = (nodes, id) => find(nodes, (node) => node.id === id);\n        let node = findById(this.nodes, id), options;\n        if (!node) {\n            options = this.options.nodes && findById(this.options.nodes, id);\n            const newNode = new PointClass(this, extend({\n                className: 'highcharts-node',\n                isNode: true,\n                id: id,\n                y: 1 // Pass isNull test\n            }, options));\n            newNode.linksTo = [];\n            newNode.linksFrom = [];\n            /**\n             * Return the largest sum of either the incoming or outgoing links.\n             * @private\n             */\n            newNode.getSum = function () {\n                let sumTo = 0, sumFrom = 0;\n                newNode.linksTo.forEach((link) => {\n                    sumTo += link.weight || 0;\n                });\n                newNode.linksFrom.forEach((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.offset = function (point, coll) {\n                let offset = 0;\n                for (let i = 0; i < newNode[coll].length; i++) {\n                    if (newNode[coll][i] === point) {\n                        return offset;\n                    }\n                    offset += newNode[coll][i].weight;\n                }\n            };\n            // Return true if the node has a shape, otherwise all links are\n            // outgoing.\n            newNode.hasShape = function () {\n                let outgoing = 0;\n                newNode.linksTo.forEach((link) => {\n                    if (link.outgoing) {\n                        outgoing++;\n                    }\n                });\n                return (!newNode.linksTo.length ||\n                    outgoing !== newNode.linksTo.length);\n            };\n            newNode.index = this.nodes.push(newNode) - 1;\n            node = newNode;\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        const chart = this.chart, 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((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((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((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        const args = arguments, others = this.isNode ? this.linksTo.concat(this.linksFrom) :\n            [this.fromNode, this.toNode];\n        if (state !== 'select') {\n            others.forEach((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        const nodes = this.series.options.nodes, data = this.series.options.data, dataLength = data?.length || 0, linkConfig = 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            const nodeIndex = (nodes || [])\n                .reduce(// Array.findIndex needs a polyfill\n            (prevIndex, n, index) => (this.id === n.id ? index : prevIndex), -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?.[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 */ const 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/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\n\n\nconst { column: ColumnSeries } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes;\n\nconst { defined: SankeyPoint_defined } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Class\n *\n * */\nclass SankeyPoint extends ColumnSeries.prototype.pointClass {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    applyOptions(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    getClassName() {\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    getFromNode() {\n        const node = this;\n        let fromColumn = -1, fromNode;\n        for (let i = 0; i < node.linksTo.length; i++) {\n            const 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, fromColumn };\n    }\n    /**\n     * Calculate node.column if it's not set by user\n     * @private\n     */\n    setNodeColumn() {\n        const 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    isValid() {\n        return this.isNode || typeof this.weight === 'number';\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Sankey_SankeyPoint = (SankeyPoint);\n\n;// ./code/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 */\nconst 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 */ const Sankey_SankeySeriesDefaults = (SankeySeriesDefaults);\n\n;// ./code/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\nconst { defined: SankeyColumnComposition_defined, getAlignFactor, relativeLength } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\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        const 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    class SankeyColumnAdditions {\n        /* *\n         *\n         *  Constructor\n         *\n         * */\n        constructor(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        getTranslationFactor(series) {\n            const column = this.points, nodes = column.slice(), chart = series.chart, minLinkWidth = series.options.minLinkWidth || 0;\n            let skipPoint, factor = 0, i, 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 (const node of nodes) {\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        top(factor) {\n            const series = this.series, nodePadding = series.nodePadding, height = this.points.reduce((height, node) => {\n                if (height > 0) {\n                    height += nodePadding;\n                }\n                const nodeHeight = Math.max(node.getSum() * factor, 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        left(factor) {\n            const series = this.series, chart = series.chart, equalNodes = series.options.equalNodes, maxNodesLength = (chart.inverted ? chart.plotHeight : chart.plotWidth), nodePadding = series.nodePadding, width = this.points.reduce((width, node) => {\n                if (width > 0) {\n                    width += nodePadding;\n                }\n                const nodeWidth = equalNodes ?\n                    maxNodesLength / node.series.nodes.length -\n                        nodePadding :\n                    Math.max(node.getSum() * factor, 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        sum() {\n            return this.points.reduce((sum, node) => (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        offset(node, factor) {\n            const column = this.points, series = this.series, nodePadding = series.nodePadding;\n            let offset = 0, totalNodeOffset;\n            if (series.is('organization') && node.hangsFrom) {\n                return {\n                    absoluteTop: node.hangsFrom.nodeY\n                };\n            }\n            for (let i = 0; i < column.length; i++) {\n                const sum = column[i].getSum();\n                const height = Math.max(sum * factor, series.options.minLinkWidth || 0);\n                const directionOffset = node.options[series.chart.inverted ?\n                    'offsetHorizontal' :\n                    'offsetVertical'], 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    }\n    SankeyColumnComposition.SankeyColumnAdditions = SankeyColumnAdditions;\n})(SankeyColumnComposition || (SankeyColumnComposition = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const 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/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\nconst { extend: TreeUtilities_extend, isArray, isNumber, isObject, merge: TreeUtilities_merge, pick: TreeUtilities_pick, relativeLength: TreeUtilities_relativeLength } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/* eslint-disable valid-jsdoc */\n/**\n * @private\n */\nfunction getColor(node, options) {\n    const index = options.index, mapOptionsToLevel = options.mapOptionsToLevel, parentColor = options.parentColor, parentColorIndex = options.parentColorIndex, series = options.series, colors = options.colors, siblings = options.siblings, points = series.points, chartOptionsChart = series.chart.options.chart;\n    let getColorByPoint, point, level, colorByPoint, colorIndexByPoint, color, colorIndex;\n    /**\n     * @private\n     */\n    const variateColor = (color) => {\n        const 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    const result = {};\n    let defaults, converted, i, from, to, 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((obj, item) => {\n                let level, levelIsConstant, 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    const before = options.before, idRoot = options.idRoot, mapIdToNode = options.mapIdToNode, nodeRoot = mapIdToNode[idRoot], levelIsConstant = (options.levelIsConstant !== false), points = options.points, point = points[tree.i], optionsPoint = point && point.options || {}, children = [];\n    let 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((child, i) => {\n        const newOptions = TreeUtilities_extend({}, 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    const value = TreeUtilities_pick(optionsPoint.value, 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    let rootId, 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    const { chart, options } = series, { nodeDistance = 0, nodeWidth = 0 } = options, { plotSizeX = 1 } = chart;\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            const fraction = parseFloat(nodeDistance) / 100, total = columnCount + fraction * (columnCount - 1);\n            return plotSizeX / total;\n        }\n        const 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 * */\nconst TreeUtilities = {\n    getColor,\n    getLevelOptions,\n    getNodeWidth,\n    setTreeValues,\n    updateRootId\n};\n/* harmony default export */ const 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/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\nconst { deg2rad } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\nconst { addEvent, merge: TextPath_merge, uniqueKey, defined: TextPath_defined, extend: TextPath_extend } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\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    // Defaults\n    textPathOptions = TextPath_merge(true, {\n        enabled: true,\n        attributes: {\n            dy: -5,\n            startOffset: '50%',\n            textAnchor: 'middle'\n        }\n    }, textPathOptions);\n    const url = this.renderer.url, textWrapper = this.text || this, textPath = textWrapper.textPath, { attributes, enabled } = textPathOptions;\n    path = path || (textPath && textPath.path);\n    // Remove previously added event\n    if (textPath) {\n        textPath.undo();\n    }\n    if (path && enabled) {\n        const undo = addEvent(textWrapper, 'afterModifyTree', (e) => {\n            if (path && enabled) {\n                // Set ID for the path\n                let textPathId = path.attr('id');\n                if (!textPathId) {\n                    path.attr('id', textPathId = uniqueKey());\n                }\n                // Set attributes for the <text>\n                const 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                const 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}#${textPathId}`\n                    }),\n                    children\n                };\n            }\n        });\n        // Set the reference\n        textWrapper.textPath = { path, 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    const bBox = event.bBox, tp = this.element?.querySelector('textPath');\n    if (tp) {\n        const polygon = [], { b, h } = this.renderer.fontMetrics(this.element), descender = h - b, 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        const appendTopAndBottom = (charIndex, positionOfChar) => {\n            const { x, y } = positionOfChar, rotation = (tp.getRotationOfChar(charIndex) - 90) * deg2rad, cosRot = Math.cos(rotation), sinRot = Math.sin(rotation);\n            return [\n                [\n                    x - descender * cosRot,\n                    y - descender * sinRot\n                ],\n                [\n                    x + b * cosRot,\n                    y + b * sinRot\n                ]\n            ];\n        };\n        for (let i = 0, lineIndex = 0; lineIndex < numOfLines; lineIndex++) {\n            const line = lines[lineIndex], lineLen = line.length;\n            for (let lineCharIndex = 0; lineCharIndex < lineLen; lineCharIndex += 5) {\n                try {\n                    const srcCharIndex = (i +\n                        lineCharIndex +\n                        lineIndex), [lower, upper] = appendTopAndBottom(srcCharIndex, tp.getStartPositionOfChar(srcCharIndex));\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                const srcCharIndex = i + lineIndex, charPos = tp.getEndPositionOfChar(srcCharIndex), [lower, upper] = appendTopAndBottom(srcCharIndex, charPos);\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    const labelOptions = event.labelOptions, point = event.point, textPathOptions = (labelOptions[point.formatPrefix + 'TextPath'] ||\n        labelOptions.textPath);\n    if (textPathOptions && !labelOptions.useHTML) {\n        this.setTextPath(point.getDataLabelPath?.(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    const svgElementProto = SVGElementClass.prototype;\n    if (!svgElementProto.setTextPath) {\n        svgElementProto.setTextPath = setTextPath;\n    }\n}\nconst TextPath = {\n    compose\n};\n/* harmony default export */ const Extensions_TextPath = (TextPath);\n\n;// ./code/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\n\n\n\n\n\n\nconst { column: SankeySeries_ColumnSeries, line: LineSeries } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes;\n\nconst { parse: color } = (highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default());\n\nconst { getLevelOptions: SankeySeries_getLevelOptions, getNodeWidth: SankeySeries_getNodeWidth } = Series_TreeUtilities;\n\nconst { clamp, crisp, extend: SankeySeries_extend, isObject: SankeySeries_isObject, merge: SankeySeries_merge, pick: SankeySeries_pick, relativeLength: SankeySeries_relativeLength, stableSort } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\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 */\nclass SankeySeries extends SankeySeries_ColumnSeries {\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    static getDLOptions(params) {\n        const optionsPoint = (SankeySeries_isObject(params.optionsPoint) ?\n            params.optionsPoint.dataLabels :\n            {}), optionsLevel = (SankeySeries_isObject(params.level) ?\n            params.level.dataLabels :\n            {}), options = SankeySeries_merge({\n            style: {}\n        }, optionsLevel, 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    createNodeColumns() {\n        const columns = [];\n        for (const node of this.nodes) {\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 (let 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    order(node, level) {\n        const series = this;\n        // Prevents circular recursion:\n        if (typeof node.level === 'undefined') {\n            node.level = level;\n            for (const link of node.linksFrom) {\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    generatePoints() {\n        Series_NodesComposition.generatePoints.apply(this, arguments);\n        if (this.orderNodes) {\n            for (const node of this.nodes) {\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, (a, b) => (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    getNodePadding() {\n        let 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            const maxLength = this.nodeColumns.reduce((acc, col) => Math.max(acc, 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    hasData() {\n        return !!this.dataTable.rowCount;\n    }\n    /**\n     * Return the presentational attributes.\n     * @private\n     */\n    pointAttribs(point, state) {\n        if (!point) {\n            return {};\n        }\n        const series = this, level = point.isNode ? point.level : point.fromNode.level, levelOptions = series.mapOptionsToLevel[level || 0] || {}, options = point.options, stateOptions = (levelOptions.states && levelOptions.states[state || '']) || {}, values = [\n            'colorByPoint',\n            'borderColor',\n            'borderWidth',\n            'linkOpacity',\n            'opacity'\n        ].reduce((obj, key) => {\n            obj[key] = SankeySeries_pick(stateOptions[key], options[key], levelOptions[key], 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    drawTracker() {\n        SankeySeries_ColumnSeries.prototype.drawTracker.call(this, this.points);\n        SankeySeries_ColumnSeries.prototype.drawTracker.call(this, this.nodes);\n    }\n    drawPoints() {\n        SankeySeries_ColumnSeries.prototype.drawPoints.call(this, this.points);\n        SankeySeries_ColumnSeries.prototype.drawPoints.call(this, this.nodes);\n    }\n    drawDataLabels() {\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    translate() {\n        this.generatePoints();\n        this.nodeColumns = this.createNodeColumns();\n        const series = this, chart = this.chart, options = this.options, nodeColumns = this.nodeColumns, 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((translationFactor, column) => 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 (const column of nodeColumns) {\n            for (const node of column) {\n                series.translateNode(node, column);\n            }\n        }\n        // Then translate links\n        for (const node of this.nodes) {\n            // Translate the links from this node\n            for (const linkPoint of node.linksFrom) {\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    translateLink(point) {\n        const getY = (node, fromOrTo) => {\n            const linkTop = (node.offset(point, fromOrTo) *\n                translationFactor);\n            const 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        const fromNode = point.fromNode, toNode = point.toNode, chart = this.chart, { inverted } = chart, translationFactor = this.translationFactor, options = this.options, linkColorMode = SankeySeries_pick(point.linkColorMode, options.linkColorMode), curvy = ((chart.inverted ? -this.colDistance : this.colDistance) *\n            options.curveFactor), nodeLeft = fromNode.nodeX, right = toNode.nodeX, outgoing = point.outgoing;\n        let 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            const bend = 20, vDist = chart.plotHeight - fromY - linkHeight, x1 = right - bend - linkHeight, x2 = right - bend, x3 = right, x4 = nodeLeft + nodeW, x5 = x4 + bend, x6 = x5 + linkHeight, fy1 = fromY, fy2 = fromY + linkHeight, fy3 = fy2 + bend, y4 = fy3 + vDist, y5 = y4 + bend, y6 = y5 + linkHeight, ty1 = toY, ty2 = ty1 + linkHeight, ty3 = ty2 + bend, cfy1 = fy2 - linkHeight * 0.7, cy2 = y5 + linkHeight * 0.7, cty1 = ty2 - linkHeight * 0.7, cx1 = x3 - linkHeight * 0.7, 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                const fromColor = color(fromNode.color).get(), 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    translateNode(node, column) {\n        const translationFactor = this.translationFactor, chart = this.chart, options = this.options, { borderRadius, borderWidth = 0 } = options, sum = node.getSum(), nodeHeight = Math.max(Math.round(sum * translationFactor), this.options.minLinkWidth), nodeWidth = Math.round(this.nodeWidth), nodeOffset = column.sankeyColumn.offset(node, translationFactor), fromNodeTop = crisp(SankeySeries_pick(nodeOffset.absoluteTop, (column.sankeyColumn.top(translationFactor) +\n            nodeOffset.relativeTop)), borderWidth), left = crisp(this.colDistance * node.column +\n            borderWidth / 2, borderWidth) + SankeySeries_relativeLength(node.options[chart.inverted ?\n            'offsetVertical' :\n            'offsetHorizontal'] || 0, nodeWidth), 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            let x = nodeLeft, y = fromNodeTop, width = node.options.width || options.width || nodeWidth, height = node.options.height || options.height || nodeHeight;\n            // Border radius should not greater than half the height of the node\n            // #18956\n            const r = clamp(SankeySeries_relativeLength((typeof borderRadius === 'object' ?\n                borderRadius.radius :\n                borderRadius || 0), width), 0, 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,\n                y,\n                width,\n                height,\n                r,\n                display: node.hasShape() ? '' : 'none'\n            };\n        }\n        else {\n            node.dlOptions = {\n                enabled: false\n            };\n        }\n    }\n}\n/* *\n *\n *  Static Properties\n *\n * */\nSankeySeries.defaultOptions = SankeySeries_merge(SankeySeries_ColumnSeries.defaultOptions, Sankey_SankeySeriesDefaults);\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 */ const 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/es-modules/masters/modules/sankey.src.js\n\n\n\n\n/* harmony default export */ const 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","define","amd","amd1","window","__WEBPACK_EXTERNAL_MODULE__944__","__WEBPACK_EXTERNAL_MODULE__512__","__WEBPACK_EXTERNAL_MODULE__260__","__WEBPACK_EXTERNAL_MODULE__620__","__WEBPACK_EXTERNAL_MODULE__28__","NodesComposition","SankeyColumnComposition","__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","series","seriesProto","pointClass","pointProto","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","dataLength","linkConfig","index","update","nodeIndex","reduce","prevIndex","id","nodeConfig","push","chart","compose","PointClass","SeriesClass","createNode","findById","newNode","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","column","ColumnSeries","seriesTypes","SankeyPoint_defined","SankeyPoint","applyOptions","x","getClassName","getFromNode","fromColumn","setNodeColumn","isValid","SankeyColumnComposition_defined","getAlignFactor","relativeLength","sankeyColumnArray","sankeyColumn","SankeyColumnAdditions","constructor","getTranslationFactor","slice","minLinkWidth","skipPoint","factor","remainingHeight","plotSizeY","borderWidth","nodePadding","sum","splice","top","height","nodeAlignment","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","TreeUtilities_extend","isArray","isNumber","isObject","TreeUtilities_merge","TreeUtilities_pick","TreeUtilities_relativeLength","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","enabled","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","b","h","fontMetrics","descender","lineCleanerRegex","RegExp","lines","innerHTML","replace","split","numOfLines","appendTopAndBottom","charIndex","positionOfChar","rotation","getRotationOfChar","cosRot","cos","sinRot","sin","lineIndex","lineLen","line","lineCharIndex","srcCharIndex","lower","upper","getStartPositionOfChar","unshift","charPos","getEndPositionOfChar","drawTextPath","labelOptions","useHTML","getDataLabelPath","dataLabelPath","SankeySeries_ColumnSeries","LineSeries","parse","getLevelOptions","SankeySeries_getLevelOptions","getNodeWidth","SankeySeries_getNodeWidth","getColor","colorByPoint","colorIndexByPoint","mapOptionsToLevel","parentColor","parentColorIndex","colors","siblings","chartOptionsChart","colorCount","variateColor","colorVariation","brighten","params","defaults","converted","levels","result","item","levelIsConstant","columnCount","nodeDistance","nodeWidth","test","fraction","parseFloat","nDistance","Number","setTreeValues","tree","before","idRoot","nodeRoot","mapIdToNode","optionsPoint","childrenTotal","levelDynamic","visible","child","newOptions","val","value","isLeaf","updateRootId","rootId","rootNode","userOptions","clamp","crisp","SankeySeries_extend","SankeySeries_isObject","SankeySeries_merge","SankeySeries_pick","SankeySeries_relativeLength","stableSort","Extensions_TextPath","SVGElementClass","svgElementProto","SankeySeries","getDLOptions","dataLabels","style","createNodeColumns","columns","order","orderNodes","getNodePadding","nodeColumns","maxLength","acc","col","hasData","dataTable","rowCount","pointAttribs","levelOptions","stateOptions","states","values","fill","stroke","borderColor","opacity","setOpacity","linkOpacity","drawTracker","drawPoints","drawDataLabels","translate","translationFactor","min","Infinity","colDistance","borderRadius","linkColor","linkLineWidth","translateNode","linkPoint","isNull","translateLink","allowShadow","getY","fromOrTo","linkTop","shapeArgs","linkHeight","linkColorMode","curvy","curveFactor","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","backgroundColor","crop","nodeFormat","nodeFormatter","format","formatter","inside","inactiveOtherPoints","showInLegend","hover","inactive","duration","tooltip","followPointer","headerFormat","pointFormat","animate","forceDL","invertible","isCartesian","noSharedTooltip","pointArrayMap","searchPoint","noop","registerSeriesType"],"mappings":"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"}

Hacked By AnonymousFox1.0, Coded By AnonymousFox