Hacked By AnonymousFox

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

{"version":3,"sources":["<anon>"],"sourcesContent":["/**\n * @license Highcharts Gantt JS v12.1.2 (2025-01-09)\n * @module highcharts/modules/pathfinder\n * @requires highcharts\n *\n * Pathfinder\n *\n * (c) 2016-2024 Øystein Moseng\n *\n * License: www.highcharts.com/license\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"highcharts\"), require(\"highcharts\")[\"Point\"]);\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"highcharts/modules/pathfinder\", [[\"highcharts/highcharts\"], [\"highcharts/highcharts\",\"Point\"]], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"highcharts/modules/pathfinder\"] = factory(require(\"highcharts\"), require(\"highcharts\")[\"Point\"]);\n\telse\n\t\troot[\"Highcharts\"] = factory(root[\"Highcharts\"], root[\"Highcharts\"][\"Point\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE__944__, __WEBPACK_EXTERNAL_MODULE__260__) {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 260:\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__260__;\n\n/***/ }),\n\n/***/ 944:\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__944__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  \"default\": function() { return /* binding */ pathfinder_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;// ./code/es5/es-modules/Gantt/Connection.js\n/* *\n *\n *  (c) 2016 Highsoft AS\n *  Authors: Øystein Moseng, Lars A. V. Cabrera\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar defined = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defined, error = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).error, merge = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).merge, objectEach = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).objectEach;\n/* *\n *\n *  Constants\n *\n * */\nvar deg2rad = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).deg2rad, max = Math.max, min = Math.min;\n/* *\n *\n *  Class\n *\n * */\n/**\n * The Connection class. Used internally to represent a connection between two\n * points.\n *\n * @private\n * @class\n * @name Highcharts.Connection\n *\n * @param {Highcharts.Point} from\n *        Connection runs from this Point.\n *\n * @param {Highcharts.Point} to\n *        Connection runs to this Point.\n *\n * @param {Highcharts.ConnectorsOptions} [options]\n *        Connection options.\n */\nvar Connection = /** @class */ (function () {\n    function Connection(from, to, options) {\n        this.init(from, to, options);\n    }\n    /**\n     * Initialize the Connection object. Used as constructor only.\n     *\n     * @function Highcharts.Connection#init\n     *\n     * @param {Highcharts.Point} from\n     *        Connection runs from this Point.\n     *\n     * @param {Highcharts.Point} to\n     *        Connection runs to this Point.\n     *\n     * @param {Highcharts.ConnectorsOptions} [options]\n     *        Connection options.\n     */\n    Connection.prototype.init = function (from, to, options) {\n        this.fromPoint = from;\n        this.toPoint = to;\n        this.options = options;\n        this.chart = from.series.chart;\n        this.pathfinder = this.chart.pathfinder;\n    };\n    /**\n     * Add (or update) this connection's path on chart. Stores reference to the\n     * created element on this.graphics.path.\n     *\n     * @function Highcharts.Connection#renderPath\n     *\n     * @param {Highcharts.SVGPathArray} path\n     *        Path to render, in array format. E.g. ['M', 0, 0, 'L', 10, 10]\n     *\n     * @param {Highcharts.SVGAttributes} [attribs]\n     *        SVG attributes for the path.\n     *\n     * @param {Partial<Highcharts.AnimationOptionsObject>} [animation]\n     *        Animation options for the rendering.\n     */\n    Connection.prototype.renderPath = function (path, attribs) {\n        var connection = this,\n            chart = this.chart,\n            styledMode = chart.styledMode,\n            pathfinder = this.pathfinder,\n            anim = {};\n        var pathGraphic = connection.graphics && connection.graphics.path;\n        // Add the SVG element of the pathfinder group if it doesn't exist\n        if (!pathfinder.group) {\n            pathfinder.group = chart.renderer.g()\n                .addClass('highcharts-pathfinder-group')\n                .attr({ zIndex: -1 })\n                .add(chart.seriesGroup);\n        }\n        // Shift the group to compensate for plot area.\n        // Note: Do this always (even when redrawing a path) to avoid issues\n        // when updating chart in a way that changes plot metrics.\n        pathfinder.group.translate(chart.plotLeft, chart.plotTop);\n        // Create path if does not exist\n        if (!(pathGraphic && pathGraphic.renderer)) {\n            pathGraphic = chart.renderer.path()\n                .add(pathfinder.group);\n            if (!styledMode) {\n                pathGraphic.attr({\n                    opacity: 0\n                });\n            }\n        }\n        // Set path attribs and animate to the new path\n        pathGraphic.attr(attribs);\n        anim.d = path;\n        if (!styledMode) {\n            anim.opacity = 1;\n        }\n        pathGraphic.animate(anim);\n        // Store reference on connection\n        this.graphics = this.graphics || {};\n        this.graphics.path = pathGraphic;\n    };\n    /**\n     * Calculate and add marker graphics for connection to the chart. The\n     * created/updated elements are stored on this.graphics.start and\n     * this.graphics.end.\n     *\n     * @function Highcharts.Connection#addMarker\n     *\n     * @param {string} type\n     *        Marker type, either 'start' or 'end'.\n     *\n     * @param {Highcharts.ConnectorsMarkerOptions} options\n     *        All options for this marker. Not calculated or merged with other\n     *        options.\n     *\n     * @param {Highcharts.SVGPathArray} path\n     *        Connection path in array format. This is used to calculate the\n     *        rotation angle of the markers.\n     */\n    Connection.prototype.addMarker = function (type, options, path) {\n        var connection = this,\n            chart = connection.fromPoint.series.chart,\n            pathfinder = chart.pathfinder,\n            renderer = chart.renderer,\n            point = (type === 'start' ?\n                connection.fromPoint :\n                connection.toPoint),\n            anchor = point.getPathfinderAnchorPoint(options);\n        var markerVector,\n            radians,\n            rotation,\n            box,\n            width,\n            height,\n            pathVector,\n            segment;\n        if (!options.enabled) {\n            return;\n        }\n        // Last vector before start/end of path, used to get angle\n        if (type === 'start') {\n            segment = path[1];\n        }\n        else { // 'end'\n            segment = path[path.length - 2];\n        }\n        if (segment && segment[0] === 'M' || segment[0] === 'L') {\n            pathVector = {\n                x: segment[1],\n                y: segment[2]\n            };\n            // Get angle between pathVector and anchor point and use it to\n            // create marker position.\n            radians = point.getRadiansToVector(pathVector, anchor);\n            markerVector = point.getMarkerVector(radians, options.radius, anchor);\n            // Rotation of marker is calculated from angle between pathVector\n            // and markerVector.\n            // (Note:\n            //  Used to recalculate radians between markerVector and pathVector,\n            //  but this should be the same as between pathVector and anchor.)\n            rotation = -radians / deg2rad;\n            if (options.width && options.height) {\n                width = options.width;\n                height = options.height;\n            }\n            else {\n                width = height = options.radius * 2;\n            }\n            // Add graphics object if it does not exist\n            connection.graphics = connection.graphics || {};\n            box = {\n                x: markerVector.x - (width / 2),\n                y: markerVector.y - (height / 2),\n                width: width,\n                height: height,\n                rotation: rotation,\n                rotationOriginX: markerVector.x,\n                rotationOriginY: markerVector.y\n            };\n            if (!connection.graphics[type]) {\n                // Create new marker element\n                connection.graphics[type] = renderer\n                    .symbol(options.symbol)\n                    .addClass('highcharts-point-connecting-path-' + type + '-marker' +\n                    ' highcharts-color-' + this.fromPoint.colorIndex)\n                    .attr(box)\n                    .add(pathfinder.group);\n                if (!renderer.styledMode) {\n                    connection.graphics[type].attr({\n                        fill: options.color || connection.fromPoint.color,\n                        stroke: options.lineColor,\n                        'stroke-width': options.lineWidth,\n                        opacity: 0\n                    })\n                        .animate({\n                        opacity: 1\n                    }, point.series.options.animation);\n                }\n            }\n            else {\n                connection.graphics[type].animate(box);\n            }\n        }\n    };\n    /**\n     * Calculate and return connection path.\n     * Note: Recalculates chart obstacles on demand if they aren't calculated.\n     *\n     * @function Highcharts.Connection#getPath\n     *\n     * @param {Highcharts.ConnectorsOptions} options\n     *        Connector options. Not calculated or merged with other options.\n     *\n     * @return {object|undefined}\n     *         Calculated SVG path data in array format.\n     */\n    Connection.prototype.getPath = function (options) {\n        var pathfinder = this.pathfinder,\n            chart = this.chart,\n            algorithm = pathfinder.algorithms[options.type];\n        var chartObstacles = pathfinder.chartObstacles;\n        if (typeof algorithm !== 'function') {\n            error('\"' + options.type + '\" is not a Pathfinder algorithm.');\n            return {\n                path: [],\n                obstacles: []\n            };\n        }\n        // This function calculates obstacles on demand if they don't exist\n        if (algorithm.requiresObstacles && !chartObstacles) {\n            chartObstacles =\n                pathfinder.chartObstacles =\n                    pathfinder.getChartObstacles(options);\n            // If the algorithmMargin was computed, store the result in default\n            // options.\n            chart.options.connectors.algorithmMargin =\n                options.algorithmMargin;\n            // Cache some metrics too\n            pathfinder.chartObstacleMetrics =\n                pathfinder.getObstacleMetrics(chartObstacles);\n        }\n        // Get the SVG path\n        return algorithm(\n        // From\n        this.fromPoint.getPathfinderAnchorPoint(options.startMarker), \n        // To\n        this.toPoint.getPathfinderAnchorPoint(options.endMarker), merge({\n            chartObstacles: chartObstacles,\n            lineObstacles: pathfinder.lineObstacles || [],\n            obstacleMetrics: pathfinder.chartObstacleMetrics,\n            hardBounds: {\n                xMin: 0,\n                xMax: chart.plotWidth,\n                yMin: 0,\n                yMax: chart.plotHeight\n            },\n            obstacleOptions: {\n                margin: options.algorithmMargin\n            },\n            startDirectionX: pathfinder.getAlgorithmStartDirection(options.startMarker)\n        }, options));\n    };\n    /**\n     * (re)Calculate and (re)draw the connection.\n     *\n     * @function Highcharts.Connection#render\n     */\n    Connection.prototype.render = function () {\n        var connection = this,\n            fromPoint = connection.fromPoint,\n            series = fromPoint.series,\n            chart = series.chart,\n            pathfinder = chart.pathfinder,\n            attribs = {};\n        var options = merge(chart.options.connectors,\n            series.options.connectors,\n            fromPoint.options.connectors,\n            connection.options);\n        // Set path attribs\n        if (!chart.styledMode) {\n            attribs.stroke = options.lineColor || fromPoint.color;\n            attribs['stroke-width'] = options.lineWidth;\n            if (options.dashStyle) {\n                attribs.dashstyle = options.dashStyle;\n            }\n        }\n        attribs['class'] = // eslint-disable-line dot-notation\n            'highcharts-point-connecting-path ' +\n                'highcharts-color-' + fromPoint.colorIndex;\n        options = merge(attribs, options);\n        // Set common marker options\n        if (!defined(options.marker.radius)) {\n            options.marker.radius = min(max(Math.ceil((options.algorithmMargin || 8) / 2) - 1, 1), 5);\n        }\n        // Get the path\n        var pathResult = connection.getPath(options),\n            path = pathResult.path;\n        // Always update obstacle storage with obstacles from this path.\n        // We don't know if future calls will need this for their algorithm.\n        if (pathResult.obstacles) {\n            pathfinder.lineObstacles =\n                pathfinder.lineObstacles || [];\n            pathfinder.lineObstacles =\n                pathfinder.lineObstacles.concat(pathResult.obstacles);\n        }\n        // Add the calculated path to the pathfinder group\n        connection.renderPath(path, attribs);\n        // Render the markers\n        connection.addMarker('start', merge(options.marker, options.startMarker), path);\n        connection.addMarker('end', merge(options.marker, options.endMarker), path);\n    };\n    /**\n     * Destroy connection by destroying the added graphics elements.\n     *\n     * @function Highcharts.Connection#destroy\n     */\n    Connection.prototype.destroy = function () {\n        if (this.graphics) {\n            objectEach(this.graphics, function (val) {\n                val.destroy();\n            });\n            delete this.graphics;\n        }\n    };\n    return Connection;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Gantt_Connection = (Connection);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * The default pathfinder algorithm to use for a chart. It is possible to define\n * your own algorithms by adding them to the\n * `Highcharts.Pathfinder.prototype.algorithms`\n * object before the chart has been created.\n *\n * The default algorithms are as follows:\n *\n * `straight`:      Draws a straight line between the connecting\n *                  points. Does not avoid other points when drawing.\n *\n * `simpleConnect`: Finds a path between the points using right angles\n *                  only. Takes only starting/ending points into\n *                  account, and will not avoid other points.\n *\n * `fastAvoid`:     Finds a path between the points using right angles\n *                  only. Will attempt to avoid other points, but its\n *                  focus is performance over accuracy. Works well with\n *                  less dense datasets.\n *\n * @typedef {\"fastAvoid\"|\"simpleConnect\"|\"straight\"|string} Highcharts.PathfinderTypeValue\n */\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Series/PathUtilities.js\n/* *\n *\n *  (c) 2010-2024 Pawel Lysy\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar getLinkPath = {\n    'default': getDefaultPath,\n    straight: getStraightPath,\n    curved: getCurvedPath\n};\n/**\n *\n */\nfunction getDefaultPath(pathParams) {\n    var x1 = pathParams.x1,\n        y1 = pathParams.y1,\n        x2 = pathParams.x2,\n        y2 = pathParams.y2,\n        _a = pathParams.width,\n        width = _a === void 0 ? 0 : _a,\n        _b = pathParams.inverted,\n        inverted = _b === void 0 ? false : _b,\n        radius = pathParams.radius,\n        parentVisible = pathParams.parentVisible;\n    var path = [\n            ['M',\n        x1,\n        y1],\n            ['L',\n        x1,\n        y1],\n            ['C',\n        x1,\n        y1,\n        x1,\n        y2,\n        x1,\n        y2],\n            ['L',\n        x1,\n        y2],\n            ['C',\n        x1,\n        y1,\n        x1,\n        y2,\n        x1,\n        y2],\n            ['L',\n        x1,\n        y2]\n        ];\n    return parentVisible ?\n        applyRadius([\n            ['M', x1, y1],\n            ['L', x1 + width * (inverted ? -0.5 : 0.5), y1],\n            ['L', x1 + width * (inverted ? -0.5 : 0.5), y2],\n            ['L', x2, y2]\n        ], radius) :\n        path;\n}\n/**\n *\n */\nfunction getStraightPath(pathParams) {\n    var x1 = pathParams.x1,\n        y1 = pathParams.y1,\n        x2 = pathParams.x2,\n        y2 = pathParams.y2,\n        _a = pathParams.width,\n        width = _a === void 0 ? 0 : _a,\n        _b = pathParams.inverted,\n        inverted = _b === void 0 ? false : _b,\n        parentVisible = pathParams.parentVisible;\n    return parentVisible ? [\n        ['M', x1, y1],\n        ['L', x1 + width * (inverted ? -1 : 1), y2],\n        ['L', x2, y2]\n    ] : [\n        ['M', x1, y1],\n        ['L', x1, y2],\n        ['L', x1, y2]\n    ];\n}\n/**\n *\n */\nfunction getCurvedPath(pathParams) {\n    var x1 = pathParams.x1,\n        y1 = pathParams.y1,\n        x2 = pathParams.x2,\n        y2 = pathParams.y2,\n        _a = pathParams.offset,\n        offset = _a === void 0 ? 0 : _a,\n        _b = pathParams.width,\n        width = _b === void 0 ? 0 : _b,\n        _c = pathParams.inverted,\n        inverted = _c === void 0 ? false : _c,\n        parentVisible = pathParams.parentVisible;\n    return parentVisible ?\n        [\n            ['M', x1, y1],\n            [\n                'C',\n                x1 + offset,\n                y1,\n                x1 - offset + width * (inverted ? -1 : 1),\n                y2,\n                x1 + width * (inverted ? -1 : 1),\n                y2\n            ],\n            ['L', x2, y2]\n        ] :\n        [\n            ['M', x1, y1],\n            ['C', x1, y1, x1, y2, x1, y2],\n            ['L', x2, y2]\n        ];\n}\n/**\n * General function to apply corner radius to a path\n * @private\n */\nfunction applyRadius(path, r) {\n    var d = [];\n    for (var i = 0; i < path.length; i++) {\n        var x = path[i][1];\n        var y = path[i][2];\n        if (typeof x === 'number' && typeof y === 'number') {\n            // MoveTo\n            if (i === 0) {\n                d.push(['M', x, y]);\n            }\n            else if (i === path.length - 1) {\n                d.push(['L', x, y]);\n                // CurveTo\n            }\n            else if (r) {\n                var prevSeg = path[i - 1];\n                var nextSeg = path[i + 1];\n                if (prevSeg && nextSeg) {\n                    var x1 = prevSeg[1],\n                        y1 = prevSeg[2],\n                        x2 = nextSeg[1],\n                        y2 = nextSeg[2];\n                    // Only apply to breaks\n                    if (typeof x1 === 'number' &&\n                        typeof x2 === 'number' &&\n                        typeof y1 === 'number' &&\n                        typeof y2 === 'number' &&\n                        x1 !== x2 &&\n                        y1 !== y2) {\n                        var directionX = x1 < x2 ? 1 : -1,\n                            directionY = y1 < y2 ? 1 : -1;\n                        d.push([\n                            'L',\n                            x - directionX * Math.min(Math.abs(x - x1), r),\n                            y - directionY * Math.min(Math.abs(y - y1), r)\n                        ], [\n                            'C',\n                            x,\n                            y,\n                            x,\n                            y,\n                            x + directionX * Math.min(Math.abs(x - x2), r),\n                            y + directionY * Math.min(Math.abs(y - y2), r)\n                        ]);\n                    }\n                }\n                // LineTo\n            }\n            else {\n                d.push(['L', x, y]);\n            }\n        }\n    }\n    return d;\n}\nvar PathUtilities = {\n    applyRadius: applyRadius,\n    getLinkPath: getLinkPath\n};\n/* harmony default export */ var Series_PathUtilities = (PathUtilities);\n\n;// ./code/es5/es-modules/Gantt/PathfinderAlgorithms.js\n/* *\n *\n *  (c) 2016 Highsoft AS\n *  Author: Øystein Moseng\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick;\n/* *\n *\n *  Constants\n *\n * */\nvar PathfinderAlgorithms_min = Math.min, PathfinderAlgorithms_max = Math.max, abs = Math.abs;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Get index of last obstacle before xMin. Employs a type of binary search, and\n * thus requires that obstacles are sorted by xMin value.\n *\n * @private\n * @function findLastObstacleBefore\n *\n * @param {Array<object>} obstacles\n *        Array of obstacles to search in.\n *\n * @param {number} xMin\n *        The xMin threshold.\n *\n * @param {number} [startIx]\n *        Starting index to search from. Must be within array range.\n *\n * @return {number}\n *         The index of the last obstacle element before xMin.\n */\nfunction findLastObstacleBefore(obstacles, xMin, startIx) {\n    var min = xMin - 0.0000001; // Make sure we include all obstacles at xMin\n        var left = startIx || 0, // Left limit\n        right = obstacles.length - 1, // Right limit\n        cursor,\n        cmp;\n    while (left <= right) {\n        cursor = (right + left) >> 1;\n        cmp = min - obstacles[cursor].xMin;\n        if (cmp > 0) {\n            left = cursor + 1;\n        }\n        else if (cmp < 0) {\n            right = cursor - 1;\n        }\n        else {\n            return cursor;\n        }\n    }\n    return left > 0 ? left - 1 : 0;\n}\n/**\n * Test if a point lays within an obstacle.\n *\n * @private\n * @function pointWithinObstacle\n *\n * @param {Object} obstacle\n *        Obstacle to test.\n *\n * @param {Highcharts.Point} point\n *        Point with x/y props.\n *\n * @return {boolean}\n *         Whether point is within the obstacle or not.\n */\nfunction pointWithinObstacle(obstacle, point) {\n    return (point.x <= obstacle.xMax &&\n        point.x >= obstacle.xMin &&\n        point.y <= obstacle.yMax &&\n        point.y >= obstacle.yMin);\n}\n/**\n * Find the index of an obstacle that wraps around a point.\n * Returns -1 if not found.\n *\n * @private\n * @function findObstacleFromPoint\n *\n * @param {Array<object>} obstacles\n *        Obstacles to test.\n *\n * @param {Highcharts.Point} point\n *        Point with x/y props.\n *\n * @return {number}\n *         Ix of the obstacle in the array, or -1 if not found.\n */\nfunction findObstacleFromPoint(obstacles, point) {\n    var i = findLastObstacleBefore(obstacles,\n        point.x + 1) + 1;\n    while (i--) {\n        if (obstacles[i].xMax >= point.x &&\n            // Optimization using lazy evaluation\n            pointWithinObstacle(obstacles[i], point)) {\n            return i;\n        }\n    }\n    return -1;\n}\n/**\n * Get SVG path array from array of line segments.\n *\n * @private\n * @function pathFromSegments\n *\n * @param {Array<object>} segments\n *        The segments to build the path from.\n *\n * @return {Highcharts.SVGPathArray}\n *         SVG path array as accepted by the SVG Renderer.\n */\nfunction pathFromSegments(segments) {\n    var path = [];\n    if (segments.length) {\n        path.push(['M', segments[0].start.x, segments[0].start.y]);\n        for (var i = 0; i < segments.length; ++i) {\n            path.push(['L', segments[i].end.x, segments[i].end.y]);\n        }\n    }\n    return path;\n}\n/**\n * Limits obstacle max/mins in all directions to bounds. Modifies input\n * obstacle.\n *\n * @private\n * @function limitObstacleToBounds\n *\n * @param {Object} obstacle\n *        Obstacle to limit.\n *\n * @param {Object} bounds\n *        Bounds to use as limit.\n *\n * @return {void}\n */\nfunction limitObstacleToBounds(obstacle, bounds) {\n    obstacle.yMin = PathfinderAlgorithms_max(obstacle.yMin, bounds.yMin);\n    obstacle.yMax = PathfinderAlgorithms_min(obstacle.yMax, bounds.yMax);\n    obstacle.xMin = PathfinderAlgorithms_max(obstacle.xMin, bounds.xMin);\n    obstacle.xMax = PathfinderAlgorithms_min(obstacle.xMax, bounds.xMax);\n}\n/**\n * Get an SVG path from a starting coordinate to an ending coordinate.\n * Draws a straight line.\n *\n * @function Highcharts.Pathfinder.algorithms.straight\n *\n * @param {Highcharts.PositionObject} start\n *        Starting coordinate, object with x/y props.\n *\n * @param {Highcharts.PositionObject} end\n *        Ending coordinate, object with x/y props.\n *\n * @return {Object}\n *         An object with the SVG path in Array form as accepted by the SVG\n *         renderer, as well as an array of new obstacles making up this\n *         path.\n */\nfunction straight(start, end) {\n    return {\n        path: [\n            ['M', start.x, start.y],\n            ['L', end.x, end.y]\n        ],\n        obstacles: [{ start: start, end: end }]\n    };\n}\n/**\n * Find a path from a starting coordinate to an ending coordinate, using\n * right angles only, and taking only starting/ending obstacle into\n * consideration.\n *\n * @function Highcharts.Pathfinder.algorithms.simpleConnect\n *\n * @param {Highcharts.PositionObject} start\n *        Starting coordinate, object with x/y props.\n *\n * @param {Highcharts.PositionObject} end\n *        Ending coordinate, object with x/y props.\n *\n * @param {Object} options\n *        Options for the algorithm:\n *        - chartObstacles: Array of chart obstacles to avoid\n *        - startDirectionX: Optional. True if starting in the X direction.\n *          If not provided, the algorithm starts in the direction that is\n *          the furthest between start/end.\n *\n * @return {Object}\n *         An object with the SVG path in Array form as accepted by the SVG\n *         renderer, as well as an array of new obstacles making up this\n *         path.\n */\nvar simpleConnect = function (start, end, options) {\n    var segments = [],\n        chartObstacles = options.chartObstacles,\n        startObstacleIx = findObstacleFromPoint(chartObstacles,\n        start),\n        endObstacleIx = findObstacleFromPoint(chartObstacles,\n        end);\n    var endSegment,\n        dir = pick(options.startDirectionX,\n        abs(end.x - start.x) > abs(end.y - start.y)) ? 'x' : 'y',\n        startObstacle,\n        endObstacle,\n        waypoint,\n        useMax,\n        endPoint;\n    // eslint-disable-next-line valid-jsdoc\n    /**\n     * Return a clone of a point with a property set from a target object,\n     * optionally with an offset\n     * @private\n     */\n    function copyFromPoint(from, fromKey, to, toKey, offset) {\n        var point = {\n                x: from.x,\n                y: from.y\n            };\n        point[fromKey] = to[toKey || fromKey] + (offset || 0);\n        return point;\n    }\n    // eslint-disable-next-line valid-jsdoc\n    /**\n     * Return waypoint outside obstacle.\n     * @private\n     */\n    function getMeOut(obstacle, point, direction) {\n        var useMax = abs(point[direction] - obstacle[direction + 'Min']) >\n                abs(point[direction] - obstacle[direction + 'Max']);\n        return copyFromPoint(point, direction, obstacle, direction + (useMax ? 'Max' : 'Min'), useMax ? 1 : -1);\n    }\n    // Pull out end point\n    if (endObstacleIx > -1) {\n        endObstacle = chartObstacles[endObstacleIx];\n        waypoint = getMeOut(endObstacle, end, dir);\n        endSegment = {\n            start: waypoint,\n            end: end\n        };\n        endPoint = waypoint;\n    }\n    else {\n        endPoint = end;\n    }\n    // If an obstacle envelops the start point, add a segment to get out,\n    // and around it.\n    if (startObstacleIx > -1) {\n        startObstacle = chartObstacles[startObstacleIx];\n        waypoint = getMeOut(startObstacle, start, dir);\n        segments.push({\n            start: start,\n            end: waypoint\n        });\n        // If we are going back again, switch direction to get around start\n        // obstacle.\n        if (\n        // Going towards max from start:\n        waypoint[dir] >= start[dir] ===\n            // Going towards min to end:\n            waypoint[dir] >= endPoint[dir]) {\n            dir = dir === 'y' ? 'x' : 'y';\n            useMax = start[dir] < end[dir];\n            segments.push({\n                start: waypoint,\n                end: copyFromPoint(waypoint, dir, startObstacle, dir + (useMax ? 'Max' : 'Min'), useMax ? 1 : -1)\n            });\n            // Switch direction again\n            dir = dir === 'y' ? 'x' : 'y';\n        }\n    }\n    // We are around the start obstacle. Go towards the end in one\n    // direction.\n    var prevWaypoint = segments.length ?\n            segments[segments.length - 1].end :\n            start;\n    waypoint = copyFromPoint(prevWaypoint, dir, endPoint);\n    segments.push({\n        start: prevWaypoint,\n        end: waypoint\n    });\n    // Final run to end point in the other direction\n    dir = dir === 'y' ? 'x' : 'y';\n    var waypoint2 = copyFromPoint(waypoint,\n        dir,\n        endPoint);\n    segments.push({\n        start: waypoint,\n        end: waypoint2\n    });\n    // Finally add the endSegment\n    segments.push(endSegment);\n    var path = Series_PathUtilities.applyRadius(pathFromSegments(segments),\n        options.radius);\n    return {\n        path: path,\n        obstacles: segments\n    };\n};\nsimpleConnect.requiresObstacles = true;\n/**\n * Find a path from a starting coordinate to an ending coordinate, taking\n * obstacles into consideration. Might not always find the optimal path,\n * but is fast, and usually good enough.\n *\n * @function Highcharts.Pathfinder.algorithms.fastAvoid\n *\n * @param {Highcharts.PositionObject} start\n *        Starting coordinate, object with x/y props.\n *\n * @param {Highcharts.PositionObject} end\n *        Ending coordinate, object with x/y props.\n *\n * @param {Object} options\n *        Options for the algorithm.\n *        - chartObstacles:  Array of chart obstacles to avoid\n *        - lineObstacles:   Array of line obstacles to jump over\n *        - obstacleMetrics: Object with metrics of chartObstacles cached\n *        - hardBounds:      Hard boundaries to not cross\n *        - obstacleOptions: Options for the obstacles, including margin\n *        - startDirectionX: Optional. True if starting in the X direction.\n *                           If not provided, the algorithm starts in the\n *                           direction that is the furthest between\n *                           start/end.\n *\n * @return {Object}\n *         An object with the SVG path in Array form as accepted by the SVG\n *         renderer, as well as an array of new obstacles making up this\n *         path.\n */\nfunction fastAvoid(start, end, options) {\n    /*\n        Algorithm rules/description\n        - Find initial direction\n        - Determine soft/hard max for each direction.\n        - Move along initial direction until obstacle.\n        - Change direction.\n        - If hitting obstacle, first try to change length of previous line\n            before changing direction again.\n\n        Soft min/max x = start/destination x +/- widest obstacle + margin\n        Soft min/max y = start/destination y +/- tallest obstacle + margin\n\n        @todo:\n            - Make retrospective, try changing prev segment to reduce\n                corners\n            - Fix logic for breaking out of end-points - not always picking\n                the best direction currently\n            - When going around the end obstacle we should not always go the\n                shortest route, rather pick the one closer to the end point\n    */\n    var dirIsX = pick(options.startDirectionX,\n        abs(end.x - start.x) > abs(end.y - start.y)),\n        dir = dirIsX ? 'x' : 'y',\n        endSegments = [], \n        // Boundaries to stay within. If beyond soft boundary, prefer to\n        // change direction ASAP. If at hard max, always change immediately.\n        metrics = options.obstacleMetrics,\n        softMinX = PathfinderAlgorithms_min(start.x,\n        end.x) - metrics.maxWidth - 10,\n        softMaxX = PathfinderAlgorithms_max(start.x,\n        end.x) + metrics.maxWidth + 10,\n        softMinY = PathfinderAlgorithms_min(start.y,\n        end.y) - metrics.maxHeight - 10,\n        softMaxY = PathfinderAlgorithms_max(start.y,\n        end.y) + metrics.maxHeight + 10;\n    var segments,\n        useMax,\n        extractedEndPoint,\n        forceObstacleBreak = false, // Used in clearPathTo to keep track of\n        // when to force break through an obstacle.\n        // Obstacles\n        chartObstacles = options.chartObstacles,\n        endObstacleIx = findLastObstacleBefore(chartObstacles,\n        softMaxX);\n    var startObstacleIx = findLastObstacleBefore(chartObstacles,\n        softMinX);\n    // eslint-disable-next-line valid-jsdoc\n    /**\n     * How far can you go between two points before hitting an obstacle?\n     * Does not work for diagonal lines (because it doesn't have to).\n     * @private\n     */\n    function pivotPoint(fromPoint, toPoint, directionIsX) {\n        var searchDirection = fromPoint.x < toPoint.x ? 1 : -1;\n        var firstPoint,\n            lastPoint,\n            highestPoint,\n            lowestPoint;\n        if (fromPoint.x < toPoint.x) {\n            firstPoint = fromPoint;\n            lastPoint = toPoint;\n        }\n        else {\n            firstPoint = toPoint;\n            lastPoint = fromPoint;\n        }\n        if (fromPoint.y < toPoint.y) {\n            lowestPoint = fromPoint;\n            highestPoint = toPoint;\n        }\n        else {\n            lowestPoint = toPoint;\n            highestPoint = fromPoint;\n        }\n        // Go through obstacle range in reverse if toPoint is before\n        // fromPoint in the X-dimension.\n        var i = searchDirection < 0 ?\n                // Searching backwards, start at last obstacle before last point\n                PathfinderAlgorithms_min(findLastObstacleBefore(chartObstacles,\n            lastPoint.x),\n            chartObstacles.length - 1) :\n                // Forwards. Since we're not sorted by xMax, we have to look\n                // at all obstacles.\n                0;\n        // Go through obstacles in this X range\n        while (chartObstacles[i] && (searchDirection > 0 && chartObstacles[i].xMin <= lastPoint.x ||\n            searchDirection < 0 && chartObstacles[i].xMax >= firstPoint.x)) {\n            // If this obstacle is between from and to points in a straight\n            // line, pivot at the intersection.\n            if (chartObstacles[i].xMin <= lastPoint.x &&\n                chartObstacles[i].xMax >= firstPoint.x &&\n                chartObstacles[i].yMin <= highestPoint.y &&\n                chartObstacles[i].yMax >= lowestPoint.y) {\n                if (directionIsX) {\n                    return {\n                        y: fromPoint.y,\n                        x: fromPoint.x < toPoint.x ?\n                            chartObstacles[i].xMin - 1 :\n                            chartObstacles[i].xMax + 1,\n                        obstacle: chartObstacles[i]\n                    };\n                }\n                // Else ...\n                return {\n                    x: fromPoint.x,\n                    y: fromPoint.y < toPoint.y ?\n                        chartObstacles[i].yMin - 1 :\n                        chartObstacles[i].yMax + 1,\n                    obstacle: chartObstacles[i]\n                };\n            }\n            i += searchDirection;\n        }\n        return toPoint;\n    }\n    /**\n     * Decide in which direction to dodge or get out of an obstacle.\n     * Considers desired direction, which way is shortest, soft and hard\n     * bounds.\n     *\n     * (? Returns a string, either xMin, xMax, yMin or yMax.)\n     *\n     * @private\n     * @function\n     *\n     * @param {Object} obstacle\n     *        Obstacle to dodge/escape.\n     *\n     * @param {Object} fromPoint\n     *        Point with x/y props that's dodging/escaping.\n     *\n     * @param {Object} toPoint\n     *        Goal point.\n     *\n     * @param {boolean} dirIsX\n     *        Dodge in X dimension.\n     *\n     * @param {Object} bounds\n     *        Hard and soft boundaries.\n     *\n     * @return {boolean}\n     *         Use max or not.\n     */\n    function getDodgeDirection(obstacle, fromPoint, toPoint, dirIsX, bounds) {\n        var softBounds = bounds.soft, hardBounds = bounds.hard, dir = dirIsX ? 'x' : 'y', toPointMax = { x: fromPoint.x, y: fromPoint.y }, toPointMin = { x: fromPoint.x, y: fromPoint.y }, maxOutOfSoftBounds = obstacle[dir + 'Max'] >=\n                softBounds[dir + 'Max'], minOutOfSoftBounds = obstacle[dir + 'Min'] <=\n                softBounds[dir + 'Min'], maxOutOfHardBounds = obstacle[dir + 'Max'] >=\n                hardBounds[dir + 'Max'], minOutOfHardBounds = obstacle[dir + 'Min'] <=\n                hardBounds[dir + 'Min'], \n            // Find out if we should prefer one direction over the other if\n            // we can choose freely\n            minDistance = abs(obstacle[dir + 'Min'] - fromPoint[dir]), maxDistance = abs(obstacle[dir + 'Max'] - fromPoint[dir]);\n        var // If it's a small difference, pick the one leading towards dest\n            // point. Otherwise pick the shortest distance\n            useMax = abs(minDistance - maxDistance) < 10 ?\n                fromPoint[dir] < toPoint[dir] :\n                maxDistance < minDistance;\n        // Check if we hit any obstacles trying to go around in either\n        // direction.\n        toPointMin[dir] = obstacle[dir + 'Min'];\n        toPointMax[dir] = obstacle[dir + 'Max'];\n        var minPivot = pivotPoint(fromPoint,\n            toPointMin,\n            dirIsX)[dir] !==\n                toPointMin[dir],\n            maxPivot = pivotPoint(fromPoint,\n            toPointMax,\n            dirIsX)[dir] !==\n                toPointMax[dir];\n        useMax = minPivot ?\n            (maxPivot ? useMax : true) :\n            (maxPivot ? false : useMax);\n        // `useMax` now contains our preferred choice, bounds not taken into\n        // account. If both or neither direction is out of bounds we want to\n        // use this.\n        // Deal with soft bounds\n        useMax = minOutOfSoftBounds ?\n            (maxOutOfSoftBounds ? useMax : true) : // Out on min\n            (maxOutOfSoftBounds ? false : useMax); // Not out on min\n        // Deal with hard bounds\n        useMax = minOutOfHardBounds ?\n            (maxOutOfHardBounds ? useMax : true) : // Out on min\n            (maxOutOfHardBounds ? false : useMax); // Not out on min\n        return useMax;\n    }\n    // eslint-disable-next-line valid-jsdoc\n    /**\n     * Find a clear path between point.\n     * @private\n     */\n    function clearPathTo(fromPoint, toPoint, dirIsX) {\n        // Don't waste time if we've hit goal\n        if (fromPoint.x === toPoint.x && fromPoint.y === toPoint.y) {\n            return [];\n        }\n        var dir = dirIsX ? 'x' : 'y',\n            obstacleMargin = options.obstacleOptions.margin,\n            bounds = {\n                soft: {\n                    xMin: softMinX,\n                    xMax: softMaxX,\n                    yMin: softMinY,\n                    yMax: softMaxY\n                },\n                hard: options.hardBounds\n            };\n        var pivot,\n            segments,\n            waypoint,\n            waypointUseMax,\n            envelopingObstacle,\n            secondEnvelopingObstacle,\n            envelopWaypoint;\n        // If fromPoint is inside an obstacle we have a problem. Break out\n        // by just going to the outside of this obstacle. We prefer to go to\n        // the nearest edge in the chosen direction.\n        envelopingObstacle =\n            findObstacleFromPoint(chartObstacles, fromPoint);\n        if (envelopingObstacle > -1) {\n            envelopingObstacle = chartObstacles[envelopingObstacle];\n            waypointUseMax = getDodgeDirection(envelopingObstacle, fromPoint, toPoint, dirIsX, bounds);\n            // Cut obstacle to hard bounds to make sure we stay within\n            limitObstacleToBounds(envelopingObstacle, options.hardBounds);\n            envelopWaypoint = dirIsX ? {\n                y: fromPoint.y,\n                x: envelopingObstacle[waypointUseMax ? 'xMax' : 'xMin'] +\n                    (waypointUseMax ? 1 : -1)\n            } : {\n                x: fromPoint.x,\n                y: envelopingObstacle[waypointUseMax ? 'yMax' : 'yMin'] +\n                    (waypointUseMax ? 1 : -1)\n            };\n            // If we crashed into another obstacle doing this, we put the\n            // waypoint between them instead\n            secondEnvelopingObstacle = findObstacleFromPoint(chartObstacles, envelopWaypoint);\n            if (secondEnvelopingObstacle > -1) {\n                secondEnvelopingObstacle = chartObstacles[secondEnvelopingObstacle];\n                // Cut obstacle to hard bounds\n                limitObstacleToBounds(secondEnvelopingObstacle, options.hardBounds);\n                // Modify waypoint to lay between obstacles\n                envelopWaypoint[dir] = waypointUseMax ? PathfinderAlgorithms_max(envelopingObstacle[dir + 'Max'] - obstacleMargin + 1, (secondEnvelopingObstacle[dir + 'Min'] +\n                    envelopingObstacle[dir + 'Max']) / 2) :\n                    PathfinderAlgorithms_min((envelopingObstacle[dir + 'Min'] + obstacleMargin - 1), ((secondEnvelopingObstacle[dir + 'Max'] +\n                        envelopingObstacle[dir + 'Min']) / 2));\n                // We are not going anywhere. If this happens for the first\n                // time, do nothing. Otherwise, try to go to the extreme of\n                // the obstacle pair in the current direction.\n                if (fromPoint.x === envelopWaypoint.x &&\n                    fromPoint.y === envelopWaypoint.y) {\n                    if (forceObstacleBreak) {\n                        envelopWaypoint[dir] = waypointUseMax ?\n                            PathfinderAlgorithms_max(envelopingObstacle[dir + 'Max'], secondEnvelopingObstacle[dir + 'Max']) + 1 :\n                            PathfinderAlgorithms_min(envelopingObstacle[dir + 'Min'], secondEnvelopingObstacle[dir + 'Min']) - 1;\n                    }\n                    // Toggle on if off, and the opposite\n                    forceObstacleBreak = !forceObstacleBreak;\n                }\n                else {\n                    // This point is not identical to previous.\n                    // Clear break trigger.\n                    forceObstacleBreak = false;\n                }\n            }\n            segments = [{\n                    start: fromPoint,\n                    end: envelopWaypoint\n                }];\n        }\n        else { // If not enveloping, use standard pivot calculation\n            pivot = pivotPoint(fromPoint, {\n                x: dirIsX ? toPoint.x : fromPoint.x,\n                y: dirIsX ? fromPoint.y : toPoint.y\n            }, dirIsX);\n            segments = [{\n                    start: fromPoint,\n                    end: {\n                        x: pivot.x,\n                        y: pivot.y\n                    }\n                }];\n            // Pivot before goal, use a waypoint to dodge obstacle\n            if (pivot[dirIsX ? 'x' : 'y'] !== toPoint[dirIsX ? 'x' : 'y']) {\n                // Find direction of waypoint\n                waypointUseMax = getDodgeDirection(pivot.obstacle, pivot, toPoint, !dirIsX, bounds);\n                // Cut waypoint to hard bounds\n                limitObstacleToBounds(pivot.obstacle, options.hardBounds);\n                waypoint = {\n                    x: dirIsX ?\n                        pivot.x :\n                        pivot.obstacle[waypointUseMax ? 'xMax' : 'xMin'] +\n                            (waypointUseMax ? 1 : -1),\n                    y: dirIsX ?\n                        pivot.obstacle[waypointUseMax ? 'yMax' : 'yMin'] +\n                            (waypointUseMax ? 1 : -1) :\n                        pivot.y\n                };\n                // We're changing direction here, store that to make sure we\n                // also change direction when adding the last segment array\n                // after handling waypoint.\n                dirIsX = !dirIsX;\n                segments = segments.concat(clearPathTo({\n                    x: pivot.x,\n                    y: pivot.y\n                }, waypoint, dirIsX));\n            }\n        }\n        // Get segments for the other direction too\n        // Recursion is our friend\n        segments = segments.concat(clearPathTo(segments[segments.length - 1].end, toPoint, !dirIsX));\n        return segments;\n    }\n    // eslint-disable-next-line valid-jsdoc\n    /**\n     * Extract point to outside of obstacle in whichever direction is\n     * closest. Returns new point outside obstacle.\n     * @private\n     */\n    function extractFromObstacle(obstacle, point, goalPoint) {\n        var dirIsX = PathfinderAlgorithms_min(obstacle.xMax - point.x,\n            point.x - obstacle.xMin) <\n                PathfinderAlgorithms_min(obstacle.yMax - point.y,\n            point.y - obstacle.yMin),\n            bounds = {\n                soft: options.hardBounds,\n                hard: options.hardBounds\n            },\n            useMax = getDodgeDirection(obstacle,\n            point,\n            goalPoint,\n            dirIsX,\n            bounds);\n        return dirIsX ? {\n            y: point.y,\n            x: obstacle[useMax ? 'xMax' : 'xMin'] + (useMax ? 1 : -1)\n        } : {\n            x: point.x,\n            y: obstacle[useMax ? 'yMax' : 'yMin'] + (useMax ? 1 : -1)\n        };\n    }\n    // Cut the obstacle array to soft bounds for optimization in large\n    // datasets.\n    chartObstacles =\n        chartObstacles.slice(startObstacleIx, endObstacleIx + 1);\n    // If an obstacle envelops the end point, move it out of there and add\n    // a little segment to where it was.\n    if ((endObstacleIx = findObstacleFromPoint(chartObstacles, end)) > -1) {\n        extractedEndPoint = extractFromObstacle(chartObstacles[endObstacleIx], end, start);\n        endSegments.push({\n            end: end,\n            start: extractedEndPoint\n        });\n        end = extractedEndPoint;\n    }\n    // If it's still inside one or more obstacles, get out of there by\n    // force-moving towards the start point.\n    while ((endObstacleIx = findObstacleFromPoint(chartObstacles, end)) > -1) {\n        useMax = end[dir] - start[dir] < 0;\n        extractedEndPoint = {\n            x: end.x,\n            y: end.y\n        };\n        extractedEndPoint[dir] = chartObstacles[endObstacleIx][useMax ? dir + 'Max' : dir + 'Min'] + (useMax ? 1 : -1);\n        endSegments.push({\n            end: end,\n            start: extractedEndPoint\n        });\n        end = extractedEndPoint;\n    }\n    // Find the path\n    segments = clearPathTo(start, end, dirIsX);\n    // Add the end-point segments\n    segments = segments.concat(endSegments.reverse());\n    return {\n        path: pathFromSegments(segments),\n        obstacles: segments\n    };\n}\nfastAvoid.requiresObstacles = true;\n/* *\n *\n *  Default Export\n *\n * */\n// Define the available pathfinding algorithms.\n// Algorithms take up to 3 arguments: starting point, ending point, and an\n// options object.\nvar algorithms = {\n    fastAvoid: fastAvoid,\n    straight: straight,\n    simpleConnect: simpleConnect\n};\n/* harmony default export */ var PathfinderAlgorithms = (algorithms);\n\n;// ./code/es5/es-modules/Gantt/ConnectorsDefaults.js\n/* *\n *\n *  (c) 2016 Highsoft AS\n *  Authors: Øystein Moseng, Lars A. V. Cabrera\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 Defaults\n *\n * */\n/*\n @todo:\n     - Document how to write your own algorithms\n     - Consider adding a Point.pathTo method that wraps creating a connection\n       and rendering it\n*/\nvar connectorsDefaults = {\n    /**\n     * The Pathfinder module allows you to define connections between any two\n     * points, represented as lines - optionally with markers for the start\n     * and/or end points. Multiple algorithms are available for calculating how\n     * the connecting lines are drawn.\n     *\n     * Connector functionality requires Highcharts Gantt to be loaded. In Gantt\n     * charts, the connectors are used to draw dependencies between tasks.\n     *\n     * @see [dependency](series.gantt.data.dependency)\n     *\n     * @sample gantt/pathfinder/demo\n     *         Pathfinder connections\n     *\n     * @declare      Highcharts.ConnectorsOptions\n     * @product      gantt\n     * @optionparent connectors\n     */\n    connectors: {\n        /**\n         * Enable connectors for this chart. Requires Highcharts Gantt.\n         *\n         * @type      {boolean}\n         * @default   true\n         * @since     6.2.0\n         * @apioption connectors.enabled\n         */\n        /**\n         * Set the default dash style for this chart's connecting lines.\n         *\n         * @type      {string}\n         * @default   solid\n         * @since     6.2.0\n         * @apioption connectors.dashStyle\n         */\n        /**\n         * Set the default color for this chart's Pathfinder connecting lines.\n         * Defaults to the color of the point being connected.\n         *\n         * @type      {Highcharts.ColorString}\n         * @since     6.2.0\n         * @apioption connectors.lineColor\n         */\n        /**\n         * Set the default pathfinder margin to use, in pixels. Some Pathfinder\n         * algorithms attempt to avoid obstacles, such as other points in the\n         * chart. These algorithms use this margin to determine how close lines\n         * can be to an obstacle. The default is to compute this automatically\n         * from the size of the obstacles in the chart.\n         *\n         * To draw connecting lines close to existing points, set this to a low\n         * number. For more space around existing points, set this number\n         * higher.\n         *\n         * @sample gantt/pathfinder/algorithm-margin\n         *         Small algorithmMargin\n         *\n         * @type      {number}\n         * @since     6.2.0\n         * @apioption connectors.algorithmMargin\n         */\n        /**\n         * Set the default pathfinder algorithm to use for this chart. It is\n         * possible to define your own algorithms by adding them to the\n         * Highcharts.Pathfinder.prototype.algorithms object before the chart\n         * has been created.\n         *\n         * The default algorithms are as follows:\n         *\n         * `straight`:      Draws a straight line between the connecting\n         *                  points. Does not avoid other points when drawing.\n         *\n         * `simpleConnect`: Finds a path between the points using right angles\n         *                  only. Takes only starting/ending points into\n         *                  account, and will not avoid other points.\n         *\n         * `fastAvoid`:     Finds a path between the points using right angles\n         *                  only. Will attempt to avoid other points, but its\n         *                  focus is performance over accuracy. Works well with\n         *                  less dense datasets.\n         *\n         * Default value: `straight` is used as default for most series types,\n         * while `simpleConnect` is used as default for Gantt series, to show\n         * dependencies between points.\n         *\n         * @sample gantt/pathfinder/demo\n         *         Different types used\n         *\n         * @type    {Highcharts.PathfinderTypeValue}\n         * @default undefined\n         * @since   6.2.0\n         */\n        type: 'straight',\n        /**\n         * The corner radius for the connector line.\n         *\n         * @since 11.2.0\n         */\n        radius: 0,\n        /**\n         * Set the default pixel width for this chart's Pathfinder connecting\n         * lines.\n         *\n         * @since 6.2.0\n         */\n        lineWidth: 1,\n        /**\n         * Marker options for this chart's Pathfinder connectors. Note that\n         * this option is overridden by the `startMarker` and `endMarker`\n         * options.\n         *\n         * @declare Highcharts.ConnectorsMarkerOptions\n         * @since   6.2.0\n         */\n        marker: {\n            /**\n             * Set the radius of the connector markers. The default is\n             * automatically computed based on the algorithmMargin setting.\n             *\n             * Setting marker.width and marker.height will override this\n             * setting.\n             *\n             * @type      {number}\n             * @since     6.2.0\n             * @apioption connectors.marker.radius\n             */\n            /**\n             * Set the width of the connector markers. If not supplied, this\n             * is inferred from the marker radius.\n             *\n             * @type      {number}\n             * @since     6.2.0\n             * @apioption connectors.marker.width\n             */\n            /**\n             * Set the height of the connector markers. If not supplied, this\n             * is inferred from the marker radius.\n             *\n             * @type      {number}\n             * @since     6.2.0\n             * @apioption connectors.marker.height\n             */\n            /**\n             * Set the color of the connector markers. By default this is the\n             * same as the connector color.\n             *\n             * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n             * @since     6.2.0\n             * @apioption connectors.marker.color\n             */\n            /**\n             * Set the line/border color of the connector markers. By default\n             * this is the same as the marker color.\n             *\n             * @type      {Highcharts.ColorString}\n             * @since     6.2.0\n             * @apioption connectors.marker.lineColor\n             */\n            /**\n             * Enable markers for the connectors.\n             */\n            enabled: false,\n            /**\n             * Horizontal alignment of the markers relative to the points.\n             *\n             * @type {Highcharts.AlignValue}\n             */\n            align: 'center',\n            /**\n             * Vertical alignment of the markers relative to the points.\n             *\n             * @type {Highcharts.VerticalAlignValue}\n             */\n            verticalAlign: 'middle',\n            /**\n             * Whether or not to draw the markers inside the points.\n             */\n            inside: false,\n            /**\n             * Set the line/border width of the pathfinder markers.\n             */\n            lineWidth: 1\n        },\n        /**\n         * Marker options specific to the start markers for this chart's\n         * Pathfinder connectors. Overrides the generic marker options.\n         *\n         * @declare Highcharts.ConnectorsStartMarkerOptions\n         * @extends connectors.marker\n         * @since   6.2.0\n         */\n        startMarker: {\n            /**\n             * Set the symbol of the connector start markers.\n             */\n            symbol: 'diamond'\n        },\n        /**\n         * Marker options specific to the end markers for this chart's\n         * Pathfinder connectors. Overrides the generic marker options.\n         *\n         * @declare Highcharts.ConnectorsEndMarkerOptions\n         * @extends connectors.marker\n         * @since   6.2.0\n         */\n        endMarker: {\n            /**\n             * Set the symbol of the connector end markers.\n             */\n            symbol: 'arrow-filled'\n        }\n    }\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var ConnectorsDefaults = (connectorsDefaults);\n/* *\n *\n *  API Options\n *\n * */\n/**\n * Override Pathfinder connector options for a series. Requires Highcharts Gantt\n * to be loaded.\n *\n * @declare   Highcharts.SeriesConnectorsOptionsObject\n * @extends   connectors\n * @since     6.2.0\n * @excluding enabled, algorithmMargin\n * @product   gantt\n * @apioption plotOptions.series.connectors\n */\n/**\n * Connect to a point. This option can be either a string, referring to the ID\n * of another point, or an object, or an array of either. If the option is an\n * array, each element defines a connection.\n *\n * @sample gantt/pathfinder/demo\n *         Different connection types\n *\n * @declare   Highcharts.XrangePointConnectorsOptionsObject\n * @type      {string|Array<string|*>|*}\n * @extends   plotOptions.series.connectors\n * @since     6.2.0\n * @excluding enabled\n * @product   gantt\n * @requires  highcharts-gantt\n * @apioption series.xrange.data.connect\n */\n/**\n * The ID of the point to connect to.\n *\n * @type      {string}\n * @since     6.2.0\n * @product   gantt\n * @apioption series.xrange.data.connect.to\n */\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Gantt/PathfinderComposition.js\n/* *\n *\n *  (c) 2016 Highsoft AS\n *  Authors: Øystein Moseng, Lars A. V. Cabrera\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar setOptions = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).setOptions;\n\nvar PathfinderComposition_defined = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defined, PathfinderComposition_error = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).error, PathfinderComposition_merge = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).merge;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Get point bounding box using plotX/plotY and shapeArgs. If using\n * graphic.getBBox() directly, the bbox will be affected by animation.\n *\n * @private\n * @function\n *\n * @param {Highcharts.Point} point\n *        The point to get BB of.\n *\n * @return {Highcharts.Dictionary<number>|null}\n *         Result xMax, xMin, yMax, yMin.\n */\nfunction getPointBB(point) {\n    var shapeArgs = point.shapeArgs;\n    // Prefer using shapeArgs (columns)\n    if (shapeArgs) {\n        return {\n            xMin: shapeArgs.x || 0,\n            xMax: (shapeArgs.x || 0) + (shapeArgs.width || 0),\n            yMin: shapeArgs.y || 0,\n            yMax: (shapeArgs.y || 0) + (shapeArgs.height || 0)\n        };\n    }\n    // Otherwise use plotX/plotY and bb\n    var bb = point.graphic && point.graphic.getBBox();\n    return bb ? {\n        xMin: point.plotX - bb.width / 2,\n        xMax: point.plotX + bb.width / 2,\n        yMin: point.plotY - bb.height / 2,\n        yMax: point.plotY + bb.height / 2\n    } : null;\n}\n/**\n * Warn if using legacy options. Copy the options over. Note that this will\n * still break if using the legacy options in chart.update, addSeries etc.\n * @private\n */\nfunction warnLegacy(chart) {\n    if (chart.options.pathfinder ||\n        chart.series.reduce(function (acc, series) {\n            if (series.options) {\n                PathfinderComposition_merge(true, (series.options.connectors = series.options.connectors ||\n                    {}), series.options.pathfinder);\n            }\n            return acc || series.options && series.options.pathfinder;\n        }, false)) {\n        PathfinderComposition_merge(true, (chart.options.connectors = chart.options.connectors || {}), chart.options.pathfinder);\n        PathfinderComposition_error('WARNING: Pathfinder options have been renamed. ' +\n            'Use \"chart.connectors\" or \"series.connectors\" instead.');\n    }\n}\n/* *\n *\n *  Composition\n *\n * */\nvar ConnectionComposition;\n(function (ConnectionComposition) {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /** @private */\n    function compose(ChartClass, PathfinderClass, PointClass) {\n        var pointProto = PointClass.prototype;\n        if (!pointProto.getPathfinderAnchorPoint) {\n            // Initialize Pathfinder for charts\n            ChartClass.prototype.callbacks.push(function (chart) {\n                var options = chart.options;\n                if (options.connectors.enabled !== false) {\n                    warnLegacy(chart);\n                    this.pathfinder = new PathfinderClass(this);\n                    this.pathfinder.update(true); // First draw, defer render\n                }\n            });\n            pointProto.getMarkerVector = pointGetMarkerVector;\n            pointProto.getPathfinderAnchorPoint = pointGetPathfinderAnchorPoint;\n            pointProto.getRadiansToVector = pointGetRadiansToVector;\n            // Set default Pathfinder options\n            setOptions(ConnectorsDefaults);\n        }\n    }\n    ConnectionComposition.compose = compose;\n    /**\n     * Get coordinates of anchor point for pathfinder connection.\n     *\n     * @private\n     * @function Highcharts.Point#getPathfinderAnchorPoint\n     *\n     * @param {Highcharts.ConnectorsMarkerOptions} markerOptions\n     *        Connection options for position on point.\n     *\n     * @return {Highcharts.PositionObject}\n     *         An object with x/y properties for the position. Coordinates are\n     *         in plot values, not relative to point.\n     */\n    function pointGetPathfinderAnchorPoint(markerOptions) {\n        var bb = getPointBB(this);\n        var x,\n            y;\n        switch (markerOptions.align) { // eslint-disable-line default-case\n            case 'right':\n                x = 'xMax';\n                break;\n            case 'left':\n                x = 'xMin';\n        }\n        switch (markerOptions.verticalAlign) { // eslint-disable-line default-case\n            case 'top':\n                y = 'yMin';\n                break;\n            case 'bottom':\n                y = 'yMax';\n        }\n        return {\n            x: x ? bb[x] : (bb.xMin + bb.xMax) / 2,\n            y: y ? bb[y] : (bb.yMin + bb.yMax) / 2\n        };\n    }\n    /**\n     * Utility to get the angle from one point to another.\n     *\n     * @private\n     * @function Highcharts.Point#getRadiansToVector\n     *\n     * @param {Highcharts.PositionObject} v1\n     *        The first vector, as an object with x/y properties.\n     *\n     * @param {Highcharts.PositionObject} v2\n     *        The second vector, as an object with x/y properties.\n     *\n     * @return {number}\n     *         The angle in degrees\n     */\n    function pointGetRadiansToVector(v1, v2) {\n        var box;\n        if (!PathfinderComposition_defined(v2)) {\n            box = getPointBB(this);\n            if (box) {\n                v2 = {\n                    x: (box.xMin + box.xMax) / 2,\n                    y: (box.yMin + box.yMax) / 2\n                };\n            }\n        }\n        return Math.atan2(v2.y - v1.y, v1.x - v2.x);\n    }\n    /**\n     * Utility to get the position of the marker, based on the path angle and\n     * the marker's radius.\n     *\n     * @private\n     * @function Highcharts.Point#getMarkerVector\n     *\n     * @param {number} radians\n     *        The angle in radians from the point center to another vector.\n     *\n     * @param {number} markerRadius\n     *        The radius of the marker, to calculate the additional distance to\n     *        the center of the marker.\n     *\n     * @param {Object} anchor\n     *        The anchor point of the path and marker as an object with x/y\n     *        properties.\n     *\n     * @return {Object}\n     *         The marker vector as an object with x/y properties.\n     */\n    function pointGetMarkerVector(radians, markerRadius, anchor) {\n        var twoPI = Math.PI * 2.0, bb = getPointBB(this), rectWidth = bb.xMax - bb.xMin, rectHeight = bb.yMax - bb.yMin, rAtan = Math.atan2(rectHeight, rectWidth), rectHalfWidth = rectWidth / 2.0, rectHalfHeight = rectHeight / 2.0, rectHorizontalCenter = bb.xMin + rectHalfWidth, rectVerticalCenter = bb.yMin + rectHalfHeight, edgePoint = {\n                x: rectHorizontalCenter,\n                y: rectVerticalCenter\n            };\n        var theta = radians,\n            tanTheta = 1,\n            leftOrRightRegion = false,\n            xFactor = 1,\n            yFactor = 1;\n        while (theta < -Math.PI) {\n            theta += twoPI;\n        }\n        while (theta > Math.PI) {\n            theta -= twoPI;\n        }\n        tanTheta = Math.tan(theta);\n        if ((theta > -rAtan) && (theta <= rAtan)) {\n            // Right side\n            yFactor = -1;\n            leftOrRightRegion = true;\n        }\n        else if (theta > rAtan && theta <= (Math.PI - rAtan)) {\n            // Top side\n            yFactor = -1;\n        }\n        else if (theta > (Math.PI - rAtan) || theta <= -(Math.PI - rAtan)) {\n            // Left side\n            xFactor = -1;\n            leftOrRightRegion = true;\n        }\n        else {\n            // Bottom side\n            xFactor = -1;\n        }\n        // Correct the edgePoint according to the placement of the marker\n        if (leftOrRightRegion) {\n            edgePoint.x += xFactor * (rectHalfWidth);\n            edgePoint.y += yFactor * (rectHalfWidth) * tanTheta;\n        }\n        else {\n            edgePoint.x += xFactor * (rectHeight / (2.0 * tanTheta));\n            edgePoint.y += yFactor * (rectHalfHeight);\n        }\n        if (anchor.x !== rectHorizontalCenter) {\n            edgePoint.x = anchor.x;\n        }\n        if (anchor.y !== rectVerticalCenter) {\n            edgePoint.y = anchor.y;\n        }\n        return {\n            x: edgePoint.x + (markerRadius * Math.cos(theta)),\n            y: edgePoint.y - (markerRadius * Math.sin(theta))\n        };\n    }\n})(ConnectionComposition || (ConnectionComposition = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var PathfinderComposition = (ConnectionComposition);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Point\"],\"commonjs\":[\"highcharts\",\"Point\"],\"commonjs2\":[\"highcharts\",\"Point\"],\"root\":[\"Highcharts\",\"Point\"]}\nvar highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_ = __webpack_require__(260);\nvar highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default = /*#__PURE__*/__webpack_require__.n(highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_);\n;// ./code/es5/es-modules/Gantt/Pathfinder.js\n/* *\n *\n *  (c) 2016 Highsoft AS\n *  Authors: Øystein Moseng, Lars A. V. Cabrera\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\nvar addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, Pathfinder_defined = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defined, Pathfinder_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick, splat = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).splat;\n/* *\n *\n *  Constants\n *\n * */\nvar Pathfinder_max = Math.max, Pathfinder_min = Math.min;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Get point bounding box using plotX/plotY and shapeArgs. If using\n * graphic.getBBox() directly, the bbox will be affected by animation.\n *\n * @private\n * @function\n *\n * @param {Highcharts.Point} point\n *        The point to get BB of.\n *\n * @return {Highcharts.Dictionary<number>|null}\n *         Result xMax, xMin, yMax, yMin.\n */\nfunction Pathfinder_getPointBB(point) {\n    var shapeArgs = point.shapeArgs;\n    // Prefer using shapeArgs (columns)\n    if (shapeArgs) {\n        return {\n            xMin: shapeArgs.x || 0,\n            xMax: (shapeArgs.x || 0) + (shapeArgs.width || 0),\n            yMin: shapeArgs.y || 0,\n            yMax: (shapeArgs.y || 0) + (shapeArgs.height || 0)\n        };\n    }\n    // Otherwise use plotX/plotY and bb\n    var bb = point.graphic && point.graphic.getBBox();\n    return bb ? {\n        xMin: point.plotX - bb.width / 2,\n        xMax: point.plotX + bb.width / 2,\n        yMin: point.plotY - bb.height / 2,\n        yMax: point.plotY + bb.height / 2\n    } : null;\n}\n/**\n * Compute smallest distance between two rectangles.\n * @private\n */\nfunction calculateObstacleDistance(a, b, bbMargin) {\n    // Count the distance even if we are slightly off\n    var margin = Pathfinder_pick(bbMargin, 10),\n        yOverlap = a.yMax + margin > b.yMin - margin &&\n            a.yMin - margin < b.yMax + margin,\n        xOverlap = a.xMax + margin > b.xMin - margin &&\n            a.xMin - margin < b.xMax + margin,\n        xDistance = yOverlap ? (a.xMin > b.xMax ? a.xMin - b.xMax : b.xMin - a.xMax) : Infinity,\n        yDistance = xOverlap ? (a.yMin > b.yMax ? a.yMin - b.yMax : b.yMin - a.yMax) : Infinity;\n    // If the rectangles collide, try recomputing with smaller margin.\n    // If they collide anyway, discard the obstacle.\n    if (xOverlap && yOverlap) {\n        return (margin ?\n            calculateObstacleDistance(a, b, Math.floor(margin / 2)) :\n            Infinity);\n    }\n    return Pathfinder_min(xDistance, yDistance);\n}\n/**\n * Calculate margin to place around obstacles for the pathfinder in pixels.\n * Returns a minimum of 1 pixel margin.\n *\n * @private\n * @function\n *\n * @param {Array<object>} obstacles\n *        Obstacles to calculate margin from.\n *\n * @return {number}\n *         The calculated margin in pixels. At least 1.\n */\nfunction calculateObstacleMargin(obstacles) {\n    var len = obstacles.length,\n        distances = [];\n    var onstacleDistance;\n    // Go over all obstacles and compare them to the others.\n    for (var i = 0; i < len; ++i) {\n        // Compare to all obstacles ahead. We will already have compared this\n        // obstacle to the ones before.\n        for (var j = i + 1; j < len; ++j) {\n            onstacleDistance =\n                calculateObstacleDistance(obstacles[i], obstacles[j]);\n            // TODO: Magic number 80\n            if (onstacleDistance < 80) { // Ignore large distances\n                distances.push(onstacleDistance);\n            }\n        }\n    }\n    // Ensure we always have at least one value, even in very spacious charts\n    distances.push(80);\n    return Pathfinder_max(Math.floor(distances.sort(function (a, b) {\n        return (a - b);\n    })[\n    // Discard first 10% of the relevant distances, and then grab\n    // the smallest one.\n    Math.floor(distances.length / 10)] / 2 - 1 // Divide the distance by 2 and subtract 1.\n    ), 1 // 1 is the minimum margin\n    );\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * The Pathfinder class.\n *\n * @private\n * @class\n * @name Highcharts.Pathfinder\n *\n * @param {Highcharts.Chart} chart\n *        The chart to operate on.\n */\nvar Pathfinder = /** @class */ (function () {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    function Pathfinder(chart) {\n        this.init(chart);\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    Pathfinder.compose = function (ChartClass, PointClass) {\n        PathfinderComposition.compose(ChartClass, Pathfinder, PointClass);\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Initialize the Pathfinder object.\n     *\n     * @function Highcharts.Pathfinder#init\n     *\n     * @param {Highcharts.Chart} chart\n     *        The chart context.\n     */\n    Pathfinder.prototype.init = function (chart) {\n        // Initialize pathfinder with chart context\n        this.chart = chart;\n        // Init connection reference list\n        this.connections = [];\n        // Recalculate paths/obstacles on chart redraw\n        addEvent(chart, 'redraw', function () {\n            this.pathfinder.update();\n        });\n    };\n    /**\n     * Update Pathfinder connections from scratch.\n     *\n     * @function Highcharts.Pathfinder#update\n     *\n     * @param {boolean} [deferRender]\n     *        Whether or not to defer rendering of connections until\n     *        series.afterAnimate event has fired. Used on first render.\n     */\n    Pathfinder.prototype.update = function (deferRender) {\n        var chart = this.chart,\n            pathfinder = this,\n            oldConnections = pathfinder.connections;\n        // Rebuild pathfinder connections from options\n        pathfinder.connections = [];\n        chart.series.forEach(function (series) {\n            if (series.visible && !series.options.isInternal) {\n                series.points.forEach(function (point) {\n                    var _a;\n                    var ganttPointOptions = point.options;\n                    // For Gantt series the connect could be\n                    // defined as a dependency\n                    if (ganttPointOptions && ganttPointOptions.dependency) {\n                        ganttPointOptions.connect = ganttPointOptions\n                            .dependency;\n                    }\n                    var connects = ((_a = point.options) === null || _a === void 0 ? void 0 : _a.connect) ?\n                            splat(point.options.connect) :\n                            [];\n                    var to;\n                    if (point.visible && point.isInside !== false) {\n                        connects.forEach(function (connect) {\n                            var toId = typeof connect === 'string' ?\n                                    connect :\n                                    connect.to;\n                            if (toId) {\n                                to = chart.get(toId);\n                            }\n                            if (to instanceof (highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default()) &&\n                                to.series.visible &&\n                                to.visible &&\n                                to.isInside !== false) {\n                                // Add new connection\n                                pathfinder.connections.push(new Gantt_Connection(point, // From\n                                to, typeof connect === 'string' ?\n                                    {} :\n                                    connect));\n                            }\n                        });\n                    }\n                });\n            }\n        });\n        // Clear connections that should not be updated, and move old info over\n        // to new connections.\n        for (var j = 0, k = void 0, found = void 0, lenOld = oldConnections.length, lenNew = pathfinder.connections.length; j < lenOld; ++j) {\n            found = false;\n            var oldCon = oldConnections[j];\n            for (k = 0; k < lenNew; ++k) {\n                var newCon = pathfinder.connections[k];\n                if ((oldCon.options && oldCon.options.type) ===\n                    (newCon.options && newCon.options.type) &&\n                    oldCon.fromPoint === newCon.fromPoint &&\n                    oldCon.toPoint === newCon.toPoint) {\n                    newCon.graphics = oldCon.graphics;\n                    found = true;\n                    break;\n                }\n            }\n            if (!found) {\n                oldCon.destroy();\n            }\n        }\n        // Clear obstacles to force recalculation. This must be done on every\n        // redraw in case positions have changed. Recalculation is handled in\n        // Connection.getPath on demand.\n        delete this.chartObstacles;\n        delete this.lineObstacles;\n        // Draw the pending connections\n        pathfinder.renderConnections(deferRender);\n    };\n    /**\n     * Draw the chart's connecting paths.\n     *\n     * @function Highcharts.Pathfinder#renderConnections\n     *\n     * @param {boolean} [deferRender]\n     *        Whether or not to defer render until series animation is finished.\n     *        Used on first render.\n     */\n    Pathfinder.prototype.renderConnections = function (deferRender) {\n        if (deferRender) {\n            // Render after series are done animating\n            this.chart.series.forEach(function (series) {\n                var render = function () {\n                        // Find pathfinder connections belonging to this series\n                        // that haven't rendered, and render them now.\n                        var pathfinder = series.chart.pathfinder,\n                    conns = pathfinder && pathfinder.connections || [];\n                    conns.forEach(function (connection) {\n                        if (connection.fromPoint &&\n                            connection.fromPoint.series === series) {\n                            connection.render();\n                        }\n                    });\n                    if (series.pathfinderRemoveRenderEvent) {\n                        series.pathfinderRemoveRenderEvent();\n                        delete series.pathfinderRemoveRenderEvent;\n                    }\n                };\n                if (series.options.animation === false) {\n                    render();\n                }\n                else {\n                    series.pathfinderRemoveRenderEvent = addEvent(series, 'afterAnimate', render);\n                }\n            });\n        }\n        else {\n            // Go through connections and render them\n            this.connections.forEach(function (connection) {\n                connection.render();\n            });\n        }\n    };\n    /**\n     * Get obstacles for the points in the chart. Does not include connecting\n     * lines from Pathfinder. Applies algorithmMargin to the obstacles.\n     *\n     * @function Highcharts.Pathfinder#getChartObstacles\n     *\n     * @param {Object} options\n     *        Options for the calculation. Currently only\n     *        `options.algorithmMargin`.\n     *\n     * @param {number} options.algorithmMargin\n     *        The algorithm margin to use for the obstacles.\n\n    * @return {Array<object>}\n     *         An array of calculated obstacles. Each obstacle is defined as an\n     *         object with xMin, xMax, yMin and yMax properties.\n     */\n    Pathfinder.prototype.getChartObstacles = function (options) {\n        var series = this.chart.series,\n            margin = Pathfinder_pick(options.algorithmMargin, 0);\n        var obstacles = [],\n            calculatedMargin;\n        for (var i = 0, sLen = series.length; i < sLen; ++i) {\n            if (series[i].visible && !series[i].options.isInternal) {\n                for (var j = 0, pLen = series[i].points.length, bb = void 0, point = void 0; j < pLen; ++j) {\n                    point = series[i].points[j];\n                    if (point.visible) {\n                        bb = Pathfinder_getPointBB(point);\n                        if (bb) {\n                            obstacles.push({\n                                xMin: bb.xMin - margin,\n                                xMax: bb.xMax + margin,\n                                yMin: bb.yMin - margin,\n                                yMax: bb.yMax + margin\n                            });\n                        }\n                    }\n                }\n            }\n        }\n        // Sort obstacles by xMin for optimization\n        obstacles = obstacles.sort(function (a, b) {\n            return a.xMin - b.xMin;\n        });\n        // Add auto-calculated margin if the option is not defined\n        if (!Pathfinder_defined(options.algorithmMargin)) {\n            calculatedMargin =\n                options.algorithmMargin =\n                    calculateObstacleMargin(obstacles);\n            obstacles.forEach(function (obstacle) {\n                obstacle.xMin -= calculatedMargin;\n                obstacle.xMax += calculatedMargin;\n                obstacle.yMin -= calculatedMargin;\n                obstacle.yMax += calculatedMargin;\n            });\n        }\n        return obstacles;\n    };\n    /**\n     * Utility function to get metrics for obstacles:\n     * - Widest obstacle width\n     * - Tallest obstacle height\n     *\n     * @function Highcharts.Pathfinder#getObstacleMetrics\n     *\n     * @param {Array<object>} obstacles\n     *        An array of obstacles to inspect.\n     *\n     * @return {Object}\n     *         The calculated metrics, as an object with maxHeight and maxWidth\n     *         properties.\n     */\n    Pathfinder.prototype.getObstacleMetrics = function (obstacles) {\n        var maxWidth = 0,\n            maxHeight = 0,\n            width,\n            height,\n            i = obstacles.length;\n        while (i--) {\n            width = obstacles[i].xMax - obstacles[i].xMin;\n            height = obstacles[i].yMax - obstacles[i].yMin;\n            if (maxWidth < width) {\n                maxWidth = width;\n            }\n            if (maxHeight < height) {\n                maxHeight = height;\n            }\n        }\n        return {\n            maxHeight: maxHeight,\n            maxWidth: maxWidth\n        };\n    };\n    /**\n     * Utility to get which direction to start the pathfinding algorithm\n     * (X vs Y), calculated from a set of marker options.\n     *\n     * @function Highcharts.Pathfinder#getAlgorithmStartDirection\n     *\n     * @param {Highcharts.ConnectorsMarkerOptions} markerOptions\n     *        Marker options to calculate from.\n     *\n     * @return {boolean}\n     *         Returns true for X, false for Y, and undefined for autocalculate.\n     */\n    Pathfinder.prototype.getAlgorithmStartDirection = function (markerOptions) {\n        var xCenter = markerOptions.align !== 'left' &&\n                markerOptions.align !== 'right', yCenter = markerOptions.verticalAlign !== 'top' &&\n                markerOptions.verticalAlign !== 'bottom';\n        return xCenter ?\n            (yCenter ? void 0 : false) : // When x is centered\n            (yCenter ? true : void 0); // When x is off-center\n    };\n    return Pathfinder;\n}());\n/**\n * @name Highcharts.Pathfinder#algorithms\n * @type {Highcharts.Dictionary<Function>}\n */\nPathfinder.prototype.algorithms = PathfinderAlgorithms;\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Gantt_Pathfinder = (Pathfinder);\n/* *\n *\n *  API Options\n *\n * */\n/**\n * The default pathfinder algorithm to use for a chart. It is possible to define\n * your own algorithms by adding them to the\n * `Highcharts.Pathfinder.prototype.algorithms`\n * object before the chart has been created.\n *\n * The default algorithms are as follows:\n *\n * `straight`:      Draws a straight line between the connecting\n *                  points. Does not avoid other points when drawing.\n *\n * `simpleConnect`: Finds a path between the points using right angles\n *                  only. Takes only starting/ending points into\n *                  account, and will not avoid other points.\n *\n * `fastAvoid`:     Finds a path between the points using right angles\n *                  only. Will attempt to avoid other points, but its\n *                  focus is performance over accuracy. Works well with\n *                  less dense datasets.\n *\n * @typedef {\"fastAvoid\"|\"simpleConnect\"|\"straight\"|string} Highcharts.PathfinderTypeValue\n */\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Extensions/ArrowSymbols.js\n/* *\n *\n *  (c) 2017 Highsoft AS\n *  Authors: Lars A. V. Cabrera\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Creates an arrow symbol. Like a triangle, except not filled.\n * ```\n *                   o\n *             o\n *       o\n * o\n *       o\n *             o\n *                   o\n * ```\n *\n * @private\n * @function\n *\n * @param {number} x\n *        x position of the arrow\n *\n * @param {number} y\n *        y position of the arrow\n *\n * @param {number} w\n *        width of the arrow\n *\n * @param {number} h\n *        height of the arrow\n *\n * @return {Highcharts.SVGPathArray}\n *         Path array\n */\nfunction arrow(x, y, w, h) {\n    return [\n        ['M', x, y + h / 2],\n        ['L', x + w, y],\n        ['L', x, y + h / 2],\n        ['L', x + w, y + h]\n    ];\n}\n/**\n * Creates a half-width arrow symbol. Like a triangle, except not filled.\n * ```\n *       o\n *    o\n * o\n *    o\n *       o\n * ```\n *\n * @private\n * @function\n *\n * @param {number} x\n *        x position of the arrow\n *\n * @param {number} y\n *        y position of the arrow\n *\n * @param {number} w\n *        width of the arrow\n *\n * @param {number} h\n *        height of the arrow\n *\n * @return {Highcharts.SVGPathArray}\n *         Path array\n */\nfunction arrowHalf(x, y, w, h) {\n    return arrow(x, y, w / 2, h);\n}\n/**\n * @private\n */\nfunction compose(SVGRendererClass) {\n    var symbols = SVGRendererClass.prototype.symbols;\n    symbols.arrow = arrow;\n    symbols['arrow-filled'] = triangleLeft;\n    symbols['arrow-filled-half'] = triangleLeftHalf;\n    symbols['arrow-half'] = arrowHalf;\n    symbols['triangle-left'] = triangleLeft;\n    symbols['triangle-left-half'] = triangleLeftHalf;\n}\n/**\n * Creates a left-oriented triangle.\n * ```\n *             o\n *       ooooooo\n * ooooooooooooo\n *       ooooooo\n *             o\n * ```\n *\n * @private\n * @function\n *\n * @param {number} x\n *        x position of the triangle\n *\n * @param {number} y\n *        y position of the triangle\n *\n * @param {number} w\n *        width of the triangle\n *\n * @param {number} h\n *        height of the triangle\n *\n * @return {Highcharts.SVGPathArray}\n *         Path array\n */\nfunction triangleLeft(x, y, w, h) {\n    return [\n        ['M', x + w, y],\n        ['L', x, y + h / 2],\n        ['L', x + w, y + h],\n        ['Z']\n    ];\n}\n/**\n * Creates a half-width, left-oriented triangle.\n * ```\n *       o\n *    oooo\n * ooooooo\n *    oooo\n *       o\n * ```\n *\n * @private\n * @function\n *\n * @param {number} x\n *        x position of the triangle\n *\n * @param {number} y\n *        y position of the triangle\n *\n * @param {number} w\n *        width of the triangle\n *\n * @param {number} h\n *        height of the triangle\n *\n * @return {Highcharts.SVGPathArray}\n *         Path array\n */\nfunction triangleLeftHalf(x, y, w, h) {\n    return triangleLeft(x, y, w / 2, h);\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar ArrowSymbols = {\n    compose: compose\n};\n/* harmony default export */ var Extensions_ArrowSymbols = (ArrowSymbols);\n\n;// ./code/es5/es-modules/masters/modules/pathfinder.src.js\n\n\n\n\n\nvar G = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\nG.Pathfinder = G.Pathfinder || Gantt_Pathfinder;\nExtensions_ArrowSymbols.compose(G.SVGRenderer);\nG.Pathfinder.compose(G.Chart, G.Point);\n/* harmony default export */ var pathfinder_src = ((highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()));\n\n__webpack_exports__ = __webpack_exports__[\"default\"];\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});"],"names":["root","factory","exports","module","require","define","amd","__WEBPACK_EXTERNAL_MODULE__944__","__WEBPACK_EXTERNAL_MODULE__260__","ConnectionComposition","__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__","pathfinder_src","highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_","highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default","defined","error","merge","objectEach","deg2rad","max","Math","min","Connection","from","to","options","init","fromPoint","toPoint","chart","series","pathfinder","renderPath","path","attribs","styledMode","anim","pathGraphic","connection","graphics","group","renderer","g","addClass","attr","zIndex","add","seriesGroup","translate","plotLeft","plotTop","opacity","animate","addMarker","type","markerVector","radians","rotation","box","width","height","pathVector","segment","point","anchor","getPathfinderAnchorPoint","enabled","length","x","y","getRadiansToVector","getMarkerVector","radius","rotationOriginX","rotationOriginY","symbol","colorIndex","fill","color","stroke","lineColor","lineWidth","animation","getPath","algorithm","algorithms","chartObstacles","obstacles","requiresObstacles","getChartObstacles","connectors","algorithmMargin","chartObstacleMetrics","getObstacleMetrics","startMarker","endMarker","lineObstacles","obstacleMetrics","hardBounds","xMin","xMax","plotWidth","yMin","yMax","plotHeight","obstacleOptions","margin","startDirectionX","getAlgorithmStartDirection","render","dashStyle","dashstyle","marker","ceil","pathResult","concat","destroy","val","r","i","push","prevSeg","nextSeg","x1","y1","x2","y2","directionX","directionY","abs","pick","PathfinderAlgorithms_min","PathfinderAlgorithms_max","findLastObstacleBefore","startIx","cursor","cmp","left","right","findObstacleFromPoint","obstacle","pathFromSegments","segments","start","end","limitObstacleToBounds","bounds","simpleConnect","endSegment","startObstacle","waypoint","useMax","endPoint","startObstacleIx","endObstacleIx","dir","copyFromPoint","fromKey","toKey","offset","getMeOut","direction","prevWaypoint","waypoint2","Series_PathUtilities","fastAvoid","dirIsX","extractedEndPoint","endSegments","metrics","softMinX","maxWidth","softMaxX","softMinY","maxHeight","softMaxY","forceObstacleBreak","pivotPoint","directionIsX","firstPoint","lastPoint","highestPoint","lowestPoint","searchDirection","getDodgeDirection","softBounds","soft","hard","toPointMax","toPointMin","maxOutOfSoftBounds","minOutOfSoftBounds","maxOutOfHardBounds","minOutOfHardBounds","minDistance","maxDistance","minPivot","maxPivot","slice","clearPathTo","pivot","waypointUseMax","envelopingObstacle","secondEnvelopingObstacle","envelopWaypoint","obstacleMargin","reverse","ConnectorsDefaults","align","verticalAlign","inside","setOptions","PathfinderComposition_defined","PathfinderComposition_error","PathfinderComposition_merge","getPointBB","shapeArgs","bb","graphic","getBBox","plotX","plotY","pointGetPathfinderAnchorPoint","markerOptions","pointGetRadiansToVector","v1","v2","atan2","pointGetMarkerVector","markerRadius","twoPI","PI","rectWidth","rectHeight","rAtan","rectHalfWidth","rectHalfHeight","rectHorizontalCenter","rectVerticalCenter","edgePoint","theta","tanTheta","leftOrRightRegion","xFactor","yFactor","tan","cos","sin","compose","ChartClass","PathfinderClass","PointClass","pointProto","callbacks","reduce","acc","update","PathfinderComposition","highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_","highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default","addEvent","Pathfinder_defined","Pathfinder_pick","splat","Pathfinder_max","Pathfinder_min","Pathfinder","connections","deferRender","oldConnections","forEach","visible","isInternal","points","_a","ganttPointOptions","dependency","connect","connects","isInside","toId","j","k","found","lenOld","lenNew","oldCon","newCon","renderConnections","conns","pathfinderRemoveRenderEvent","calculatedMargin","sLen","pLen","Pathfinder_getPointBB","sort","b","calculateObstacleMargin","onstacleDistance","len","distances","calculateObstacleDistance","bbMargin","yOverlap","xOverlap","xDistance","Infinity","yDistance","floor","xCenter","yCenter","arrow","w","h","arrowHalf","triangleLeft","triangleLeftHalf","straight","G","Extensions_ArrowSymbols","SVGRendererClass","symbols","SVGRenderer","Chart","Point"],"mappings":"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"}

Hacked By AnonymousFox1.0, Coded By AnonymousFox