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/gantt.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\")[\"Chart\"], require(\"highcharts\")[\"Axis\"], require(\"highcharts\")[\"Color\"], require(\"highcharts\")[\"SeriesRegistry\"], require(\"highcharts\")[\"RendererRegistry\"], require(\"highcharts\")[\"SVGRenderer\"], require(\"highcharts\")[\"SVGElement\"], require(\"highcharts\")[\"Point\"], require(\"highcharts\")[\"StackItem\"]);\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"highcharts/modules/gantt\", [[\"highcharts/highcharts\"], [\"highcharts/highcharts\",\"Chart\"], [\"highcharts/highcharts\",\"Axis\"], [\"highcharts/highcharts\",\"Color\"], [\"highcharts/highcharts\",\"SeriesRegistry\"], [\"highcharts/highcharts\",\"RendererRegistry\"], [\"highcharts/highcharts\",\"SVGRenderer\"], [\"highcharts/highcharts\",\"SVGElement\"], [\"highcharts/highcharts\",\"Point\"], [\"highcharts/highcharts\",\"StackItem\"]], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"highcharts/modules/gantt\"] = factory(require(\"highcharts\"), require(\"highcharts\")[\"Chart\"], require(\"highcharts\")[\"Axis\"], require(\"highcharts\")[\"Color\"], require(\"highcharts\")[\"SeriesRegistry\"], require(\"highcharts\")[\"RendererRegistry\"], require(\"highcharts\")[\"SVGRenderer\"], require(\"highcharts\")[\"SVGElement\"], require(\"highcharts\")[\"Point\"], require(\"highcharts\")[\"StackItem\"]);\n\telse\n\t\troot[\"Highcharts\"] = factory(root[\"Highcharts\"], root[\"Highcharts\"][\"Chart\"], root[\"Highcharts\"][\"Axis\"], root[\"Highcharts\"][\"Color\"], root[\"Highcharts\"][\"SeriesRegistry\"], root[\"Highcharts\"][\"RendererRegistry\"], root[\"Highcharts\"][\"SVGRenderer\"], root[\"Highcharts\"][\"SVGElement\"], root[\"Highcharts\"][\"Point\"], root[\"Highcharts\"][\"StackItem\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE__944__, __WEBPACK_EXTERNAL_MODULE__960__, __WEBPACK_EXTERNAL_MODULE__532__, __WEBPACK_EXTERNAL_MODULE__620__, __WEBPACK_EXTERNAL_MODULE__512__, __WEBPACK_EXTERNAL_MODULE__608__, __WEBPACK_EXTERNAL_MODULE__540__, __WEBPACK_EXTERNAL_MODULE__28__, __WEBPACK_EXTERNAL_MODULE__260__, __WEBPACK_EXTERNAL_MODULE__184__) {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 532:\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__532__;\n\n/***/ }),\n\n/***/ 960:\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__960__;\n\n/***/ }),\n\n/***/ 620:\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__620__;\n\n/***/ }),\n\n/***/ 260:\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__260__;\n\n/***/ }),\n\n/***/ 608:\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__608__;\n\n/***/ }),\n\n/***/ 28:\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__28__;\n\n/***/ }),\n\n/***/ 540:\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__540__;\n\n/***/ }),\n\n/***/ 512:\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__512__;\n\n/***/ }),\n\n/***/ 184:\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__184__;\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 */ gantt_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/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/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/Extensions/CurrentDateIndication.js\n/* *\n *\n *  (c) 2016-2024 Highsoft AS\n *\n *  Author: 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\nvar composed = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).composed;\n\nvar addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, CurrentDateIndication_merge = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).merge, pushUnique = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pushUnique, wrap = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).wrap;\n/* *\n *\n *  Constants\n *\n * */\n/**\n * Show an indicator on the axis for the current date and time. Can be a\n * boolean or a configuration object similar to\n * [xAxis.plotLines](#xAxis.plotLines).\n *\n * @sample gantt/current-date-indicator/demo\n *         Current date indicator enabled\n * @sample gantt/current-date-indicator/object-config\n *         Current date indicator with custom options\n *\n * @declare   Highcharts.CurrentDateIndicatorOptions\n * @type      {boolean|CurrentDateIndicatorOptions}\n * @default   true\n * @extends   xAxis.plotLines\n * @excluding value\n * @product   gantt\n * @apioption xAxis.currentDateIndicator\n */\nvar defaultOptions = {\n    color: \"#ccd3ff\" /* Palette.highlightColor20 */,\n    width: 2,\n    /**\n     * @declare Highcharts.AxisCurrentDateIndicatorLabelOptions\n     */\n    label: {\n        /**\n         * Format of the label. This options is passed as the first argument to\n         * [dateFormat](/class-reference/Highcharts.Time#dateFormat) function.\n         *\n         * @type      {string|Intl.DateTimeFormatOptions}\n         * @product   gantt\n         * @apioption xAxis.currentDateIndicator.label.format\n         */\n        format: '%[abdYHM]',\n        formatter: function (value, format) {\n            return this.axis.chart.time.dateFormat(format || '', value, true);\n        },\n        rotation: 0,\n        /**\n         * @type {Highcharts.CSSObject}\n         */\n        style: {\n            /** @internal */\n            fontSize: '0.7em'\n        }\n    }\n};\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction CurrentDateIndication_compose(AxisClass, PlotLineOrBandClass) {\n    if (pushUnique(composed, 'CurrentDateIndication')) {\n        addEvent(AxisClass, 'afterSetOptions', onAxisAfterSetOptions);\n        addEvent(PlotLineOrBandClass, 'render', onPlotLineOrBandRender);\n        wrap(PlotLineOrBandClass.prototype, 'getLabelText', wrapPlotLineOrBandGetLabelText);\n    }\n}\n/**\n * @private\n */\nfunction onAxisAfterSetOptions() {\n    var options = this.options,\n        cdiOptions = options.currentDateIndicator;\n    if (cdiOptions) {\n        var plotLineOptions = typeof cdiOptions === 'object' ?\n                CurrentDateIndication_merge(defaultOptions,\n            cdiOptions) :\n                CurrentDateIndication_merge(defaultOptions);\n        plotLineOptions.value = Date.now();\n        plotLineOptions.className = 'highcharts-current-date-indicator';\n        if (!options.plotLines) {\n            options.plotLines = [];\n        }\n        options.plotLines.push(plotLineOptions);\n    }\n}\n/**\n * @private\n */\nfunction onPlotLineOrBandRender() {\n    // If the label already exists, update its text\n    if (this.label) {\n        this.label.attr({\n            text: this.getLabelText(this.options.label)\n        });\n    }\n}\n/**\n * @private\n */\nfunction wrapPlotLineOrBandGetLabelText(defaultMethod, defaultLabelOptions) {\n    var options = this.options;\n    if (options &&\n        options.className &&\n        options.className.indexOf('highcharts-current-date-indicator') !== -1 &&\n        options.label &&\n        typeof options.label.formatter === 'function') {\n        options.value = Date.now();\n        return options.label.formatter\n            .call(this, options.value, options.label.format);\n    }\n    return defaultMethod.call(this, defaultLabelOptions);\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar CurrentDateIndication = {\n    compose: CurrentDateIndication_compose\n};\n/* harmony default export */ var Extensions_CurrentDateIndication = (CurrentDateIndication);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Chart\"],\"commonjs\":[\"highcharts\",\"Chart\"],\"commonjs2\":[\"highcharts\",\"Chart\"],\"root\":[\"Highcharts\",\"Chart\"]}\nvar highcharts_Chart_commonjs_highcharts_Chart_commonjs2_highcharts_Chart_root_Highcharts_Chart_ = __webpack_require__(960);\nvar highcharts_Chart_commonjs_highcharts_Chart_commonjs2_highcharts_Chart_root_Highcharts_Chart_default = /*#__PURE__*/__webpack_require__.n(highcharts_Chart_commonjs_highcharts_Chart_commonjs2_highcharts_Chart_root_Highcharts_Chart_);\n;// ./code/es5/es-modules/Core/Chart/GanttChart.js\n/* *\n *\n *  (c) 2016-2024 Highsoft AS\n *\n *  Author: 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\nvar __extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d,\n        b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d,\n        b) { d.__proto__ = b; }) ||\n                function (d,\n        b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\nvar GanttChart_defaultOptions = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defaultOptions;\n\nvar isArray = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isArray, GanttChart_merge = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).merge, splat = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).splat;\n/* *\n *\n *  Class\n *\n * */\n/**\n * Gantt-optimized chart. Use {@link Highcharts.Chart|Chart} for common charts.\n *\n * @requires modules/gantt\n *\n * @class\n * @name Highcharts.GanttChart\n * @extends Highcharts.Chart\n */\nvar GanttChart = /** @class */ (function (_super) {\n    __extends(GanttChart, _super);\n    function GanttChart() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Initializes the chart. The constructor's arguments are passed on\n     * directly.\n     *\n     * @function Highcharts.GanttChart#init\n     *\n     * @param {Highcharts.Options} userOptions\n     *        Custom options.\n     *\n     * @param {Function} [callback]\n     *        Function to run when the chart has loaded and all external\n     *        images are loaded.\n     *\n     *\n     * @emits Highcharts.GanttChart#event:init\n     * @emits Highcharts.GanttChart#event:afterInit\n     */\n    GanttChart.prototype.init = function (userOptions, callback) {\n        var xAxisOptions = userOptions.xAxis,\n            yAxisOptions = userOptions.yAxis;\n        var defaultLinkedTo;\n        // Avoid doing these twice\n        userOptions.xAxis = userOptions.yAxis = void 0;\n        var options = GanttChart_merge(true, {\n                chart: {\n                    type: 'gantt'\n                },\n                title: {\n                    text: ''\n                },\n                legend: {\n                    enabled: false\n                },\n                navigator: {\n                    series: { type: 'gantt' },\n                    // Bars were clipped, #14060.\n                    yAxis: {\n                        type: 'category'\n                    }\n                }\n            },\n            userOptions, // User's options\n            // forced options\n            {\n                isGantt: true\n            });\n        userOptions.xAxis = xAxisOptions;\n        userOptions.yAxis = yAxisOptions;\n        // Apply X axis options to both single and multi x axes If user hasn't\n        // defined axes as array, make it into an array and add a second axis by\n        // default.\n        options.xAxis = (!isArray(userOptions.xAxis) ?\n            [userOptions.xAxis || {}, {}] :\n            userOptions.xAxis).map(function (xAxisOptions, i) {\n            var _a,\n                _b,\n                _c;\n            if (i === 1) { // Second xAxis\n                defaultLinkedTo = 0;\n            }\n            return GanttChart_merge(\n            // Defaults\n            {\n                grid: {\n                    borderColor: \"#cccccc\" /* Palette.neutralColor20 */,\n                    enabled: true\n                },\n                opposite: (_c = (_b = (_a = GanttChart_defaultOptions.xAxis) === null || _a === void 0 ? void 0 : _a.opposite) !== null && _b !== void 0 ? _b : xAxisOptions.opposite) !== null && _c !== void 0 ? _c : true,\n                linkedTo: defaultLinkedTo\n            }, \n            // User options\n            xAxisOptions, \n            // Forced options\n            {\n                type: 'datetime'\n            });\n        });\n        // Apply Y axis options to both single and multi y axes\n        options.yAxis = (splat(userOptions.yAxis || {})).map(function (yAxisOptions) { return GanttChart_merge(\n        // Defaults\n        {\n            grid: {\n                borderColor: \"#cccccc\" /* Palette.neutralColor20 */,\n                enabled: true\n            },\n            staticScale: 50,\n            reversed: true,\n            // Set default type treegrid, but only if 'categories' is\n            // undefined\n            type: yAxisOptions.categories ? yAxisOptions.type : 'treegrid'\n        }, \n        // User options\n        yAxisOptions); });\n        _super.prototype.init.call(this, options, callback);\n    };\n    return GanttChart;\n}((highcharts_Chart_commonjs_highcharts_Chart_commonjs2_highcharts_Chart_root_Highcharts_Chart_default())));\n/* *\n *\n *  Class Namespace\n *\n * */\n(function (GanttChart) {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable jsdoc/check-param-names */\n    /**\n     * The factory function for creating new gantt charts. Creates a new {@link\n     * Highcharts.GanttChart|GanttChart} object with different default options\n     * than the basic Chart.\n     *\n     * @example\n     * // Render a chart in to div#container\n     * let chart = Highcharts.ganttChart('container', {\n     *     title: {\n     *         text: 'My chart'\n     *     },\n     *     series: [{\n     *         data: ...\n     *     }]\n     * });\n     *\n     * @function Highcharts.ganttChart\n     *\n     * @param {string|Highcharts.HTMLDOMElement} renderTo\n     *        The DOM element to render to, or its id.\n     *\n     * @param {Highcharts.Options} options\n     *        The chart options structure.\n     *\n     * @param {Highcharts.ChartCallbackFunction} [callback]\n     *        Function to run when the chart has loaded and all external\n     *        images are loaded. Defining a\n     *        [chart.events.load](https://api.highcharts.com/highcharts/chart.events.load)\n     *        handler is equivalent.\n     *\n     * @return {Highcharts.GanttChart}\n     *         Returns the Chart object.\n     */\n    function ganttChart(a, b, c) {\n        return new GanttChart(a, b, c);\n    }\n    GanttChart.ganttChart = ganttChart;\n    /* eslint-enable jsdoc/check-param-names */\n})(GanttChart || (GanttChart = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Chart_GanttChart = (GanttChart);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Axis\"],\"commonjs\":[\"highcharts\",\"Axis\"],\"commonjs2\":[\"highcharts\",\"Axis\"],\"root\":[\"Highcharts\",\"Axis\"]}\nvar highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_ = __webpack_require__(532);\nvar highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_default = /*#__PURE__*/__webpack_require__.n(highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_);\n;// ./code/es5/es-modules/Stock/Navigator/ChartNavigatorComposition.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar isTouchDevice = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isTouchDevice;\n\nvar ChartNavigatorComposition_addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, ChartNavigatorComposition_merge = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).merge, pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick;\n/* *\n *\n *  Constants\n *\n * */\nvar composedMembers = [];\n/* *\n *\n *  Variables\n *\n * */\nvar NavigatorConstructor;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction ChartNavigatorComposition_compose(ChartClass, NavigatorClass) {\n    if (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default().pushUnique(composedMembers, ChartClass)) {\n        var chartProto = ChartClass.prototype;\n        NavigatorConstructor = NavigatorClass;\n        chartProto.callbacks.push(onChartCallback);\n        ChartNavigatorComposition_addEvent(ChartClass, 'afterAddSeries', onChartAfterAddSeries);\n        ChartNavigatorComposition_addEvent(ChartClass, 'afterSetChartSize', onChartAfterSetChartSize);\n        ChartNavigatorComposition_addEvent(ChartClass, 'afterUpdate', onChartAfterUpdate);\n        ChartNavigatorComposition_addEvent(ChartClass, 'beforeRender', onChartBeforeRender);\n        ChartNavigatorComposition_addEvent(ChartClass, 'beforeShowResetZoom', onChartBeforeShowResetZoom);\n        ChartNavigatorComposition_addEvent(ChartClass, 'update', onChartUpdate);\n    }\n}\n/**\n * Handle adding new series.\n * @private\n */\nfunction onChartAfterAddSeries() {\n    if (this.navigator) {\n        // Recompute which series should be shown in navigator, and add them\n        this.navigator.setBaseSeries(null, false);\n    }\n}\n/**\n * For stock charts, extend the Chart.setChartSize method so that we can set the\n * final top position of the navigator once the height of the chart, including\n * the legend, is determined. #367. We can't use Chart.getMargins, because\n * labels offsets are not calculated yet.\n * @private\n */\nfunction onChartAfterSetChartSize() {\n    var _a;\n    var legend = this.legend,\n        navigator = this.navigator;\n    var legendOptions,\n        xAxis,\n        yAxis;\n    if (navigator) {\n        legendOptions = legend && legend.options;\n        xAxis = navigator.xAxis;\n        yAxis = navigator.yAxis;\n        var scrollbarHeight = navigator.scrollbarHeight,\n            scrollButtonSize = navigator.scrollButtonSize;\n        // Compute the top position\n        if (this.inverted) {\n            navigator.left = navigator.opposite ?\n                this.chartWidth - scrollbarHeight -\n                    navigator.height :\n                this.spacing[3] + scrollbarHeight;\n            navigator.top = this.plotTop + scrollButtonSize;\n        }\n        else {\n            navigator.left = pick(xAxis.left, this.plotLeft + scrollButtonSize);\n            navigator.top = navigator.navigatorOptions.top ||\n                this.chartHeight -\n                    navigator.height -\n                    scrollbarHeight -\n                    (((_a = this.scrollbar) === null || _a === void 0 ? void 0 : _a.options.margin) || 0) -\n                    this.spacing[2] -\n                    (this.rangeSelector && this.extraBottomMargin ?\n                        this.rangeSelector.getHeight() :\n                        0) -\n                    ((legendOptions &&\n                        legendOptions.verticalAlign === 'bottom' &&\n                        legendOptions.layout !== 'proximate' && // #13392\n                        legendOptions.enabled &&\n                        !legendOptions.floating) ?\n                        legend.legendHeight +\n                            pick(legendOptions.margin, 10) :\n                        0) -\n                    (this.titleOffset ? this.titleOffset[2] : 0);\n        }\n        if (xAxis && yAxis) { // False if navigator is disabled (#904)\n            if (this.inverted) {\n                xAxis.options.left = yAxis.options.left = navigator.left;\n            }\n            else {\n                xAxis.options.top = yAxis.options.top = navigator.top;\n            }\n            xAxis.setAxisSize();\n            yAxis.setAxisSize();\n        }\n    }\n}\n/**\n * Initialize navigator, if no scrolling exists yet.\n * @private\n */\nfunction onChartAfterUpdate(event) {\n    if (!this.navigator && !this.scroller &&\n        (this.options.navigator.enabled ||\n            this.options.scrollbar.enabled)) {\n        this.scroller = this.navigator = new NavigatorConstructor(this);\n        if (pick(event.redraw, true)) {\n            this.redraw(event.animation); // #7067\n        }\n    }\n}\n/**\n * Initialize navigator for stock charts\n * @private\n */\nfunction onChartBeforeRender() {\n    var options = this.options;\n    if (options.navigator.enabled ||\n        options.scrollbar.enabled) {\n        this.scroller = this.navigator = new NavigatorConstructor(this);\n    }\n}\n/**\n * For Stock charts. For x only zooming, do not to create the zoom button\n * because X axis zooming is already allowed by the Navigator and Range\n * selector. (#9285)\n * @private\n */\nfunction onChartBeforeShowResetZoom() {\n    var chartOptions = this.options,\n        navigator = chartOptions.navigator,\n        rangeSelector = chartOptions.rangeSelector;\n    if (((navigator && navigator.enabled) ||\n        (rangeSelector && rangeSelector.enabled)) &&\n        ((!isTouchDevice &&\n            this.zooming.type === 'x') ||\n            (isTouchDevice && this.zooming.pinchType === 'x'))) {\n        return false;\n    }\n}\n/**\n * @private\n */\nfunction onChartCallback(chart) {\n    var navigator = chart.navigator;\n    // Initialize the navigator\n    if (navigator && chart.xAxis[0]) {\n        var extremes = chart.xAxis[0].getExtremes();\n        navigator.render(extremes.min, extremes.max);\n    }\n}\n/**\n * Merge options, if no scrolling exists yet\n * @private\n */\nfunction onChartUpdate(e) {\n    var navigatorOptions = (e.options.navigator || {}),\n        scrollbarOptions = (e.options.scrollbar || {});\n    if (!this.navigator && !this.scroller &&\n        (navigatorOptions.enabled || scrollbarOptions.enabled)) {\n        ChartNavigatorComposition_merge(true, this.options.navigator, navigatorOptions);\n        ChartNavigatorComposition_merge(true, this.options.scrollbar, scrollbarOptions);\n        delete e.options.navigator;\n        delete e.options.scrollbar;\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar ChartNavigatorComposition = {\n    compose: ChartNavigatorComposition_compose\n};\n/* harmony default export */ var Navigator_ChartNavigatorComposition = (ChartNavigatorComposition);\n\n;// ./code/es5/es-modules/Core/Axis/NavigatorAxisComposition.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar NavigatorAxisComposition_isTouchDevice = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isTouchDevice;\n\nvar NavigatorAxisComposition_addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, correctFloat = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).correctFloat, NavigatorAxisComposition_defined = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defined, isNumber = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isNumber, NavigatorAxisComposition_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction onAxisInit() {\n    var axis = this;\n    if (!axis.navigatorAxis) {\n        axis.navigatorAxis = new NavigatorAxisAdditions(axis);\n    }\n}\n/**\n * For Stock charts, override selection zooming with some special features\n * because X axis zooming is already allowed by the Navigator and Range\n * selector.\n * @private\n */\nfunction onAxisSetExtremes(e) {\n    var axis = this,\n        chart = axis.chart,\n        chartOptions = chart.options,\n        navigator = chartOptions.navigator,\n        navigatorAxis = axis.navigatorAxis,\n        pinchType = chart.zooming.pinchType,\n        rangeSelector = chartOptions.rangeSelector,\n        zoomType = chart.zooming.type;\n    var zoomed;\n    if (axis.isXAxis &&\n        ((navigator === null || navigator === void 0 ? void 0 : navigator.enabled) || (rangeSelector === null || rangeSelector === void 0 ? void 0 : rangeSelector.enabled))) {\n        // For y only zooming, ignore the X axis completely\n        if (zoomType === 'y' && e.trigger === 'zoom') {\n            zoomed = false;\n            // For xy zooming, record the state of the zoom before zoom selection,\n            // then when the reset button is pressed, revert to this state. This\n            // should apply only if the chart is initialized with a range (#6612),\n            // otherwise zoom all the way out.\n        }\n        else if (((e.trigger === 'zoom' && zoomType === 'xy') ||\n            (NavigatorAxisComposition_isTouchDevice && pinchType === 'xy')) &&\n            axis.options.range) {\n            var previousZoom = navigatorAxis.previousZoom;\n            // Minimum defined, zooming in\n            if (NavigatorAxisComposition_defined(e.min)) {\n                navigatorAxis.previousZoom = [axis.min, axis.max];\n                // Minimum undefined, resetting zoom\n            }\n            else if (previousZoom) {\n                e.min = previousZoom[0];\n                e.max = previousZoom[1];\n                navigatorAxis.previousZoom = void 0;\n            }\n        }\n    }\n    if (typeof zoomed !== 'undefined') {\n        e.preventDefault();\n    }\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * @private\n * @class\n */\nvar NavigatorAxisAdditions = /** @class */ (function () {\n    /* *\n     *\n     *  Constructors\n     *\n     * */\n    function NavigatorAxisAdditions(axis) {\n        this.axis = axis;\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    NavigatorAxisAdditions.compose = function (AxisClass) {\n        if (!AxisClass.keepProps.includes('navigatorAxis')) {\n            AxisClass.keepProps.push('navigatorAxis');\n            NavigatorAxisComposition_addEvent(AxisClass, 'init', onAxisInit);\n            NavigatorAxisComposition_addEvent(AxisClass, 'setExtremes', onAxisSetExtremes);\n        }\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    NavigatorAxisAdditions.prototype.destroy = function () {\n        this.axis = void 0;\n    };\n    /**\n     * Add logic to normalize the zoomed range in order to preserve the pressed\n     * state of range selector buttons\n     *\n     * @private\n     * @function Highcharts.Axis#toFixedRange\n     */\n    NavigatorAxisAdditions.prototype.toFixedRange = function (pxMin, pxMax, fixedMin, fixedMax) {\n        var axis = this.axis,\n            halfPointRange = (axis.pointRange || 0) / 2;\n        var newMin = NavigatorAxisComposition_pick(fixedMin,\n            axis.translate(pxMin,\n            true, !axis.horiz)),\n            newMax = NavigatorAxisComposition_pick(fixedMax,\n            axis.translate(pxMax,\n            true, !axis.horiz));\n        // Add/remove half point range to/from the extremes (#1172)\n        if (!NavigatorAxisComposition_defined(fixedMin)) {\n            newMin = correctFloat(newMin + halfPointRange);\n        }\n        if (!NavigatorAxisComposition_defined(fixedMax)) {\n            newMax = correctFloat(newMax - halfPointRange);\n        }\n        if (!isNumber(newMin) || !isNumber(newMax)) { // #1195, #7411\n            newMin = newMax = void 0;\n        }\n        return {\n            min: newMin,\n            max: newMax\n        };\n    };\n    return NavigatorAxisAdditions;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var NavigatorAxisComposition = (NavigatorAxisAdditions);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Color\"],\"commonjs\":[\"highcharts\",\"Color\"],\"commonjs2\":[\"highcharts\",\"Color\"],\"root\":[\"Highcharts\",\"Color\"]}\nvar highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_ = __webpack_require__(620);\nvar highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default = /*#__PURE__*/__webpack_require__.n(highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_);\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"SeriesRegistry\"],\"commonjs\":[\"highcharts\",\"SeriesRegistry\"],\"commonjs2\":[\"highcharts\",\"SeriesRegistry\"],\"root\":[\"Highcharts\",\"SeriesRegistry\"]}\nvar highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_ = __webpack_require__(512);\nvar highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default = /*#__PURE__*/__webpack_require__.n(highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_);\n;// ./code/es5/es-modules/Stock/Navigator/NavigatorDefaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar color = (highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default()).parse;\n\nvar seriesTypes = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes;\n/* *\n *\n *  Constants\n *\n * */\n/**\n * The navigator is a small series below the main series, displaying\n * a view of the entire data set. It provides tools to zoom in and\n * out on parts of the data as well as panning across the dataset.\n *\n * @product      highstock gantt\n * @optionparent navigator\n */\nvar NavigatorDefaults = {\n    /**\n     * Whether the navigator and scrollbar should adapt to updated data\n     * in the base X axis. When loading data async, as in the demo below,\n     * this should be `false`. Otherwise new data will trigger navigator\n     * redraw, which will cause unwanted looping. In the demo below, the\n     * data in the navigator is set only once. On navigating, only the main\n     * chart content is updated.\n     *\n     * @sample {highstock} stock/demo/lazy-loading/\n     *         Set to false with async data loading\n     *\n     * @type      {boolean}\n     * @default   true\n     * @apioption navigator.adaptToUpdatedData\n     */\n    /**\n     * An integer identifying the index to use for the base series, or a\n     * string representing the id of the series.\n     *\n     * **Note**: As of Highcharts 5.0, this is now a deprecated option.\n     * Prefer [series.showInNavigator](#plotOptions.series.showInNavigator).\n     *\n     * @see [series.showInNavigator](#plotOptions.series.showInNavigator)\n     *\n     * @deprecated\n     * @type      {number|string}\n     * @default   0\n     * @apioption navigator.baseSeries\n     */\n    /**\n     * Enable or disable the navigator.\n     *\n     * @sample {highstock} stock/navigator/enabled/\n     *         Disable the navigator\n     *\n     * @type      {boolean}\n     * @default   true\n     * @apioption navigator.enabled\n     */\n    /**\n     * When the chart is inverted, whether to draw the navigator on the\n     * opposite side.\n     *\n     * @type      {boolean}\n     * @default   false\n     * @since     5.0.8\n     * @apioption navigator.opposite\n     */\n    /**\n     * The height of the navigator.\n     *\n     * @sample {highstock} stock/navigator/height/\n     *         A higher navigator\n     */\n    height: 40,\n    /**\n     * The distance from the nearest element, the X axis or X axis labels.\n     *\n     * @sample {highstock} stock/navigator/margin/\n     *         A margin of 2 draws the navigator closer to the X axis labels\n     */\n    margin: 25,\n    /**\n     * Whether the mask should be inside the range marking the zoomed\n     * range, or outside. In Highcharts Stock 1.x it was always `false`.\n     *\n     * @sample {highstock} stock/demo/maskinside-false/\n     *         False, mask outside\n     *\n     * @since   2.0\n     */\n    maskInside: true,\n    /**\n     * Options for the handles for dragging the zoomed area.\n     *\n     * @sample {highstock} stock/navigator/handles/\n     *         Colored handles\n     */\n    handles: {\n        /**\n         * Width for handles.\n         *\n         * @sample {highstock} stock/navigator/styled-handles/\n         *         Styled handles\n         *\n         * @since   6.0.0\n         */\n        width: 7,\n        /**\n         * Border radius of the handles.\n         *\n         * @sample {highstock} stock/navigator/handles-border-radius/\n         *      Border radius on the navigator handles.\n         *\n         * @since 11.4.2\n         */\n        borderRadius: 0,\n        /**\n         * Height for handles.\n         *\n         * @sample {highstock} stock/navigator/styled-handles/\n         *         Styled handles\n         *\n         * @since   6.0.0\n         */\n        height: 15,\n        /**\n         * Array to define shapes of handles. 0-index for left, 1-index for\n         * right.\n         *\n         * Additionally, the URL to a graphic can be given on this form:\n         * `url(graphic.png)`. Note that for the image to be applied to\n         * exported charts, its URL needs to be accessible by the export\n         * server.\n         *\n         * Custom callbacks for symbol path generation can also be added to\n         * `Highcharts.SVGRenderer.prototype.symbols`. The callback is then\n         * used by its method name, as shown in the demo.\n         *\n         * @sample {highstock} stock/navigator/styled-handles/\n         *         Styled handles\n         *\n         * @type    {Array<string>}\n         * @default [\"navigator-handle\", \"navigator-handle\"]\n         * @since   6.0.0\n         */\n        symbols: ['navigator-handle', 'navigator-handle'],\n        /**\n         * Allows to enable/disable handles.\n         *\n         * @since   6.0.0\n         */\n        enabled: true,\n        /**\n         * The width for the handle border and the stripes inside.\n         *\n         * @sample {highstock} stock/navigator/styled-handles/\n         *         Styled handles\n         *\n         * @since     6.0.0\n         * @apioption navigator.handles.lineWidth\n         */\n        lineWidth: 1,\n        /**\n         * The fill for the handle.\n         *\n         * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         */\n        backgroundColor: \"#f2f2f2\" /* Palette.neutralColor5 */,\n        /**\n         * The stroke for the handle border and the stripes inside.\n         *\n         * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         */\n        borderColor: \"#999999\" /* Palette.neutralColor40 */\n    },\n    /**\n     * The color of the mask covering the areas of the navigator series\n     * that are currently not visible in the main series. The default\n     * color is bluish with an opacity of 0.3 to see the series below.\n     *\n     * @see In styled mode, the mask is styled with the\n     *      `.highcharts-navigator-mask` and\n     *      `.highcharts-navigator-mask-inside` classes.\n     *\n     * @sample {highstock} stock/navigator/maskfill/\n     *         Blue, semi transparent mask\n     *\n     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @default rgba(102,133,194,0.3)\n     */\n    maskFill: color(\"#667aff\" /* Palette.highlightColor60 */).setOpacity(0.3).get(),\n    /**\n     * The color of the line marking the currently zoomed area in the\n     * navigator.\n     *\n     * @sample {highstock} stock/navigator/outline/\n     *         2px blue outline\n     *\n     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @default #cccccc\n     */\n    outlineColor: \"#999999\" /* Palette.neutralColor40 */,\n    /**\n     * The width of the line marking the currently zoomed area in the\n     * navigator.\n     *\n     * @see In styled mode, the outline stroke width is set with the\n     *      `.highcharts-navigator-outline` class.\n     *\n     * @sample {highstock} stock/navigator/outline/\n     *         2px blue outline\n     *\n     * @type    {number}\n     */\n    outlineWidth: 1,\n    /**\n     * Options for the navigator series. Available options are the same\n     * as any series, documented at [plotOptions](#plotOptions.series)\n     * and [series](#series).\n     *\n     * Unless data is explicitly defined on navigator.series, the data\n     * is borrowed from the first series in the chart.\n     *\n     * Default series options for the navigator series are:\n     * ```js\n     * series: {\n     *     type: 'areaspline',\n     *     fillOpacity: 0.05,\n     *     dataGrouping: {\n     *         smoothed: true\n     *     },\n     *     lineWidth: 1,\n     *     marker: {\n     *         enabled: false\n     *     }\n     * }\n     * ```\n     *\n     * @see In styled mode, the navigator series is styled with the\n     *      `.highcharts-navigator-series` class.\n     *\n     * @sample {highstock} stock/navigator/series-data/\n     *         Using a separate data set for the navigator\n     * @sample {highstock} stock/navigator/series/\n     *         A green navigator series\n     *\n     * @type {*|Array<*>|Highcharts.SeriesOptionsType|Array<Highcharts.SeriesOptionsType>}\n     */\n    series: {\n        /**\n         * The type of the navigator series.\n         *\n         * Heads up:\n         * In column-type navigator, zooming is limited to at least one\n         * point with its `pointRange`.\n         *\n         * @sample {highstock} stock/navigator/column/\n         *         Column type navigator\n         *\n         * @type    {string}\n         * @default {highstock} `areaspline` if defined, otherwise `line`\n         * @default {gantt} gantt\n         */\n        type: (typeof seriesTypes.areaspline === 'undefined' ?\n            'line' :\n            'areaspline'),\n        /**\n         * The fill opacity of the navigator series.\n         */\n        fillOpacity: 0.05,\n        /**\n         * The pixel line width of the navigator series.\n         */\n        lineWidth: 1,\n        /**\n         * @ignore-option\n         */\n        compare: null,\n        /**\n         * @ignore-option\n         */\n        sonification: {\n            enabled: false\n        },\n        /**\n         * Unless data is explicitly defined, the data is borrowed from the\n         * first series in the chart.\n         *\n         * @type      {Array<number|Array<number|string|null>|object|null>}\n         * @product   highstock\n         * @apioption navigator.series.data\n         */\n        /**\n         * Data grouping options for the navigator series.\n         *\n         * @extends plotOptions.series.dataGrouping\n         */\n        dataGrouping: {\n            approximation: 'average',\n            enabled: true,\n            groupPixelWidth: 2,\n            // Replace smoothed property by anchors, #12455.\n            firstAnchor: 'firstPoint',\n            anchor: 'middle',\n            lastAnchor: 'lastPoint',\n            // Day and week differs from plotOptions.series.dataGrouping\n            units: [\n                ['millisecond', [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]],\n                ['second', [1, 2, 5, 10, 15, 30]],\n                ['minute', [1, 2, 5, 10, 15, 30]],\n                ['hour', [1, 2, 3, 4, 6, 8, 12]],\n                ['day', [1, 2, 3, 4]],\n                ['week', [1, 2, 3]],\n                ['month', [1, 3, 6]],\n                ['year', null]\n            ]\n        },\n        /**\n         * Data label options for the navigator series. Data labels are\n         * disabled by default on the navigator series.\n         *\n         * @extends plotOptions.series.dataLabels\n         */\n        dataLabels: {\n            enabled: false,\n            zIndex: 2 // #1839\n        },\n        id: 'highcharts-navigator-series',\n        className: 'highcharts-navigator-series',\n        /**\n         * Sets the fill color of the navigator series.\n         *\n         * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         * @apioption navigator.series.color\n         */\n        /**\n         * Line color for the navigator series. Allows setting the color\n         * while disallowing the default candlestick setting.\n         *\n         * @type {Highcharts.ColorString|null}\n         */\n        lineColor: null, // #4602\n        marker: {\n            enabled: false\n        },\n        /**\n         * Since Highcharts Stock v8, default value is the same as default\n         * `pointRange` defined for a specific type (e.g. `null` for\n         * column type).\n         *\n         * In Highcharts Stock version < 8, defaults to 0.\n         *\n         * @extends plotOptions.series.pointRange\n         * @type {number|null}\n         * @apioption navigator.series.pointRange\n         */\n        /**\n         * The threshold option. Setting it to 0 will make the default\n         * navigator area series draw its area from the 0 value and up.\n         *\n         * @type {number|null}\n         */\n        threshold: null\n    },\n    /**\n     * Enable or disable navigator sticking to right, while adding new\n     * points. If `undefined`, the navigator sticks to the axis maximum only\n     * if it was already at the maximum prior to adding points.\n     *\n     * @type      {boolean}\n     * @default   undefined\n     * @since 10.2.1\n     * @sample {highstock} stock/navigator/sticktomax-false/\n     * stickToMax set to false\n     * @apioption navigator.stickToMax\n     */\n    /**\n     * Options for the navigator X axis. Default series options for the\n     * navigator xAxis are:\n     * ```js\n     * xAxis: {\n     *     tickWidth: 0,\n     *     lineWidth: 0,\n     *     gridLineWidth: 1,\n     *     tickPixelInterval: 200,\n     *     labels: {\n     *            align: 'left',\n     *         style: {\n     *             color: '#888'\n     *         },\n     *         x: 3,\n     *         y: -4\n     *     }\n     * }\n     * ```\n     *\n     * @extends   xAxis\n     * @excluding linkedTo, maxZoom, minRange, opposite, range, scrollbar,\n     *            showEmpty, maxRange\n     */\n    xAxis: {\n        /**\n         * Additional range on the right side of the xAxis. Works similar to\n         * `xAxis.maxPadding`, but the value is set in terms of axis values,\n         * percentage or pixels.\n         *\n         * If it's a number, it is interpreted as axis values, which in a\n         * datetime axis equals milliseconds.\n         *\n         * If it's a percentage string, is interpreted as percentages of the\n         * axis length. An overscroll of 50% will make a 100px axis 50px longer.\n         *\n         * If it's a pixel string, it is interpreted as a fixed pixel value, but\n         * limited to 90% of the axis length.\n         *\n         * If it's undefined, the value is inherited from `xAxis.overscroll`.\n         *\n         * Can be set for both, main xAxis and navigator's xAxis.\n         *\n         * @type    {number | string | undefined}\n         * @since   6.0.0\n         * @apioption navigator.xAxis.overscroll\n         */\n        className: 'highcharts-navigator-xaxis',\n        tickLength: 0,\n        lineWidth: 0,\n        gridLineColor: \"#e6e6e6\" /* Palette.neutralColor10 */,\n        id: 'navigator-x-axis',\n        gridLineWidth: 1,\n        tickPixelInterval: 200,\n        labels: {\n            align: 'left',\n            /**\n             * @type {Highcharts.CSSObject}\n             */\n            style: {\n                /** @ignore */\n                color: \"#000000\" /* Palette.neutralColor100 */,\n                /** @ignore */\n                fontSize: '0.7em',\n                /** @ignore */\n                opacity: 0.6,\n                /** @ignore */\n                textOutline: '2px contrast'\n            },\n            x: 3,\n            y: -4\n        },\n        crosshair: false\n    },\n    /**\n     * Options for the navigator Y axis. Default series options for the\n     * navigator yAxis are:\n     * ```js\n     * yAxis: {\n     *     gridLineWidth: 0,\n     *     startOnTick: false,\n     *     endOnTick: false,\n     *     minPadding: 0.1,\n     *     maxPadding: 0.1,\n     *     labels: {\n     *         enabled: false\n     *     },\n     *     title: {\n     *         text: null\n     *     },\n     *     tickWidth: 0\n     * }\n     * ```\n     *\n     * @extends   yAxis\n     * @excluding height, linkedTo, maxZoom, minRange, ordinal, range,\n     *            showEmpty, scrollbar, top, units, maxRange, minLength,\n     *            maxLength, resize\n     */\n    yAxis: {\n        className: 'highcharts-navigator-yaxis',\n        gridLineWidth: 0,\n        startOnTick: false,\n        endOnTick: false,\n        minPadding: 0.1,\n        id: 'navigator-y-axis',\n        maxPadding: 0.1,\n        labels: {\n            enabled: false\n        },\n        crosshair: false,\n        title: {\n            text: null\n        },\n        tickLength: 0,\n        tickWidth: 0\n    }\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Navigator_NavigatorDefaults = (NavigatorDefaults);\n/* *\n *\n *  API Options\n *\n * */\n/**\n * Maximum range which can be set using the navigator's handles.\n * Opposite of [xAxis.minRange](#xAxis.minRange).\n *\n * @sample {highstock} stock/navigator/maxrange/\n *         Defined max and min range\n *\n * @type      {number}\n * @since     6.0.0\n * @product   highstock gantt\n * @apioption xAxis.maxRange\n */\n(''); // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Renderer/SVG/Symbols.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar Symbols_defined = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defined, Symbols_isNumber = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isNumber, Symbols_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick;\n/* *\n *\n *  Functions\n *\n * */\n/* eslint-disable require-jsdoc, valid-jsdoc */\n/**\n *\n */\nfunction arc(cx, cy, w, h, options) {\n    var arc = [];\n    if (options) {\n        var start = options.start || 0,\n            rx = Symbols_pick(options.r,\n            w),\n            ry = Symbols_pick(options.r,\n            h || w), \n            // Subtract a small number to prevent cos and sin of start and end\n            // from becoming equal on 360 arcs (#1561). The size of the circle\n            // affects the constant, therefore the division by `rx`. If the\n            // proximity is too small, the arc disappears. If it is too great, a\n            // gap appears. This can be seen in the animation of the official\n            // bubble demo (#20586).\n            proximity = 0.0002 / (options.borderRadius ? 1 : Math.max(rx, 1)),\n            fullCircle = (Math.abs((options.end || 0) - start - 2 * Math.PI) <\n                proximity),\n            end = (options.end || 0) - (fullCircle ? proximity : 0),\n            innerRadius = options.innerR,\n            open_1 = Symbols_pick(options.open,\n            fullCircle),\n            cosStart = Math.cos(start),\n            sinStart = Math.sin(start),\n            cosEnd = Math.cos(end),\n            sinEnd = Math.sin(end), \n            // Proximity takes care of rounding errors around PI (#6971)\n            longArc = Symbols_pick(options.longArc,\n            end - start - Math.PI < proximity ? 0 : 1);\n        var arcSegment = [\n                'A', // ArcTo\n                rx, // X radius\n                ry, // Y radius\n                0, // Slanting\n                longArc, // Long or short arc\n                Symbols_pick(options.clockwise, 1), // Clockwise\n                cx + rx * cosEnd,\n                cy + ry * sinEnd\n            ];\n        arcSegment.params = { start: start, end: end, cx: cx, cy: cy }; // Memo for border radius\n        arc.push([\n            'M',\n            cx + rx * cosStart,\n            cy + ry * sinStart\n        ], arcSegment);\n        if (Symbols_defined(innerRadius)) {\n            arcSegment = [\n                'A', // ArcTo\n                innerRadius, // X radius\n                innerRadius, // Y radius\n                0, // Slanting\n                longArc, // Long or short arc\n                // Clockwise - opposite to the outer arc clockwise\n                Symbols_defined(options.clockwise) ? 1 - options.clockwise : 0,\n                cx + innerRadius * cosStart,\n                cy + innerRadius * sinStart\n            ];\n            // Memo for border radius\n            arcSegment.params = {\n                start: end,\n                end: start,\n                cx: cx,\n                cy: cy\n            };\n            arc.push(open_1 ?\n                [\n                    'M',\n                    cx + innerRadius * cosEnd,\n                    cy + innerRadius * sinEnd\n                ] : [\n                'L',\n                cx + innerRadius * cosEnd,\n                cy + innerRadius * sinEnd\n            ], arcSegment);\n        }\n        if (!open_1) {\n            arc.push(['Z']);\n        }\n    }\n    return arc;\n}\n/**\n * Callout shape used for default tooltips.\n */\nfunction callout(x, y, w, h, options) {\n    var arrowLength = 6,\n        halfDistance = 6,\n        r = Math.min((options && options.r) || 0,\n        w,\n        h),\n        safeDistance = r + halfDistance,\n        anchorX = options && options.anchorX,\n        anchorY = options && options.anchorY || 0;\n    var path = roundedRect(x,\n        y,\n        w,\n        h, { r: r });\n    if (!Symbols_isNumber(anchorX)) {\n        return path;\n    }\n    // Do not render a connector, if anchor starts inside the label\n    if (anchorX < w && anchorX > 0 && anchorY < h && anchorY > 0) {\n        return path;\n    }\n    // Anchor on right side\n    if (x + anchorX > w - safeDistance) {\n        // Chevron\n        if (anchorY > y + safeDistance &&\n            anchorY < y + h - safeDistance) {\n            path.splice(3, 1, ['L', x + w, anchorY - halfDistance], ['L', x + w + arrowLength, anchorY], ['L', x + w, anchorY + halfDistance], ['L', x + w, y + h - r]);\n            // Simple connector\n        }\n        else {\n            if (anchorX < w) { // Corner connector\n                var isTopCorner = anchorY < y + safeDistance,\n                    cornerY = isTopCorner ? y : y + h,\n                    sliceStart = isTopCorner ? 2 : 5;\n                path.splice(sliceStart, 0, ['L', anchorX, anchorY], ['L', x + w - r, cornerY]);\n            }\n            else { // Side connector\n                path.splice(3, 1, ['L', x + w, h / 2], ['L', anchorX, anchorY], ['L', x + w, h / 2], ['L', x + w, y + h - r]);\n            }\n        }\n        // Anchor on left side\n    }\n    else if (x + anchorX < safeDistance) {\n        // Chevron\n        if (anchorY > y + safeDistance &&\n            anchorY < y + h - safeDistance) {\n            path.splice(7, 1, ['L', x, anchorY + halfDistance], ['L', x - arrowLength, anchorY], ['L', x, anchorY - halfDistance], ['L', x, y + r]);\n            // Simple connector\n        }\n        else {\n            if (anchorX > 0) { // Corner connector\n                var isTopCorner = anchorY < y + safeDistance,\n                    cornerY = isTopCorner ? y : y + h,\n                    sliceStart = isTopCorner ? 1 : 6;\n                path.splice(sliceStart, 0, ['L', anchorX, anchorY], ['L', x + r, cornerY]);\n            }\n            else { // Side connector\n                path.splice(7, 1, ['L', x, h / 2], ['L', anchorX, anchorY], ['L', x, h / 2], ['L', x, y + r]);\n            }\n        }\n    }\n    else if ( // Replace bottom\n    anchorY > h &&\n        anchorX < w - safeDistance) {\n        path.splice(5, 1, ['L', anchorX + halfDistance, y + h], ['L', anchorX, y + h + arrowLength], ['L', anchorX - halfDistance, y + h], ['L', x + r, y + h]);\n    }\n    else if ( // Replace top\n    anchorY < 0 &&\n        anchorX > safeDistance) {\n        path.splice(1, 1, ['L', anchorX - halfDistance, y], ['L', anchorX, y - arrowLength], ['L', anchorX + halfDistance, y], ['L', w - r, y]);\n    }\n    return path;\n}\n/**\n *\n */\nfunction circle(x, y, w, h) {\n    // Return a full arc\n    return arc(x + w / 2, y + h / 2, w / 2, h / 2, {\n        start: Math.PI * 0.5,\n        end: Math.PI * 2.5,\n        open: false\n    });\n}\n/**\n *\n */\nfunction diamond(x, y, w, h) {\n    return [\n        ['M', x + w / 2, y],\n        ['L', x + w, y + h / 2],\n        ['L', x + w / 2, y + h],\n        ['L', x, y + h / 2],\n        ['Z']\n    ];\n}\n// #15291\n/**\n *\n */\nfunction rect(x, y, w, h, options) {\n    if (options && options.r) {\n        return roundedRect(x, y, w, h, options);\n    }\n    return [\n        ['M', x, y],\n        ['L', x + w, y],\n        ['L', x + w, y + h],\n        ['L', x, y + h],\n        ['Z']\n    ];\n}\n/**\n *\n */\nfunction roundedRect(x, y, w, h, options) {\n    var r = (options === null || options === void 0 ? void 0 : options.r) || 0;\n    return [\n        ['M', x + r, y],\n        ['L', x + w - r, y], // Top side\n        ['A', r, r, 0, 0, 1, x + w, y + r], // Top-right corner\n        ['L', x + w, y + h - r], // Right side\n        ['A', r, r, 0, 0, 1, x + w - r, y + h], // Bottom-right corner\n        ['L', x + r, y + h], // Bottom side\n        ['A', r, r, 0, 0, 1, x, y + h - r], // Bottom-left corner\n        ['L', x, y + r], // Left side\n        ['A', r, r, 0, 0, 1, x + r, y],\n        ['Z'] // Top-left corner\n    ];\n}\n/**\n *\n */\nfunction triangle(x, y, w, h) {\n    return [\n        ['M', x + w / 2, y],\n        ['L', x + w, y + h],\n        ['L', x, y + h],\n        ['Z']\n    ];\n}\n/**\n *\n */\nfunction triangleDown(x, y, w, h) {\n    return [\n        ['M', x, y],\n        ['L', x + w, y],\n        ['L', x + w / 2, y + h],\n        ['Z']\n    ];\n}\nvar Symbols = {\n    arc: arc,\n    callout: callout,\n    circle: circle,\n    diamond: diamond,\n    rect: rect,\n    roundedRect: roundedRect,\n    square: rect,\n    triangle: triangle,\n    'triangle-down': triangleDown\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var SVG_Symbols = (Symbols);\n\n;// ./code/es5/es-modules/Stock/Navigator/NavigatorSymbols.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\nvar relativeLength = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).relativeLength;\n/* *\n *\n *  Constants\n *\n * */\n/**\n * Draw one of the handles on the side of the zoomed range in the navigator.\n * @private\n */\nfunction navigatorHandle(_x, _y, width, height, options) {\n    if (options === void 0) { options = {}; }\n    var halfWidth = options.width ? options.width / 2 : width,\n        markerPosition = 1.5,\n        r = relativeLength(options.borderRadius || 0,\n        Math.min(halfWidth * 2,\n        height));\n    height = options.height || height;\n    return __spreadArray([\n        ['M', -markerPosition, height / 2 - 3.5],\n        ['L', -markerPosition, height / 2 + 4.5],\n        ['M', markerPosition - 1, height / 2 - 3.5],\n        ['L', markerPosition - 1, height / 2 + 4.5]\n    ], SVG_Symbols.rect(-halfWidth - 1, 0.5, halfWidth * 2 + 1, height, { r: r }), true);\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar NavigatorSymbols = {\n    'navigator-handle': navigatorHandle\n};\n/* harmony default export */ var Navigator_NavigatorSymbols = (NavigatorSymbols);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"RendererRegistry\"],\"commonjs\":[\"highcharts\",\"RendererRegistry\"],\"commonjs2\":[\"highcharts\",\"RendererRegistry\"],\"root\":[\"Highcharts\",\"RendererRegistry\"]}\nvar highcharts_RendererRegistry_commonjs_highcharts_RendererRegistry_commonjs2_highcharts_RendererRegistry_root_Highcharts_RendererRegistry_ = __webpack_require__(608);\nvar highcharts_RendererRegistry_commonjs_highcharts_RendererRegistry_commonjs2_highcharts_RendererRegistry_root_Highcharts_RendererRegistry_default = /*#__PURE__*/__webpack_require__.n(highcharts_RendererRegistry_commonjs_highcharts_RendererRegistry_commonjs2_highcharts_RendererRegistry_root_Highcharts_RendererRegistry_);\n;// ./code/es5/es-modules/Stock/Utilities/StockUtilities.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar StockUtilities_defined = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defined;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Sets the chart.fixedRange to the specified value. If the value is larger\n * than actual range, sets it to the maximum possible range. (#20327)\n *\n * @private\n * @function Highcharts.StockChart#setFixedRange\n * @param {number|undefined} range\n *        Range to set in axis units.\n */\nfunction setFixedRange(range) {\n    var xAxis = this.xAxis[0];\n    if (StockUtilities_defined(xAxis.dataMax) &&\n        StockUtilities_defined(xAxis.dataMin) &&\n        range) {\n        this.fixedRange = Math.min(range, xAxis.dataMax - xAxis.dataMin);\n    }\n    else {\n        this.fixedRange = range;\n    }\n}\nvar StockUtilities = {\n    setFixedRange: setFixedRange\n};\n/* harmony default export */ var Utilities_StockUtilities = (StockUtilities);\n\n;// ./code/es5/es-modules/Stock/Navigator/NavigatorComposition.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar setOptions = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).setOptions;\n\nvar NavigatorComposition_composed = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).composed;\n\n\n\n\nvar getRendererType = (highcharts_RendererRegistry_commonjs_highcharts_RendererRegistry_commonjs2_highcharts_RendererRegistry_root_Highcharts_RendererRegistry_default()).getRendererType;\n\nvar NavigatorComposition_setFixedRange = Utilities_StockUtilities.setFixedRange;\n\nvar NavigatorComposition_addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, extend = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).extend, NavigatorComposition_pushUnique = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pushUnique;\n/* *\n *\n *  Variables\n *\n * */\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction NavigatorComposition_compose(ChartClass, AxisClass, SeriesClass) {\n    NavigatorAxisComposition.compose(AxisClass);\n    if (NavigatorComposition_pushUnique(NavigatorComposition_composed, 'Navigator')) {\n        ChartClass.prototype.setFixedRange = NavigatorComposition_setFixedRange;\n        extend(getRendererType().prototype.symbols, Navigator_NavigatorSymbols);\n        NavigatorComposition_addEvent(SeriesClass, 'afterUpdate', onSeriesAfterUpdate);\n        setOptions({ navigator: Navigator_NavigatorDefaults });\n    }\n}\n/**\n * Handle updating series\n * @private\n */\nfunction onSeriesAfterUpdate() {\n    if (this.chart.navigator && !this.options.isInternal) {\n        this.chart.navigator.setBaseSeries(null, false);\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar NavigatorComposition = {\n    compose: NavigatorComposition_compose\n};\n/* harmony default export */ var Navigator_NavigatorComposition = (NavigatorComposition);\n\n;// ./code/es5/es-modules/Core/Axis/ScrollbarAxis.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar ScrollbarAxis_composed = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).composed;\n\nvar ScrollbarAxis_addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, ScrollbarAxis_defined = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defined, ScrollbarAxis_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick, ScrollbarAxis_pushUnique = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pushUnique;\n/* *\n *\n *  Composition\n *\n * */\nvar ScrollbarAxis;\n(function (ScrollbarAxis) {\n    /* *\n     *\n     *  Variables\n     *\n     * */\n    var Scrollbar;\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Attaches to axis events to create scrollbars if enabled.\n     *\n     * @private\n     *\n     * @param {Highcharts.Axis} AxisClass\n     * Axis class to extend.\n     *\n     * @param {Highcharts.Scrollbar} ScrollbarClass\n     * Scrollbar class to use.\n     */\n    function compose(AxisClass, ScrollbarClass) {\n        if (ScrollbarAxis_pushUnique(ScrollbarAxis_composed, 'Axis.Scrollbar')) {\n            Scrollbar = ScrollbarClass;\n            ScrollbarAxis_addEvent(AxisClass, 'afterGetOffset', onAxisAfterGetOffset);\n            ScrollbarAxis_addEvent(AxisClass, 'afterInit', onAxisAfterInit);\n            ScrollbarAxis_addEvent(AxisClass, 'afterRender', onAxisAfterRender);\n        }\n    }\n    ScrollbarAxis.compose = compose;\n    /** @private */\n    function getExtremes(axis) {\n        var axisMin = ScrollbarAxis_pick(axis.options && axis.options.min,\n            axis.min);\n        var axisMax = ScrollbarAxis_pick(axis.options && axis.options.max,\n            axis.max);\n        return {\n            axisMin: axisMin,\n            axisMax: axisMax,\n            scrollMin: ScrollbarAxis_defined(axis.dataMin) ?\n                Math.min(axisMin, axis.min, axis.dataMin, ScrollbarAxis_pick(axis.threshold, Infinity)) : axisMin,\n            scrollMax: ScrollbarAxis_defined(axis.dataMax) ?\n                Math.max(axisMax, axis.max, axis.dataMax, ScrollbarAxis_pick(axis.threshold, -Infinity)) : axisMax\n        };\n    }\n    /**\n     * Make space for a scrollbar.\n     * @private\n     */\n    function onAxisAfterGetOffset() {\n        var axis = this,\n            scrollbar = axis.scrollbar,\n            opposite = scrollbar && !scrollbar.options.opposite,\n            index = axis.horiz ? 2 : opposite ? 3 : 1;\n        if (scrollbar) {\n            // Reset scrollbars offsets\n            axis.chart.scrollbarsOffsets = [0, 0];\n            axis.chart.axisOffset[index] +=\n                scrollbar.size + (scrollbar.options.margin || 0);\n        }\n    }\n    /**\n     * Wrap axis initialization and create scrollbar if enabled.\n     * @private\n     */\n    function onAxisAfterInit() {\n        var axis = this;\n        if (axis.options &&\n            axis.options.scrollbar &&\n            axis.options.scrollbar.enabled) {\n            // Predefined options:\n            axis.options.scrollbar.vertical = !axis.horiz;\n            axis.options.startOnTick = axis.options.endOnTick = false;\n            axis.scrollbar = new Scrollbar(axis.chart.renderer, axis.options.scrollbar, axis.chart);\n            ScrollbarAxis_addEvent(axis.scrollbar, 'changed', function (e) {\n                var _a = getExtremes(axis),\n                    axisMin = _a.axisMin,\n                    axisMax = _a.axisMax,\n                    unitedMin = _a.scrollMin,\n                    unitedMax = _a.scrollMax,\n                    range = unitedMax - unitedMin;\n                var to,\n                    from;\n                // #12834, scroll when show/hide series, wrong extremes\n                if (!ScrollbarAxis_defined(axisMin) || !ScrollbarAxis_defined(axisMax)) {\n                    return;\n                }\n                if ((axis.horiz && !axis.reversed) ||\n                    (!axis.horiz && axis.reversed)) {\n                    to = unitedMin + range * this.to;\n                    from = unitedMin + range * this.from;\n                }\n                else {\n                    // Y-values in browser are reversed, but this also\n                    // applies for reversed horizontal axis:\n                    to = unitedMin + range * (1 - this.from);\n                    from = unitedMin + range * (1 - this.to);\n                }\n                if (this.shouldUpdateExtremes(e.DOMType)) {\n                    // #17977, set animation to undefined instead of true\n                    var animate = e.DOMType === 'mousemove' ||\n                            e.DOMType === 'touchmove' ? false : void 0;\n                    axis.setExtremes(from, to, true, animate, e);\n                }\n                else {\n                    // When live redraw is disabled, don't change extremes\n                    // Only change the position of the scrollbar thumb\n                    this.setRange(this.from, this.to);\n                }\n            });\n        }\n    }\n    /**\n     * Wrap rendering axis, and update scrollbar if one is created.\n     * @private\n     */\n    function onAxisAfterRender() {\n        var axis = this,\n            _a = getExtremes(axis),\n            scrollMin = _a.scrollMin,\n            scrollMax = _a.scrollMax,\n            scrollbar = axis.scrollbar,\n            offset = (axis.axisTitleMargin + (axis.titleOffset || 0)),\n            scrollbarsOffsets = axis.chart.scrollbarsOffsets,\n            axisMargin = axis.options.margin || 0;\n        var offsetsIndex,\n            from,\n            to;\n        if (scrollbar && scrollbarsOffsets) {\n            if (axis.horiz) {\n                // Reserve space for labels/title\n                if (!axis.opposite) {\n                    scrollbarsOffsets[1] += offset;\n                }\n                scrollbar.position(axis.left, (axis.top +\n                    axis.height +\n                    2 +\n                    scrollbarsOffsets[1] -\n                    (axis.opposite ? axisMargin : 0)), axis.width, axis.height);\n                // Next scrollbar should reserve space for margin (if set)\n                if (!axis.opposite) {\n                    scrollbarsOffsets[1] += axisMargin;\n                }\n                offsetsIndex = 1;\n            }\n            else {\n                // Reserve space for labels/title\n                if (axis.opposite) {\n                    scrollbarsOffsets[0] += offset;\n                }\n                var xPosition = void 0;\n                if (!scrollbar.options.opposite) {\n                    xPosition = axis.opposite ? 0 : axisMargin;\n                }\n                else {\n                    xPosition = axis.left +\n                        axis.width +\n                        2 +\n                        scrollbarsOffsets[0] -\n                        (axis.opposite ? 0 : axisMargin);\n                }\n                scrollbar.position(xPosition, axis.top, axis.width, axis.height);\n                // Next scrollbar should reserve space for margin (if set)\n                if (axis.opposite) {\n                    scrollbarsOffsets[0] += axisMargin;\n                }\n                offsetsIndex = 0;\n            }\n            scrollbarsOffsets[offsetsIndex] += scrollbar.size +\n                (scrollbar.options.margin || 0);\n            if (isNaN(scrollMin) ||\n                isNaN(scrollMax) ||\n                !ScrollbarAxis_defined(axis.min) ||\n                !ScrollbarAxis_defined(axis.max) ||\n                axis.dataMin === axis.dataMax // #10733\n            ) {\n                // Default action: when data extremes are the same or there is\n                // not extremes on the axis, but scrollbar exists, make it\n                // full size\n                scrollbar.setRange(0, 1);\n            }\n            else if (axis.min === axis.max) { // #20359\n                // When the extremes are the same, set the scrollbar to a point\n                // within the extremes range. Utilize pointRange to perform the\n                // calculations. (#20359)\n                var interval = axis.pointRange / (axis.dataMax +\n                        1);\n                from = interval * axis.min;\n                to = interval * (axis.max + 1);\n                scrollbar.setRange(from, to);\n            }\n            else {\n                from = ((axis.min - scrollMin) /\n                    (scrollMax - scrollMin));\n                to = ((axis.max - scrollMin) /\n                    (scrollMax - scrollMin));\n                if ((axis.horiz && !axis.reversed) ||\n                    (!axis.horiz && axis.reversed)) {\n                    scrollbar.setRange(from, to);\n                }\n                else {\n                    // Inverse vertical axis\n                    scrollbar.setRange(1 - to, 1 - from);\n                }\n            }\n        }\n    }\n})(ScrollbarAxis || (ScrollbarAxis = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Axis_ScrollbarAxis = (ScrollbarAxis);\n\n;// ./code/es5/es-modules/Stock/Scrollbar/ScrollbarDefaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Constant\n *\n * */\n/**\n *\n * The scrollbar is a means of panning over the X axis of a stock chart.\n * Scrollbars can also be applied to other types of axes.\n *\n * Another approach to scrollable charts is the [chart.scrollablePlotArea](\n * https://api.highcharts.com/highcharts/chart.scrollablePlotArea) option that\n * is especially suitable for simpler cartesian charts on mobile.\n *\n * In styled mode, all the presentational options for the\n * scrollbar are replaced by the classes `.highcharts-scrollbar-thumb`,\n * `.highcharts-scrollbar-arrow`, `.highcharts-scrollbar-button`,\n * `.highcharts-scrollbar-rifles` and `.highcharts-scrollbar-track`.\n *\n * @sample stock/yaxis/inverted-bar-scrollbar/\n *         A scrollbar on a simple bar chart\n *\n * @product highstock gantt\n * @optionparent scrollbar\n *\n * @private\n */\nvar ScrollbarDefaults = {\n    /**\n     * The height of the scrollbar. If `buttonsEnabled` is true , the height\n     * also applies to the width of the scroll arrows so that they are always\n     * squares.\n     *\n     * @sample stock/scrollbar/style/\n     *         Non-default height\n     *\n     * @type    {number}\n     */\n    height: 10,\n    /**\n     * The border rounding radius of the bar.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    barBorderRadius: 5,\n    /**\n     * The corner radius of the scrollbar buttons.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    buttonBorderRadius: 0,\n    /**\n     * Enable or disable the buttons at the end of the scrollbar.\n     *\n     * @since 11.0.0\n     */\n    buttonsEnabled: false,\n    /**\n     * Enable or disable the scrollbar.\n     *\n     * @sample stock/scrollbar/enabled/\n     *         Disable the scrollbar, only use navigator\n     *\n     * @type      {boolean}\n     * @default   true\n     * @apioption scrollbar.enabled\n     */\n    /**\n     * Whether to redraw the main chart as the scrollbar or the navigator\n     * zoomed window is moved. Defaults to `true` for modern browsers and\n     * `false` for legacy IE browsers as well as mobile devices.\n     *\n     * @sample stock/scrollbar/liveredraw\n     *         Setting live redraw to false\n     *\n     * @type  {boolean}\n     * @since 1.3\n     */\n    liveRedraw: void 0,\n    /**\n     * The margin between the scrollbar and its axis when the scrollbar is\n     * applied directly to an axis, or the navigator in case that is enabled.\n     * Defaults to 10 for axis, 0 for navigator.\n     *\n     * @type {number|undefined}\n     */\n    margin: void 0,\n    /**\n     * The minimum width of the scrollbar.\n     *\n     * @since 1.2.5\n     */\n    minWidth: 6,\n    /** @ignore-option */\n    opposite: true,\n    /**\n     * Whether to show or hide the scrollbar when the scrolled content is\n     * zoomed out to it full extent.\n     *\n     * @type      {boolean}\n     * @default   true\n     * @apioption scrollbar.showFull\n     */\n    step: 0.2,\n    /**\n     * The z index of the scrollbar group.\n     */\n    zIndex: 3,\n    /**\n     * The background color of the scrollbar itself.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    barBackgroundColor: \"#cccccc\" /* Palette.neutralColor20 */,\n    /**\n     * The width of the bar's border.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    barBorderWidth: 0,\n    /**\n     * The color of the scrollbar's border.\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    barBorderColor: \"#cccccc\" /* Palette.neutralColor20 */,\n    /**\n     * The color of the small arrow inside the scrollbar buttons.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    buttonArrowColor: \"#333333\" /* Palette.neutralColor80 */,\n    /**\n     * The color of scrollbar buttons.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    buttonBackgroundColor: \"#e6e6e6\" /* Palette.neutralColor10 */,\n    /**\n     * The color of the border of the scrollbar buttons.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    buttonBorderColor: \"#cccccc\" /* Palette.neutralColor20 */,\n    /**\n     * The border width of the scrollbar buttons.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    buttonBorderWidth: 1,\n    /**\n     * The color of the small rifles in the middle of the scrollbar.\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    rifleColor: 'none',\n    /**\n     * The color of the track background.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    trackBackgroundColor: 'rgba(255, 255, 255, 0.001)', // #18922\n    /**\n     * The color of the border of the scrollbar track.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    trackBorderColor: \"#cccccc\" /* Palette.neutralColor20 */,\n    /**\n     * The corner radius of the border of the scrollbar track.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    trackBorderRadius: 5,\n    /**\n     * The width of the border of the scrollbar track.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    trackBorderWidth: 1\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Scrollbar_ScrollbarDefaults = (ScrollbarDefaults);\n\n;// ./code/es5/es-modules/Stock/Scrollbar/Scrollbar.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar Scrollbar_defaultOptions = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defaultOptions;\n\n\n\n\nvar Scrollbar_addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, Scrollbar_correctFloat = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).correctFloat, crisp = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).crisp, Scrollbar_defined = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defined, destroyObjectProperties = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).destroyObjectProperties, fireEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).fireEvent, Scrollbar_merge = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).merge, Scrollbar_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick, removeEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).removeEvent;\n/* *\n *\n *  Constants\n *\n * */\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/**\n * A reusable scrollbar, internally used in Highcharts Stock's\n * navigator and optionally on individual axes.\n *\n * @private\n * @class\n * @name Highcharts.Scrollbar\n * @param {Highcharts.SVGRenderer} renderer\n * @param {Highcharts.ScrollbarOptions} options\n * @param {Highcharts.Chart} chart\n */\nvar Scrollbar = /** @class */ (function () {\n    /* *\n     *\n     *  Constructors\n     *\n     * */\n    function Scrollbar(renderer, options, chart) {\n        /* *\n         *\n         *  Properties\n         *\n         * */\n        this._events = [];\n        this.chartX = 0;\n        this.chartY = 0;\n        this.from = 0;\n        this.scrollbarButtons = [];\n        this.scrollbarLeft = 0;\n        this.scrollbarStrokeWidth = 1;\n        this.scrollbarTop = 0;\n        this.size = 0;\n        this.to = 0;\n        this.trackBorderWidth = 1;\n        this.x = 0;\n        this.y = 0;\n        this.init(renderer, options, chart);\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    Scrollbar.compose = function (AxisClass) {\n        Axis_ScrollbarAxis.compose(AxisClass, Scrollbar);\n    };\n    /**\n     * When we have vertical scrollbar, rifles and arrow in buttons should be\n     * rotated. The same method is used in Navigator's handles, to rotate them.\n     *\n     * @function Highcharts.swapXY\n     *\n     * @param {Highcharts.SVGPathArray} path\n     * Path to be rotated.\n     *\n     * @param {boolean} [vertical]\n     * If vertical scrollbar, swap x-y values.\n     *\n     * @return {Highcharts.SVGPathArray}\n     * Rotated path.\n     *\n     * @requires modules/stock\n     */\n    Scrollbar.swapXY = function (path, vertical) {\n        if (vertical) {\n            path.forEach(function (seg) {\n                var len = seg.length;\n                var temp;\n                for (var i = 0; i < len; i += 2) {\n                    temp = seg[i + 1];\n                    if (typeof temp === 'number') {\n                        seg[i + 1] = seg[i + 2];\n                        seg[i + 2] = temp;\n                    }\n                }\n            });\n        }\n        return path;\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Set up the mouse and touch events for the Scrollbar\n     *\n     * @private\n     * @function Highcharts.Scrollbar#addEvents\n     */\n    Scrollbar.prototype.addEvents = function () {\n        var buttonsOrder = this.options.inverted ? [1, 0] : [0, 1],\n            buttons = this.scrollbarButtons,\n            bar = this.scrollbarGroup.element,\n            track = this.track.element,\n            mouseDownHandler = this.mouseDownHandler.bind(this),\n            mouseMoveHandler = this.mouseMoveHandler.bind(this),\n            mouseUpHandler = this.mouseUpHandler.bind(this);\n        var _events = [\n                // Mouse events\n                [\n                    buttons[buttonsOrder[0]].element,\n                    'click',\n                    this.buttonToMinClick.bind(this)\n                ],\n                [\n                    buttons[buttonsOrder[1]].element,\n                    'click',\n                    this.buttonToMaxClick.bind(this)\n                ],\n                [track, 'click',\n            this.trackClick.bind(this)],\n                [bar, 'mousedown',\n            mouseDownHandler],\n                [bar.ownerDocument, 'mousemove',\n            mouseMoveHandler],\n                [bar.ownerDocument, 'mouseup',\n            mouseUpHandler],\n                // Touch events\n                [bar, 'touchstart',\n            mouseDownHandler],\n                [bar.ownerDocument, 'touchmove',\n            mouseMoveHandler],\n                [bar.ownerDocument, 'touchend',\n            mouseUpHandler]\n            ];\n        // Add them all\n        _events.forEach(function (args) {\n            Scrollbar_addEvent.apply(null, args);\n        });\n        this._events = _events;\n    };\n    Scrollbar.prototype.buttonToMaxClick = function (e) {\n        var scroller = this;\n        var range = ((scroller.to - scroller.from) *\n                Scrollbar_pick(scroller.options.step, 0.2));\n        scroller.updatePosition(scroller.from + range, scroller.to + range);\n        fireEvent(scroller, 'changed', {\n            from: scroller.from,\n            to: scroller.to,\n            trigger: 'scrollbar',\n            DOMEvent: e\n        });\n    };\n    Scrollbar.prototype.buttonToMinClick = function (e) {\n        var scroller = this;\n        var range = Scrollbar_correctFloat(scroller.to - scroller.from) *\n                Scrollbar_pick(scroller.options.step, 0.2);\n        scroller.updatePosition(Scrollbar_correctFloat(scroller.from - range), Scrollbar_correctFloat(scroller.to - range));\n        fireEvent(scroller, 'changed', {\n            from: scroller.from,\n            to: scroller.to,\n            trigger: 'scrollbar',\n            DOMEvent: e\n        });\n    };\n    /**\n     * Get normalized (0-1) cursor position over the scrollbar\n     *\n     * @private\n     * @function Highcharts.Scrollbar#cursorToScrollbarPosition\n     *\n     * @param  {*} normalizedEvent\n     *         normalized event, with chartX and chartY values\n     *\n     * @return {Highcharts.Dictionary<number>}\n     *         Local position {chartX, chartY}\n     */\n    Scrollbar.prototype.cursorToScrollbarPosition = function (normalizedEvent) {\n        var scroller = this,\n            options = scroller.options,\n            minWidthDifference = options.minWidth > scroller.calculatedWidth ?\n                options.minWidth :\n                0; // `minWidth` distorts translation\n            return {\n                chartX: (normalizedEvent.chartX - scroller.x -\n                    scroller.xOffset) /\n                    (scroller.barWidth - minWidthDifference),\n                chartY: (normalizedEvent.chartY - scroller.y -\n                    scroller.yOffset) /\n                    (scroller.barWidth - minWidthDifference)\n            };\n    };\n    /**\n     * Destroys allocated elements.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#destroy\n     */\n    Scrollbar.prototype.destroy = function () {\n        var scroller = this,\n            navigator = scroller.chart.scroller;\n        // Disconnect events added in addEvents\n        scroller.removeEvents();\n        // Destroy properties\n        [\n            'track',\n            'scrollbarRifles',\n            'scrollbar',\n            'scrollbarGroup',\n            'group'\n        ].forEach(function (prop) {\n            if (scroller[prop] && scroller[prop].destroy) {\n                scroller[prop] = scroller[prop].destroy();\n            }\n        });\n        // #6421, chart may have more scrollbars\n        if (navigator && scroller === navigator.scrollbar) {\n            navigator.scrollbar = null;\n            // Destroy elements in collection\n            destroyObjectProperties(navigator.scrollbarButtons);\n        }\n    };\n    /**\n     * Draw the scrollbar buttons with arrows\n     *\n     * @private\n     * @function Highcharts.Scrollbar#drawScrollbarButton\n     * @param {number} index\n     *        0 is left, 1 is right\n     */\n    Scrollbar.prototype.drawScrollbarButton = function (index) {\n        var scroller = this,\n            renderer = scroller.renderer,\n            scrollbarButtons = scroller.scrollbarButtons,\n            options = scroller.options,\n            size = scroller.size,\n            group = renderer.g().add(scroller.group);\n        scrollbarButtons.push(group);\n        if (options.buttonsEnabled) {\n            // Create a rectangle for the scrollbar button\n            var rect = renderer.rect()\n                    .addClass('highcharts-scrollbar-button')\n                    .add(group);\n            // Presentational attributes\n            if (!scroller.chart.styledMode) {\n                rect.attr({\n                    stroke: options.buttonBorderColor,\n                    'stroke-width': options.buttonBorderWidth,\n                    fill: options.buttonBackgroundColor\n                });\n            }\n            // Place the rectangle based on the rendered stroke width\n            rect.attr(rect.crisp({\n                x: -0.5,\n                y: -0.5,\n                width: size,\n                height: size,\n                r: options.buttonBorderRadius\n            }, rect.strokeWidth()));\n            // Button arrow\n            var arrow = renderer\n                    .path(Scrollbar.swapXY([[\n                        'M',\n                        size / 2 + (index ? -1 : 1),\n                        size / 2 - 3\n                    ],\n                [\n                        'L',\n                        size / 2 + (index ? -1 : 1),\n                        size / 2 + 3\n                    ],\n                [\n                        'L',\n                        size / 2 + (index ? 2 : -2),\n                        size / 2\n                    ]],\n                options.vertical))\n                    .addClass('highcharts-scrollbar-arrow')\n                    .add(scrollbarButtons[index]);\n            if (!scroller.chart.styledMode) {\n                arrow.attr({\n                    fill: options.buttonArrowColor\n                });\n            }\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.Scrollbar#init\n     * @param {Highcharts.SVGRenderer} renderer\n     * @param {Highcharts.ScrollbarOptions} options\n     * @param {Highcharts.Chart} chart\n     */\n    Scrollbar.prototype.init = function (renderer, options, chart) {\n        var scroller = this;\n        scroller.scrollbarButtons = [];\n        scroller.renderer = renderer;\n        scroller.userOptions = options;\n        scroller.options = Scrollbar_merge(Scrollbar_ScrollbarDefaults, Scrollbar_defaultOptions.scrollbar, options);\n        scroller.options.margin = Scrollbar_pick(scroller.options.margin, 10);\n        scroller.chart = chart;\n        // Backward compatibility\n        scroller.size = Scrollbar_pick(scroller.options.size, scroller.options.height);\n        // Init\n        if (options.enabled) {\n            scroller.render();\n            scroller.addEvents();\n        }\n    };\n    Scrollbar.prototype.mouseDownHandler = function (e) {\n        var _a;\n        var scroller = this,\n            normalizedEvent = ((_a = scroller.chart.pointer) === null || _a === void 0 ? void 0 : _a.normalize(e)) || e,\n            mousePosition = scroller.cursorToScrollbarPosition(normalizedEvent);\n        scroller.chartX = mousePosition.chartX;\n        scroller.chartY = mousePosition.chartY;\n        scroller.initPositions = [scroller.from, scroller.to];\n        scroller.grabbedCenter = true;\n    };\n    /**\n     * Event handler for the mouse move event.\n     * @private\n     */\n    Scrollbar.prototype.mouseMoveHandler = function (e) {\n        var _a;\n        var scroller = this,\n            normalizedEvent = ((_a = scroller.chart.pointer) === null || _a === void 0 ? void 0 : _a.normalize(e)) || e,\n            options = scroller.options,\n            direction = options.vertical ?\n                'chartY' : 'chartX',\n            initPositions = scroller.initPositions || [];\n        var scrollPosition,\n            chartPosition,\n            change;\n        // In iOS, a mousemove event with e.pageX === 0 is fired when\n        // holding the finger down in the center of the scrollbar. This\n        // should be ignored.\n        if (scroller.grabbedCenter &&\n            // #4696, scrollbar failed on Android\n            (!e.touches || e.touches[0][direction] !== 0)) {\n            chartPosition = scroller.cursorToScrollbarPosition(normalizedEvent)[direction];\n            scrollPosition = scroller[direction];\n            change = chartPosition - scrollPosition;\n            scroller.hasDragged = true;\n            scroller.updatePosition(initPositions[0] + change, initPositions[1] + change);\n            if (scroller.hasDragged) {\n                fireEvent(scroller, 'changed', {\n                    from: scroller.from,\n                    to: scroller.to,\n                    trigger: 'scrollbar',\n                    DOMType: e.type,\n                    DOMEvent: e\n                });\n            }\n        }\n    };\n    /**\n     * Event handler for the mouse up event.\n     * @private\n     */\n    Scrollbar.prototype.mouseUpHandler = function (e) {\n        var scroller = this;\n        if (scroller.hasDragged) {\n            fireEvent(scroller, 'changed', {\n                from: scroller.from,\n                to: scroller.to,\n                trigger: 'scrollbar',\n                DOMType: e.type,\n                DOMEvent: e\n            });\n        }\n        scroller.grabbedCenter =\n            scroller.hasDragged =\n                scroller.chartX =\n                    scroller.chartY = null;\n    };\n    /**\n     * Position the scrollbar, method called from a parent with defined\n     * dimensions.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#position\n     * @param {number} x\n     *        x-position on the chart\n     * @param {number} y\n     *        y-position on the chart\n     * @param {number} width\n     *        width of the scrollbar\n     * @param {number} height\n     *        height of the scrollbar\n     */\n    Scrollbar.prototype.position = function (x, y, width, height) {\n        var scroller = this,\n            options = scroller.options,\n            buttonsEnabled = options.buttonsEnabled,\n            _a = options.margin,\n            margin = _a === void 0 ? 0 : _a,\n            vertical = options.vertical,\n            method = scroller.rendered ? 'animate' : 'attr';\n        var xOffset = height,\n            yOffset = 0;\n        // Make the scrollbar visible when it is repositioned, #15763.\n        scroller.group.show();\n        scroller.x = x;\n        scroller.y = y + this.trackBorderWidth;\n        scroller.width = width; // Width with buttons\n        scroller.height = height;\n        scroller.xOffset = xOffset;\n        scroller.yOffset = yOffset;\n        // If Scrollbar is a vertical type, swap options:\n        if (vertical) {\n            scroller.width = scroller.yOffset = width = yOffset = scroller.size;\n            scroller.xOffset = xOffset = 0;\n            scroller.yOffset = yOffset = buttonsEnabled ? scroller.size : 0;\n            // Width without buttons\n            scroller.barWidth = height - (buttonsEnabled ? width * 2 : 0);\n            scroller.x = x = x + margin;\n        }\n        else {\n            scroller.height = height = scroller.size;\n            scroller.xOffset = xOffset = buttonsEnabled ? scroller.size : 0;\n            // Width without buttons\n            scroller.barWidth = width - (buttonsEnabled ? height * 2 : 0);\n            scroller.y = scroller.y + margin;\n        }\n        // Set general position for a group:\n        scroller.group[method]({\n            translateX: x,\n            translateY: scroller.y\n        });\n        // Resize background/track:\n        scroller.track[method]({\n            width: width,\n            height: height\n        });\n        // Move right/bottom button to its place:\n        scroller.scrollbarButtons[1][method]({\n            translateX: vertical ? 0 : width - xOffset,\n            translateY: vertical ? height - yOffset : 0\n        });\n    };\n    /**\n     * Removes the event handlers attached previously with addEvents.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#removeEvents\n     */\n    Scrollbar.prototype.removeEvents = function () {\n        this._events.forEach(function (args) {\n            removeEvent.apply(null, args);\n        });\n        this._events.length = 0;\n    };\n    /**\n     * Render scrollbar with all required items.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#render\n     */\n    Scrollbar.prototype.render = function () {\n        var scroller = this,\n            renderer = scroller.renderer,\n            options = scroller.options,\n            size = scroller.size,\n            styledMode = scroller.chart.styledMode,\n            group = renderer.g('scrollbar')\n                .attr({\n                zIndex: options.zIndex\n            })\n                .hide() // Initially hide the scrollbar #15863\n                .add();\n        // Draw the scrollbar group\n        scroller.group = group;\n        // Draw the scrollbar track:\n        scroller.track = renderer.rect()\n            .addClass('highcharts-scrollbar-track')\n            .attr({\n            r: options.trackBorderRadius || 0,\n            height: size,\n            width: size\n        }).add(group);\n        if (!styledMode) {\n            scroller.track.attr({\n                fill: options.trackBackgroundColor,\n                stroke: options.trackBorderColor,\n                'stroke-width': options.trackBorderWidth\n            });\n        }\n        var trackBorderWidth = scroller.trackBorderWidth =\n                scroller.track.strokeWidth();\n        scroller.track.attr({\n            x: -crisp(0, trackBorderWidth),\n            y: -crisp(0, trackBorderWidth)\n        });\n        // Draw the scrollbar itself\n        scroller.scrollbarGroup = renderer.g().add(group);\n        scroller.scrollbar = renderer.rect()\n            .addClass('highcharts-scrollbar-thumb')\n            .attr({\n            height: size - trackBorderWidth,\n            width: size - trackBorderWidth,\n            r: options.barBorderRadius || 0\n        }).add(scroller.scrollbarGroup);\n        scroller.scrollbarRifles = renderer\n            .path(Scrollbar.swapXY([\n            ['M', -3, size / 4],\n            ['L', -3, 2 * size / 3],\n            ['M', 0, size / 4],\n            ['L', 0, 2 * size / 3],\n            ['M', 3, size / 4],\n            ['L', 3, 2 * size / 3]\n        ], options.vertical))\n            .addClass('highcharts-scrollbar-rifles')\n            .add(scroller.scrollbarGroup);\n        if (!styledMode) {\n            scroller.scrollbar.attr({\n                fill: options.barBackgroundColor,\n                stroke: options.barBorderColor,\n                'stroke-width': options.barBorderWidth\n            });\n            scroller.scrollbarRifles.attr({\n                stroke: options.rifleColor,\n                'stroke-width': 1\n            });\n        }\n        scroller.scrollbarStrokeWidth = scroller.scrollbar.strokeWidth();\n        scroller.scrollbarGroup.translate(-crisp(0, scroller.scrollbarStrokeWidth), -crisp(0, scroller.scrollbarStrokeWidth));\n        // Draw the buttons:\n        scroller.drawScrollbarButton(0);\n        scroller.drawScrollbarButton(1);\n    };\n    /**\n     * Set scrollbar size, with a given scale.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#setRange\n     * @param {number} from\n     *        scale (0-1) where bar should start\n     * @param {number} to\n     *        scale (0-1) where bar should end\n     */\n    Scrollbar.prototype.setRange = function (from, to) {\n        var scroller = this,\n            options = scroller.options,\n            vertical = options.vertical,\n            minWidth = options.minWidth,\n            fullWidth = scroller.barWidth,\n            method = (this.rendered &&\n                !this.hasDragged &&\n                !(this.chart.navigator && this.chart.navigator.hasDragged)) ? 'animate' : 'attr';\n        if (!Scrollbar_defined(fullWidth)) {\n            return;\n        }\n        var toPX = fullWidth * Math.min(to, 1);\n        var fromPX,\n            newSize;\n        from = Math.max(from, 0);\n        fromPX = Math.ceil(fullWidth * from);\n        scroller.calculatedWidth = newSize = Scrollbar_correctFloat(toPX - fromPX);\n        // We need to recalculate position, if minWidth is used\n        if (newSize < minWidth) {\n            fromPX = (fullWidth - minWidth + newSize) * from;\n            newSize = minWidth;\n        }\n        var newPos = Math.floor(fromPX + scroller.xOffset + scroller.yOffset);\n        var newRiflesPos = newSize / 2 - 0.5; // -0.5 -> rifle line width / 2\n            // Store current position:\n            scroller.from = from;\n        scroller.to = to;\n        if (!vertical) {\n            scroller.scrollbarGroup[method]({\n                translateX: newPos\n            });\n            scroller.scrollbar[method]({\n                width: newSize\n            });\n            scroller.scrollbarRifles[method]({\n                translateX: newRiflesPos\n            });\n            scroller.scrollbarLeft = newPos;\n            scroller.scrollbarTop = 0;\n        }\n        else {\n            scroller.scrollbarGroup[method]({\n                translateY: newPos\n            });\n            scroller.scrollbar[method]({\n                height: newSize\n            });\n            scroller.scrollbarRifles[method]({\n                translateY: newRiflesPos\n            });\n            scroller.scrollbarTop = newPos;\n            scroller.scrollbarLeft = 0;\n        }\n        if (newSize <= 12) {\n            scroller.scrollbarRifles.hide();\n        }\n        else {\n            scroller.scrollbarRifles.show();\n        }\n        // Show or hide the scrollbar based on the showFull setting\n        if (options.showFull === false) {\n            if (from <= 0 && to >= 1) {\n                scroller.group.hide();\n            }\n            else {\n                scroller.group.show();\n            }\n        }\n        scroller.rendered = true;\n    };\n    /**\n     * Checks if the extremes should be updated in response to a scrollbar\n     * change event.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#shouldUpdateExtremes\n     */\n    Scrollbar.prototype.shouldUpdateExtremes = function (eventType) {\n        return (Scrollbar_pick(this.options.liveRedraw, (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).svg &&\n            !(highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isTouchDevice &&\n            !this.chart.boosted) ||\n            // Mouseup always should change extremes\n            eventType === 'mouseup' ||\n            eventType === 'touchend' ||\n            // Internal events\n            !Scrollbar_defined(eventType));\n    };\n    Scrollbar.prototype.trackClick = function (e) {\n        var _a;\n        var scroller = this;\n        var normalizedEvent = ((_a = scroller.chart.pointer) === null || _a === void 0 ? void 0 : _a.normalize(e)) || e,\n            range = scroller.to - scroller.from,\n            top = scroller.y + scroller.scrollbarTop,\n            left = scroller.x + scroller.scrollbarLeft;\n        if ((scroller.options.vertical && normalizedEvent.chartY > top) ||\n            (!scroller.options.vertical && normalizedEvent.chartX > left)) {\n            // On the top or on the left side of the track:\n            scroller.updatePosition(scroller.from + range, scroller.to + range);\n        }\n        else {\n            // On the bottom or the right side of the track:\n            scroller.updatePosition(scroller.from - range, scroller.to - range);\n        }\n        fireEvent(scroller, 'changed', {\n            from: scroller.from,\n            to: scroller.to,\n            trigger: 'scrollbar',\n            DOMEvent: e\n        });\n    };\n    /**\n     * Update the scrollbar with new options\n     *\n     * @private\n     * @function Highcharts.Scrollbar#update\n     * @param  {Highcharts.ScrollbarOptions} options\n     */\n    Scrollbar.prototype.update = function (options) {\n        this.destroy();\n        this.init(this.chart.renderer, Scrollbar_merge(true, this.options, options), this.chart);\n    };\n    /**\n     * Update position option in the Scrollbar, with normalized 0-1 scale\n     *\n     * @private\n     * @function Highcharts.Scrollbar#updatePosition\n     * @param  {number} from\n     * @param  {number} to\n     */\n    Scrollbar.prototype.updatePosition = function (from, to) {\n        if (to > 1) {\n            from = Scrollbar_correctFloat(1 - Scrollbar_correctFloat(to - from));\n            to = 1;\n        }\n        if (from < 0) {\n            to = Scrollbar_correctFloat(to - from);\n            from = 0;\n        }\n        this.from = from;\n        this.to = to;\n    };\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    Scrollbar.defaultOptions = Scrollbar_ScrollbarDefaults;\n    return Scrollbar;\n}());\n/* *\n *\n *  Registry\n *\n * */\nScrollbar_defaultOptions.scrollbar = Scrollbar_merge(true, Scrollbar.defaultOptions, Scrollbar_defaultOptions.scrollbar);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Scrollbar_Scrollbar = (Scrollbar);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"SVGRenderer\"],\"commonjs\":[\"highcharts\",\"SVGRenderer\"],\"commonjs2\":[\"highcharts\",\"SVGRenderer\"],\"root\":[\"Highcharts\",\"SVGRenderer\"]}\nvar highcharts_SVGRenderer_commonjs_highcharts_SVGRenderer_commonjs2_highcharts_SVGRenderer_root_Highcharts_SVGRenderer_ = __webpack_require__(540);\nvar highcharts_SVGRenderer_commonjs_highcharts_SVGRenderer_commonjs2_highcharts_SVGRenderer_root_Highcharts_SVGRenderer_default = /*#__PURE__*/__webpack_require__.n(highcharts_SVGRenderer_commonjs_highcharts_SVGRenderer_commonjs2_highcharts_SVGRenderer_root_Highcharts_SVGRenderer_);\n;// ./code/es5/es-modules/Stock/Navigator/Navigator.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar __assign = (undefined && undefined.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\n\n\n\nvar Navigator_defaultOptions = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defaultOptions;\n\nvar Navigator_isTouchDevice = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isTouchDevice;\n\n\n\n\nvar symbols = (highcharts_SVGRenderer_commonjs_highcharts_SVGRenderer_commonjs2_highcharts_SVGRenderer_root_Highcharts_SVGRenderer_default()).prototype.symbols;\n\nvar Navigator_addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, clamp = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).clamp, Navigator_correctFloat = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).correctFloat, Navigator_defined = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defined, Navigator_destroyObjectProperties = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).destroyObjectProperties, erase = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).erase, Navigator_extend = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).extend, find = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).find, Navigator_fireEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).fireEvent, Navigator_isArray = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isArray, Navigator_isNumber = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isNumber, Navigator_merge = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).merge, Navigator_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick, Navigator_removeEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).removeEvent, Navigator_splat = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).splat;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Finding the min or max of a set of variables where we don't know if they are\n * defined, is a pattern that is repeated several places in Highcharts. Consider\n * making this a global utility method.\n * @private\n */\nfunction numExt(extreme) {\n    var args = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        args[_i - 1] = arguments[_i];\n    }\n    var numbers = [].filter.call(args,\n        Navigator_isNumber);\n    if (numbers.length) {\n        return Math[extreme].apply(0, numbers);\n    }\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * The Navigator class\n *\n * @private\n * @class\n * @name Highcharts.Navigator\n *\n * @param {Highcharts.Chart} chart\n *        Chart object\n */\nvar Navigator = /** @class */ (function () {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    function Navigator(chart) {\n        this.isDirty = false;\n        this.scrollbarHeight = 0;\n        this.init(chart);\n    }\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    Navigator.compose = function (ChartClass, AxisClass, SeriesClass) {\n        Navigator_ChartNavigatorComposition.compose(ChartClass, Navigator);\n        Navigator_NavigatorComposition.compose(ChartClass, AxisClass, SeriesClass);\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Draw one of the handles on the side of the zoomed range in the navigator.\n     *\n     * @private\n     * @function Highcharts.Navigator#drawHandle\n     *\n     * @param {number} x\n     *        The x center for the handle\n     *\n     * @param {number} index\n     *        0 for left and 1 for right\n     *\n     * @param {boolean|undefined} inverted\n     *        Flag for chart.inverted\n     *\n     * @param {string} verb\n     *        Use 'animate' or 'attr'\n     */\n    Navigator.prototype.drawHandle = function (x, index, inverted, verb) {\n        var navigator = this,\n            height = navigator.navigatorOptions.handles.height;\n        // Place it\n        navigator.handles[index][verb](inverted ? {\n            translateX: Math.round(navigator.left + navigator.height / 2),\n            translateY: Math.round(navigator.top + parseInt(x, 10) + 0.5 - height)\n        } : {\n            translateX: Math.round(navigator.left + parseInt(x, 10)),\n            translateY: Math.round(navigator.top + navigator.height / 2 - height / 2 - 1)\n        });\n    };\n    /**\n     * Render outline around the zoomed range\n     *\n     * @private\n     * @function Highcharts.Navigator#drawOutline\n     *\n     * @param {number} zoomedMin\n     *        in pixels position where zoomed range starts\n     *\n     * @param {number} zoomedMax\n     *        in pixels position where zoomed range ends\n     *\n     * @param {boolean|undefined} inverted\n     *        flag if chart is inverted\n     *\n     * @param {string} verb\n     *        use 'animate' or 'attr'\n     */\n    Navigator.prototype.drawOutline = function (zoomedMin, zoomedMax, inverted, verb) {\n        var navigator = this, maskInside = navigator.navigatorOptions.maskInside, outlineWidth = navigator.outline.strokeWidth(), halfOutline = outlineWidth / 2, outlineCorrection = (outlineWidth % 2) / 2, // #5800\n            scrollButtonSize = navigator.scrollButtonSize, navigatorSize = navigator.size, navigatorTop = navigator.top, height = navigator.height, lineTop = navigatorTop - halfOutline, lineBtm = navigatorTop + height;\n        var left = navigator.left,\n            verticalMin,\n            path;\n        if (inverted) {\n            verticalMin = navigatorTop + zoomedMax + outlineCorrection;\n            zoomedMax = navigatorTop + zoomedMin + outlineCorrection;\n            path = [\n                [\n                    'M',\n                    left + height,\n                    navigatorTop - scrollButtonSize - outlineCorrection\n                ],\n                // Top right of zoomed range\n                ['L', left + height, verticalMin],\n                ['L', left, verticalMin], // Top left of z.r.\n                ['M', left, zoomedMax], // Bottom left of z.r.\n                ['L', left + height, zoomedMax], // Bottom right of z.r.\n                [\n                    'L',\n                    left + height,\n                    navigatorTop + navigatorSize + scrollButtonSize\n                ]\n            ];\n            if (maskInside) {\n                path.push(\n                // Upper left of zoomed range\n                ['M', left + height, verticalMin - halfOutline], \n                // Upper right of z.r.\n                [\n                    'L',\n                    left + height,\n                    zoomedMax + halfOutline\n                ]);\n            }\n        }\n        else {\n            left -= scrollButtonSize;\n            zoomedMin += left + scrollButtonSize - outlineCorrection;\n            zoomedMax += left + scrollButtonSize - outlineCorrection;\n            path = [\n                // Left\n                ['M', left, lineTop],\n                // Upper left of zoomed range\n                ['L', zoomedMin, lineTop],\n                // Lower left of z.r.\n                ['L', zoomedMin, lineBtm],\n                // Lower right of z.r.\n                ['M', zoomedMax, lineBtm],\n                // Upper right of z.r.\n                ['L', zoomedMax, lineTop],\n                // Right\n                [\n                    'L',\n                    left + navigatorSize + scrollButtonSize * 2,\n                    lineTop\n                ]\n            ];\n            if (maskInside) {\n                path.push(\n                // Upper left of zoomed range\n                ['M', zoomedMin - halfOutline, lineTop], \n                // Upper right of z.r.\n                ['L', zoomedMax + halfOutline, lineTop]);\n            }\n        }\n        navigator.outline[verb]({\n            d: path\n        });\n    };\n    /**\n     * Render outline around the zoomed range\n     *\n     * @private\n     * @function Highcharts.Navigator#drawMasks\n     *\n     * @param {number} zoomedMin\n     *        in pixels position where zoomed range starts\n     *\n     * @param {number} zoomedMax\n     *        in pixels position where zoomed range ends\n     *\n     * @param {boolean|undefined} inverted\n     *        flag if chart is inverted\n     *\n     * @param {string} verb\n     *        use 'animate' or 'attr'\n     */\n    Navigator.prototype.drawMasks = function (zoomedMin, zoomedMax, inverted, verb) {\n        var navigator = this,\n            left = navigator.left,\n            top = navigator.top,\n            navigatorHeight = navigator.height;\n        var height,\n            width,\n            x,\n            y;\n        // Determine rectangle position & size\n        // According to (non)inverted position:\n        if (inverted) {\n            x = [left, left, left];\n            y = [top, top + zoomedMin, top + zoomedMax];\n            width = [navigatorHeight, navigatorHeight, navigatorHeight];\n            height = [\n                zoomedMin,\n                zoomedMax - zoomedMin,\n                navigator.size - zoomedMax\n            ];\n        }\n        else {\n            x = [left, left + zoomedMin, left + zoomedMax];\n            y = [top, top, top];\n            width = [\n                zoomedMin,\n                zoomedMax - zoomedMin,\n                navigator.size - zoomedMax\n            ];\n            height = [navigatorHeight, navigatorHeight, navigatorHeight];\n        }\n        navigator.shades.forEach(function (shade, i) {\n            shade[verb]({\n                x: x[i],\n                y: y[i],\n                width: width[i],\n                height: height[i]\n            });\n        });\n    };\n    /**\n     * Generate and update DOM elements for a navigator:\n     *\n     * - main navigator group\n     *\n     * - all shades\n     *\n     * - outline\n     *\n     * - handles\n     *\n     * @private\n     * @function Highcharts.Navigator#renderElements\n     */\n    Navigator.prototype.renderElements = function () {\n        var _a,\n            _b;\n        var navigator = this,\n            navigatorOptions = navigator.navigatorOptions,\n            maskInside = navigatorOptions.maskInside,\n            chart = navigator.chart,\n            inverted = chart.inverted,\n            renderer = chart.renderer,\n            mouseCursor = {\n                cursor: inverted ? 'ns-resize' : 'ew-resize'\n            }, \n            // Create the main navigator group\n            navigatorGroup = (_a = navigator.navigatorGroup) !== null && _a !== void 0 ? _a : (navigator.navigatorGroup = renderer\n                .g('navigator')\n                .attr({\n                zIndex: 8,\n                visibility: 'hidden'\n            })\n                .add());\n        // Create masks, each mask will get events and fill:\n        [\n            !maskInside,\n            maskInside,\n            !maskInside\n        ].forEach(function (hasMask, index) {\n            var _a;\n            var shade = (_a = navigator.shades[index]) !== null && _a !== void 0 ? _a : (navigator.shades[index] = renderer.rect()\n                    .addClass('highcharts-navigator-mask' +\n                    (index === 1 ? '-inside' : '-outside'))\n                    .add(navigatorGroup));\n            if (!chart.styledMode) {\n                shade.attr({\n                    fill: hasMask ? navigatorOptions.maskFill : 'rgba(0,0,0,0)'\n                });\n                if (index === 1) {\n                    shade.css(mouseCursor);\n                }\n            }\n        });\n        // Create the outline:\n        if (!navigator.outline) {\n            navigator.outline = renderer.path()\n                .addClass('highcharts-navigator-outline')\n                .add(navigatorGroup);\n        }\n        if (!chart.styledMode) {\n            navigator.outline.attr({\n                'stroke-width': navigatorOptions.outlineWidth,\n                stroke: navigatorOptions.outlineColor\n            });\n        }\n        // Create the handlers:\n        if ((_b = navigatorOptions.handles) === null || _b === void 0 ? void 0 : _b.enabled) {\n            var handlesOptions_1 = navigatorOptions.handles,\n                height_1 = handlesOptions_1.height,\n                width_1 = handlesOptions_1.width;\n            [0, 1].forEach(function (index) {\n                var _a;\n                var symbolName = handlesOptions_1.symbols[index];\n                if (!navigator.handles[index] ||\n                    navigator.handles[index].symbolUrl !== symbolName) {\n                    // Generate symbol from scratch if we're dealing with an URL\n                    (_a = navigator.handles[index]) === null || _a === void 0 ? void 0 : _a.destroy();\n                    navigator.handles[index] = renderer.symbol(symbolName, -width_1 / 2 - 1, 0, width_1, height_1, handlesOptions_1);\n                    // Z index is 6 for right handle, 7 for left. Can't be 10,\n                    // because of the tooltip in inverted chart (#2908).\n                    navigator.handles[index].attr({ zIndex: 7 - index })\n                        .addClass('highcharts-navigator-handle ' +\n                        'highcharts-navigator-handle-' +\n                        ['left', 'right'][index]).add(navigatorGroup);\n                    navigator.addMouseEvents();\n                    // If the navigator symbol changed, update its path and name\n                }\n                else if (!navigator.handles[index].isImg &&\n                    navigator.handles[index].symbolName !== symbolName) {\n                    var symbolFn = symbols[symbolName],\n                        path = symbolFn.call(symbols, -width_1 / 2 - 1, 0,\n                        width_1,\n                        height_1);\n                    navigator.handles[index].attr({\n                        d: path\n                    });\n                    navigator.handles[index].symbolName = symbolName;\n                }\n                if (chart.inverted) {\n                    navigator.handles[index].attr({\n                        rotation: 90,\n                        rotationOriginX: Math.floor(-width_1 / 2),\n                        rotationOriginY: (height_1 + width_1) / 2\n                    });\n                }\n                if (!chart.styledMode) {\n                    navigator.handles[index]\n                        .attr({\n                        fill: handlesOptions_1.backgroundColor,\n                        stroke: handlesOptions_1.borderColor,\n                        'stroke-width': handlesOptions_1.lineWidth,\n                        width: handlesOptions_1.width,\n                        height: handlesOptions_1.height,\n                        x: -width_1 / 2 - 1,\n                        y: 0\n                    })\n                        .css(mouseCursor);\n                }\n            });\n        }\n    };\n    /**\n     * Update navigator\n     *\n     * @private\n     * @function Highcharts.Navigator#update\n     *\n     * @param {Highcharts.NavigatorOptions} options\n     *        Options to merge in when updating navigator\n     */\n    Navigator.prototype.update = function (options, redraw) {\n        var _a,\n            _b;\n        var _this = this;\n        var _c,\n            _d;\n        if (redraw === void 0) { redraw = false; }\n        var chart = this.chart,\n            invertedUpdate = chart.options.chart.inverted !==\n                ((_c = chart.scrollbar) === null || _c === void 0 ? void 0 : _c.options.vertical);\n        Navigator_merge(true, chart.options.navigator, options);\n        this.navigatorOptions = chart.options.navigator || {};\n        this.setOpposite();\n        // Revert to destroy/init for navigator/scrollbar enabled toggle\n        if (Navigator_defined(options.enabled) || invertedUpdate) {\n            this.destroy();\n            this.navigatorEnabled = options.enabled || this.navigatorEnabled;\n            return this.init(chart);\n        }\n        if (this.navigatorEnabled) {\n            this.isDirty = true;\n            if (options.adaptToUpdatedData === false) {\n                this.baseSeries.forEach(function (series) {\n                    Navigator_removeEvent(series, 'updatedData', _this.updatedDataHandler);\n                }, this);\n            }\n            if (options.adaptToUpdatedData) {\n                this.baseSeries.forEach(function (series) {\n                    series.eventsToUnbind.push(Navigator_addEvent(series, 'updatedData', _this.updatedDataHandler));\n                }, this);\n            }\n            // Update navigator series\n            if (options.series || options.baseSeries) {\n                this.setBaseSeries(void 0, false);\n            }\n            // Update navigator axis\n            if (options.height || options.xAxis || options.yAxis) {\n                this.height = (_d = options.height) !== null && _d !== void 0 ? _d : this.height;\n                var offsets = this.getXAxisOffsets();\n                this.xAxis.update(__assign(__assign({}, options.xAxis), (_a = { offsets: offsets }, _a[chart.inverted ? 'width' : 'height'] = this.height, _a[chart.inverted ? 'height' : 'width'] = void 0, _a)), false);\n                this.yAxis.update(__assign(__assign({}, options.yAxis), (_b = {}, _b[chart.inverted ? 'width' : 'height'] = this.height, _b)), false);\n            }\n        }\n        if (redraw) {\n            chart.redraw();\n        }\n    };\n    /**\n     * Render the navigator\n     *\n     * @private\n     * @function Highcharts.Navigator#render\n     * @param {number} min\n     *        X axis value minimum\n     * @param {number} max\n     *        X axis value maximum\n     * @param {number} [pxMin]\n     *        Pixel value minimum\n     * @param {number} [pxMax]\n     *        Pixel value maximum\n     */\n    Navigator.prototype.render = function (min, max, pxMin, pxMax) {\n        var navigator = this,\n            chart = navigator.chart,\n            xAxis = navigator.xAxis,\n            pointRange = xAxis.pointRange || 0,\n            scrollbarXAxis = xAxis.navigatorAxis.fake ? chart.xAxis[0] : xAxis,\n            navigatorEnabled = navigator.navigatorEnabled,\n            rendered = navigator.rendered,\n            inverted = chart.inverted,\n            minRange = chart.xAxis[0].minRange,\n            maxRange = chart.xAxis[0].options.maxRange,\n            scrollButtonSize = navigator.scrollButtonSize;\n        var navigatorWidth,\n            scrollbarLeft,\n            scrollbarTop,\n            scrollbarHeight = navigator.scrollbarHeight,\n            navigatorSize,\n            verb;\n        // Don't redraw while moving the handles (#4703).\n        if (this.hasDragged && !Navigator_defined(pxMin)) {\n            return;\n        }\n        if (this.isDirty) {\n            // Update DOM navigator elements\n            this.renderElements();\n        }\n        min = Navigator_correctFloat(min - pointRange / 2);\n        max = Navigator_correctFloat(max + pointRange / 2);\n        // Don't render the navigator until we have data (#486, #4202, #5172).\n        if (!Navigator_isNumber(min) || !Navigator_isNumber(max)) {\n            // However, if navigator was already rendered, we may need to resize\n            // it. For example hidden series, but visible navigator (#6022).\n            if (rendered) {\n                pxMin = 0;\n                pxMax = Navigator_pick(xAxis.width, scrollbarXAxis.width);\n            }\n            else {\n                return;\n            }\n        }\n        navigator.left = Navigator_pick(xAxis.left, \n        // In case of scrollbar only, without navigator\n        chart.plotLeft + scrollButtonSize +\n            (inverted ? chart.plotWidth : 0));\n        var zoomedMax = navigator.size = navigatorSize = Navigator_pick(xAxis.len, (inverted ? chart.plotHeight : chart.plotWidth) -\n                2 * scrollButtonSize);\n        if (inverted) {\n            navigatorWidth = scrollbarHeight;\n        }\n        else {\n            navigatorWidth = navigatorSize + 2 * scrollButtonSize;\n        }\n        // Get the pixel position of the handles\n        pxMin = Navigator_pick(pxMin, xAxis.toPixels(min, true));\n        pxMax = Navigator_pick(pxMax, xAxis.toPixels(max, true));\n        // Verify (#1851, #2238)\n        if (!Navigator_isNumber(pxMin) || Math.abs(pxMin) === Infinity) {\n            pxMin = 0;\n            pxMax = navigatorWidth;\n        }\n        // Are we below the minRange? (#2618, #6191)\n        var newMin = xAxis.toValue(pxMin,\n            true),\n            newMax = xAxis.toValue(pxMax,\n            true),\n            currentRange = Math.abs(Navigator_correctFloat(newMax - newMin));\n        if (currentRange < minRange) {\n            if (this.grabbedLeft) {\n                pxMin = xAxis.toPixels(newMax - minRange - pointRange, true);\n            }\n            else if (this.grabbedRight) {\n                pxMax = xAxis.toPixels(newMin + minRange + pointRange, true);\n            }\n        }\n        else if (Navigator_defined(maxRange) &&\n            Navigator_correctFloat(currentRange - pointRange) > maxRange) {\n            if (this.grabbedLeft) {\n                pxMin = xAxis.toPixels(newMax - maxRange - pointRange, true);\n            }\n            else if (this.grabbedRight) {\n                pxMax = xAxis.toPixels(newMin + maxRange + pointRange, true);\n            }\n        }\n        // Handles are allowed to cross, but never exceed the plot area\n        navigator.zoomedMax = clamp(Math.max(pxMin, pxMax), 0, zoomedMax);\n        navigator.zoomedMin = clamp(navigator.fixedWidth ?\n            navigator.zoomedMax - navigator.fixedWidth :\n            Math.min(pxMin, pxMax), 0, zoomedMax);\n        navigator.range = navigator.zoomedMax - navigator.zoomedMin;\n        zoomedMax = Math.round(navigator.zoomedMax);\n        var zoomedMin = Math.round(navigator.zoomedMin);\n        if (navigatorEnabled) {\n            navigator.navigatorGroup.attr({\n                visibility: 'inherit'\n            });\n            // Place elements\n            verb = rendered && !navigator.hasDragged ? 'animate' : 'attr';\n            navigator.drawMasks(zoomedMin, zoomedMax, inverted, verb);\n            navigator.drawOutline(zoomedMin, zoomedMax, inverted, verb);\n            if (navigator.navigatorOptions.handles.enabled) {\n                navigator.drawHandle(zoomedMin, 0, inverted, verb);\n                navigator.drawHandle(zoomedMax, 1, inverted, verb);\n            }\n        }\n        if (navigator.scrollbar) {\n            if (inverted) {\n                scrollbarTop = navigator.top - scrollButtonSize;\n                scrollbarLeft = navigator.left - scrollbarHeight +\n                    (navigatorEnabled || !scrollbarXAxis.opposite ? 0 :\n                        // Multiple axes has offsets:\n                        (scrollbarXAxis.titleOffset || 0) +\n                            // Self margin from the axis.title\n                            scrollbarXAxis.axisTitleMargin);\n                scrollbarHeight = navigatorSize + 2 * scrollButtonSize;\n            }\n            else {\n                scrollbarTop = navigator.top + (navigatorEnabled ?\n                    navigator.height :\n                    -scrollbarHeight);\n                scrollbarLeft = navigator.left - scrollButtonSize;\n            }\n            // Reposition scrollbar\n            navigator.scrollbar.position(scrollbarLeft, scrollbarTop, navigatorWidth, scrollbarHeight);\n            // Keep scale 0-1\n            navigator.scrollbar.setRange(\n            // Use real value, not rounded because range can be very small\n            // (#1716)\n            navigator.zoomedMin / (navigatorSize || 1), navigator.zoomedMax / (navigatorSize || 1));\n        }\n        navigator.rendered = true;\n        this.isDirty = false;\n        Navigator_fireEvent(this, 'afterRender');\n    };\n    /**\n     * Set up the mouse and touch events for the navigator\n     *\n     * @private\n     * @function Highcharts.Navigator#addMouseEvents\n     */\n    Navigator.prototype.addMouseEvents = function () {\n        var navigator = this,\n            chart = navigator.chart,\n            container = chart.container;\n        var eventsToUnbind = [],\n            mouseMoveHandler,\n            mouseUpHandler;\n        /**\n         * Create mouse events' handlers.\n         * Make them as separate functions to enable wrapping them:\n         */\n        navigator.mouseMoveHandler = mouseMoveHandler = function (e) {\n            navigator.onMouseMove(e);\n        };\n        navigator.mouseUpHandler = mouseUpHandler = function (e) {\n            navigator.onMouseUp(e);\n        };\n        // Add shades and handles mousedown events\n        eventsToUnbind = navigator.getPartsEvents('mousedown');\n        eventsToUnbind.push(\n        // Add mouse move and mouseup events. These are bind to doc/div,\n        // because Navigator.grabbedSomething flags are stored in mousedown\n        // events\n        Navigator_addEvent(chart.renderTo, 'mousemove', mouseMoveHandler), Navigator_addEvent(container.ownerDocument, 'mouseup', mouseUpHandler), \n        // Touch events\n        Navigator_addEvent(chart.renderTo, 'touchmove', mouseMoveHandler), Navigator_addEvent(container.ownerDocument, 'touchend', mouseUpHandler));\n        eventsToUnbind.concat(navigator.getPartsEvents('touchstart'));\n        navigator.eventsToUnbind = eventsToUnbind;\n        // Data events\n        if (navigator.series && navigator.series[0]) {\n            eventsToUnbind.push(Navigator_addEvent(navigator.series[0].xAxis, 'foundExtremes', function () {\n                chart.navigator.modifyNavigatorAxisExtremes();\n            }));\n        }\n    };\n    /**\n     * Generate events for handles and masks\n     *\n     * @private\n     * @function Highcharts.Navigator#getPartsEvents\n     *\n     * @param {string} eventName\n     *        Event name handler, 'mousedown' or 'touchstart'\n     *\n     * @return {Array<Function>}\n     *         An array of functions to remove navigator functions from the\n     *         events again.\n     */\n    Navigator.prototype.getPartsEvents = function (eventName) {\n        var navigator = this,\n            events = [];\n        ['shades', 'handles'].forEach(function (name) {\n            navigator[name].forEach(function (navigatorItem, index) {\n                events.push(Navigator_addEvent(navigatorItem.element, eventName, function (e) {\n                    navigator[name + 'Mousedown'](e, index);\n                }));\n            });\n        });\n        return events;\n    };\n    /**\n     * Mousedown on a shaded mask, either:\n     *\n     * - will be stored for future drag&drop\n     *\n     * - will directly shift to a new range\n     *\n     * @private\n     * @function Highcharts.Navigator#shadesMousedown\n     *\n     * @param {Highcharts.PointerEventObject} e\n     *        Mouse event\n     *\n     * @param {number} index\n     *        Index of a mask in Navigator.shades array\n     */\n    Navigator.prototype.shadesMousedown = function (e, index) {\n        var _a;\n        e = ((_a = this.chart.pointer) === null || _a === void 0 ? void 0 : _a.normalize(e)) || e;\n        var navigator = this,\n            chart = navigator.chart,\n            xAxis = navigator.xAxis,\n            zoomedMin = navigator.zoomedMin,\n            navigatorSize = navigator.size,\n            range = navigator.range;\n        var navigatorPosition = navigator.left,\n            chartX = e.chartX,\n            fixedMax,\n            fixedMin,\n            ext,\n            left;\n        // For inverted chart, swap some options:\n        if (chart.inverted) {\n            chartX = e.chartY;\n            navigatorPosition = navigator.top;\n        }\n        if (index === 1) {\n            // Store information for drag&drop\n            navigator.grabbedCenter = chartX;\n            navigator.fixedWidth = range;\n            navigator.dragOffset = chartX - zoomedMin;\n        }\n        else {\n            // Shift the range by clicking on shaded areas\n            left = chartX - navigatorPosition - range / 2;\n            if (index === 0) {\n                left = Math.max(0, left);\n            }\n            else if (index === 2 && left + range >= navigatorSize) {\n                left = navigatorSize - range;\n                if (navigator.reversedExtremes) {\n                    // #7713\n                    left -= range;\n                    fixedMin = navigator.getUnionExtremes().dataMin;\n                }\n                else {\n                    // #2293, #3543\n                    fixedMax = navigator.getUnionExtremes().dataMax;\n                }\n            }\n            if (left !== zoomedMin) { // It has actually moved\n                navigator.fixedWidth = range; // #1370\n                ext = xAxis.navigatorAxis.toFixedRange(left, left + range, fixedMin, fixedMax);\n                if (Navigator_defined(ext.min)) { // #7411\n                    Navigator_fireEvent(this, 'setRange', {\n                        min: Math.min(ext.min, ext.max),\n                        max: Math.max(ext.min, ext.max),\n                        redraw: true,\n                        eventArguments: {\n                            trigger: 'navigator'\n                        }\n                    });\n                }\n            }\n        }\n    };\n    /**\n     * Mousedown on a handle mask.\n     * Will store necessary information for drag&drop.\n     *\n     * @private\n     * @function Highcharts.Navigator#handlesMousedown\n     * @param {Highcharts.PointerEventObject} e\n     *        Mouse event\n     * @param {number} index\n     *        Index of a handle in Navigator.handles array\n     */\n    Navigator.prototype.handlesMousedown = function (e, index) {\n        var _a;\n        e = ((_a = this.chart.pointer) === null || _a === void 0 ? void 0 : _a.normalize(e)) || e;\n        var navigator = this,\n            chart = navigator.chart,\n            baseXAxis = chart.xAxis[0], \n            // For reversed axes, min and max are changed,\n            // so the other extreme should be stored\n            reverse = navigator.reversedExtremes;\n        if (index === 0) {\n            // Grab the left handle\n            navigator.grabbedLeft = true;\n            navigator.otherHandlePos = navigator.zoomedMax;\n            navigator.fixedExtreme = reverse ? baseXAxis.min : baseXAxis.max;\n        }\n        else {\n            // Grab the right handle\n            navigator.grabbedRight = true;\n            navigator.otherHandlePos = navigator.zoomedMin;\n            navigator.fixedExtreme = reverse ? baseXAxis.max : baseXAxis.min;\n        }\n        chart.setFixedRange(void 0);\n    };\n    /**\n     * Mouse move event based on x/y mouse position.\n     *\n     * @private\n     * @function Highcharts.Navigator#onMouseMove\n     *\n     * @param {Highcharts.PointerEventObject} e\n     *        Mouse event\n     */\n    Navigator.prototype.onMouseMove = function (e) {\n        var _a;\n        var navigator = this,\n            chart = navigator.chart,\n            navigatorSize = navigator.navigatorSize,\n            range = navigator.range,\n            dragOffset = navigator.dragOffset,\n            inverted = chart.inverted;\n        var left = navigator.left,\n            chartX;\n        // In iOS, a mousemove event with e.pageX === 0 is fired when holding\n        // the finger down in the center of the scrollbar. This should be\n        // ignored.\n        if (!e.touches || e.touches[0].pageX !== 0) { // #4696\n            e = ((_a = chart.pointer) === null || _a === void 0 ? void 0 : _a.normalize(e)) || e;\n            chartX = e.chartX;\n            // Swap some options for inverted chart\n            if (inverted) {\n                left = navigator.top;\n                chartX = e.chartY;\n            }\n            // Drag left handle or top handle\n            if (navigator.grabbedLeft) {\n                navigator.hasDragged = true;\n                navigator.render(0, 0, chartX - left, navigator.otherHandlePos);\n                // Drag right handle or bottom handle\n            }\n            else if (navigator.grabbedRight) {\n                navigator.hasDragged = true;\n                navigator.render(0, 0, navigator.otherHandlePos, chartX - left);\n                // Drag scrollbar or open area in navigator\n            }\n            else if (navigator.grabbedCenter) {\n                navigator.hasDragged = true;\n                if (chartX < dragOffset) { // Outside left\n                    chartX = dragOffset;\n                    // Outside right\n                }\n                else if (chartX >\n                    navigatorSize + dragOffset - range) {\n                    chartX = navigatorSize + dragOffset - range;\n                }\n                navigator.render(0, 0, chartX - dragOffset, chartX - dragOffset + range);\n            }\n            if (navigator.hasDragged &&\n                navigator.scrollbar &&\n                Navigator_pick(navigator.scrollbar.options.liveRedraw, \n                // By default, don't run live redraw on touch\n                // devices or if the chart is in boost.\n                !Navigator_isTouchDevice &&\n                    !this.chart.boosted)) {\n                e.DOMType = e.type;\n                setTimeout(function () {\n                    navigator.onMouseUp(e);\n                }, 0);\n            }\n        }\n    };\n    /**\n     * Mouse up event based on x/y mouse position.\n     *\n     * @private\n     * @function Highcharts.Navigator#onMouseUp\n     * @param {Highcharts.PointerEventObject} e\n     *        Mouse event\n     */\n    Navigator.prototype.onMouseUp = function (e) {\n        var navigator = this,\n            chart = navigator.chart,\n            xAxis = navigator.xAxis,\n            scrollbar = navigator.scrollbar,\n            DOMEvent = e.DOMEvent || e,\n            inverted = chart.inverted,\n            verb = navigator.rendered && !navigator.hasDragged ?\n                'animate' : 'attr';\n        var zoomedMax,\n            zoomedMin,\n            unionExtremes,\n            fixedMin,\n            fixedMax,\n            ext;\n        if (\n        // MouseUp is called for both, navigator and scrollbar (that order),\n        // which causes calling afterSetExtremes twice. Prevent first call\n        // by checking if scrollbar is going to set new extremes (#6334)\n        (navigator.hasDragged && (!scrollbar || !scrollbar.hasDragged)) ||\n            e.trigger === 'scrollbar') {\n            unionExtremes = navigator.getUnionExtremes();\n            // When dragging one handle, make sure the other one doesn't change\n            if (navigator.zoomedMin === navigator.otherHandlePos) {\n                fixedMin = navigator.fixedExtreme;\n            }\n            else if (navigator.zoomedMax === navigator.otherHandlePos) {\n                fixedMax = navigator.fixedExtreme;\n            }\n            // Snap to right edge (#4076)\n            if (navigator.zoomedMax === navigator.size) {\n                fixedMax = navigator.reversedExtremes ?\n                    unionExtremes.dataMin :\n                    unionExtremes.dataMax;\n            }\n            // Snap to left edge (#7576)\n            if (navigator.zoomedMin === 0) {\n                fixedMin = navigator.reversedExtremes ?\n                    unionExtremes.dataMax :\n                    unionExtremes.dataMin;\n            }\n            ext = xAxis.navigatorAxis.toFixedRange(navigator.zoomedMin, navigator.zoomedMax, fixedMin, fixedMax);\n            if (Navigator_defined(ext.min)) {\n                Navigator_fireEvent(this, 'setRange', {\n                    min: Math.min(ext.min, ext.max),\n                    max: Math.max(ext.min, ext.max),\n                    redraw: true,\n                    animation: navigator.hasDragged ? false : null,\n                    eventArguments: {\n                        trigger: 'navigator',\n                        triggerOp: 'navigator-drag',\n                        DOMEvent: DOMEvent // #1838\n                    }\n                });\n            }\n        }\n        if (e.DOMType !== 'mousemove' &&\n            e.DOMType !== 'touchmove') {\n            navigator.grabbedLeft = navigator.grabbedRight =\n                navigator.grabbedCenter = navigator.fixedWidth =\n                    navigator.fixedExtreme = navigator.otherHandlePos =\n                        navigator.hasDragged = navigator.dragOffset = null;\n        }\n        // Update position of navigator shades, outline and handles (#12573)\n        if (navigator.navigatorEnabled &&\n            Navigator_isNumber(navigator.zoomedMin) &&\n            Navigator_isNumber(navigator.zoomedMax)) {\n            zoomedMin = Math.round(navigator.zoomedMin);\n            zoomedMax = Math.round(navigator.zoomedMax);\n            if (navigator.shades) {\n                navigator.drawMasks(zoomedMin, zoomedMax, inverted, verb);\n            }\n            if (navigator.outline) {\n                navigator.drawOutline(zoomedMin, zoomedMax, inverted, verb);\n            }\n            if (navigator.navigatorOptions.handles.enabled &&\n                Object.keys(navigator.handles).length ===\n                    navigator.handles.length) {\n                navigator.drawHandle(zoomedMin, 0, inverted, verb);\n                navigator.drawHandle(zoomedMax, 1, inverted, verb);\n            }\n        }\n    };\n    /**\n     * Removes the event handlers attached previously with addEvents.\n     *\n     * @private\n     * @function Highcharts.Navigator#removeEvents\n     */\n    Navigator.prototype.removeEvents = function () {\n        if (this.eventsToUnbind) {\n            this.eventsToUnbind.forEach(function (unbind) {\n                unbind();\n            });\n            this.eventsToUnbind = void 0;\n        }\n        this.removeBaseSeriesEvents();\n    };\n    /**\n     * Remove data events.\n     *\n     * @private\n     * @function Highcharts.Navigator#removeBaseSeriesEvents\n     */\n    Navigator.prototype.removeBaseSeriesEvents = function () {\n        var baseSeries = this.baseSeries || [];\n        if (this.navigatorEnabled && baseSeries[0]) {\n            if (this.navigatorOptions.adaptToUpdatedData !== false) {\n                baseSeries.forEach(function (series) {\n                    Navigator_removeEvent(series, 'updatedData', this.updatedDataHandler);\n                }, this);\n            }\n            // We only listen for extremes-events on the first baseSeries\n            if (baseSeries[0].xAxis) {\n                Navigator_removeEvent(baseSeries[0].xAxis, 'foundExtremes', this.modifyBaseAxisExtremes);\n            }\n        }\n    };\n    /**\n     * Calculate the navigator xAxis offsets\n     *\n     * @private\n     */\n    Navigator.prototype.getXAxisOffsets = function () {\n        return (this.chart.inverted ?\n            [this.scrollButtonSize, 0, -this.scrollButtonSize, 0] :\n            [0, -this.scrollButtonSize, 0, this.scrollButtonSize]);\n    };\n    /**\n     * Initialize the Navigator object\n     *\n     * @private\n     * @function Highcharts.Navigator#init\n     */\n    Navigator.prototype.init = function (chart) {\n        var _a;\n        var chartOptions = chart.options,\n            navigatorOptions = chartOptions.navigator || {},\n            navigatorEnabled = navigatorOptions.enabled,\n            scrollbarOptions = chartOptions.scrollbar || {},\n            scrollbarEnabled = scrollbarOptions.enabled,\n            height = navigatorEnabled && navigatorOptions.height || 0,\n            scrollbarHeight = scrollbarEnabled && scrollbarOptions.height || 0,\n            scrollButtonSize = scrollbarOptions.buttonsEnabled && scrollbarHeight || 0;\n        this.handles = [];\n        this.shades = [];\n        this.chart = chart;\n        this.setBaseSeries();\n        this.height = height;\n        this.scrollbarHeight = scrollbarHeight;\n        this.scrollButtonSize = scrollButtonSize;\n        this.scrollbarEnabled = scrollbarEnabled;\n        this.navigatorEnabled = navigatorEnabled;\n        this.navigatorOptions = navigatorOptions;\n        this.scrollbarOptions = scrollbarOptions;\n        this.setOpposite();\n        var navigator = this,\n            baseSeries = navigator.baseSeries,\n            xAxisIndex = chart.xAxis.length,\n            yAxisIndex = chart.yAxis.length,\n            baseXaxis = baseSeries && baseSeries[0] && baseSeries[0].xAxis ||\n                chart.xAxis[0] || { options: {} };\n        chart.isDirtyBox = true;\n        if (navigator.navigatorEnabled) {\n            var offsets = this.getXAxisOffsets();\n            // An x axis is required for scrollbar also\n            navigator.xAxis = new (highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_default())(chart, Navigator_merge({\n                // Inherit base xAxis' break, ordinal options and overscroll\n                breaks: baseXaxis.options.breaks,\n                ordinal: baseXaxis.options.ordinal,\n                overscroll: baseXaxis.options.overscroll\n            }, navigatorOptions.xAxis, {\n                type: 'datetime',\n                yAxis: (_a = navigatorOptions.yAxis) === null || _a === void 0 ? void 0 : _a.id,\n                index: xAxisIndex,\n                isInternal: true,\n                offset: 0,\n                keepOrdinalPadding: true, // #2436\n                startOnTick: false,\n                endOnTick: false,\n                // Inherit base xAxis' padding when ordinal is false (#16915).\n                minPadding: baseXaxis.options.ordinal ? 0 :\n                    baseXaxis.options.minPadding,\n                maxPadding: baseXaxis.options.ordinal ? 0 :\n                    baseXaxis.options.maxPadding,\n                zoomEnabled: false\n            }, chart.inverted ? {\n                offsets: offsets,\n                width: height\n            } : {\n                offsets: offsets,\n                height: height\n            }), 'xAxis');\n            navigator.yAxis = new (highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_default())(chart, Navigator_merge(navigatorOptions.yAxis, {\n                alignTicks: false,\n                offset: 0,\n                index: yAxisIndex,\n                isInternal: true,\n                reversed: Navigator_pick((navigatorOptions.yAxis &&\n                    navigatorOptions.yAxis.reversed), (chart.yAxis[0] && chart.yAxis[0].reversed), false), // #14060\n                zoomEnabled: false\n            }, chart.inverted ? {\n                width: height\n            } : {\n                height: height\n            }), 'yAxis');\n            // If we have a base series, initialize the navigator series\n            if (baseSeries || navigatorOptions.series.data) {\n                navigator.updateNavigatorSeries(false);\n                // If not, set up an event to listen for added series\n            }\n            else if (chart.series.length === 0) {\n                navigator.unbindRedraw = Navigator_addEvent(chart, 'beforeRedraw', function () {\n                    // We've got one, now add it as base\n                    if (chart.series.length > 0 && !navigator.series) {\n                        navigator.setBaseSeries();\n                        navigator.unbindRedraw(); // Reset\n                    }\n                });\n            }\n            navigator.reversedExtremes = (chart.inverted && !navigator.xAxis.reversed) || (!chart.inverted && navigator.xAxis.reversed);\n            // Render items, so we can bind events to them:\n            navigator.renderElements();\n            // Add mouse events\n            navigator.addMouseEvents();\n            // In case of scrollbar only, fake an x axis to get translation\n        }\n        else {\n            navigator.xAxis = {\n                chart: chart,\n                navigatorAxis: {\n                    fake: true\n                },\n                translate: function (value, reverse) {\n                    var axis = chart.xAxis[0], ext = axis.getExtremes(), scrollTrackWidth = axis.len - 2 * scrollButtonSize, min = numExt('min', axis.options.min, ext.dataMin), valueRange = numExt('max', axis.options.max, ext.dataMax) - min;\n                    return reverse ?\n                        // From pixel to value\n                        (value * valueRange / scrollTrackWidth) + min :\n                        // From value to pixel\n                        scrollTrackWidth * (value - min) / valueRange;\n                },\n                toPixels: function (value) {\n                    return this.translate(value);\n                },\n                toValue: function (value) {\n                    return this.translate(value, true);\n                }\n            };\n            navigator.xAxis.navigatorAxis.axis = navigator.xAxis;\n            navigator.xAxis.navigatorAxis.toFixedRange = (NavigatorAxisComposition.prototype.toFixedRange.bind(navigator.xAxis.navigatorAxis));\n        }\n        // Initialize the scrollbar\n        if (chart.options.scrollbar.enabled) {\n            var options = Navigator_merge(chart.options.scrollbar, { vertical: chart.inverted });\n            if (!Navigator_isNumber(options.margin) && navigator.navigatorEnabled) {\n                options.margin = chart.inverted ? -3 : 3;\n            }\n            chart.scrollbar = navigator.scrollbar = new Scrollbar_Scrollbar(chart.renderer, options, chart);\n            Navigator_addEvent(navigator.scrollbar, 'changed', function (e) {\n                var range = navigator.size,\n                    to = range * this.to,\n                    from = range * this.from;\n                navigator.hasDragged = navigator.scrollbar.hasDragged;\n                navigator.render(0, 0, from, to);\n                if (this.shouldUpdateExtremes(e.DOMType)) {\n                    setTimeout(function () {\n                        navigator.onMouseUp(e);\n                    });\n                }\n            });\n        }\n        // Add data events\n        navigator.addBaseSeriesEvents();\n        // Add redraw events\n        navigator.addChartEvents();\n    };\n    /**\n     * Set the opposite property on navigator\n     *\n     * @private\n     */\n    Navigator.prototype.setOpposite = function () {\n        var navigatorOptions = this.navigatorOptions,\n            navigatorEnabled = this.navigatorEnabled,\n            chart = this.chart;\n        this.opposite = Navigator_pick(navigatorOptions.opposite, Boolean(!navigatorEnabled && chart.inverted)); // #6262\n    };\n    /**\n     * Get the union data extremes of the chart - the outer data extremes of the\n     * base X axis and the navigator axis.\n     *\n     * @private\n     * @function Highcharts.Navigator#getUnionExtremes\n     */\n    Navigator.prototype.getUnionExtremes = function (returnFalseOnNoBaseSeries) {\n        var baseAxis = this.chart.xAxis[0],\n            time = this.chart.time,\n            navAxis = this.xAxis,\n            navAxisOptions = navAxis.options,\n            baseAxisOptions = baseAxis.options;\n        var ret;\n        if (!returnFalseOnNoBaseSeries || baseAxis.dataMin !== null) {\n            ret = {\n                dataMin: Navigator_pick(// #4053\n                time.parse(navAxisOptions === null || navAxisOptions === void 0 ? void 0 : navAxisOptions.min), numExt('min', time.parse(baseAxisOptions.min), baseAxis.dataMin, navAxis.dataMin, navAxis.min)),\n                dataMax: Navigator_pick(time.parse(navAxisOptions === null || navAxisOptions === void 0 ? void 0 : navAxisOptions.max), numExt('max', time.parse(baseAxisOptions.max), baseAxis.dataMax, navAxis.dataMax, navAxis.max))\n            };\n        }\n        return ret;\n    };\n    /**\n     * Set the base series and update the navigator series from this. With a bit\n     * of modification we should be able to make this an API method to be called\n     * from the outside\n     *\n     * @private\n     * @function Highcharts.Navigator#setBaseSeries\n     * @param {Highcharts.SeriesOptionsType} [baseSeriesOptions]\n     *        Additional series options for a navigator\n     * @param {boolean} [redraw]\n     *        Whether to redraw after update.\n     */\n    Navigator.prototype.setBaseSeries = function (baseSeriesOptions, redraw) {\n        var chart = this.chart,\n            baseSeries = this.baseSeries = [];\n        baseSeriesOptions = (baseSeriesOptions ||\n            chart.options && chart.options.navigator.baseSeries ||\n            (chart.series.length ?\n                // Find the first non-navigator series (#8430)\n                find(chart.series, function (s) { return (!s.options.isInternal); }).index :\n                0));\n        // Iterate through series and add the ones that should be shown in\n        // navigator.\n        (chart.series || []).forEach(function (series, i) {\n            if (\n            // Don't include existing nav series\n            !series.options.isInternal &&\n                (series.options.showInNavigator ||\n                    (i === baseSeriesOptions ||\n                        series.options.id === baseSeriesOptions) &&\n                        series.options.showInNavigator !== false)) {\n                baseSeries.push(series);\n            }\n        });\n        // When run after render, this.xAxis already exists\n        if (this.xAxis && !this.xAxis.navigatorAxis.fake) {\n            this.updateNavigatorSeries(true, redraw);\n        }\n    };\n    /**\n     * Update series in the navigator from baseSeries, adding new if does not\n     * exist.\n     *\n     * @private\n     * @function Highcharts.Navigator.updateNavigatorSeries\n     */\n    Navigator.prototype.updateNavigatorSeries = function (addEvents, redraw) {\n        var _a,\n            _b;\n        var navigator = this,\n            chart = navigator.chart,\n            baseSeries = navigator.baseSeries,\n            navSeriesMixin = {\n                enableMouseTracking: false,\n                index: null, // #6162\n                linkedTo: null, // #6734\n                group: 'nav', // For columns\n                padXAxis: false,\n                xAxis: (_a = this.navigatorOptions.xAxis) === null || _a === void 0 ? void 0 : _a.id,\n                yAxis: (_b = this.navigatorOptions.yAxis) === null || _b === void 0 ? void 0 : _b.id,\n                showInLegend: false,\n                stacking: void 0, // #4823\n                isInternal: true,\n                states: {\n                    inactive: {\n                        opacity: 1\n                    }\n                }\n            }, \n            // Remove navigator series that are no longer in the baseSeries\n            navigatorSeries = navigator.series =\n                (navigator.series || []).filter(function (navSeries) {\n                    var base = navSeries.baseSeries;\n                if (baseSeries.indexOf(base) < 0) { // Not in array\n                    // If there is still a base series connected to this\n                    // series, remove event handler and reference.\n                    if (base) {\n                        Navigator_removeEvent(base, 'updatedData', navigator.updatedDataHandler);\n                        delete base.navigatorSeries;\n                    }\n                    // Kill the nav series. It may already have been\n                    // destroyed (#8715).\n                    if (navSeries.chart) {\n                        navSeries.destroy();\n                    }\n                    return false;\n                }\n                return true;\n            });\n        var baseOptions,\n            mergedNavSeriesOptions,\n            chartNavigatorSeriesOptions = navigator.navigatorOptions.series,\n            baseNavigatorOptions;\n        // Go through each base series and merge the options to create new\n        // series\n        if (baseSeries && baseSeries.length) {\n            baseSeries.forEach(function (base) {\n                var _a;\n                var linkedNavSeries = base.navigatorSeries,\n                    userNavOptions = Navigator_extend(\n                    // Grab color and visibility from base as default\n                    {\n                        color: base.color,\n                        visible: base.visible\n                    }, !Navigator_isArray(chartNavigatorSeriesOptions) ?\n                        chartNavigatorSeriesOptions :\n                        Navigator_defaultOptions.navigator.series);\n                // Don't update if the series exists in nav and we have disabled\n                // adaptToUpdatedData.\n                if (linkedNavSeries &&\n                    navigator.navigatorOptions.adaptToUpdatedData === false) {\n                    return;\n                }\n                navSeriesMixin.name = 'Navigator ' + baseSeries.length;\n                baseOptions = base.options || {};\n                baseNavigatorOptions = baseOptions.navigatorOptions || {};\n                // The dataLabels options are not merged correctly\n                // if the settings are an array, #13847.\n                userNavOptions.dataLabels = Navigator_splat(userNavOptions.dataLabels);\n                mergedNavSeriesOptions = Navigator_merge(baseOptions, navSeriesMixin, userNavOptions, baseNavigatorOptions);\n                // Once nav series type is resolved, pick correct pointRange\n                mergedNavSeriesOptions.pointRange = Navigator_pick(\n                // Stricte set pointRange in options\n                userNavOptions.pointRange, baseNavigatorOptions.pointRange, \n                // Fallback to default values, e.g. `null` for column\n                Navigator_defaultOptions.plotOptions[mergedNavSeriesOptions.type || 'line'].pointRange);\n                // Merge data separately. Do a slice to avoid mutating the\n                // navigator options from base series (#4923).\n                var navigatorSeriesData = baseNavigatorOptions.data || userNavOptions.data;\n                navigator.hasNavigatorData =\n                    navigator.hasNavigatorData || !!navigatorSeriesData;\n                mergedNavSeriesOptions.data = (navigatorSeriesData ||\n                    ((_a = baseOptions.data) === null || _a === void 0 ? void 0 : _a.slice(0)));\n                // Update or add the series\n                if (linkedNavSeries && linkedNavSeries.options) {\n                    linkedNavSeries.update(mergedNavSeriesOptions, redraw);\n                }\n                else {\n                    base.navigatorSeries = chart.initSeries(mergedNavSeriesOptions);\n                    // Set data on initial run with dataSorting enabled (#20318)\n                    chart.setSortedData();\n                    base.navigatorSeries.baseSeries = base; // Store ref\n                    navigatorSeries.push(base.navigatorSeries);\n                }\n            });\n        }\n        // If user has defined data (and no base series) or explicitly defined\n        // navigator.series as an array, we create these series on top of any\n        // base series.\n        if (chartNavigatorSeriesOptions.data &&\n            !(baseSeries && baseSeries.length) ||\n            Navigator_isArray(chartNavigatorSeriesOptions)) {\n            navigator.hasNavigatorData = false;\n            // Allow navigator.series to be an array\n            chartNavigatorSeriesOptions =\n                Navigator_splat(chartNavigatorSeriesOptions);\n            chartNavigatorSeriesOptions.forEach(function (userSeriesOptions, i) {\n                navSeriesMixin.name =\n                    'Navigator ' + (navigatorSeries.length + 1);\n                mergedNavSeriesOptions = Navigator_merge(Navigator_defaultOptions.navigator.series, {\n                    // Since we don't have a base series to pull color from,\n                    // try to fake it by using color from series with same\n                    // index. Otherwise pull from the colors array. We need\n                    // an explicit color as otherwise updates will increment\n                    // color counter and we'll get a new color for each\n                    // update of the nav series.\n                    color: chart.series[i] &&\n                        !chart.series[i].options.isInternal &&\n                        chart.series[i].color ||\n                        chart.options.colors[i] ||\n                        chart.options.colors[0]\n                }, navSeriesMixin, userSeriesOptions);\n                mergedNavSeriesOptions.data = userSeriesOptions.data;\n                if (mergedNavSeriesOptions.data) {\n                    navigator.hasNavigatorData = true;\n                    navigatorSeries.push(chart.initSeries(mergedNavSeriesOptions));\n                }\n            });\n        }\n        if (addEvents) {\n            this.addBaseSeriesEvents();\n        }\n    };\n    /**\n     * Add data events.\n     * For example when main series is updated we need to recalculate extremes\n     *\n     * @private\n     * @function Highcharts.Navigator#addBaseSeriesEvent\n     */\n    Navigator.prototype.addBaseSeriesEvents = function () {\n        var _this = this;\n        var navigator = this,\n            baseSeries = navigator.baseSeries || [];\n        // Bind modified extremes event to first base's xAxis only.\n        // In event of > 1 base-xAxes, the navigator will ignore those.\n        // Adding this multiple times to the same axis is no problem, as\n        // duplicates should be discarded by the browser.\n        if (baseSeries[0] && baseSeries[0].xAxis) {\n            baseSeries[0].eventsToUnbind.push(Navigator_addEvent(baseSeries[0].xAxis, 'foundExtremes', this.modifyBaseAxisExtremes));\n        }\n        baseSeries.forEach(function (base) {\n            // Link base series show/hide to navigator series visibility\n            base.eventsToUnbind.push(Navigator_addEvent(base, 'show', function () {\n                if (this.navigatorSeries) {\n                    this.navigatorSeries.setVisible(true, false);\n                }\n            }));\n            base.eventsToUnbind.push(Navigator_addEvent(base, 'hide', function () {\n                if (this.navigatorSeries) {\n                    this.navigatorSeries.setVisible(false, false);\n                }\n            }));\n            // Respond to updated data in the base series, unless explicitly\n            // not adapting to data changes.\n            if (_this.navigatorOptions.adaptToUpdatedData !== false) {\n                if (base.xAxis) {\n                    base.eventsToUnbind.push(Navigator_addEvent(base, 'updatedData', _this.updatedDataHandler));\n                }\n            }\n            // Handle series removal\n            base.eventsToUnbind.push(Navigator_addEvent(base, 'remove', function () {\n                if (baseSeries) {\n                    erase(baseSeries, base); // #21043\n                }\n                if (this.navigatorSeries && navigator.series) {\n                    erase(navigator.series, this.navigatorSeries);\n                    if (Navigator_defined(this.navigatorSeries.options)) {\n                        this.navigatorSeries.remove(false);\n                    }\n                    delete this.navigatorSeries;\n                }\n            }));\n        });\n    };\n    /**\n     * Get minimum from all base series connected to the navigator\n     * @private\n     * @param {number} currentSeriesMin\n     *        Minium from the current series\n     * @return {number}\n     *         Minimum from all series\n     */\n    Navigator.prototype.getBaseSeriesMin = function (currentSeriesMin) {\n        return this.baseSeries.reduce(function (min, series) {\n            var _a;\n            // #10193\n            return Math.min(min, (_a = series.getColumn('x')[0]) !== null && _a !== void 0 ? _a : min);\n        }, currentSeriesMin);\n    };\n    /**\n     * Set the navigator x axis extremes to reflect the total. The navigator\n     * extremes should always be the extremes of the union of all series in the\n     * chart as well as the navigator series.\n     *\n     * @private\n     * @function Highcharts.Navigator#modifyNavigatorAxisExtremes\n     */\n    Navigator.prototype.modifyNavigatorAxisExtremes = function () {\n        var xAxis = this.xAxis;\n        if (typeof xAxis.getExtremes !== 'undefined') {\n            var unionExtremes = this.getUnionExtremes(true);\n            if (unionExtremes &&\n                (unionExtremes.dataMin !== xAxis.min ||\n                    unionExtremes.dataMax !== xAxis.max)) {\n                xAxis.min = unionExtremes.dataMin;\n                xAxis.max = unionExtremes.dataMax;\n            }\n        }\n    };\n    /**\n     * Hook to modify the base axis extremes with information from the Navigator\n     *\n     * @private\n     * @function Highcharts.Navigator#modifyBaseAxisExtremes\n     */\n    Navigator.prototype.modifyBaseAxisExtremes = function () {\n        var _a;\n        var baseXAxis = this,\n            navigator = baseXAxis.chart.navigator,\n            baseExtremes = baseXAxis.getExtremes(),\n            baseMin = baseExtremes.min,\n            baseMax = baseExtremes.max,\n            baseDataMin = baseExtremes.dataMin,\n            baseDataMax = baseExtremes.dataMax,\n            range = baseMax - baseMin,\n            stickToMin = navigator.stickToMin,\n            stickToMax = navigator.stickToMax,\n            overscroll = Navigator_pick((_a = baseXAxis.ordinal) === null || _a === void 0 ? void 0 : _a.convertOverscroll(baseXAxis.options.overscroll), 0),\n            navigatorSeries = navigator.series && navigator.series[0],\n            hasSetExtremes = !!baseXAxis.setExtremes, \n            // When the extremes have been set by range selector button, don't\n            // stick to min or max. The range selector buttons will handle the\n            // extremes. (#5489)\n            unmutable = baseXAxis.eventArgs &&\n                baseXAxis.eventArgs.trigger === 'rangeSelectorButton';\n        var newMax,\n            newMin;\n        if (!unmutable) {\n            // If the zoomed range is already at the min, move it to the right\n            // as new data comes in\n            if (stickToMin) {\n                newMin = baseDataMin;\n                newMax = newMin + range;\n            }\n            // If the zoomed range is already at the max, move it to the right\n            // as new data comes in\n            if (stickToMax) {\n                newMax = baseDataMax + overscroll;\n                // If stickToMin is true, the new min value is set above\n                if (!stickToMin) {\n                    newMin = Math.max(baseDataMin, // Don't go below data extremes (#13184)\n                    newMax - range, navigator.getBaseSeriesMin(navigatorSeries && navigatorSeries.xData ?\n                        navigatorSeries.xData[0] :\n                        -Number.MAX_VALUE));\n                }\n            }\n            // Update the extremes\n            if (hasSetExtremes && (stickToMin || stickToMax)) {\n                if (Navigator_isNumber(newMin)) {\n                    baseXAxis.min = baseXAxis.userMin = newMin;\n                    baseXAxis.max = baseXAxis.userMax = newMax;\n                }\n            }\n        }\n        // Reset\n        navigator.stickToMin =\n            navigator.stickToMax = null;\n    };\n    /**\n     * Handler for updated data on the base series. When data is modified, the\n     * navigator series must reflect it. This is called from the Chart.redraw\n     * function before axis and series extremes are computed.\n     *\n     * @private\n     * @function Highcharts.Navigator#updateDataHandler\n     */\n    Navigator.prototype.updatedDataHandler = function () {\n        var navigator = this.chart.navigator,\n            baseSeries = this,\n            navigatorSeries = this.navigatorSeries,\n            shouldStickToMax = navigator.reversedExtremes ?\n                Math.round(navigator.zoomedMin) === 0 :\n                Math.round(navigator.zoomedMax) >= Math.round(navigator.size);\n        // If the scrollbar is scrolled all the way to the right, keep right as\n        // new data comes in, unless user set navigator.stickToMax to false.\n        navigator.stickToMax = Navigator_pick(this.chart.options.navigator &&\n            this.chart.options.navigator.stickToMax, shouldStickToMax);\n        navigator.stickToMin = navigator.shouldStickToMin(baseSeries, navigator);\n        // Set the navigator series data to the new data of the base series\n        if (navigatorSeries && !navigator.hasNavigatorData) {\n            navigatorSeries.options.pointStart = baseSeries.getColumn('x')[0];\n            navigatorSeries.setData(baseSeries.options.data, false, null, false); // #5414\n        }\n    };\n    /**\n     * Detect if the zoomed area should stick to the minimum, #14742.\n     *\n     * @private\n     * @function Highcharts.Navigator#shouldStickToMin\n     */\n    Navigator.prototype.shouldStickToMin = function (baseSeries, navigator) {\n        var xDataMin = navigator.getBaseSeriesMin(baseSeries.getColumn('x')[0]),\n            xAxis = baseSeries.xAxis,\n            max = xAxis.max,\n            min = xAxis.min,\n            range = xAxis.options.range;\n        var stickToMin = true;\n        if (Navigator_isNumber(max) && Navigator_isNumber(min)) {\n            // If range declared, stick to the minimum only if the range\n            // is smaller than the data set range.\n            if (range && max - xDataMin > 0) {\n                stickToMin = max - xDataMin < range;\n            }\n            else {\n                // If the current axis minimum falls outside the new\n                // updated dataset, we must adjust.\n                stickToMin = min <= xDataMin;\n            }\n        }\n        else {\n            stickToMin = false; // #15864\n        }\n        return stickToMin;\n    };\n    /**\n     * Add chart events, like redrawing navigator, when chart requires that.\n     *\n     * @private\n     * @function Highcharts.Navigator#addChartEvents\n     */\n    Navigator.prototype.addChartEvents = function () {\n        if (!this.eventsToUnbind) {\n            this.eventsToUnbind = [];\n        }\n        this.eventsToUnbind.push(\n        // Move the scrollbar after redraw, like after data updata even if\n        // axes don't redraw\n        Navigator_addEvent(this.chart, 'redraw', function () {\n            var navigator = this.navigator,\n                xAxis = navigator && (navigator.baseSeries &&\n                    navigator.baseSeries[0] &&\n                    navigator.baseSeries[0].xAxis ||\n                    this.xAxis[0]); // #5709, #13114\n                if (xAxis) {\n                    navigator.render(xAxis.min,\n                xAxis.max);\n            }\n        }), \n        // Make room for the navigator, can be placed around the chart:\n        Navigator_addEvent(this.chart, 'getMargins', function () {\n            var chart = this,\n                navigator = chart.navigator;\n            var marginName = navigator.opposite ?\n                    'plotTop' : 'marginBottom';\n            if (chart.inverted) {\n                marginName = navigator.opposite ?\n                    'marginRight' : 'plotLeft';\n            }\n            chart[marginName] =\n                (chart[marginName] || 0) + (navigator.navigatorEnabled || !chart.inverted ?\n                    navigator.height + navigator.scrollbarHeight :\n                    0) + navigator.navigatorOptions.margin;\n        }), Navigator_addEvent(Navigator, 'setRange', function (e) {\n            this.chart.xAxis[0].setExtremes(e.min, e.max, e.redraw, e.animation, e.eventArguments);\n        }));\n    };\n    /**\n     * Destroys allocated elements.\n     *\n     * @private\n     * @function Highcharts.Navigator#destroy\n     */\n    Navigator.prototype.destroy = function () {\n        var _this = this;\n        // Disconnect events added in addEvents\n        this.removeEvents();\n        if (this.xAxis) {\n            erase(this.chart.xAxis, this.xAxis);\n            erase(this.chart.axes, this.xAxis);\n        }\n        if (this.yAxis) {\n            erase(this.chart.yAxis, this.yAxis);\n            erase(this.chart.axes, this.yAxis);\n        }\n        // Destroy series\n        (this.series || []).forEach(function (s) {\n            if (s.destroy) {\n                s.destroy();\n            }\n        });\n        // Destroy properties\n        [\n            'series', 'xAxis', 'yAxis', 'shades', 'outline', 'scrollbarTrack',\n            'scrollbarRifles', 'scrollbarGroup', 'scrollbar', 'navigatorGroup',\n            'rendered'\n        ].forEach(function (prop) {\n            if (_this[prop] && _this[prop].destroy) {\n                _this[prop].destroy();\n            }\n            _this[prop] = null;\n        });\n        // Destroy elements in collection\n        [this.handles].forEach(function (coll) {\n            Navigator_destroyObjectProperties(coll);\n        });\n        this.navigatorEnabled = false;\n    };\n    return Navigator;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Navigator_Navigator = (Navigator);\n\n;// ./code/es5/es-modules/Stock/RangeSelector/RangeSelectorDefaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Declarations\n *\n * */\n/**\n * An object containing language-related strings and settings. A typical setup\n * uses `Highcharts.setOptions` to make the options apply to all charts in the\n * same page.\n *\n * ```js\n * Highcharts.setOptions({\n *     lang: {\n *         locale: 'fr'\n *     }\n * });\n * ```\n *\n * @optionparent lang\n */\nvar lang = {\n    /**\n     * The text for the label for the range selector buttons.\n     *\n     * @product highstock gantt\n     */\n    rangeSelectorZoom: 'Zoom',\n    /**\n     * The text for the label for the \"from\" input box in the range\n     * selector. Since v9.0, this string is empty as the label is not\n     * rendered by default.\n     *\n     * @product highstock gantt\n     */\n    rangeSelectorFrom: '',\n    /**\n     * The text for the label for the \"to\" input box in the range selector.\n     *\n     * @product highstock gantt\n     */\n    rangeSelectorTo: '→'\n};\n/**\n * The range selector is a tool for selecting ranges to display within\n * the chart. It provides buttons to select preconfigured ranges in\n * the chart, like 1 day, 1 week, 1 month etc. It also provides input\n * boxes where min and max dates can be manually input.\n *\n * @product      highstock gantt\n * @optionparent rangeSelector\n */\nvar rangeSelector = {\n    /**\n     * Whether to enable all buttons from the start. By default buttons are\n     * only enabled if the corresponding time range exists on the X axis,\n     * but enabling all buttons allows for dynamically loading different\n     * time ranges.\n     *\n     * @sample {highstock} stock/rangeselector/allbuttonsenabled-true/\n     *         All buttons enabled\n     *\n     * @since     2.0.3\n     */\n    allButtonsEnabled: false,\n    /**\n     * An array of configuration objects for the buttons.\n     *\n     * Defaults to:\n     * ```js\n     * buttons: [{\n     *     type: 'month',\n     *     count: 1,\n     *     text: '1m',\n     *     title: 'View 1 month'\n     * }, {\n     *     type: 'month',\n     *     count: 3,\n     *     text: '3m',\n     *     title: 'View 3 months'\n     * }, {\n     *     type: 'month',\n     *     count: 6,\n     *     text: '6m',\n     *     title: 'View 6 months'\n     * }, {\n     *     type: 'ytd',\n     *     text: 'YTD',\n     *     title: 'View year to date'\n     * }, {\n     *     type: 'year',\n     *     count: 1,\n     *     text: '1y',\n     *     title: 'View 1 year'\n     * }, {\n     *     type: 'all',\n     *     text: 'All',\n     *     title: 'View all'\n     * }]\n     * ```\n     *\n     * @sample {highstock} stock/demo/rangeselector-datagrouping/\n     *         Data grouping by buttons\n     *\n     * @type      {Array<*>}\n     */\n    buttons: [{\n            type: 'month',\n            count: 1,\n            text: '1m',\n            title: 'View 1 month'\n        }, {\n            type: 'month',\n            count: 3,\n            text: '3m',\n            title: 'View 3 months'\n        }, {\n            type: 'month',\n            count: 6,\n            text: '6m',\n            title: 'View 6 months'\n        }, {\n            type: 'ytd',\n            text: 'YTD',\n            title: 'View year to date'\n        }, {\n            type: 'year',\n            count: 1,\n            text: '1y',\n            title: 'View 1 year'\n        }, {\n            type: 'all',\n            text: 'All',\n            title: 'View all'\n        }],\n    /**\n     * How many units of the defined type the button should span. If `type`\n     * is \"month\" and `count` is 3, the button spans three months.\n     *\n     * @type      {number}\n     * @default   1\n     * @apioption rangeSelector.buttons.count\n     */\n    /**\n     * Fires when clicking on the rangeSelector button. One parameter,\n     * event, is passed to the function, containing common event\n     * information.\n     *\n     * ```js\n     * click: function(e) {\n     *   console.log(this);\n     * }\n     * ```\n     *\n     * Return false to stop default button's click action.\n     *\n     * @sample {highstock} stock/rangeselector/button-click/\n     *         Click event on the button\n     *\n     * @type      {Highcharts.RangeSelectorClickCallbackFunction}\n     * @apioption rangeSelector.buttons.events.click\n     */\n    /**\n     * Additional range (in milliseconds) added to the end of the calculated\n     * time span.\n     *\n     * @sample {highstock} stock/rangeselector/min-max-offsets/\n     *         Button offsets\n     *\n     * @type      {number}\n     * @default   0\n     * @since     6.0.0\n     * @apioption rangeSelector.buttons.offsetMax\n     */\n    /**\n     * Additional range (in milliseconds) added to the start of the\n     * calculated time span.\n     *\n     * @sample {highstock} stock/rangeselector/min-max-offsets/\n     *         Button offsets\n     *\n     * @type      {number}\n     * @default   0\n     * @since     6.0.0\n     * @apioption rangeSelector.buttons.offsetMin\n     */\n    /**\n     * When buttons apply dataGrouping on a series, by default zooming\n     * in/out will deselect buttons and unset dataGrouping. Enable this\n     * option to keep buttons selected when extremes change.\n     *\n     * @sample {highstock} stock/rangeselector/preserve-datagrouping/\n     *         Different preserveDataGrouping settings\n     *\n     * @type      {boolean}\n     * @default   false\n     * @since     6.1.2\n     * @apioption rangeSelector.buttons.preserveDataGrouping\n     */\n    /**\n     * A custom data grouping object for each button.\n     *\n     * @see [series.dataGrouping](#plotOptions.series.dataGrouping)\n     *\n     * @sample {highstock} stock/demo/rangeselector-datagrouping/\n     *         Data grouping by range selector buttons\n     *\n     * @type      {*}\n     * @extends   plotOptions.series.dataGrouping\n     * @apioption rangeSelector.buttons.dataGrouping\n     */\n    /**\n     * The text for the button itself.\n     *\n     * @type      {string}\n     * @apioption rangeSelector.buttons.text\n     */\n    /**\n     * Explanation for the button, shown as a tooltip on hover, and used by\n     * assistive technology.\n     *\n     * @type      {string}\n     * @apioption rangeSelector.buttons.title\n     */\n    /**\n     * Defined the time span for the button. Can be one of `millisecond`,\n     * `second`, `minute`, `hour`, `day`, `week`, `month`, `year`, `ytd`,\n     * and `all`.\n     *\n     * @type       {Highcharts.RangeSelectorButtonTypeValue}\n     * @apioption  rangeSelector.buttons.type\n     */\n    /**\n     * The space in pixels between the buttons in the range selector.\n     */\n    buttonSpacing: 5,\n    /**\n     * Whether to collapse the range selector buttons into a dropdown when\n     * there is not enough room to show everything in a single row, instead\n     * of dividing the range selector into multiple rows.\n     * Can be one of the following:\n     *  - `always`: Always collapse\n     *  - `responsive`: Only collapse when there is not enough room\n     *  - `never`: Never collapse\n     *\n     * @sample {highstock} stock/rangeselector/dropdown/\n     *         Dropdown option\n     *\n     * @validvalue [\"always\", \"responsive\", \"never\"]\n     * @since 9.0.0\n     */\n    dropdown: 'responsive',\n    /**\n     * Enable or disable the range selector. Default to `true` for stock\n     * charts, using the `stockChart` factory.\n     *\n     * @sample {highstock} stock/rangeselector/enabled/\n     *         Disable the range selector\n     *\n     * @type {boolean|undefined}\n     * @default {highstock} true\n     */\n    enabled: void 0,\n    /**\n     * The vertical alignment of the rangeselector box. Allowed properties\n     * are `top`, `middle`, `bottom`.\n     *\n     * @sample {highstock} stock/rangeselector/vertical-align-middle/\n     *         Middle\n     * @sample {highstock} stock/rangeselector/vertical-align-bottom/\n     *         Bottom\n     *\n     * @type  {Highcharts.VerticalAlignValue}\n     * @since 6.0.0\n     */\n    verticalAlign: 'top',\n    /**\n     * A collection of attributes for the buttons. The object takes SVG\n     * attributes like `fill`, `stroke`, `stroke-width`, as well as `style`,\n     * a collection of CSS properties for the text.\n     *\n     * The object can also be extended with states, so you can set\n     * presentational options for `hover`, `select` or `disabled` button\n     * states.\n     *\n     * CSS styles for the text label.\n     *\n     * In styled mode, the buttons are styled by the\n     * `.highcharts-range-selector-buttons .highcharts-button` rule with its\n     * different states.\n     *\n     * @sample {highstock} stock/rangeselector/styling/\n     *         Styling the buttons and inputs\n     *\n     * @type {Highcharts.SVGAttributes}\n     */\n    buttonTheme: {\n        /** @ignore */\n        width: 28,\n        /** @ignore */\n        height: 18,\n        /** @ignore */\n        padding: 2,\n        /** @ignore */\n        zIndex: 7 // #484, #852\n    },\n    /**\n     * When the rangeselector is floating, the plot area does not reserve\n     * space for it. This opens for positioning anywhere on the chart.\n     *\n     * @sample {highstock} stock/rangeselector/floating/\n     *         Placing the range selector between the plot area and the\n     *         navigator\n     *\n     * @since 6.0.0\n     */\n    floating: false,\n    /**\n     * The x offset of the range selector relative to its horizontal\n     * alignment within `chart.spacingLeft` and `chart.spacingRight`.\n     *\n     * @since 6.0.0\n     */\n    x: 0,\n    /**\n     * The y offset of the range selector relative to its horizontal\n     * alignment within `chart.spacingLeft` and `chart.spacingRight`.\n     *\n     * @since 6.0.0\n     */\n    y: 0,\n    /**\n     * Deprecated. The height of the range selector. Currently it is\n     * calculated dynamically.\n     *\n     * @deprecated\n     * @type  {number|undefined}\n     * @since 2.1.9\n     */\n    height: void 0, // Reserved space for buttons and input\n    /**\n     * The border color of the date input boxes.\n     *\n     * @sample {highstock} stock/rangeselector/styling/\n     *         Styling the buttons and inputs\n     *\n     * @type      {Highcharts.ColorString}\n     * @since     1.3.7\n     */\n    inputBoxBorderColor: 'none',\n    /**\n     * The pixel height of the date input boxes.\n     *\n     * @sample {highstock} stock/rangeselector/styling/\n     *         Styling the buttons and inputs\n     *\n     * @since     1.3.7\n     */\n    inputBoxHeight: 17,\n    /**\n     * The pixel width of the date input boxes. When `undefined`, the width\n     * is fitted to the rendered content.\n     *\n     * @sample {highstock} stock/rangeselector/styling/\n     *         Styling the buttons and inputs\n     *\n     * @type   {number|undefined}\n     * @since  1.3.7\n     */\n    inputBoxWidth: void 0,\n    /**\n     * The date format in the input boxes when not selected for editing.\n     * Defaults to `%e %b %Y`.\n     *\n     * This is used to determine which type of input to show,\n     * `datetime-local`, `date` or `time` and falling back to `text` when\n     * the browser does not support the input type or the format contains\n     * milliseconds.\n     *\n     * @sample {highstock} stock/rangeselector/input-type/\n     *         Input types\n     * @sample {highstock} stock/rangeselector/input-format/\n     *         Milliseconds in the range selector\n     *\n     */\n    inputDateFormat: '%[ebY]',\n    /**\n     * A custom callback function to parse values entered in the input boxes and\n     * return a valid JavaScript time as milliseconds since 1970. The first\n     * argument passed is the value to parse, second is a boolean indicating use\n     * of UTC time. The third is a reference to the `time` object. Time zone can\n     * be read from `time.timezone`.\n     *\n     * This will only get called for inputs of type `text`. Since v8.2.3, the\n     * input type is dynamically determined based on the granularity of the\n     * `inputDateFormat` and the browser support.\n     *\n     * @sample {highstock} stock/rangeselector/input-format/\n     *         Milliseconds in the range selector\n     *\n     * @type      {Highcharts.RangeSelectorParseCallbackFunction}\n     * @since     1.3.3\n     */\n    inputDateParser: void 0,\n    /**\n     * The date format in the input boxes when they are selected for\n     * editing. This must be a format that is recognized by JavaScript\n     * Date.parse.\n     *\n     * This will only be used for inputs of type `text`. Since v8.2.3,\n     * the input type is dynamically determined based on the granularity\n     * of the `inputDateFormat` and the browser support.\n     *\n     * @sample {highstock} stock/rangeselector/input-format/\n     *         Milliseconds in the range selector\n     *\n     */\n    inputEditDateFormat: '%Y-%m-%d',\n    /**\n     * Enable or disable the date input boxes.\n     */\n    inputEnabled: true,\n    /**\n     * Positioning for the input boxes. Allowed properties are `align`,\n     *  `x` and `y`.\n     *\n     * @since 1.2.4\n     */\n    inputPosition: {\n        /**\n         * The alignment of the input box. Allowed properties are `left`,\n         * `center`, `right`.\n         *\n         * @sample {highstock} stock/rangeselector/input-button-opposite-alignment/\n         *         Opposite alignment\n         *\n         * @sample {highstock} stock/rangeselector/input-button-same-alignment/\n         *         Same alignment for buttons and input\n         *\n         * @type  {Highcharts.AlignValue}\n         * @since 6.0.0\n         */\n        align: 'right',\n        /**\n         * X offset of the input row.\n         */\n        x: 0,\n        /**\n         * Y offset of the input row.\n         */\n        y: 0\n    },\n    /**\n     * The space in pixels between the labels and the date input boxes in\n     * the range selector.\n     *\n     * @since 9.0.0\n     */\n    inputSpacing: 5,\n    /**\n     * The index of the button to appear pre-selected. If the selected range\n     * exceeds the total data range and the 'all' option is available,\n     * the 'all' option, showing the full range, is automatically selected.\n     *\n     * @type      {number}\n     */\n    selected: void 0,\n    /**\n     * Positioning for the button row.\n     *\n     * @since 1.2.4\n     */\n    buttonPosition: {\n        /**\n         * The alignment of the input box. Allowed properties are `left`,\n         * `center`, `right`.\n         *\n         * @sample {highstock} stock/rangeselector/input-button-opposite-alignment/\n         *         Opposite alignment\n         *\n         * @sample {highstock} stock/rangeselector/input-button-same-alignment/\n         *         Same alignment for buttons and input\n         *\n         * @type  {Highcharts.AlignValue}\n         * @since 6.0.0\n         */\n        align: 'left',\n        /**\n         * X offset of the button row.\n         */\n        x: 0,\n        /**\n         * Y offset of the button row.\n         */\n        y: 0\n    },\n    /**\n     * CSS for the HTML inputs in the range selector.\n     *\n     * In styled mode, the inputs are styled by the\n     * `.highcharts-range-input text` rule in SVG mode, and\n     * `input.highcharts-range-selector` when active.\n     *\n     * @sample {highstock} stock/rangeselector/styling/\n     *         Styling the buttons and inputs\n     *\n     * @type      {Highcharts.CSSObject}\n     * @apioption rangeSelector.inputStyle\n     */\n    inputStyle: {\n        /** @ignore */\n        color: \"#334eff\" /* Palette.highlightColor80 */,\n        /** @ignore */\n        cursor: 'pointer',\n        /** @ignore */\n        fontSize: '0.8em'\n    },\n    /**\n     * CSS styles for the labels - the Zoom, From and To texts.\n     *\n     * In styled mode, the labels are styled by the\n     * `.highcharts-range-label` class.\n     *\n     * @sample {highstock} stock/rangeselector/styling/\n     *         Styling the buttons and inputs\n     *\n     * @type {Highcharts.CSSObject}\n     */\n    labelStyle: {\n        /** @ignore */\n        color: \"#666666\" /* Palette.neutralColor60 */,\n        /** @ignore */\n        fontSize: '0.8em'\n    }\n};\n/* *\n *\n *  Default Export\n *\n * */\nvar RangeSelectorDefaults = {\n    lang: lang,\n    rangeSelector: rangeSelector\n};\n/* harmony default export */ var RangeSelector_RangeSelectorDefaults = (RangeSelectorDefaults);\n\n;// ./code/es5/es-modules/Stock/RangeSelector/RangeSelectorComposition.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar RangeSelectorComposition_defaultOptions = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defaultOptions;\n\nvar RangeSelectorComposition_composed = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).composed;\n\n\nvar RangeSelectorComposition_addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, RangeSelectorComposition_defined = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defined, RangeSelectorComposition_extend = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).extend, RangeSelectorComposition_isNumber = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isNumber, RangeSelectorComposition_merge = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).merge, RangeSelectorComposition_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick, RangeSelectorComposition_pushUnique = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pushUnique;\n/* *\n *\n *  Constants\n *\n * */\nvar chartDestroyEvents = [];\n/* *\n *\n *  Variables\n *\n * */\nvar RangeSelectorConstructor;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Get the axis min value based on the range option and the current max. For\n * stock charts this is extended via the {@link RangeSelector} so that if the\n * selected range is a multiple of months or years, it is compensated for\n * various month lengths.\n *\n * @private\n * @function Highcharts.Axis#minFromRange\n * @return {number|undefined}\n *         The new minimum value.\n */\nfunction axisMinFromRange() {\n    var rangeOptions = this.range,\n        type = rangeOptions.type,\n        max = this.max,\n        time = this.chart.time, \n        // Get the true range from a start date\n        getTrueRange = function (base,\n        count) {\n            var original = time.toParts(base),\n        modified = original.slice();\n        if (type === 'year') {\n            modified[0] += count;\n        }\n        else {\n            modified[1] += count;\n        }\n        var d = time.makeTime.apply(time,\n            modified);\n        var numbers = time.toParts(d);\n        // When subtracting a month still places us in the same month, like\n        // subtracting one month from March 31 places us on February 31,\n        // which translates to March 3 (#6537)\n        if (type === 'month' &&\n            original[1] === numbers[1] &&\n            Math.abs(count) === 1) {\n            modified[0] = original[0];\n            modified[1] = original[1];\n            // 0 is the last day of the previous month\n            modified[2] = 0;\n        }\n        d = time.makeTime.apply(time, modified);\n        return d - base;\n    };\n    var min,\n        range;\n    if (RangeSelectorComposition_isNumber(rangeOptions)) {\n        min = max - rangeOptions;\n        range = rangeOptions;\n    }\n    else if (rangeOptions) {\n        min = max + getTrueRange(max, -(rangeOptions.count || 1));\n        // Let the fixedRange reflect initial settings (#5930)\n        if (this.chart) {\n            this.chart.setFixedRange(max - min);\n        }\n    }\n    var dataMin = RangeSelectorComposition_pick(this.dataMin,\n        Number.MIN_VALUE);\n    if (!RangeSelectorComposition_isNumber(min)) {\n        min = dataMin;\n    }\n    if (min <= dataMin) {\n        min = dataMin;\n        if (typeof range === 'undefined') { // #4501\n            range = getTrueRange(min, rangeOptions.count);\n        }\n        this.newMax = Math.min(min + range, RangeSelectorComposition_pick(this.dataMax, Number.MAX_VALUE));\n    }\n    if (!RangeSelectorComposition_isNumber(max)) {\n        min = void 0;\n    }\n    else if (!RangeSelectorComposition_isNumber(rangeOptions) &&\n        rangeOptions &&\n        rangeOptions._offsetMin) {\n        min += rangeOptions._offsetMin;\n    }\n    return min;\n}\n/**\n * @private\n */\nfunction updateRangeSelectorButtons() {\n    var _a;\n    (_a = this.rangeSelector) === null || _a === void 0 ? void 0 : _a.redrawElements();\n}\n/**\n * @private\n */\nfunction RangeSelectorComposition_compose(AxisClass, ChartClass, RangeSelectorClass) {\n    RangeSelectorConstructor = RangeSelectorClass;\n    if (RangeSelectorComposition_pushUnique(RangeSelectorComposition_composed, 'RangeSelector')) {\n        var chartProto = ChartClass.prototype;\n        AxisClass.prototype.minFromRange = axisMinFromRange;\n        RangeSelectorComposition_addEvent(ChartClass, 'afterGetContainer', createRangeSelector);\n        RangeSelectorComposition_addEvent(ChartClass, 'beforeRender', RangeSelectorComposition_onChartBeforeRender);\n        RangeSelectorComposition_addEvent(ChartClass, 'destroy', onChartDestroy);\n        RangeSelectorComposition_addEvent(ChartClass, 'getMargins', onChartGetMargins);\n        RangeSelectorComposition_addEvent(ChartClass, 'redraw', redrawRangeSelector);\n        RangeSelectorComposition_addEvent(ChartClass, 'update', RangeSelectorComposition_onChartUpdate);\n        RangeSelectorComposition_addEvent(ChartClass, 'beforeRedraw', updateRangeSelectorButtons);\n        chartProto.callbacks.push(redrawRangeSelector);\n        RangeSelectorComposition_extend(RangeSelectorComposition_defaultOptions, { rangeSelector: RangeSelector_RangeSelectorDefaults.rangeSelector });\n        RangeSelectorComposition_extend(RangeSelectorComposition_defaultOptions.lang, RangeSelector_RangeSelectorDefaults.lang);\n    }\n}\n/**\n * Initialize rangeselector for stock charts\n * @private\n */\nfunction createRangeSelector() {\n    if (this.options.rangeSelector &&\n        this.options.rangeSelector.enabled) {\n        this.rangeSelector = new RangeSelectorConstructor(this);\n    }\n}\n/**\n * @private\n */\nfunction RangeSelectorComposition_onChartBeforeRender() {\n    var chart = this,\n        rangeSelector = chart.rangeSelector;\n    if (rangeSelector) {\n        if (RangeSelectorComposition_isNumber(rangeSelector.deferredYTDClick)) {\n            rangeSelector.clickButton(rangeSelector.deferredYTDClick);\n            delete rangeSelector.deferredYTDClick;\n        }\n        var verticalAlign = rangeSelector.options.verticalAlign;\n        if (!rangeSelector.options.floating) {\n            if (verticalAlign === 'bottom') {\n                this.extraBottomMargin = true;\n            }\n            else if (verticalAlign === 'top') {\n                this.extraTopMargin = true;\n            }\n        }\n    }\n}\nfunction redrawRangeSelector() {\n    var chart = this;\n    var rangeSelector = this.rangeSelector;\n    if (!rangeSelector) {\n        return;\n    }\n    var alignTo;\n    var extremes = chart.xAxis[0].getExtremes();\n    var legend = chart.legend;\n    var verticalAlign = (rangeSelector &&\n            rangeSelector.options.verticalAlign);\n    if (RangeSelectorComposition_isNumber(extremes.min)) {\n        rangeSelector.render(extremes.min, extremes.max);\n    }\n    // Re-align the legend so that it's below the rangeselector\n    if (legend.display &&\n        verticalAlign === 'top' &&\n        verticalAlign === legend.options.verticalAlign) {\n        // Create a new alignment box for the legend.\n        alignTo = RangeSelectorComposition_merge(chart.spacingBox);\n        if (legend.options.layout === 'vertical') {\n            alignTo.y = chart.plotTop;\n        }\n        else {\n            alignTo.y += rangeSelector.getHeight();\n        }\n        legend.group.placed = false; // Don't animate the alignment.\n        legend.align(alignTo);\n    }\n}\n/**\n * Remove resize/afterSetExtremes at chart destroy.\n * @private\n */\nfunction onChartDestroy() {\n    for (var i = 0, iEnd = chartDestroyEvents.length; i < iEnd; ++i) {\n        var events = chartDestroyEvents[i];\n        if (events[0] === this) {\n            events[1].forEach(function (unbind) { return unbind(); });\n            chartDestroyEvents.splice(i, 1);\n            return;\n        }\n    }\n}\n/**\n *\n */\nfunction onChartGetMargins() {\n    var _a;\n    var rangeSelector = this.rangeSelector;\n    if ((_a = rangeSelector === null || rangeSelector === void 0 ? void 0 : rangeSelector.options) === null || _a === void 0 ? void 0 : _a.enabled) {\n        var rangeSelectorHeight = rangeSelector.getHeight();\n        var verticalAlign = rangeSelector.options.verticalAlign;\n        if (!rangeSelector.options.floating) {\n            if (verticalAlign === 'bottom') {\n                this.marginBottom += rangeSelectorHeight;\n            }\n            else if (verticalAlign !== 'middle') {\n                this.plotTop += rangeSelectorHeight;\n            }\n        }\n    }\n}\n/**\n * @private\n */\nfunction RangeSelectorComposition_onChartUpdate(e) {\n    var chart = this,\n        options = e.options,\n        optionsRangeSelector = options.rangeSelector,\n        extraBottomMarginWas = this.extraBottomMargin,\n        extraTopMarginWas = this.extraTopMargin;\n    var rangeSelector = chart.rangeSelector;\n    if (optionsRangeSelector &&\n        optionsRangeSelector.enabled &&\n        !RangeSelectorComposition_defined(rangeSelector) &&\n        this.options.rangeSelector) {\n        this.options.rangeSelector.enabled = true;\n        this.rangeSelector = rangeSelector = new RangeSelectorConstructor(this);\n    }\n    this.extraBottomMargin = false;\n    this.extraTopMargin = false;\n    if (rangeSelector) {\n        var verticalAlign = (optionsRangeSelector &&\n                optionsRangeSelector.verticalAlign) || (rangeSelector.options && rangeSelector.options.verticalAlign);\n        if (!rangeSelector.options.floating) {\n            if (verticalAlign === 'bottom') {\n                this.extraBottomMargin = true;\n            }\n            else if (verticalAlign !== 'middle') {\n                this.extraTopMargin = true;\n            }\n        }\n        if (this.extraBottomMargin !== extraBottomMarginWas ||\n            this.extraTopMargin !== extraTopMarginWas) {\n            this.isDirtyBox = true;\n        }\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar RangeSelectorComposition = {\n    compose: RangeSelectorComposition_compose\n};\n/* harmony default export */ var RangeSelector_RangeSelectorComposition = (RangeSelectorComposition);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"SVGElement\"],\"commonjs\":[\"highcharts\",\"SVGElement\"],\"commonjs2\":[\"highcharts\",\"SVGElement\"],\"root\":[\"Highcharts\",\"SVGElement\"]}\nvar highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_ = __webpack_require__(28);\nvar highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_default = /*#__PURE__*/__webpack_require__.n(highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_);\n;// ./code/es5/es-modules/Data/DataTableCore.js\n/* *\n *\n *  (c) 2009-2024 Highsoft AS\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n *  Authors:\n *  - Sophie Bremer\n *  - Gøran Slettemark\n *  - Torstein Hønsi\n *\n * */\n\n\nvar DataTableCore_fireEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).fireEvent, DataTableCore_isArray = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isArray, DataTableCore_objectEach = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).objectEach, uniqueKey = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).uniqueKey;\n/* *\n *\n *  Class\n *\n * */\n/**\n * Class to manage columns and rows in a table structure. It provides methods\n * to add, remove, and manipulate columns and rows, as well as to retrieve data\n * from specific cells.\n *\n * @class\n * @name Highcharts.DataTable\n *\n * @param {Highcharts.DataTableOptions} [options]\n * Options to initialize the new DataTable instance.\n */\nvar DataTableCore = /** @class */ (function () {\n    /**\n     * Constructs an instance of the DataTable class.\n     *\n     * @example\n     * const dataTable = new Highcharts.DataTableCore({\n     *   columns: {\n     *     year: [2020, 2021, 2022, 2023],\n     *     cost: [11, 13, 12, 14],\n     *     revenue: [12, 15, 14, 18]\n     *   }\n     * });\n\n     *\n     * @param {Highcharts.DataTableOptions} [options]\n     * Options to initialize the new DataTable instance.\n     */\n    function DataTableCore(options) {\n        if (options === void 0) { options = {}; }\n        var _this = this;\n        /**\n         * Whether the ID was automatic generated or given in the constructor.\n         *\n         * @name Highcharts.DataTable#autoId\n         * @type {boolean}\n         */\n        this.autoId = !options.id;\n        this.columns = {};\n        /**\n         * ID of the table for indentification purposes.\n         *\n         * @name Highcharts.DataTable#id\n         * @type {string}\n         */\n        this.id = (options.id || uniqueKey());\n        this.modified = this;\n        this.rowCount = 0;\n        this.versionTag = uniqueKey();\n        var rowCount = 0;\n        DataTableCore_objectEach(options.columns || {}, function (column, columnName) {\n            _this.columns[columnName] = column.slice();\n            rowCount = Math.max(rowCount, column.length);\n        });\n        this.applyRowCount(rowCount);\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Applies a row count to the table by setting the `rowCount` property and\n     * adjusting the length of all columns.\n     *\n     * @private\n     * @param {number} rowCount The new row count.\n     */\n    DataTableCore.prototype.applyRowCount = function (rowCount) {\n        this.rowCount = rowCount;\n        DataTableCore_objectEach(this.columns, function (column) {\n            if (DataTableCore_isArray(column)) { // Not on typed array\n                column.length = rowCount;\n            }\n        });\n    };\n    /**\n     * Fetches the given column by the canonical column name. Simplified version\n     * of the full `DataTable.getRow` method, always returning by reference.\n     *\n     * @param {string} columnName\n     * Name of the column to get.\n     *\n     * @return {Highcharts.DataTableColumn|undefined}\n     * A copy of the column, or `undefined` if not found.\n     */\n    DataTableCore.prototype.getColumn = function (columnName, \n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    asReference) {\n        return this.columns[columnName];\n    };\n    /**\n     * Retrieves all or the given columns. Simplified version of the full\n     * `DataTable.getColumns` method, always returning by reference.\n     *\n     * @param {Array<string>} [columnNames]\n     * Column names to retrieve.\n     *\n     * @return {Highcharts.DataTableColumnCollection}\n     * Collection of columns. If a requested column was not found, it is\n     * `undefined`.\n     */\n    DataTableCore.prototype.getColumns = function (columnNames, \n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    asReference) {\n        var _this = this;\n        return (columnNames || Object.keys(this.columns)).reduce(function (columns, columnName) {\n            columns[columnName] = _this.columns[columnName];\n            return columns;\n        }, {});\n    };\n    /**\n     * Retrieves the row at a given index.\n     *\n     * @param {number} rowIndex\n     * Row index to retrieve. First row has index 0.\n     *\n     * @param {Array<string>} [columnNames]\n     * Column names to retrieve.\n     *\n     * @return {Record<string, number|string|undefined>|undefined}\n     * Returns the row values, or `undefined` if not found.\n     */\n    DataTableCore.prototype.getRow = function (rowIndex, columnNames) {\n        var _this = this;\n        return (columnNames || Object.keys(this.columns)).map(function (key) { var _a; return (_a = _this.columns[key]) === null || _a === void 0 ? void 0 : _a[rowIndex]; });\n    };\n    /**\n     * Sets cell values for a column. Will insert a new column, if not found.\n     *\n     * @param {string} columnName\n     * Column name to set.\n     *\n     * @param {Highcharts.DataTableColumn} [column]\n     * Values to set in the column.\n     *\n     * @param {number} [rowIndex=0]\n     * Index of the first row to change. (Default: 0)\n     *\n     * @param {Record<string, (boolean|number|string|null|undefined)>} [eventDetail]\n     * Custom information for pending events.\n     *\n     * @emits #setColumns\n     * @emits #afterSetColumns\n     */\n    DataTableCore.prototype.setColumn = function (columnName, column, rowIndex, eventDetail) {\n        var _a;\n        if (column === void 0) { column = []; }\n        if (rowIndex === void 0) { rowIndex = 0; }\n        this.setColumns((_a = {}, _a[columnName] = column, _a), rowIndex, eventDetail);\n    };\n    /**\n     * * Sets cell values for multiple columns. Will insert new columns, if not\n     * found. Simplified version of the full `DataTable.setColumns`, limited to\n     * full replacement of the columns (undefined `rowIndex`).\n     *\n     * @param {Highcharts.DataTableColumnCollection} columns\n     * Columns as a collection, where the keys are the column names.\n     *\n     * @param {number} [rowIndex]\n     * Index of the first row to change. Keep undefined to reset.\n     *\n     * @param {Record<string, (boolean|number|string|null|undefined)>} [eventDetail]\n     * Custom information for pending events.\n     *\n     * @emits #setColumns\n     * @emits #afterSetColumns\n     */\n    DataTableCore.prototype.setColumns = function (columns, rowIndex, eventDetail) {\n        var _this = this;\n        var rowCount = this.rowCount;\n        DataTableCore_objectEach(columns, function (column, columnName) {\n            _this.columns[columnName] = column.slice();\n            rowCount = column.length;\n        });\n        this.applyRowCount(rowCount);\n        if (!(eventDetail === null || eventDetail === void 0 ? void 0 : eventDetail.silent)) {\n            DataTableCore_fireEvent(this, 'afterSetColumns');\n            this.versionTag = uniqueKey();\n        }\n    };\n    /**\n     * Sets cell values of a row. Will insert a new row if no index was\n     * provided, or if the index is higher than the total number of table rows.\n     * A simplified version of the full `DateTable.setRow`, limited to objects.\n     *\n     * @param {Record<string, number|string|undefined>} row\n     * Cell values to set.\n     *\n     * @param {number} [rowIndex]\n     * Index of the row to set. Leave `undefind` to add as a new row.\n     *\n     * @param {boolean} [insert]\n     * Whether to insert the row at the given index, or to overwrite the row.\n     *\n     * @param {Record<string, (boolean|number|string|null|undefined)>} [eventDetail]\n     * Custom information for pending events.\n     *\n     * @emits #afterSetRows\n     */\n    DataTableCore.prototype.setRow = function (row, rowIndex, insert, eventDetail) {\n        if (rowIndex === void 0) { rowIndex = this.rowCount; }\n        var columns = this.columns,\n            indexRowCount = insert ? this.rowCount + 1 : rowIndex + 1;\n        DataTableCore_objectEach(row, function (cellValue, columnName) {\n            var column = columns[columnName] ||\n                    (eventDetail === null || eventDetail === void 0 ? void 0 : eventDetail.addColumns) !== false && new Array(indexRowCount);\n            if (column) {\n                if (insert) {\n                    column.splice(rowIndex, 0, cellValue);\n                }\n                else {\n                    column[rowIndex] = cellValue;\n                }\n                columns[columnName] = column;\n            }\n        });\n        if (indexRowCount > this.rowCount) {\n            this.applyRowCount(indexRowCount);\n        }\n        if (!(eventDetail === null || eventDetail === void 0 ? void 0 : eventDetail.silent)) {\n            DataTableCore_fireEvent(this, 'afterSetRows');\n            this.versionTag = uniqueKey();\n        }\n    };\n    return DataTableCore;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Data_DataTableCore = (DataTableCore);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * A column of values in a data table.\n * @typedef {Array<boolean|null|number|string|undefined>} Highcharts.DataTableColumn\n */ /**\n* A collection of data table columns defined by a object where the key is the\n* column name and the value is an array of the column values.\n* @typedef {Record<string, Highcharts.DataTableColumn>} Highcharts.DataTableColumnCollection\n*/\n/**\n * Options for the `DataTable` or `DataTableCore` classes.\n * @interface Highcharts.DataTableOptions\n */ /**\n* The column options for the data table. The columns are defined by an object\n* where the key is the column ID and the value is an array of the column\n* values.\n*\n* @name Highcharts.DataTableOptions.columns\n* @type {Highcharts.DataTableColumnCollection|undefined}\n*/ /**\n* Custom ID to identify the new DataTable instance.\n*\n* @name Highcharts.DataTableOptions.id\n* @type {string|undefined}\n*/\n(''); // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Axis/OrdinalAxis.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar OrdinalAxis_assign = (undefined && undefined.__assign) || function () {\n    OrdinalAxis_assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return OrdinalAxis_assign.apply(this, arguments);\n};\n\n\n\n\nvar OrdinalAxis_addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, OrdinalAxis_correctFloat = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).correctFloat, css = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).css, OrdinalAxis_defined = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defined, OrdinalAxis_error = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).error, OrdinalAxis_isNumber = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isNumber, OrdinalAxis_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick, timeUnits = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).timeUnits, isString = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isString;\n/* *\n *\n *  Composition\n *\n * */\n/**\n * Extends the axis with ordinal support.\n * @private\n */\nvar OrdinalAxis;\n(function (OrdinalAxis) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Extends the axis with ordinal support.\n     *\n     * @private\n     *\n     * @param AxisClass\n     * Axis class to extend.\n     *\n     * @param ChartClass\n     * Chart class to use.\n     *\n     * @param SeriesClass\n     * Series class to use.\n     */\n    function compose(AxisClass, SeriesClass, ChartClass) {\n        var axisProto = AxisClass.prototype;\n        if (!axisProto.ordinal2lin) {\n            axisProto.getTimeTicks = getTimeTicks;\n            axisProto.index2val = index2val;\n            axisProto.lin2val = lin2val;\n            axisProto.val2lin = val2lin;\n            // Record this to prevent overwriting by broken-axis module (#5979)\n            axisProto.ordinal2lin = axisProto.val2lin;\n            OrdinalAxis_addEvent(AxisClass, 'afterInit', onAxisAfterInit);\n            OrdinalAxis_addEvent(AxisClass, 'foundExtremes', onAxisFoundExtremes);\n            OrdinalAxis_addEvent(AxisClass, 'afterSetScale', onAxisAfterSetScale);\n            OrdinalAxis_addEvent(AxisClass, 'initialAxisTranslation', onAxisInitialAxisTranslation);\n            OrdinalAxis_addEvent(ChartClass, 'pan', onChartPan);\n            OrdinalAxis_addEvent(ChartClass, 'touchpan', onChartPan);\n            OrdinalAxis_addEvent(SeriesClass, 'updatedData', onSeriesUpdatedData);\n        }\n        return AxisClass;\n    }\n    OrdinalAxis.compose = compose;\n    /**\n     * In an ordinal axis, there might be areas with dense concentrations of\n     * points, then large gaps between some. Creating equally distributed\n     * ticks over this entire range may lead to a huge number of ticks that\n     * will later be removed. So instead, break the positions up in\n     * segments, find the tick positions for each segment then concatenize\n     * them. This method is used from both data grouping logic and X axis\n     * tick position logic.\n     * @private\n     */\n    function getTimeTicks(normalizedInterval, min, max, startOfWeek, positions, closestDistance, findHigherRanks) {\n        if (positions === void 0) { positions = []; }\n        if (closestDistance === void 0) { closestDistance = 0; }\n        var higherRanks = {},\n            tickPixelIntervalOption = this.options.tickPixelInterval,\n            time = this.chart.time, \n            // Record all the start positions of a segment, to use when\n            // deciding what's a gap in the data.\n            segmentStarts = [];\n        var end,\n            segmentPositions,\n            hasCrossedHigherRank,\n            info,\n            outsideMax,\n            start = 0,\n            groupPositions = [],\n            lastGroupPosition = -Number.MAX_VALUE;\n        // The positions are not always defined, for example for ordinal\n        // positions when data has regular interval (#1557, #2090)\n        if ((!this.options.ordinal && !this.options.breaks) ||\n            !positions ||\n            positions.length < 3 ||\n            typeof min === 'undefined') {\n            return time.getTimeTicks.apply(time, arguments);\n        }\n        // Analyze the positions array to split it into segments on gaps\n        // larger than 5 times the closest distance. The closest distance is\n        // already found at this point, so we reuse that instead of\n        // computing it again.\n        var posLength = positions.length;\n        for (end = 0; end < posLength; end++) {\n            outsideMax = end && positions[end - 1] > max;\n            if (positions[end] < min) { // Set the last position before min\n                start = end;\n            }\n            if (end === posLength - 1 ||\n                positions[end + 1] - positions[end] > closestDistance * 5 ||\n                outsideMax) {\n                // For each segment, calculate the tick positions from the\n                // getTimeTicks utility function. The interval will be the\n                // same regardless of how long the segment is.\n                if (positions[end] > lastGroupPosition) { // #1475\n                    segmentPositions = time.getTimeTicks(normalizedInterval, positions[start], positions[end], startOfWeek);\n                    // Prevent duplicate groups, for example for multiple\n                    // segments within one larger time frame (#1475)\n                    while (segmentPositions.length &&\n                        segmentPositions[0] <= lastGroupPosition) {\n                        segmentPositions.shift();\n                    }\n                    if (segmentPositions.length) {\n                        lastGroupPosition =\n                            segmentPositions[segmentPositions.length - 1];\n                    }\n                    segmentStarts.push(groupPositions.length);\n                    groupPositions = groupPositions.concat(segmentPositions);\n                }\n                // Set start of next segment\n                start = end + 1;\n            }\n            if (outsideMax) {\n                break;\n            }\n        }\n        // Get the grouping info from the last of the segments. The info is\n        // the same for all segments.\n        if (segmentPositions) {\n            info = segmentPositions.info;\n            // Optionally identify ticks with higher rank, for example\n            // when the ticks have crossed midnight.\n            if (findHigherRanks && info.unitRange <= timeUnits.hour) {\n                end = groupPositions.length - 1;\n                // Compare points two by two\n                for (start = 1; start < end; start++) {\n                    if (time.dateFormat('%d', groupPositions[start]) !==\n                        time.dateFormat('%d', groupPositions[start - 1])) {\n                        higherRanks[groupPositions[start]] = 'day';\n                        hasCrossedHigherRank = true;\n                    }\n                }\n                // If the complete array has crossed midnight, we want\n                // to mark the first positions also as higher rank\n                if (hasCrossedHigherRank) {\n                    higherRanks[groupPositions[0]] = 'day';\n                }\n                info.higherRanks = higherRanks;\n            }\n            // Save the info\n            info.segmentStarts = segmentStarts;\n            groupPositions.info = info;\n        }\n        else {\n            OrdinalAxis_error(12, false, this.chart);\n        }\n        // Don't show ticks within a gap in the ordinal axis, where the\n        // space between two points is greater than a portion of the tick\n        // pixel interval\n        if (findHigherRanks && OrdinalAxis_defined(tickPixelIntervalOption)) {\n            var length_1 = groupPositions.length,\n                translatedArr = [],\n                distances = [];\n            var itemToRemove = void 0,\n                translated = void 0,\n                lastTranslated = void 0,\n                medianDistance = void 0,\n                distance = void 0,\n                i = length_1;\n            // Find median pixel distance in order to keep a reasonably even\n            // distance between ticks (#748)\n            while (i--) {\n                translated = this.translate(groupPositions[i]);\n                if (lastTranslated) {\n                    distances[i] = lastTranslated - translated;\n                }\n                translatedArr[i] = lastTranslated = translated;\n            }\n            distances.sort(function (a, b) { return a - b; });\n            medianDistance = distances[Math.floor(distances.length / 2)];\n            if (medianDistance < tickPixelIntervalOption * 0.6) {\n                medianDistance = null;\n            }\n            // Now loop over again and remove ticks where needed\n            i = groupPositions[length_1 - 1] > max ? length_1 - 1 : length_1; // #817\n            lastTranslated = void 0;\n            while (i--) {\n                translated = translatedArr[i];\n                distance = Math.abs(lastTranslated - translated);\n                // #4175 - when axis is reversed, the distance, is negative but\n                // tickPixelIntervalOption positive, so we need to compare the\n                // same values\n                // Remove ticks that are closer than 0.6 times the pixel\n                // interval from the one to the right, but not if it is close to\n                // the median distance (#748).\n                if (lastTranslated &&\n                    distance < tickPixelIntervalOption * 0.8 &&\n                    (medianDistance === null || distance < medianDistance * 0.8)) {\n                    // Is this a higher ranked position with a normal\n                    // position to the right?\n                    if (higherRanks[groupPositions[i]] &&\n                        !higherRanks[groupPositions[i + 1]]) {\n                        // Yes: remove the lower ranked neighbour to the\n                        // right\n                        itemToRemove = i + 1;\n                        lastTranslated = translated; // #709\n                    }\n                    else {\n                        // No: remove this one\n                        itemToRemove = i;\n                    }\n                    groupPositions.splice(itemToRemove, 1);\n                }\n                else {\n                    lastTranslated = translated;\n                }\n            }\n        }\n        return groupPositions;\n    }\n    /**\n     * Get axis position of given index of the extended ordinal positions.\n     * Used only when panning an ordinal axis.\n     *\n     * @private\n     * @function Highcharts.Axis#index2val\n     * @param {number} index\n     * The index value of searched point\n     */\n    function index2val(index) {\n        var axis = this,\n            ordinal = axis.ordinal, \n            // Context could be changed to extendedOrdinalPositions.\n            ordinalPositions = ordinal.positions;\n        // The visible range contains only equally spaced values.\n        if (!ordinalPositions) {\n            return index;\n        }\n        var i = ordinalPositions.length - 1,\n            distance;\n        if (index < 0) { // Out of range, in effect panning to the left\n            index = ordinalPositions[0];\n        }\n        else if (index > i) { // Out of range, panning to the right\n            index = ordinalPositions[i];\n        }\n        else { // Split it up\n            i = Math.floor(index);\n            distance = index - i; // The decimal\n        }\n        if (typeof distance !== 'undefined' &&\n            typeof ordinalPositions[i] !== 'undefined') {\n            return ordinalPositions[i] + (distance ?\n                distance *\n                    (ordinalPositions[i + 1] - ordinalPositions[i]) :\n                0);\n        }\n        return index;\n    }\n    /**\n     * Translate from linear (internal) to axis value.\n     *\n     * @private\n     * @function Highcharts.Axis#lin2val\n     * @param {number} val\n     * The linear abstracted value.\n     */\n    function lin2val(val) {\n        var axis = this,\n            ordinal = axis.ordinal,\n            localMin = axis.old ? axis.old.min : axis.min,\n            localA = axis.old ? axis.old.transA : axis.transA;\n        // Always use extendedPositions (#19816)\n        var positions = ordinal.getExtendedPositions();\n        // In some cases (especially in early stages of the chart creation) the\n        // getExtendedPositions might return undefined.\n        if (positions === null || positions === void 0 ? void 0 : positions.length) {\n            // Convert back from modivied value to pixels. // #15970\n            var pixelVal = OrdinalAxis_correctFloat((val - localMin) * localA +\n                    axis.minPixelPadding),\n                index = OrdinalAxis_correctFloat(ordinal.getIndexOfPoint(pixelVal,\n                positions)),\n                mantissa = OrdinalAxis_correctFloat(index % 1);\n            // Check if the index is inside position array. If true,\n            // read/approximate value for that exact index.\n            if (index >= 0 && index <= positions.length - 1) {\n                var leftNeighbour = positions[Math.floor(index)],\n                    rightNeighbour = positions[Math.ceil(index)],\n                    distance = rightNeighbour - leftNeighbour;\n                return positions[Math.floor(index)] + mantissa * distance;\n            }\n        }\n        // If the value is outside positions array, return initial value\n        return val; // #16784\n    }\n    /**\n     * Internal function to calculate the precise index in ordinalPositions\n     * array.\n     * @private\n     */\n    function getIndexInArray(ordinalPositions, val) {\n        var index = OrdinalAxis.Additions.findIndexOf(ordinalPositions,\n            val,\n            true);\n        if (ordinalPositions[index] === val) {\n            return index;\n        }\n        var percent = (val - ordinalPositions[index]) /\n                (ordinalPositions[index + 1] - ordinalPositions[index]);\n        return index + percent;\n    }\n    /**\n    * @private\n    */\n    function onAxisAfterInit() {\n        var axis = this;\n        if (!axis.ordinal) {\n            axis.ordinal = new OrdinalAxis.Additions(axis);\n        }\n    }\n    /**\n     * @private\n     */\n    function onAxisFoundExtremes() {\n        var axis = this,\n            eventArgs = axis.eventArgs,\n            options = axis.options;\n        if (axis.isXAxis &&\n            OrdinalAxis_defined(options.overscroll) &&\n            options.overscroll !== 0 &&\n            OrdinalAxis_isNumber(axis.max) &&\n            OrdinalAxis_isNumber(axis.min)) {\n            if (axis.options.ordinal && !axis.ordinal.originalOrdinalRange) {\n                // Calculate the original ordinal range\n                axis.ordinal.getExtendedPositions(false);\n            }\n            if (axis.max === axis.dataMax &&\n                (\n                // Panning is an exception. We don't want to apply\n                // overscroll when panning over the dataMax\n                (eventArgs === null || eventArgs === void 0 ? void 0 : eventArgs.trigger) !== 'pan' ||\n                    axis.isInternal) &&\n                // Scrollbar buttons are the other execption\n                (eventArgs === null || eventArgs === void 0 ? void 0 : eventArgs.trigger) !== 'navigator') {\n                var overscroll = axis.ordinal.convertOverscroll(options.overscroll);\n                axis.max += overscroll;\n                // Live data and buttons require translation for the min:\n                if (!axis.isInternal &&\n                    OrdinalAxis_defined(axis.userMin) &&\n                    (eventArgs === null || eventArgs === void 0 ? void 0 : eventArgs.trigger) !== 'mousewheel') {\n                    axis.min += overscroll;\n                }\n            }\n        }\n    }\n    /**\n     * For ordinal axis, that loads data async, redraw axis after data is\n     * loaded. If we don't do that, axis will have the same extremes as\n     * previously, but ordinal positions won't be calculated. See #10290\n     * @private\n     */\n    function onAxisAfterSetScale() {\n        var axis = this;\n        if (axis.horiz && !axis.isDirty) {\n            axis.isDirty = axis.isOrdinal &&\n                axis.chart.navigator &&\n                !axis.chart.navigator.adaptToUpdatedData;\n        }\n    }\n    /**\n     * @private\n     */\n    function onAxisInitialAxisTranslation() {\n        var axis = this;\n        if (axis.ordinal) {\n            axis.ordinal.beforeSetTickPositions();\n            axis.tickInterval = axis.ordinal.postProcessTickInterval(axis.tickInterval);\n        }\n    }\n    /**\n     * Extending the Chart.pan method for ordinal axes\n     * @private\n     */\n    function onChartPan(e) {\n        var chart = this,\n            xAxis = chart.xAxis[0],\n            overscroll = xAxis.ordinal.convertOverscroll(xAxis.options.overscroll),\n            chartX = e.originalEvent.chartX,\n            panning = chart.options.chart.panning;\n        var runBase = false;\n        if (panning &&\n            panning.type !== 'y' &&\n            xAxis.options.ordinal &&\n            xAxis.series.length &&\n            // On touch devices, let default function handle the pinching\n            (!e.touches || e.touches.length <= 1)) {\n            var mouseDownX = chart.mouseDownX,\n                extremes = xAxis.getExtremes(),\n                dataMin = extremes.dataMin,\n                dataMax = extremes.dataMax,\n                min = extremes.min,\n                max = extremes.max,\n                hoverPoints = chart.hoverPoints,\n                closestPointRange = (xAxis.closestPointRange ||\n                    (xAxis.ordinal && xAxis.ordinal.overscrollPointsRange)),\n                pointPixelWidth = (xAxis.translationSlope *\n                    (xAxis.ordinal.slope || closestPointRange)), \n                // How many ordinal units did we move?\n                movedUnits = Math.round((mouseDownX - chartX) / pointPixelWidth), \n                // Get index of all the chart's points\n                extendedOrdinalPositions = xAxis.ordinal.getExtendedPositions(),\n                extendedAxis = {\n                    ordinal: {\n                        positions: extendedOrdinalPositions,\n                        extendedOrdinalPositions: extendedOrdinalPositions\n                    }\n                },\n                index2val_1 = xAxis.index2val,\n                val2lin_1 = xAxis.val2lin;\n            var trimmedRange = void 0,\n                ordinalPositions = void 0;\n            // Make sure panning to the edges does not decrease the zoomed range\n            if ((min <= dataMin && movedUnits < 0) ||\n                (max + overscroll >= dataMax && movedUnits > 0)) {\n                return;\n            }\n            // We have an ordinal axis, but the data is equally spaced\n            if (!extendedAxis.ordinal.positions) {\n                runBase = true;\n            }\n            else if (Math.abs(movedUnits) > 1) {\n                // Remove active points for shared tooltip\n                if (hoverPoints) {\n                    hoverPoints.forEach(function (point) {\n                        point.setState();\n                    });\n                }\n                // In grouped data series, the last ordinal position represents\n                // the grouped data, which is to the left of the real data max.\n                // If we don't compensate for this, we will be allowed to pan\n                // grouped data series passed the right of the plot area.\n                ordinalPositions = extendedAxis.ordinal.positions;\n                if (dataMax >\n                    ordinalPositions[ordinalPositions.length - 1]) {\n                    ordinalPositions.push(dataMax);\n                }\n                // Get the new min and max values by getting the ordinal index\n                // for the current extreme, then add the moved units and\n                // translate back to values. This happens on the extended\n                // ordinal positions if the new position is out of range, else\n                // it happens on the current x axis which is smaller and faster.\n                chart.setFixedRange(max - min);\n                trimmedRange = xAxis.navigatorAxis\n                    .toFixedRange(void 0, void 0, index2val_1.apply(extendedAxis, [\n                    val2lin_1.apply(extendedAxis, [min, true]) +\n                        movedUnits\n                ]), index2val_1.apply(extendedAxis, [\n                    val2lin_1.apply(extendedAxis, [max, true]) +\n                        movedUnits\n                ]));\n                // Apply it if it is within the available data range\n                if (trimmedRange.min >= Math.min(ordinalPositions[0], min) &&\n                    trimmedRange.max <= Math.max(ordinalPositions[ordinalPositions.length - 1], max) + overscroll) {\n                    xAxis.setExtremes(trimmedRange.min, trimmedRange.max, true, false, { trigger: 'pan' });\n                }\n                chart.mouseDownX = chartX; // Set new reference for next run\n                css(chart.container, { cursor: 'move' });\n            }\n        }\n        else {\n            runBase = true;\n        }\n        // Revert to the linear chart.pan version\n        if (runBase || (panning && /y/.test(panning.type))) {\n            if (overscroll) {\n                xAxis.max = xAxis.dataMax + overscroll;\n            }\n        }\n        else {\n            e.preventDefault();\n        }\n    }\n    /**\n     * @private\n     */\n    function onSeriesUpdatedData() {\n        var xAxis = this.xAxis;\n        // Destroy the extended ordinal index on updated data\n        // and destroy extendedOrdinalPositions, #16055.\n        if (xAxis && xAxis.options.ordinal) {\n            delete xAxis.ordinal.index;\n            delete xAxis.ordinal.originalOrdinalRange;\n        }\n    }\n    /**\n     * Translate from a linear axis value to the corresponding ordinal axis\n     * position. If there are no gaps in the ordinal axis this will be the\n     * same. The translated value is the value that the point would have if\n     * the axis was linear, using the same min and max.\n     *\n     * @private\n     * @function Highcharts.Axis#val2lin\n     * @param {number} val\n     * The axis value.\n     * @param {boolean} [toIndex]\n     * Whether to return the index in the ordinalPositions or the new value.\n     */\n    function val2lin(val, toIndex) {\n        var axis = this,\n            ordinal = axis.ordinal,\n            ordinalPositions = ordinal.positions;\n        var slope = ordinal.slope,\n            extendedOrdinalPositions;\n        if (!ordinalPositions) {\n            return val;\n        }\n        var ordinalLength = ordinalPositions.length;\n        var ordinalIndex;\n        // If the searched value is inside visible plotArea, ivastigate the\n        // value basing on ordinalPositions.\n        if (ordinalPositions[0] <= val &&\n            ordinalPositions[ordinalLength - 1] >= val) {\n            ordinalIndex = getIndexInArray(ordinalPositions, val);\n            // Final return value is based on ordinalIndex\n        }\n        else {\n            extendedOrdinalPositions =\n                ordinal.getExtendedPositions &&\n                    ordinal.getExtendedPositions();\n            if (!(extendedOrdinalPositions && extendedOrdinalPositions.length)) {\n                return val;\n            }\n            var length_2 = extendedOrdinalPositions.length;\n            if (!slope) {\n                slope =\n                    (extendedOrdinalPositions[length_2 - 1] -\n                        extendedOrdinalPositions[0]) /\n                        length_2;\n            }\n            // `originalPointReference` is equal to the index of first point of\n            // ordinalPositions in extendedOrdinalPositions.\n            var originalPositionsReference = getIndexInArray(extendedOrdinalPositions,\n                ordinalPositions[0]);\n            // If the searched value is outside the visiblePlotArea,\n            // check if it is inside extendedOrdinalPositions.\n            if (val >= extendedOrdinalPositions[0] &&\n                val <=\n                    extendedOrdinalPositions[length_2 - 1]) {\n                // Return Value\n                ordinalIndex = getIndexInArray(extendedOrdinalPositions, val) -\n                    originalPositionsReference;\n            }\n            else {\n                if (!toIndex) {\n                    // If the value is outside positions array,\n                    // return initial value, #16784\n                    return val;\n                }\n                // Since ordinal.slope is the average distance between 2\n                // points on visible plotArea, this can be used to calculate\n                // the approximate position of the point, which is outside\n                // the extendedOrdinalPositions.\n                if (val < extendedOrdinalPositions[0]) {\n                    var diff = extendedOrdinalPositions[0] - val,\n                        approximateIndexOffset = diff / slope;\n                    ordinalIndex =\n                        -originalPositionsReference -\n                            approximateIndexOffset;\n                }\n                else {\n                    var diff = val -\n                            extendedOrdinalPositions[length_2 - 1],\n                        approximateIndexOffset = diff / slope;\n                    ordinalIndex =\n                        approximateIndexOffset +\n                            length_2 -\n                            originalPositionsReference;\n                }\n            }\n        }\n        return toIndex ? ordinalIndex : slope * (ordinalIndex || 0) +\n            ordinal.offset;\n    }\n    /* *\n     *\n     *  Classes\n     *\n     * */\n    /**\n     * @private\n     */\n    var Additions = /** @class */ (function () {\n            /* *\n             *\n             *  Constructors\n             *\n             * */\n            /**\n             * @private\n             */\n            function Additions(axis) {\n                this.index = {};\n            this.axis = axis;\n        }\n        /* *\n        *\n        *  Functions\n        *\n        * */\n        /**\n         * Calculate the ordinal positions before tick positions are calculated.\n         * @private\n         */\n        Additions.prototype.beforeSetTickPositions = function () {\n            var _a;\n            var axis = this.axis,\n                ordinal = axis.ordinal,\n                extremes = axis.getExtremes(),\n                min = extremes.min,\n                max = extremes.max,\n                hasBreaks = (_a = axis.brokenAxis) === null || _a === void 0 ? void 0 : _a.hasBreaks,\n                isOrdinal = axis.options.ordinal;\n            var len,\n                uniqueOrdinalPositions,\n                dist,\n                minIndex,\n                maxIndex,\n                slope,\n                i,\n                ordinalPositions = [],\n                overscrollPointsRange = Number.MAX_VALUE,\n                useOrdinal = false,\n                adjustOrdinalExtremesPoints = false,\n                isBoosted = false;\n            // Apply the ordinal logic\n            if (isOrdinal || hasBreaks) { // #4167 YAxis is never ordinal ?\n                var distanceBetweenPoint_1 = 0;\n                axis.series.forEach(function (series, i) {\n                    var xData = series.getColumn('x',\n                        true);\n                    uniqueOrdinalPositions = [];\n                    // For an axis with multiple series, check if the distance\n                    // between points is identical throughout all series.\n                    if (i > 0 &&\n                        series.options.id !== 'highcharts-navigator-series' &&\n                        xData.length > 1) {\n                        adjustOrdinalExtremesPoints = (distanceBetweenPoint_1 !== xData[1] - xData[0]);\n                    }\n                    distanceBetweenPoint_1 = xData[1] - xData[0];\n                    if (series.boosted) {\n                        isBoosted = series.boosted;\n                    }\n                    if (series.reserveSpace() &&\n                        (series\n                            .takeOrdinalPosition !== false || hasBreaks)) {\n                        // Concatenate the processed X data into the existing\n                        // positions, or the empty array\n                        ordinalPositions = ordinalPositions.concat(xData);\n                        len = ordinalPositions.length;\n                        // Remove duplicates (#1588)\n                        ordinalPositions.sort(function (a, b) {\n                            // Without a custom function it is sorted as strings\n                            return a - b;\n                        });\n                        overscrollPointsRange = Math.min(overscrollPointsRange, OrdinalAxis_pick(\n                        // Check for a single-point series:\n                        series.closestPointRange, overscrollPointsRange));\n                        if (len) {\n                            i = 0;\n                            while (i < len - 1) {\n                                if (ordinalPositions[i] !==\n                                    ordinalPositions[i + 1]) {\n                                    uniqueOrdinalPositions.push(ordinalPositions[i + 1]);\n                                }\n                                i++;\n                            }\n                            // Check first item:\n                            if (uniqueOrdinalPositions[0] !==\n                                ordinalPositions[0]) {\n                                uniqueOrdinalPositions.unshift(ordinalPositions[0]);\n                            }\n                            ordinalPositions = uniqueOrdinalPositions;\n                        }\n                    }\n                });\n                if (!axis.ordinal.originalOrdinalRange) {\n                    // Calculate current originalOrdinalRange\n                    axis.ordinal.originalOrdinalRange =\n                        (ordinalPositions.length - 1) * overscrollPointsRange;\n                }\n                // If the distance between points is not identical throughout\n                // all series, remove the first and last ordinal position to\n                // avoid enabling ordinal logic when it is not needed, #17405.\n                // Only for boosted series because changes are negligible.\n                if (adjustOrdinalExtremesPoints && isBoosted) {\n                    ordinalPositions.pop();\n                    ordinalPositions.shift();\n                }\n                // Cache the length\n                len = ordinalPositions.length;\n                // Check if we really need the overhead of mapping axis data\n                // against the ordinal positions. If the series consist of\n                // evenly spaced data any way, we don't need any ordinal logic.\n                if (len > 2) { // Two points have equal distance by default\n                    dist = ordinalPositions[1] - ordinalPositions[0];\n                    i = len - 1;\n                    while (i-- && !useOrdinal) {\n                        if (ordinalPositions[i + 1] - ordinalPositions[i] !==\n                            dist) {\n                            useOrdinal = true;\n                        }\n                    }\n                    // When zooming in on a week, prevent axis padding for\n                    // weekends even though the data within the week is evenly\n                    // spaced.\n                    if (!axis.options.keepOrdinalPadding &&\n                        (ordinalPositions[0] - min > dist ||\n                            (max -\n                                ordinalPositions[ordinalPositions.length - 1]) > dist)) {\n                        useOrdinal = true;\n                    }\n                }\n                else if (axis.options.overscroll) {\n                    if (len === 2) {\n                        // Exactly two points, distance for overscroll is fixed:\n                        overscrollPointsRange =\n                            ordinalPositions[1] - ordinalPositions[0];\n                    }\n                    else if (len === 1) {\n                        // We have just one point, closest distance is unknown.\n                        // Assume then it is last point and overscrolled range:\n                        overscrollPointsRange = axis.ordinal.convertOverscroll(axis.options.overscroll);\n                        ordinalPositions = [\n                            ordinalPositions[0],\n                            ordinalPositions[0] + overscrollPointsRange\n                        ];\n                    }\n                    else {\n                        // In case of zooming in on overscrolled range, stick to\n                        // the old range:\n                        overscrollPointsRange = ordinal.overscrollPointsRange;\n                    }\n                }\n                // Record the slope and offset to compute the linear values from\n                // the array index. Since the ordinal positions may exceed the\n                // current range, get the start and end positions within it\n                // (#719, #665b)\n                if (useOrdinal || axis.forceOrdinal) {\n                    if (axis.options.overscroll) {\n                        ordinal.overscrollPointsRange = overscrollPointsRange;\n                        ordinalPositions = ordinalPositions.concat(ordinal.getOverscrollPositions());\n                    }\n                    // Register\n                    ordinal.positions = ordinalPositions;\n                    // This relies on the ordinalPositions being set. Use\n                    // Math.max and Math.min to prevent padding on either sides\n                    // of the data.\n                    minIndex = axis.ordinal2lin(// #5979\n                    Math.max(min, ordinalPositions[0]), true);\n                    maxIndex = Math.max(axis.ordinal2lin(Math.min(max, ordinalPositions[ordinalPositions.length - 1]), true), 1); // #3339\n                    // Set the slope and offset of the values compared to the\n                    // indices in the ordinal positions.\n                    ordinal.slope = slope =\n                        (max - min) / (maxIndex - minIndex);\n                    ordinal.offset = min - (minIndex * slope);\n                }\n                else {\n                    ordinal.overscrollPointsRange = OrdinalAxis_pick(axis.closestPointRange, ordinal.overscrollPointsRange);\n                    ordinal.positions = axis.ordinal.slope = ordinal.offset =\n                        void 0;\n                }\n            }\n            axis.isOrdinal = isOrdinal && useOrdinal; // #3818, #4196, #4926\n            ordinal.groupIntervalFactor = null; // Reset for next run\n        };\n        /**\n         * Faster way of using the Array.indexOf method.\n         * Works for sorted arrays only with unique values.\n         *\n         * @param {Array} sortedArray\n         *        The sorted array inside which we are looking for.\n         * @param {number} key\n         *        The key to being found.\n         * @param {boolean} indirectSearch\n         *        In case of lack of the point in the array, should return\n         *        value be equal to -1 or the closest smaller index.\n         *  @private\n         */\n        Additions.findIndexOf = function (sortedArray, key, indirectSearch) {\n            var start = 0,\n                end = sortedArray.length - 1,\n                middle;\n            while (start < end) {\n                middle = Math.ceil((start + end) / 2);\n                // Key found as the middle element.\n                if (sortedArray[middle] <= key) {\n                    // Continue searching to the right.\n                    start = middle;\n                }\n                else {\n                    // Continue searching to the left.\n                    end = middle - 1;\n                }\n            }\n            if (sortedArray[start] === key) {\n                return start;\n            }\n            // Key could not be found.\n            return !indirectSearch ? -1 : start;\n        };\n        /**\n         * Get the ordinal positions for the entire data set. This is necessary\n         * in chart panning because we need to find out what points or data\n         * groups are available outside the visible range. When a panning\n         * operation starts, if an index for the given grouping does not exists,\n         * it is created and cached. This index is deleted on updated data, so\n         * it will be regenerated the next time a panning operation starts.\n         * @private\n         */\n        Additions.prototype.getExtendedPositions = function (withOverscroll) {\n            if (withOverscroll === void 0) { withOverscroll = true; }\n            var ordinal = this,\n                axis = ordinal.axis,\n                axisProto = axis.constructor.prototype,\n                chart = axis.chart,\n                key = axis.series.reduce(function (k,\n                series) {\n                    var grouping = series.currentDataGrouping;\n                return (k +\n                    (grouping ? grouping.count + grouping.unitName : 'raw'));\n            }, ''), overscroll = withOverscroll ?\n                axis.ordinal.convertOverscroll(axis.options.overscroll) : 0, extremes = axis.getExtremes();\n            var fakeAxis,\n                fakeSeries = void 0,\n                ordinalIndex = ordinal.index;\n            // If this is the first time, or the ordinal index is deleted by\n            // updatedData,\n            // create it.\n            if (!ordinalIndex) {\n                ordinalIndex = ordinal.index = {};\n            }\n            if (!ordinalIndex[key]) {\n                // Create a fake axis object where the extended ordinal\n                // positions are emulated\n                fakeAxis = {\n                    series: [],\n                    chart: chart,\n                    forceOrdinal: false,\n                    getExtremes: function () {\n                        return {\n                            min: extremes.dataMin,\n                            max: extremes.dataMax + overscroll\n                        };\n                    },\n                    applyGrouping: axisProto.applyGrouping,\n                    getGroupPixelWidth: axisProto.getGroupPixelWidth,\n                    getTimeTicks: axisProto.getTimeTicks,\n                    options: {\n                        ordinal: true\n                    },\n                    ordinal: {\n                        getGroupIntervalFactor: this.getGroupIntervalFactor\n                    },\n                    ordinal2lin: axisProto.ordinal2lin, // #6276\n                    getIndexOfPoint: axisProto.getIndexOfPoint,\n                    val2lin: axisProto.val2lin // #2590\n                };\n                fakeAxis.ordinal.axis = fakeAxis;\n                // Add the fake series to hold the full data, then apply\n                // processData to it\n                axis.series.forEach(function (series) {\n                    var _a,\n                        _b,\n                        _c;\n                    fakeSeries = {\n                        xAxis: fakeAxis,\n                        chart: chart,\n                        groupPixelWidth: series.groupPixelWidth,\n                        destroyGroupedData: (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).noop,\n                        getColumn: series.getColumn,\n                        applyGrouping: series.applyGrouping,\n                        getProcessedData: series.getProcessedData,\n                        reserveSpace: series.reserveSpace,\n                        visible: series.visible\n                    };\n                    var xData = series.getColumn('x').concat(withOverscroll ?\n                            ordinal.getOverscrollPositions() :\n                            []);\n                    fakeSeries.dataTable = new Data_DataTableCore({\n                        columns: {\n                            x: xData\n                        }\n                    });\n                    fakeSeries.options = OrdinalAxis_assign(OrdinalAxis_assign({}, series.options), { dataGrouping: series.currentDataGrouping ? {\n                            firstAnchor: (_a = series.options.dataGrouping) === null || _a === void 0 ? void 0 : _a.firstAnchor,\n                            anchor: (_b = series.options.dataGrouping) === null || _b === void 0 ? void 0 : _b.anchor,\n                            lastAnchor: (_c = series.options.dataGrouping) === null || _c === void 0 ? void 0 : _c.firstAnchor,\n                            enabled: true,\n                            forced: true,\n                            approximation: 'open',\n                            units: [[\n                                    series.currentDataGrouping.unitName,\n                                    [series.currentDataGrouping.count]\n                                ]]\n                        } : {\n                            enabled: false\n                        } });\n                    fakeAxis.series.push(fakeSeries);\n                    series.processData.apply(fakeSeries);\n                });\n                fakeAxis.applyGrouping({ hasExtremesChanged: true });\n                // Force to use the ordinal when points are evenly spaced (e.g.\n                // weeks), #3825.\n                if (((fakeSeries === null || fakeSeries === void 0 ? void 0 : fakeSeries.closestPointRange) !==\n                    (fakeSeries === null || fakeSeries === void 0 ? void 0 : fakeSeries.basePointRange)) &&\n                    fakeSeries.currentDataGrouping) {\n                    fakeAxis.forceOrdinal = true;\n                }\n                // Run beforeSetTickPositions to compute the ordinalPositions\n                axis.ordinal.beforeSetTickPositions.apply({ axis: fakeAxis });\n                if (!axis.ordinal.originalOrdinalRange &&\n                    fakeAxis.ordinal.originalOrdinalRange) {\n                    axis.ordinal.originalOrdinalRange =\n                        fakeAxis.ordinal.originalOrdinalRange;\n                }\n                // Cache it\n                if (fakeAxis.ordinal.positions) {\n                    ordinalIndex[key] = fakeAxis.ordinal.positions;\n                }\n            }\n            return ordinalIndex[key];\n        };\n        /**\n         * Find the factor to estimate how wide the plot area would have been if\n         * ordinal gaps were included. This value is used to compute an imagined\n         * plot width in order to establish the data grouping interval.\n         *\n         * A real world case is the intraday-candlestick example. Without this\n         * logic, it would show the correct data grouping when viewing a range\n         * within each day, but once moving the range to include the gap between\n         * two days, the interval would include the cut-away night hours and the\n         * data grouping would be wrong. So the below method tries to compensate\n         * by identifying the most common point interval, in this case days.\n         *\n         * An opposite case is presented in issue #718. We have a long array of\n         * daily data, then one point is appended one hour after the last point.\n         * We expect the data grouping not to change.\n         *\n         * In the future, if we find cases where this estimation doesn't work\n         * optimally, we might need to add a second pass to the data grouping\n         * logic, where we do another run with a greater interval if the number\n         * of data groups is more than a certain fraction of the desired group\n         * count.\n         * @private\n         */\n        Additions.prototype.getGroupIntervalFactor = function (xMin, xMax, series) {\n            var ordinal = this,\n                processedXData = series.getColumn('x',\n                true),\n                len = processedXData.length,\n                distances = [];\n            var median,\n                i,\n                groupIntervalFactor = ordinal.groupIntervalFactor;\n            // Only do this computation for the first series, let the other\n            // inherit it (#2416)\n            if (!groupIntervalFactor) {\n                // Register all the distances in an array\n                for (i = 0; i < len - 1; i++) {\n                    distances[i] = (processedXData[i + 1] -\n                        processedXData[i]);\n                }\n                // Sort them and find the median\n                distances.sort(function (a, b) {\n                    return a - b;\n                });\n                median = distances[Math.floor(len / 2)];\n                // Compensate for series that don't extend through the entire\n                // axis extent. #1675.\n                xMin = Math.max(xMin, processedXData[0]);\n                xMax = Math.min(xMax, processedXData[len - 1]);\n                ordinal.groupIntervalFactor = groupIntervalFactor =\n                    (len * median) / (xMax - xMin);\n            }\n            // Return the factor needed for data grouping\n            return groupIntervalFactor;\n        };\n        /**\n         * Get index of point inside the ordinal positions array.\n         *\n         * @private\n         * @param {number} pixelVal\n         * The pixel value of a point.\n         *\n         * @param {Array<number>} [ordinalArray]\n         * An array of all points available on the axis for the given data set.\n         * Either ordinalPositions if the value is inside the plotArea or\n         * extendedOrdinalPositions if not.\n         */\n        Additions.prototype.getIndexOfPoint = function (pixelVal, ordinalArray) {\n            var ordinal = this,\n                axis = ordinal.axis,\n                min = axis.min,\n                minX = axis.minPixelPadding,\n                indexOfMin = getIndexInArray(ordinalArray,\n                min);\n            var ordinalPointPixelInterval = axis.translationSlope *\n                    (ordinal.slope ||\n                        axis.closestPointRange ||\n                        ordinal.overscrollPointsRange);\n            var shiftIndex = OrdinalAxis_correctFloat((pixelVal - minX) / ordinalPointPixelInterval);\n            return indexOfMin + shiftIndex;\n        };\n        /**\n         * Get ticks for an ordinal axis within a range where points don't\n         * exist. It is required when overscroll is enabled. We can't base on\n         * points, because we may not have any, so we use approximated\n         * pointRange and generate these ticks between Axis.dataMax,\n         * Axis.dataMax + Axis.overscroll evenly spaced. Used in panning and\n         * navigator scrolling.\n         * @private\n         */\n        Additions.prototype.getOverscrollPositions = function () {\n            var ordinal = this,\n                axis = ordinal.axis,\n                extraRange = ordinal.convertOverscroll(axis.options.overscroll),\n                distance = ordinal.overscrollPointsRange,\n                positions = [];\n            var max = axis.dataMax;\n            if (OrdinalAxis_defined(distance)) {\n                // Max + pointRange because we need to scroll to the last\n                while (max < axis.dataMax + extraRange) {\n                    max += distance;\n                    positions.push(max);\n                }\n            }\n            return positions;\n        };\n        /**\n         * Make the tick intervals closer because the ordinal gaps make the\n         * ticks spread out or cluster.\n         * @private\n         */\n        Additions.prototype.postProcessTickInterval = function (tickInterval) {\n            // Problem: https://jsfiddle.net/highcharts/FQm4E/1/. This is a case\n            // where this algorithm doesn't work optimally. In this case, the\n            // tick labels are spread out per week, but all the gaps reside\n            // within weeks. So we have a situation where the labels are courser\n            // than the ordinal gaps, and thus the tick interval should not be\n            // altered.\n            var ordinal = this,\n                axis = ordinal.axis,\n                ordinalSlope = ordinal.slope,\n                closestPointRange = axis.closestPointRange;\n            var ret;\n            if (ordinalSlope && closestPointRange) {\n                if (!axis.options.breaks) {\n                    ret = (tickInterval /\n                        (ordinalSlope / closestPointRange));\n                }\n                else {\n                    ret = closestPointRange || tickInterval; // #7275\n                }\n            }\n            else {\n                ret = tickInterval;\n            }\n            return ret;\n        };\n        /**\n         * If overscroll is pixel or pecentage value, convert it to axis range.\n         *\n         * @private\n         * @param {number | string} overscroll\n         * Overscroll value in axis range, pixels or percentage value.\n         * @return {number}\n         * Overscroll value in axis range.\n         */\n        Additions.prototype.convertOverscroll = function (overscroll) {\n            if (overscroll === void 0) { overscroll = 0; }\n            var ordinal = this,\n                axis = ordinal.axis,\n                calculateOverscroll = function (overscrollPercentage) {\n                    return OrdinalAxis_pick(ordinal.originalOrdinalRange,\n                OrdinalAxis_defined(axis.dataMax) && OrdinalAxis_defined(axis.dataMin) ?\n                        axis.dataMax - axis.dataMin : 0) * overscrollPercentage;\n            };\n            if (isString(overscroll)) {\n                var overscrollValue = parseInt(overscroll, 10);\n                if (/%$/.test(overscroll)) {\n                    // If overscroll is percentage\n                    return calculateOverscroll(overscrollValue / 100);\n                }\n                if (/px/.test(overscroll)) {\n                    // If overscroll is pixels, it is limited to 90% of the axis\n                    // length to prevent division by zero\n                    var limitedOverscrollValue = Math.min(overscrollValue,\n                        axis.len * 0.9),\n                        pixelToPercent = limitedOverscrollValue / axis.len;\n                    return calculateOverscroll(pixelToPercent / (1 - pixelToPercent));\n                }\n                // If overscroll is a string but not pixels or percentage,\n                // return 0 as no overscroll\n                return 0;\n            }\n            return overscroll;\n        };\n        return Additions;\n    }());\n    OrdinalAxis.Additions = Additions;\n})(OrdinalAxis || (OrdinalAxis = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Axis_OrdinalAxis = (OrdinalAxis);\n\n;// ./code/es5/es-modules/Stock/RangeSelector/RangeSelector.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar RangeSelector_defaultOptions = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defaultOptions;\n\n\n\n\n\nvar RangeSelector_addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, createElement = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).createElement, RangeSelector_css = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).css, RangeSelector_defined = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defined, RangeSelector_destroyObjectProperties = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).destroyObjectProperties, diffObjects = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).diffObjects, discardElement = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).discardElement, RangeSelector_extend = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).extend, RangeSelector_fireEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).fireEvent, RangeSelector_isNumber = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isNumber, RangeSelector_isString = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isString, RangeSelector_merge = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).merge, RangeSelector_objectEach = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).objectEach, RangeSelector_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick, RangeSelector_splat = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).splat;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Get the preferred input type based on a date format string.\n *\n * @private\n * @function preferredInputType\n */\nfunction preferredInputType(format) {\n    var hasTimeKey = function (char) {\n            return new RegExp(\"%[[a-zA-Z]*\".concat(char)).test(format);\n    };\n    var ms = RangeSelector_isString(format) ?\n            format.indexOf('%L') !== -1 :\n            // Implemented but not typed as of 2024\n            format.fractionalSecondDigits;\n    if (ms) {\n        return 'text';\n    }\n    var date = RangeSelector_isString(format) ?\n            ['a', 'A', 'd', 'e', 'w', 'b', 'B', 'm', 'o', 'y', 'Y']\n                .some(hasTimeKey) :\n            format.dateStyle || format.day || format.month || format.year;\n    var time = RangeSelector_isString(format) ?\n            ['H', 'k', 'I', 'l', 'M', 'S'].some(hasTimeKey) :\n            format.timeStyle || format.hour || format.minute || format.second;\n    if (date && time) {\n        return 'datetime-local';\n    }\n    if (date) {\n        return 'date';\n    }\n    if (time) {\n        return 'time';\n    }\n    return 'text';\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * The range selector.\n *\n * @private\n * @class\n * @name Highcharts.RangeSelector\n * @param {Highcharts.Chart} chart\n */\nvar RangeSelector = /** @class */ (function () {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    function RangeSelector(chart) {\n        var _this = this;\n        this.isDirty = false;\n        this.buttonOptions = RangeSelector.prototype.defaultButtons;\n        this.initialButtonGroupWidth = 0;\n        this.maxButtonWidth = function () {\n            var buttonWidth = 0;\n            _this.buttons.forEach(function (button) {\n                var bBox = button.getBBox();\n                if (bBox.width > buttonWidth) {\n                    buttonWidth = bBox.width;\n                }\n            });\n            return buttonWidth;\n        };\n        this.init(chart);\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    RangeSelector.compose = function (AxisClass, ChartClass) {\n        RangeSelector_RangeSelectorComposition.compose(AxisClass, ChartClass, RangeSelector);\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * The method to run when one of the buttons in the range selectors is\n     * clicked\n     *\n     * @private\n     * @function Highcharts.RangeSelector#clickButton\n     * @param {number} i\n     *        The index of the button\n     * @param {boolean} [redraw]\n     */\n    RangeSelector.prototype.clickButton = function (i, redraw) {\n        var rangeSelector = this,\n            chart = rangeSelector.chart,\n            rangeOptions = rangeSelector.buttonOptions[i],\n            baseAxis = chart.xAxis[0],\n            unionExtremes = (chart.scroller && chart.scroller.getUnionExtremes()) || baseAxis || {},\n            type = rangeOptions.type,\n            dataGrouping = rangeOptions.dataGrouping;\n        var dataMin = unionExtremes.dataMin,\n            dataMax = unionExtremes.dataMax,\n            newMin,\n            newMax = RangeSelector_isNumber(baseAxis === null || baseAxis === void 0 ? void 0 : baseAxis.max) ? Math.round(Math.min(baseAxis.max,\n            dataMax !== null && dataMax !== void 0 ? dataMax : baseAxis.max)) : void 0, // #1568\n            baseXAxisOptions,\n            range = rangeOptions._range,\n            rangeMin,\n            ctx,\n            ytdExtremes,\n            addOffsetMin = true;\n        // Chart has no data, base series is removed\n        if (dataMin === null || dataMax === null) {\n            return;\n        }\n        rangeSelector.setSelected(i);\n        // Apply dataGrouping associated to button\n        if (dataGrouping) {\n            this.forcedDataGrouping = true;\n            highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_default().prototype.setDataGrouping.call(baseAxis || { chart: this.chart }, dataGrouping, false);\n            this.frozenStates = rangeOptions.preserveDataGrouping;\n        }\n        // Apply range\n        if (type === 'month' || type === 'year') {\n            if (!baseAxis) {\n                // This is set to the user options and picked up later when the\n                // axis is instantiated so that we know the min and max.\n                range = rangeOptions;\n            }\n            else {\n                ctx = {\n                    range: rangeOptions,\n                    max: newMax,\n                    chart: chart,\n                    dataMin: dataMin,\n                    dataMax: dataMax\n                };\n                newMin = baseAxis.minFromRange.call(ctx);\n                if (RangeSelector_isNumber(ctx.newMax)) {\n                    newMax = ctx.newMax;\n                }\n                // #15799: offsetMin is added in minFromRange so that it works\n                // with pre-selected buttons as well\n                addOffsetMin = false;\n            }\n            // Fixed times like minutes, hours, days\n        }\n        else if (range) {\n            if (RangeSelector_isNumber(newMax)) {\n                newMin = Math.max(newMax - range, dataMin);\n                newMax = Math.min(newMin + range, dataMax);\n                addOffsetMin = false;\n            }\n        }\n        else if (type === 'ytd') {\n            // On user clicks on the buttons, or a delayed action running from\n            // the beforeRender event (below), the baseAxis is defined.\n            if (baseAxis) {\n                // When \"ytd\" is the pre-selected button for the initial view,\n                // its calculation is delayed and rerun in the beforeRender\n                // event (below). When the series are initialized, but before\n                // the chart is rendered, we have access to the xData array\n                // (#942).\n                if (baseAxis.hasData() && (!RangeSelector_isNumber(dataMax) ||\n                    !RangeSelector_isNumber(dataMin))) {\n                    dataMin = Number.MAX_VALUE;\n                    dataMax = -Number.MAX_VALUE;\n                    chart.series.forEach(function (series) {\n                        // Reassign it to the last item\n                        var xData = series.getColumn('x');\n                        if (xData.length) {\n                            dataMin = Math.min(xData[0], dataMin);\n                            dataMax = Math.max(xData[xData.length - 1], dataMax);\n                        }\n                    });\n                    redraw = false;\n                }\n                if (RangeSelector_isNumber(dataMax) && RangeSelector_isNumber(dataMin)) {\n                    ytdExtremes = rangeSelector.getYTDExtremes(dataMax, dataMin);\n                    newMin = rangeMin = ytdExtremes.min;\n                    newMax = ytdExtremes.max;\n                }\n                // \"ytd\" is pre-selected. We don't yet have access to processed\n                // point and extremes data (things like pointStart and pointInterval\n                // are missing), so we delay the process (#942)\n            }\n            else {\n                rangeSelector.deferredYTDClick = i;\n                return;\n            }\n        }\n        else if (type === 'all' && baseAxis) {\n            // If the navigator exist and the axis range is declared reset that\n            // range and from now on only use the range set by a user, #14742.\n            if (chart.navigator && chart.navigator.baseSeries[0]) {\n                chart.navigator.baseSeries[0].xAxis.options.range = void 0;\n            }\n            newMin = dataMin;\n            newMax = dataMax;\n        }\n        if (addOffsetMin && rangeOptions._offsetMin && RangeSelector_defined(newMin)) {\n            newMin += rangeOptions._offsetMin;\n        }\n        if (rangeOptions._offsetMax && RangeSelector_defined(newMax)) {\n            newMax += rangeOptions._offsetMax;\n        }\n        if (this.dropdown) {\n            this.dropdown.selectedIndex = i + 1;\n        }\n        // Update the chart\n        if (!baseAxis) {\n            // Axis not yet instantiated. Temporarily set min and range\n            // options and axes once defined and remove them on\n            // chart load (#4317 & #20529).\n            baseXAxisOptions = RangeSelector_splat(chart.options.xAxis || {})[0];\n            var axisRangeUpdateEvent_1 = RangeSelector_addEvent(chart, 'afterCreateAxes',\n                function () {\n                    var xAxis = chart.xAxis[0];\n                xAxis.range = xAxis.options.range = range;\n                xAxis.min = xAxis.options.min = rangeMin;\n            });\n            RangeSelector_addEvent(chart, 'load', function resetMinAndRange() {\n                var xAxis = chart.xAxis[0];\n                chart.setFixedRange(rangeOptions._range);\n                xAxis.options.range = baseXAxisOptions.range;\n                xAxis.options.min = baseXAxisOptions.min;\n                axisRangeUpdateEvent_1(); // Remove event\n            });\n        }\n        else if (RangeSelector_isNumber(newMin) && RangeSelector_isNumber(newMax)) {\n            // Existing axis object. Set extremes after render time.\n            baseAxis.setExtremes(newMin, newMax, RangeSelector_pick(redraw, true), void 0, // Auto animation\n            {\n                trigger: 'rangeSelectorButton',\n                rangeSelectorButton: rangeOptions\n            });\n            chart.setFixedRange(rangeOptions._range);\n        }\n        RangeSelector_fireEvent(this, 'afterBtnClick');\n    };\n    /**\n     * Set the selected option. This method only sets the internal flag, it\n     * doesn't update the buttons or the actual zoomed range.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#setSelected\n     * @param {number} [selected]\n     */\n    RangeSelector.prototype.setSelected = function (selected) {\n        this.selected = this.options.selected = selected;\n    };\n    /**\n     * Initialize the range selector\n     *\n     * @private\n     * @function Highcharts.RangeSelector#init\n     * @param {Highcharts.Chart} chart\n     */\n    RangeSelector.prototype.init = function (chart) {\n        var rangeSelector = this,\n            options = chart.options.rangeSelector,\n            buttonOptions = options.buttons,\n            selectedOption = options.selected,\n            blurInputs = function () {\n                var minInput = rangeSelector.minInput,\n            maxInput = rangeSelector.maxInput;\n            // #3274 in some case blur is not defined\n            if (minInput && !!minInput.blur) {\n                RangeSelector_fireEvent(minInput, 'blur');\n            }\n            if (maxInput && !!maxInput.blur) {\n                RangeSelector_fireEvent(maxInput, 'blur');\n            }\n        };\n        rangeSelector.chart = chart;\n        rangeSelector.options = options;\n        rangeSelector.buttons = [];\n        rangeSelector.buttonOptions = buttonOptions;\n        this.eventsToUnbind = [];\n        this.eventsToUnbind.push(RangeSelector_addEvent(chart.container, 'mousedown', blurInputs));\n        this.eventsToUnbind.push(RangeSelector_addEvent(chart, 'resize', blurInputs));\n        // Extend the buttonOptions with actual range\n        buttonOptions.forEach(rangeSelector.computeButtonRange);\n        // Zoomed range based on a pre-selected button index\n        if (typeof selectedOption !== 'undefined' &&\n            buttonOptions[selectedOption]) {\n            this.clickButton(selectedOption, false);\n        }\n        this.eventsToUnbind.push(RangeSelector_addEvent(chart, 'load', function () {\n            // If a data grouping is applied to the current button, release it\n            // when extremes change\n            if (chart.xAxis && chart.xAxis[0]) {\n                RangeSelector_addEvent(chart.xAxis[0], 'setExtremes', function (e) {\n                    if (RangeSelector_isNumber(this.max) &&\n                        RangeSelector_isNumber(this.min) &&\n                        this.max - this.min !== chart.fixedRange &&\n                        e.trigger !== 'rangeSelectorButton' &&\n                        e.trigger !== 'updatedData' &&\n                        rangeSelector.forcedDataGrouping &&\n                        !rangeSelector.frozenStates) {\n                        this.setDataGrouping(false, false);\n                    }\n                });\n            }\n        }));\n        this.createElements();\n    };\n    /**\n     * Dynamically update the range selector buttons after a new range has been\n     * set\n     *\n     * @private\n     * @function Highcharts.RangeSelector#updateButtonStates\n     */\n    RangeSelector.prototype.updateButtonStates = function () {\n        var rangeSelector = this,\n            chart = this.chart,\n            dropdown = this.dropdown,\n            dropdownLabel = this.dropdownLabel,\n            baseAxis = chart.xAxis[0],\n            actualRange = Math.round(baseAxis.max - baseAxis.min),\n            hasNoData = !baseAxis.hasVisibleSeries,\n            day = 24 * 36e5, // A single day in milliseconds\n            unionExtremes = (chart.scroller &&\n                chart.scroller.getUnionExtremes()) || baseAxis,\n            dataMin = unionExtremes.dataMin,\n            dataMax = unionExtremes.dataMax,\n            ytdExtremes = rangeSelector.getYTDExtremes(dataMax,\n            dataMin),\n            ytdMin = ytdExtremes.min,\n            ytdMax = ytdExtremes.max,\n            selected = rangeSelector.selected,\n            allButtonsEnabled = rangeSelector.options.allButtonsEnabled,\n            buttonStates = new Array(rangeSelector.buttonOptions.length)\n                .fill(0),\n            selectedExists = RangeSelector_isNumber(selected),\n            buttons = rangeSelector.buttons;\n        var isSelectedTooGreat = false,\n            selectedIndex = null;\n        rangeSelector.buttonOptions.forEach(function (rangeOptions, i) {\n            var _a;\n            var range = rangeOptions._range,\n                type = rangeOptions.type,\n                count = rangeOptions.count || 1,\n                offsetRange = rangeOptions._offsetMax -\n                    rangeOptions._offsetMin,\n                isSelected = i === selected, \n                // Disable buttons where the range exceeds what is allowed i;\n            // the current view\n            isTooGreatRange = range >\n                dataMax - dataMin, \n            // Disable buttons where the range is smaller than the minimum\n            // range\n            isTooSmallRange = range < baseAxis.minRange;\n            // Do not select the YTD button if not explicitly told so\n            var isYTDButNotSelected = false, \n                // Disable the All button if we're already showing all\n                isSameRange = range === actualRange;\n            if (isSelected && isTooGreatRange) {\n                isSelectedTooGreat = true;\n            }\n            if (baseAxis.isOrdinal &&\n                ((_a = baseAxis.ordinal) === null || _a === void 0 ? void 0 : _a.positions) &&\n                range &&\n                actualRange < range) {\n                // Handle ordinal ranges\n                var positions = baseAxis.ordinal.positions,\n                    prevOrdinalPosition = Axis_OrdinalAxis.Additions.findIndexOf(positions,\n                    baseAxis.min,\n                    true),\n                    nextOrdinalPosition = Math.min(Axis_OrdinalAxis.Additions.findIndexOf(positions,\n                    baseAxis.max,\n                    true) + 1,\n                    positions.length - 1);\n                if (positions[nextOrdinalPosition] -\n                    positions[prevOrdinalPosition] > range) {\n                    isSameRange = true;\n                }\n            }\n            else if (\n            // Months and years have variable range so we check the extremes\n            (type === 'month' || type === 'year') &&\n                (actualRange + 36e5 >=\n                    { month: 28, year: 365 }[type] * day * count - offsetRange) &&\n                (actualRange - 36e5 <=\n                    { month: 31, year: 366 }[type] * day * count + offsetRange)) {\n                isSameRange = true;\n            }\n            else if (type === 'ytd') {\n                isSameRange = (ytdMax - ytdMin + offsetRange) === actualRange;\n                isYTDButNotSelected = !isSelected;\n            }\n            else if (type === 'all') {\n                isSameRange = (baseAxis.max - baseAxis.min >=\n                    dataMax - dataMin);\n            }\n            // The new zoom area happens to match the range for a button - mark\n            // it selected. This happens when scrolling across an ordinal gap.\n            // It can be seen in the intraday demos when selecting 1h and scroll\n            // across the night gap.\n            var disable = (!allButtonsEnabled &&\n                    !(isSelectedTooGreat && type === 'all') &&\n                    (isTooGreatRange ||\n                        isTooSmallRange ||\n                        hasNoData));\n            var select = ((isSelectedTooGreat && type === 'all') ||\n                    (isYTDButNotSelected ? false : isSameRange) ||\n                    (isSelected && rangeSelector.frozenStates));\n            if (disable) {\n                buttonStates[i] = 3;\n            }\n            else if (select) {\n                if (!selectedExists || i === selected) {\n                    selectedIndex = i;\n                }\n            }\n        });\n        if (selectedIndex !== null) {\n            buttonStates[selectedIndex] = 2;\n            rangeSelector.setSelected(selectedIndex);\n            if (this.dropdown) {\n                this.dropdown.selectedIndex = selectedIndex + 1;\n            }\n        }\n        else {\n            rangeSelector.setSelected();\n            if (this.dropdown) {\n                this.dropdown.selectedIndex = -1;\n            }\n            if (dropdownLabel) {\n                dropdownLabel.setState(0);\n                dropdownLabel.attr({\n                    text: (RangeSelector_defaultOptions.lang.rangeSelectorZoom || '') + ' ▾'\n                });\n            }\n        }\n        for (var i = 0; i < buttonStates.length; i++) {\n            var state = buttonStates[i];\n            var button = buttons[i];\n            if (button.state !== state) {\n                button.setState(state);\n                if (dropdown) {\n                    dropdown.options[i + 1].disabled = (state === 3);\n                    if (state === 2) {\n                        if (dropdownLabel) {\n                            dropdownLabel.setState(2);\n                            dropdownLabel.attr({\n                                text: rangeSelector.buttonOptions[i].text + ' ▾'\n                            });\n                        }\n                        dropdown.selectedIndex = i + 1;\n                    }\n                    var bbox = dropdownLabel.getBBox();\n                    RangeSelector_css(dropdown, {\n                        width: \"\" + bbox.width + \"px\",\n                        height: \"\" + bbox.height + \"px\"\n                    });\n                }\n            }\n        }\n    };\n    /**\n     * Compute and cache the range for an individual button\n     *\n     * @private\n     * @function Highcharts.RangeSelector#computeButtonRange\n     * @param {Highcharts.RangeSelectorButtonsOptions} rangeOptions\n     */\n    RangeSelector.prototype.computeButtonRange = function (rangeOptions) {\n        var type = rangeOptions.type,\n            count = rangeOptions.count || 1, \n            // These time intervals have a fixed number of milliseconds, as\n            // opposed to month, ytd and year\n            fixedTimes = {\n                millisecond: 1,\n                second: 1000,\n                minute: 60 * 1000,\n                hour: 3600 * 1000,\n                day: 24 * 3600 * 1000,\n                week: 7 * 24 * 3600 * 1000\n            };\n        // Store the range on the button object\n        if (fixedTimes[type]) {\n            rangeOptions._range = fixedTimes[type] * count;\n        }\n        else if (type === 'month' || type === 'year') {\n            rangeOptions._range = {\n                month: 30,\n                year: 365\n            }[type] * 24 * 36e5 * count;\n        }\n        rangeOptions._offsetMin = RangeSelector_pick(rangeOptions.offsetMin, 0);\n        rangeOptions._offsetMax = RangeSelector_pick(rangeOptions.offsetMax, 0);\n        rangeOptions._range +=\n            rangeOptions._offsetMax - rangeOptions._offsetMin;\n    };\n    /**\n     * Get the unix timestamp of a HTML input for the dates\n     *\n     * @private\n     * @function Highcharts.RangeSelector#getInputValue\n     */\n    RangeSelector.prototype.getInputValue = function (name) {\n        var input = name === 'min' ? this.minInput : this.maxInput;\n        var options = this.chart.options\n                .rangeSelector;\n        var time = this.chart.time;\n        if (input) {\n            return ((input.type === 'text' && options.inputDateParser) ||\n                this.defaultInputDateParser)(input.value, time.timezone === 'UTC', time);\n        }\n        return 0;\n    };\n    /**\n     * Set the internal and displayed value of a HTML input for the dates\n     *\n     * @private\n     * @function Highcharts.RangeSelector#setInputValue\n     */\n    RangeSelector.prototype.setInputValue = function (name, inputTime) {\n        var options = this.options, time = this.chart.time, input = name === 'min' ? this.minInput : this.maxInput, dateBox = name === 'min' ? this.minDateBox : this.maxDateBox;\n        if (input) {\n            input.setAttribute('type', preferredInputType(options.inputDateFormat || '%e %b %Y'));\n            var hcTimeAttr = input.getAttribute('data-hc-time');\n            var updatedTime = RangeSelector_defined(hcTimeAttr) ? Number(hcTimeAttr) : void 0;\n            if (RangeSelector_defined(inputTime)) {\n                var previousTime = updatedTime;\n                if (RangeSelector_defined(previousTime)) {\n                    input.setAttribute('data-hc-time-previous', previousTime);\n                }\n                input.setAttribute('data-hc-time', inputTime);\n                updatedTime = inputTime;\n            }\n            input.value = time.dateFormat((this.inputTypeFormats[input.type] ||\n                options.inputEditDateFormat), updatedTime);\n            if (dateBox) {\n                dateBox.attr({\n                    text: time.dateFormat(options.inputDateFormat, updatedTime)\n                });\n            }\n        }\n    };\n    /**\n     * Set the min and max value of a HTML input for the dates\n     *\n     * @private\n     * @function Highcharts.RangeSelector#setInputExtremes\n     */\n    RangeSelector.prototype.setInputExtremes = function (name, min, max) {\n        var input = name === 'min' ? this.minInput : this.maxInput;\n        if (input) {\n            var format = this.inputTypeFormats[input.type];\n            var time = this.chart.time;\n            if (format) {\n                var newMin = time.dateFormat(format,\n                    min);\n                if (input.min !== newMin) {\n                    input.min = newMin;\n                }\n                var newMax = time.dateFormat(format,\n                    max);\n                if (input.max !== newMax) {\n                    input.max = newMax;\n                }\n            }\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.RangeSelector#showInput\n     * @param {string} name\n     */\n    RangeSelector.prototype.showInput = function (name) {\n        var dateBox = name === 'min' ? this.minDateBox : this.maxDateBox, input = name === 'min' ? this.minInput : this.maxInput;\n        if (input && dateBox && this.inputGroup) {\n            var isTextInput = input.type === 'text',\n                _a = this.inputGroup,\n                _b = _a.translateX,\n                translateX = _b === void 0 ? 0 : _b,\n                _c = _a.translateY,\n                translateY = _c === void 0 ? 0 : _c,\n                _d = dateBox.x,\n                x = _d === void 0 ? 0 : _d,\n                _e = dateBox.width,\n                width = _e === void 0 ? 0 : _e,\n                _f = dateBox.height,\n                height = _f === void 0 ? 0 : _f,\n                inputBoxWidth = this.options.inputBoxWidth;\n            RangeSelector_css(input, {\n                width: isTextInput ?\n                    ((width + (inputBoxWidth ? -2 : 20)) + 'px') :\n                    'auto',\n                height: (height - 2) + 'px',\n                border: '2px solid silver'\n            });\n            if (isTextInput && inputBoxWidth) {\n                RangeSelector_css(input, {\n                    left: (translateX + x) + 'px',\n                    top: translateY + 'px'\n                });\n                // Inputs of types date, time or datetime-local should be centered\n                // on top of the dateBox\n            }\n            else {\n                RangeSelector_css(input, {\n                    left: Math.min(Math.round(x +\n                        translateX -\n                        (input.offsetWidth - width) / 2), this.chart.chartWidth - input.offsetWidth) + 'px',\n                    top: (translateY - (input.offsetHeight - height) / 2) + 'px'\n                });\n            }\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.RangeSelector#hideInput\n     * @param {string} name\n     */\n    RangeSelector.prototype.hideInput = function (name) {\n        var input = name === 'min' ? this.minInput : this.maxInput;\n        if (input) {\n            RangeSelector_css(input, {\n                top: '-9999em',\n                border: 0,\n                width: '1px',\n                height: '1px'\n            });\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.RangeSelector#defaultInputDateParser\n     */\n    RangeSelector.prototype.defaultInputDateParser = function (inputDate, useUTC, time) {\n        return (time === null || time === void 0 ? void 0 : time.parse(inputDate)) || 0;\n    };\n    /**\n     * Draw either the 'from' or the 'to' HTML input box of the range selector\n     *\n     * @private\n     * @function Highcharts.RangeSelector#drawInput\n     */\n    RangeSelector.prototype.drawInput = function (name) {\n        var _a = this,\n            chart = _a.chart,\n            div = _a.div,\n            inputGroup = _a.inputGroup;\n        var rangeSelector = this,\n            chartStyle = chart.renderer.style || {},\n            renderer = chart.renderer,\n            options = chart.options.rangeSelector,\n            lang = RangeSelector_defaultOptions.lang,\n            isMin = name === 'min';\n        /**\n         * @private\n         */\n        function updateExtremes(name) {\n            var _a;\n            var maxInput = rangeSelector.maxInput,\n                minInput = rangeSelector.minInput,\n                chartAxis = chart.xAxis[0],\n                unionExtremes = ((_a = chart.scroller) === null || _a === void 0 ? void 0 : _a.getUnionExtremes()) || chartAxis,\n                dataMin = unionExtremes.dataMin,\n                dataMax = unionExtremes.dataMax,\n                currentExtreme = chart.xAxis[0].getExtremes()[name];\n            var value = rangeSelector.getInputValue(name);\n            if (RangeSelector_isNumber(value) && value !== currentExtreme) {\n                // Validate the extremes. If it goes beyond the data min or\n                // max, use the actual data extreme (#2438).\n                if (isMin && maxInput && RangeSelector_isNumber(dataMin)) {\n                    if (value > Number(maxInput.getAttribute('data-hc-time'))) {\n                        value = void 0;\n                    }\n                    else if (value < dataMin) {\n                        value = dataMin;\n                    }\n                }\n                else if (minInput && RangeSelector_isNumber(dataMax)) {\n                    if (value < Number(minInput.getAttribute('data-hc-time'))) {\n                        value = void 0;\n                    }\n                    else if (value > dataMax) {\n                        value = dataMax;\n                    }\n                }\n                // Set the extremes\n                if (typeof value !== 'undefined') { // @todo typeof undefined\n                    chartAxis.setExtremes(isMin ? value : chartAxis.min, isMin ? chartAxis.max : value, void 0, void 0, { trigger: 'rangeSelectorInput' });\n                }\n            }\n        }\n        // Create the text label\n        var text = lang[isMin ? 'rangeSelectorFrom' : 'rangeSelectorTo'] || '';\n        var label = renderer\n                .label(text, 0)\n                .addClass('highcharts-range-label')\n                .attr({\n                padding: text ? 2 : 0,\n                height: text ? options.inputBoxHeight : 0\n            })\n                .add(inputGroup);\n        // Create an SVG label that shows updated date ranges and records click\n        // events that bring in the HTML input.\n        var dateBox = renderer\n                .label('', 0)\n                .addClass('highcharts-range-input')\n                .attr({\n                padding: 2,\n                width: options.inputBoxWidth,\n                height: options.inputBoxHeight,\n                'text-align': 'center'\n            })\n                .on('click',\n            function () {\n                // If it is already focused, the onfocus event doesn't fire\n                // (#3713)\n                rangeSelector.showInput(name);\n            rangeSelector[name + 'Input'].focus();\n        });\n        if (!chart.styledMode) {\n            dateBox.attr({\n                stroke: options.inputBoxBorderColor,\n                'stroke-width': 1\n            });\n        }\n        dateBox.add(inputGroup);\n        // Create the HTML input element. This is rendered as 1x1 pixel then set\n        // to the right size when focused.\n        var input = createElement('input', {\n                name: name,\n                className: 'highcharts-range-selector'\n            },\n            void 0,\n            div);\n        // #14788: Setting input.type to an unsupported type throws in IE, so\n        // we need to use setAttribute instead\n        input.setAttribute('type', preferredInputType(options.inputDateFormat || '%e %b %Y'));\n        if (!chart.styledMode) {\n            // Styles\n            label.css(RangeSelector_merge(chartStyle, options.labelStyle));\n            dateBox.css(RangeSelector_merge({\n                color: \"#333333\" /* Palette.neutralColor80 */\n            }, chartStyle, options.inputStyle));\n            RangeSelector_css(input, RangeSelector_extend({\n                position: 'absolute',\n                border: 0,\n                boxShadow: '0 0 15px rgba(0,0,0,0.3)',\n                width: '1px', // Chrome needs a pixel to see it\n                height: '1px',\n                padding: 0,\n                textAlign: 'center',\n                fontSize: chartStyle.fontSize,\n                fontFamily: chartStyle.fontFamily,\n                top: '-9999em' // #4798\n            }, options.inputStyle));\n        }\n        // Blow up the input box\n        input.onfocus = function () {\n            rangeSelector.showInput(name);\n        };\n        // Hide away the input box\n        input.onblur = function () {\n            // Update extremes only when inputs are active\n            if (input === (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).doc.activeElement) { // Only when focused\n                // Update also when no `change` event is triggered, like when\n                // clicking inside the SVG (#4710)\n                updateExtremes(name);\n            }\n            // #10404 - move hide and blur outside focus\n            rangeSelector.hideInput(name);\n            rangeSelector.setInputValue(name);\n            input.blur(); // #4606\n        };\n        var keyDown = false;\n        // Handle changes in the input boxes\n        input.onchange = function () {\n            // Update extremes and blur input when clicking date input calendar\n            if (!keyDown) {\n                updateExtremes(name);\n                rangeSelector.hideInput(name);\n                input.blur();\n            }\n        };\n        input.onkeypress = function (event) {\n            // IE does not fire onchange on enter\n            if (event.keyCode === 13) {\n                updateExtremes(name);\n            }\n        };\n        input.onkeydown = function (event) {\n            keyDown = true;\n            // Arrow keys\n            if (event.key === 'ArrowUp' ||\n                event.key === 'ArrowDown' ||\n                event.key === 'Tab') {\n                updateExtremes(name);\n            }\n        };\n        input.onkeyup = function () {\n            keyDown = false;\n        };\n        return { dateBox: dateBox, input: input, label: label };\n    };\n    /**\n     * Get the position of the range selector buttons and inputs. This can be\n     * overridden from outside for custom positioning.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#getPosition\n     */\n    RangeSelector.prototype.getPosition = function () {\n        var chart = this.chart,\n            options = chart.options.rangeSelector,\n            top = options.verticalAlign === 'top' ?\n                chart.plotTop - chart.axisOffset[0] :\n                0; // Set offset only for verticalAlign top\n            return {\n                buttonTop: top + options.buttonPosition.y,\n                inputTop: top + options.inputPosition.y - 10\n            };\n    };\n    /**\n     * Get the extremes of YTD. Will choose dataMax if its value is lower than\n     * the current timestamp. Will choose dataMin if its value is higher than\n     * the timestamp for the start of current year.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#getYTDExtremes\n     * @return {*}\n     * Returns min and max for the YTD\n     */\n    RangeSelector.prototype.getYTDExtremes = function (dataMax, dataMin) {\n        var time = this.chart.time,\n            year = time.toParts(dataMax)[0],\n            startOfYear = time.makeTime(year, 0);\n        return {\n            max: dataMax,\n            min: Math.max(dataMin, startOfYear)\n        };\n    };\n    RangeSelector.prototype.createElements = function () {\n        var _a;\n        var chart = this.chart,\n            renderer = chart.renderer,\n            container = chart.container,\n            chartOptions = chart.options,\n            options = chartOptions.rangeSelector,\n            inputEnabled = options.inputEnabled,\n            inputsZIndex = RangeSelector_pick((_a = chartOptions.chart.style) === null || _a === void 0 ? void 0 : _a.zIndex, 0) + 1;\n        if (options.enabled === false) {\n            return;\n        }\n        this.group = renderer.g('range-selector-group')\n            .attr({\n            zIndex: 7\n        })\n            .add();\n        this.div = createElement('div', void 0, {\n            position: 'relative',\n            height: 0,\n            zIndex: inputsZIndex\n        });\n        if (this.buttonOptions.length) {\n            this.renderButtons();\n        }\n        // First create a wrapper outside the container in order to make\n        // the inputs work and make export correct\n        if (container.parentNode) {\n            container.parentNode.insertBefore(this.div, container);\n        }\n        if (inputEnabled) {\n            this.createInputs();\n        }\n    };\n    /**\n     * Create the input elements and its group.\n     *\n     */\n    RangeSelector.prototype.createInputs = function () {\n        this.inputGroup = this.chart.renderer.g('input-group').add(this.group);\n        var minElems = this.drawInput('min');\n        this.minDateBox = minElems.dateBox;\n        this.minLabel = minElems.label;\n        this.minInput = minElems.input;\n        var maxElems = this.drawInput('max');\n        this.maxDateBox = maxElems.dateBox;\n        this.maxLabel = maxElems.label;\n        this.maxInput = maxElems.input;\n    };\n    /**\n     * Render the range selector including the buttons and the inputs. The first\n     * time render is called, the elements are created and positioned. On\n     * subsequent calls, they are moved and updated.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#render\n     * @param {number} [min]\n     *        X axis minimum\n     * @param {number} [max]\n     *        X axis maximum\n     */\n    RangeSelector.prototype.render = function (min, max) {\n        var _a,\n            _b;\n        if (this.options.enabled === false) {\n            return;\n        }\n        var chart = this.chart,\n            chartOptions = chart.options,\n            options = chartOptions.rangeSelector, \n            // Place inputs above the container\n            inputEnabled = options.inputEnabled;\n        if (inputEnabled) {\n            if (!this.inputGroup) {\n                this.createInputs();\n            }\n            // Set or reset the input values\n            this.setInputValue('min', min);\n            this.setInputValue('max', max);\n            if (!this.chart.styledMode) {\n                (_a = this.maxLabel) === null || _a === void 0 ? void 0 : _a.css(options.labelStyle);\n                (_b = this.minLabel) === null || _b === void 0 ? void 0 : _b.css(options.labelStyle);\n            }\n            var unionExtremes = (chart.scroller && chart.scroller.getUnionExtremes()) || chart.xAxis[0] || {};\n            if (RangeSelector_defined(unionExtremes.dataMin) &&\n                RangeSelector_defined(unionExtremes.dataMax)) {\n                var minRange = chart.xAxis[0].minRange || 0;\n                this.setInputExtremes('min', unionExtremes.dataMin, Math.min(unionExtremes.dataMax, this.getInputValue('max')) - minRange);\n                this.setInputExtremes('max', Math.max(unionExtremes.dataMin, this.getInputValue('min')) + minRange, unionExtremes.dataMax);\n            }\n            // Reflow\n            if (this.inputGroup) {\n                var x_1 = 0;\n                [\n                    this.minLabel,\n                    this.minDateBox,\n                    this.maxLabel,\n                    this.maxDateBox\n                ].forEach(function (label) {\n                    if (label) {\n                        var width = label.getBBox().width;\n                        if (width) {\n                            label.attr({ x: x_1 });\n                            x_1 += width + options.inputSpacing;\n                        }\n                    }\n                });\n            }\n        }\n        else {\n            if (this.inputGroup) {\n                this.inputGroup.destroy();\n                delete this.inputGroup;\n            }\n        }\n        if (!this.chart.styledMode) {\n            if (this.zoomText) {\n                this.zoomText.css(options.labelStyle);\n            }\n        }\n        this.alignElements();\n        this.updateButtonStates();\n    };\n    /**\n     * Render the range buttons. This only runs the first time, later the\n     * positioning is laid out in alignElements.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#renderButtons\n     */\n    RangeSelector.prototype.renderButtons = function () {\n        var _this = this;\n        var _a,\n            _b;\n        var _c;\n        var _d = this,\n            chart = _d.chart,\n            options = _d.options;\n        var lang = RangeSelector_defaultOptions.lang;\n        var renderer = chart.renderer;\n        var buttonTheme = RangeSelector_merge(options.buttonTheme);\n        var states = buttonTheme && buttonTheme.states;\n        // Prevent the button from resetting the width when the button state\n        // changes since we need more control over the width when collapsing\n        // the buttons\n        delete buttonTheme.width;\n        delete buttonTheme.states;\n        this.buttonGroup = renderer.g('range-selector-buttons').add(this.group);\n        var dropdown = this.dropdown = createElement('select',\n            void 0, {\n                position: 'absolute',\n                padding: 0,\n                border: 0,\n                cursor: 'pointer',\n                opacity: 0.0001\n            },\n            this.div);\n        // Create a label for dropdown select element\n        var userButtonTheme = (_a = chart.userOptions.rangeSelector) === null || _a === void 0 ? void 0 : _a.buttonTheme;\n        this.dropdownLabel = renderer.button('', 0, 0, function () { }, RangeSelector_merge(buttonTheme, {\n            'stroke-width': RangeSelector_pick(buttonTheme['stroke-width'], 0),\n            width: 'auto',\n            paddingLeft: RangeSelector_pick(options.buttonTheme.paddingLeft, userButtonTheme === null || userButtonTheme === void 0 ? void 0 : userButtonTheme.padding, 8),\n            paddingRight: RangeSelector_pick(options.buttonTheme.paddingRight, userButtonTheme === null || userButtonTheme === void 0 ? void 0 : userButtonTheme.padding, 8)\n        }), states && states.hover, states && states.select, states && states.disabled)\n            .hide()\n            .add(this.group);\n        // Prevent page zoom on iPhone\n        RangeSelector_addEvent(dropdown, 'touchstart', function () {\n            dropdown.style.fontSize = '16px';\n        });\n        // Forward events from select to button\n        var mouseOver = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isMS ? 'mouseover' : 'mouseenter', mouseOut = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isMS ? 'mouseout' : 'mouseleave';\n        RangeSelector_addEvent(dropdown, mouseOver, function () {\n            RangeSelector_fireEvent(_this.dropdownLabel.element, mouseOver);\n        });\n        RangeSelector_addEvent(dropdown, mouseOut, function () {\n            RangeSelector_fireEvent(_this.dropdownLabel.element, mouseOut);\n        });\n        RangeSelector_addEvent(dropdown, 'change', function () {\n            var button = _this.buttons[dropdown.selectedIndex - 1];\n            RangeSelector_fireEvent(button.element, 'click');\n        });\n        this.zoomText = renderer\n            .label(lang.rangeSelectorZoom || '', 0)\n            .attr({\n            padding: options.buttonTheme.padding,\n            height: options.buttonTheme.height,\n            paddingLeft: 0,\n            paddingRight: 0\n        })\n            .add(this.buttonGroup);\n        if (!this.chart.styledMode) {\n            this.zoomText.css(options.labelStyle);\n            (_b = (_c = options.buttonTheme)['stroke-width']) !== null && _b !== void 0 ? _b : (_c['stroke-width'] = 0);\n        }\n        createElement('option', {\n            textContent: this.zoomText.textStr,\n            disabled: true\n        }, void 0, dropdown);\n        this.createButtons();\n    };\n    RangeSelector.prototype.createButtons = function () {\n        var _this = this;\n        var options = this.options;\n        var buttonTheme = RangeSelector_merge(options.buttonTheme);\n        var states = buttonTheme && buttonTheme.states;\n        // Prevent the button from resetting the width when the button state\n        // changes since we need more control over the width when collapsing\n        // the buttons\n        var width = buttonTheme.width || 28;\n        delete buttonTheme.width;\n        delete buttonTheme.states;\n        this.buttonOptions.forEach(function (rangeOptions, i) {\n            _this.createButton(rangeOptions, i, width, states);\n        });\n    };\n    RangeSelector.prototype.createButton = function (rangeOptions, i, width, states) {\n        var _this = this;\n        var _a = this,\n            dropdown = _a.dropdown,\n            buttons = _a.buttons,\n            chart = _a.chart,\n            options = _a.options;\n        var renderer = chart.renderer;\n        var buttonTheme = RangeSelector_merge(options.buttonTheme);\n        dropdown === null || dropdown === void 0 ? void 0 : dropdown.add(createElement('option', {\n            textContent: rangeOptions.title || rangeOptions.text\n        }), i + 2);\n        buttons[i] = renderer\n            .button(rangeOptions.text, 0, 0, function (e) {\n            // Extract events from button object and call\n            var buttonEvents = (rangeOptions.events && rangeOptions.events.click);\n            var callDefaultEvent;\n            if (buttonEvents) {\n                callDefaultEvent =\n                    buttonEvents.call(rangeOptions, e);\n            }\n            if (callDefaultEvent !== false) {\n                _this.clickButton(i);\n            }\n            _this.isActive = true;\n        }, buttonTheme, states && states.hover, states && states.select, states && states.disabled)\n            .attr({\n            'text-align': 'center',\n            width: width\n        })\n            .add(this.buttonGroup);\n        if (rangeOptions.title) {\n            buttons[i].attr('title', rangeOptions.title);\n        }\n    };\n    /**\n     * Align the elements horizontally and vertically.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#alignElements\n     */\n    RangeSelector.prototype.alignElements = function () {\n        var _this = this;\n        var _a;\n        var _b = this,\n            buttonGroup = _b.buttonGroup,\n            buttons = _b.buttons,\n            chart = _b.chart,\n            group = _b.group,\n            inputGroup = _b.inputGroup,\n            options = _b.options,\n            zoomText = _b.zoomText;\n        var chartOptions = chart.options;\n        var navButtonOptions = (chartOptions.exporting &&\n                chartOptions.exporting.enabled !== false &&\n                chartOptions.navigation &&\n                chartOptions.navigation.buttonOptions);\n        var buttonPosition = options.buttonPosition,\n            inputPosition = options.inputPosition,\n            verticalAlign = options.verticalAlign;\n        // Get the X offset required to avoid overlapping with the exporting\n        // button. This is used both by the buttonGroup and the inputGroup.\n        var getXOffsetForExportButton = function (group,\n            position,\n            rightAligned) {\n                if (navButtonOptions &&\n                    _this.titleCollision(chart) &&\n                    verticalAlign === 'top' &&\n                    rightAligned && ((position.y -\n                    group.getBBox().height - 12) <\n                    ((navButtonOptions.y || 0) +\n                        (navButtonOptions.height || 0) +\n                        chart.spacing[0]))) {\n                    return -40;\n            }\n            return 0;\n        };\n        var plotLeft = chart.plotLeft;\n        if (group && buttonPosition && inputPosition) {\n            var translateX = buttonPosition.x - chart.spacing[3];\n            if (buttonGroup) {\n                this.positionButtons();\n                if (!this.initialButtonGroupWidth) {\n                    var width_1 = 0;\n                    if (zoomText) {\n                        width_1 += zoomText.getBBox().width + 5;\n                    }\n                    buttons.forEach(function (button, i) {\n                        width_1 += button.width || 0;\n                        if (i !== buttons.length - 1) {\n                            width_1 += options.buttonSpacing;\n                        }\n                    });\n                    this.initialButtonGroupWidth = width_1;\n                }\n                plotLeft -= chart.spacing[3];\n                // Detect collision between button group and exporting\n                var xOffsetForExportButton_1 = getXOffsetForExportButton(buttonGroup,\n                    buttonPosition,\n                    buttonPosition.align === 'right' ||\n                        inputPosition.align === 'right');\n                this.alignButtonGroup(xOffsetForExportButton_1);\n                if ((_a = this.buttonGroup) === null || _a === void 0 ? void 0 : _a.translateY) {\n                    this.dropdownLabel\n                        .attr({ y: this.buttonGroup.translateY });\n                }\n                // Skip animation\n                group.placed = buttonGroup.placed = chart.hasLoaded;\n            }\n            var xOffsetForExportButton = 0;\n            if (options.inputEnabled && inputGroup) {\n                // Detect collision between the input group and exporting button\n                xOffsetForExportButton = getXOffsetForExportButton(inputGroup, inputPosition, buttonPosition.align === 'right' ||\n                    inputPosition.align === 'right');\n                if (inputPosition.align === 'left') {\n                    translateX = plotLeft;\n                }\n                else if (inputPosition.align === 'right') {\n                    translateX = -Math.max(chart.axisOffset[1], -xOffsetForExportButton);\n                }\n                // Update the alignment to the updated spacing box\n                inputGroup.align({\n                    y: inputPosition.y,\n                    width: inputGroup.getBBox().width,\n                    align: inputPosition.align,\n                    // Fix wrong getBBox() value on right align\n                    x: inputPosition.x + translateX - 2\n                }, true, chart.spacingBox);\n                // Skip animation\n                inputGroup.placed = chart.hasLoaded;\n            }\n            this.handleCollision(xOffsetForExportButton);\n            // Vertical align\n            group.align({\n                verticalAlign: verticalAlign\n            }, true, chart.spacingBox);\n            var alignTranslateY = group.alignAttr.translateY;\n            // Set position\n            var groupHeight = group.getBBox().height + 20; // # 20 padding\n                var translateY = 0;\n            // Calculate bottom position\n            if (verticalAlign === 'bottom') {\n                var legendOptions = chart.legend && chart.legend.options;\n                var legendHeight = (legendOptions &&\n                        legendOptions.verticalAlign === 'bottom' &&\n                        legendOptions.enabled &&\n                        !legendOptions.floating ?\n                        (chart.legend.legendHeight +\n                            RangeSelector_pick(legendOptions.margin, 10)) :\n                        0);\n                groupHeight = groupHeight + legendHeight - 20;\n                translateY = (alignTranslateY -\n                    groupHeight -\n                    (options.floating ? 0 : options.y) -\n                    (chart.titleOffset ? chart.titleOffset[2] : 0) -\n                    10 // 10 spacing\n                );\n            }\n            if (verticalAlign === 'top') {\n                if (options.floating) {\n                    translateY = 0;\n                }\n                if (chart.titleOffset && chart.titleOffset[0]) {\n                    translateY = chart.titleOffset[0];\n                }\n                translateY += ((chart.margin[0] - chart.spacing[0]) || 0);\n            }\n            else if (verticalAlign === 'middle') {\n                if (inputPosition.y === buttonPosition.y) {\n                    translateY = alignTranslateY;\n                }\n                else if (inputPosition.y || buttonPosition.y) {\n                    if (inputPosition.y < 0 ||\n                        buttonPosition.y < 0) {\n                        translateY -= Math.min(inputPosition.y, buttonPosition.y);\n                    }\n                    else {\n                        translateY = alignTranslateY - groupHeight;\n                    }\n                }\n            }\n            group.translate(options.x, options.y + Math.floor(translateY));\n            // Translate HTML inputs\n            var _c = this,\n                minInput = _c.minInput,\n                maxInput = _c.maxInput,\n                dropdown = _c.dropdown;\n            if (options.inputEnabled && minInput && maxInput) {\n                minInput.style.marginTop = group.translateY + 'px';\n                maxInput.style.marginTop = group.translateY + 'px';\n            }\n            if (dropdown) {\n                dropdown.style.marginTop = group.translateY + 'px';\n            }\n        }\n    };\n    /**\n     * @private\n     */\n    RangeSelector.prototype.redrawElements = function () {\n        var _a,\n            _b,\n            _c,\n            _d,\n            _e,\n            _f,\n            _g;\n        var chart = this.chart,\n            _h = this.options,\n            inputBoxHeight = _h.inputBoxHeight,\n            inputBoxBorderColor = _h.inputBoxBorderColor;\n        (_a = this.maxDateBox) === null || _a === void 0 ? void 0 : _a.attr({\n            height: inputBoxHeight\n        });\n        (_b = this.minDateBox) === null || _b === void 0 ? void 0 : _b.attr({\n            height: inputBoxHeight\n        });\n        if (!chart.styledMode) {\n            (_c = this.maxDateBox) === null || _c === void 0 ? void 0 : _c.attr({\n                stroke: inputBoxBorderColor\n            });\n            (_d = this.minDateBox) === null || _d === void 0 ? void 0 : _d.attr({\n                stroke: inputBoxBorderColor\n            });\n        }\n        if (this.isDirty) {\n            this.isDirty = false;\n            // Reset this prop to force redrawing collapse of buttons\n            this.isCollapsed = void 0;\n            var newButtonsOptions = (_e = this.options.buttons) !== null && _e !== void 0 ? _e : [];\n            var btnLength = Math.min(newButtonsOptions.length,\n                this.buttonOptions.length);\n            var _j = this,\n                dropdown = _j.dropdown,\n                options = _j.options;\n            var buttonTheme = RangeSelector_merge(options.buttonTheme);\n            var states = buttonTheme && buttonTheme.states;\n            // Prevent the button from resetting the width when the button state\n            // changes since we need more control over the width when collapsing\n            // the buttons\n            var width = buttonTheme.width || 28;\n            // Destroy additional buttons\n            if (newButtonsOptions.length < this.buttonOptions.length) {\n                for (var i = this.buttonOptions.length - 1; i >= newButtonsOptions.length; i--) {\n                    var btn = this.buttons.pop();\n                    btn === null || btn === void 0 ? void 0 : btn.destroy();\n                    (_f = this.dropdown) === null || _f === void 0 ? void 0 : _f.options.remove(i + 1);\n                }\n            }\n            // Update current buttons\n            for (var i = btnLength - 1; i >= 0; i--) {\n                var diff = diffObjects(newButtonsOptions[i],\n                    this.buttonOptions[i]);\n                if (Object.keys(diff).length !== 0) {\n                    var rangeOptions = newButtonsOptions[i];\n                    this.buttons[i].destroy();\n                    dropdown === null || dropdown === void 0 ? void 0 : dropdown.options.remove(i + 1);\n                    this.createButton(rangeOptions, i, width, states);\n                    this.computeButtonRange(rangeOptions);\n                }\n            }\n            // Create missing buttons\n            if (newButtonsOptions.length > this.buttonOptions.length) {\n                for (var i = this.buttonOptions.length; i < newButtonsOptions.length; i++) {\n                    this.createButton(newButtonsOptions[i], i, width, states);\n                    this.computeButtonRange(newButtonsOptions[i]);\n                }\n            }\n            this.buttonOptions = (_g = this.options.buttons) !== null && _g !== void 0 ? _g : [];\n            if (RangeSelector_defined(this.options.selected) && this.buttons.length) {\n                this.clickButton(this.options.selected, false);\n            }\n        }\n    };\n    /**\n     * Align the button group horizontally and vertically.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#alignButtonGroup\n     * @param {number} xOffsetForExportButton\n     * @param {number} [width]\n     */\n    RangeSelector.prototype.alignButtonGroup = function (xOffsetForExportButton, width) {\n        var _a = this,\n            chart = _a.chart,\n            options = _a.options,\n            buttonGroup = _a.buttonGroup,\n            dropdown = _a.dropdown,\n            dropdownLabel = _a.dropdownLabel;\n        var buttonPosition = options.buttonPosition;\n        var plotLeft = chart.plotLeft - chart.spacing[3];\n        var translateX = buttonPosition.x - chart.spacing[3];\n        var dropdownTranslateX = chart.plotLeft;\n        if (buttonPosition.align === 'right') {\n            translateX += xOffsetForExportButton - plotLeft; // #13014\n            if (this.hasVisibleDropdown) {\n                dropdownTranslateX = chart.chartWidth +\n                    xOffsetForExportButton -\n                    this.maxButtonWidth() - 20;\n            }\n        }\n        else if (buttonPosition.align === 'center') {\n            translateX -= plotLeft / 2;\n            if (this.hasVisibleDropdown) {\n                dropdownTranslateX = chart.chartWidth / 2 -\n                    this.maxButtonWidth();\n            }\n        }\n        if (dropdown) {\n            RangeSelector_css(dropdown, {\n                left: dropdownTranslateX + 'px',\n                top: (buttonGroup === null || buttonGroup === void 0 ? void 0 : buttonGroup.translateY) + 'px'\n            });\n        }\n        dropdownLabel === null || dropdownLabel === void 0 ? void 0 : dropdownLabel.attr({\n            x: dropdownTranslateX\n        });\n        if (buttonGroup) {\n            // Align button group\n            buttonGroup.align({\n                y: buttonPosition.y,\n                width: RangeSelector_pick(width, this.initialButtonGroupWidth),\n                align: buttonPosition.align,\n                x: translateX\n            }, true, chart.spacingBox);\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.RangeSelector#positionButtons\n     */\n    RangeSelector.prototype.positionButtons = function () {\n        var _a = this,\n            buttons = _a.buttons,\n            chart = _a.chart,\n            options = _a.options,\n            zoomText = _a.zoomText;\n        var verb = chart.hasLoaded ? 'animate' : 'attr';\n        var buttonPosition = options.buttonPosition;\n        var plotLeft = chart.plotLeft;\n        var buttonLeft = plotLeft;\n        if (zoomText && zoomText.visibility !== 'hidden') {\n            // #8769, allow dynamically updating margins\n            zoomText[verb]({\n                x: RangeSelector_pick(plotLeft + buttonPosition.x, plotLeft)\n            });\n            // Button start position\n            buttonLeft += buttonPosition.x +\n                zoomText.getBBox().width + 5;\n        }\n        for (var i = 0, iEnd = this.buttonOptions.length; i < iEnd; ++i) {\n            if (buttons[i].visibility !== 'hidden') {\n                buttons[i][verb]({ x: buttonLeft });\n                // Increase the button position for the next button\n                buttonLeft += (buttons[i].width || 0) + options.buttonSpacing;\n            }\n            else {\n                buttons[i][verb]({ x: plotLeft });\n            }\n        }\n    };\n    /**\n     * Handle collision between the button group and the input group\n     *\n     * @private\n     * @function Highcharts.RangeSelector#handleCollision\n     *\n     * @param  {number} xOffsetForExportButton\n     *                  The X offset of the group required to make room for the\n     *                  exporting button\n     */\n    RangeSelector.prototype.handleCollision = function (xOffsetForExportButton) {\n        var _a = this,\n            chart = _a.chart,\n            buttonGroup = _a.buttonGroup,\n            inputGroup = _a.inputGroup,\n            initialButtonGroupWidth = _a.initialButtonGroupWidth;\n        var _b = this.options,\n            buttonPosition = _b.buttonPosition,\n            dropdown = _b.dropdown,\n            inputPosition = _b.inputPosition;\n        var moveInputsDown = function () {\n                if (inputGroup && buttonGroup) {\n                    inputGroup.attr({\n                        translateX: inputGroup.alignAttr.translateX + (chart.axisOffset[1] >= -xOffsetForExportButton ?\n                            0 :\n                            -xOffsetForExportButton),\n                        translateY: inputGroup.alignAttr.translateY +\n                            buttonGroup.getBBox().height + 10\n                    });\n            }\n        };\n        // Detect collision\n        if (inputGroup && buttonGroup) {\n            if (inputPosition.align === buttonPosition.align) {\n                moveInputsDown();\n                if (initialButtonGroupWidth >\n                    chart.plotWidth + xOffsetForExportButton - 20) {\n                    this.collapseButtons();\n                }\n                else {\n                    this.expandButtons();\n                }\n            }\n            else if (initialButtonGroupWidth -\n                xOffsetForExportButton +\n                inputGroup.getBBox().width >\n                chart.plotWidth) {\n                if (dropdown === 'responsive') {\n                    this.collapseButtons();\n                }\n                else {\n                    moveInputsDown();\n                }\n            }\n            else {\n                this.expandButtons();\n            }\n        }\n        else if (buttonGroup && dropdown === 'responsive') {\n            if (initialButtonGroupWidth > chart.plotWidth) {\n                this.collapseButtons();\n            }\n            else {\n                this.expandButtons();\n            }\n        }\n        // Forced states\n        if (buttonGroup) {\n            if (dropdown === 'always') {\n                this.collapseButtons();\n            }\n            if (dropdown === 'never') {\n                this.expandButtons();\n            }\n        }\n        this.alignButtonGroup(xOffsetForExportButton);\n    };\n    /**\n     * Collapse the buttons and show the select element.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#collapseButtons\n     * @param {number} xOffsetForExportButton\n     */\n    RangeSelector.prototype.collapseButtons = function () {\n        var _a = this,\n            buttons = _a.buttons,\n            zoomText = _a.zoomText;\n        if (this.isCollapsed === true) {\n            return;\n        }\n        this.isCollapsed = true;\n        zoomText.hide();\n        buttons.forEach(function (button) { return void button.hide(); });\n        this.showDropdown();\n    };\n    /**\n     * Show all the buttons and hide the select element.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#expandButtons\n     */\n    RangeSelector.prototype.expandButtons = function () {\n        var _a = this,\n            buttons = _a.buttons,\n            zoomText = _a.zoomText;\n        if (this.isCollapsed === false) {\n            return;\n        }\n        this.isCollapsed = false;\n        this.hideDropdown();\n        zoomText.show();\n        buttons.forEach(function (button) { return void button.show(); });\n        this.positionButtons();\n    };\n    /**\n     * Position the select element on top of the button.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#showDropdown\n     */\n    RangeSelector.prototype.showDropdown = function () {\n        var _a = this,\n            buttonGroup = _a.buttonGroup,\n            dropdownLabel = _a.dropdownLabel,\n            dropdown = _a.dropdown;\n        if (buttonGroup && dropdown) {\n            dropdownLabel.show();\n            RangeSelector_css(dropdown, { visibility: 'inherit' });\n            this.hasVisibleDropdown = true;\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.RangeSelector#hideDropdown\n     */\n    RangeSelector.prototype.hideDropdown = function () {\n        var dropdown = this.dropdown;\n        if (dropdown) {\n            this.dropdownLabel.hide();\n            RangeSelector_css(dropdown, {\n                visibility: 'hidden',\n                width: '1px',\n                height: '1px'\n            });\n            this.hasVisibleDropdown = false;\n        }\n    };\n    /**\n     * Extracts height of range selector\n     *\n     * @private\n     * @function Highcharts.RangeSelector#getHeight\n     * @return {number}\n     * Returns rangeSelector height\n     */\n    RangeSelector.prototype.getHeight = function () {\n        var rangeSelector = this,\n            options = rangeSelector.options,\n            rangeSelectorGroup = rangeSelector.group,\n            inputPosition = options.inputPosition,\n            buttonPosition = options.buttonPosition,\n            yPosition = options.y,\n            buttonPositionY = buttonPosition.y,\n            inputPositionY = inputPosition.y;\n        var rangeSelectorHeight = 0;\n        if (options.height) {\n            return options.height;\n        }\n        // Align the elements before we read the height in case we're switching\n        // between wrapped and non-wrapped layout\n        this.alignElements();\n        rangeSelectorHeight = rangeSelectorGroup ?\n            // 13px to keep back compatibility\n            (rangeSelectorGroup.getBBox(true).height) + 13 +\n                yPosition :\n            0;\n        var minPosition = Math.min(inputPositionY,\n            buttonPositionY);\n        if ((inputPositionY < 0 && buttonPositionY < 0) ||\n            (inputPositionY > 0 && buttonPositionY > 0)) {\n            rangeSelectorHeight += Math.abs(minPosition);\n        }\n        return rangeSelectorHeight;\n    };\n    /**\n     * Detect collision with title or subtitle\n     *\n     * @private\n     * @function Highcharts.RangeSelector#titleCollision\n     * @return {boolean}\n     * Returns collision status\n     */\n    RangeSelector.prototype.titleCollision = function (chart) {\n        return !(chart.options.title.text ||\n            chart.options.subtitle.text);\n    };\n    /**\n     * Update the range selector with new options\n     *\n     * @private\n     * @function Highcharts.RangeSelector#update\n     * @param {Highcharts.RangeSelectorOptions} options\n     */\n    RangeSelector.prototype.update = function (options, redraw) {\n        if (redraw === void 0) { redraw = true; }\n        var chart = this.chart;\n        RangeSelector_merge(true, this.options, options);\n        if (this.options.selected &&\n            this.options.selected >= this.options.buttons.length) {\n            this.options.selected = void 0;\n            chart.options.rangeSelector.selected = void 0;\n        }\n        if (RangeSelector_defined(options.enabled)) {\n            this.destroy();\n            return this.init(chart);\n        }\n        this.isDirty = !!options.buttons;\n        if (redraw) {\n            this.render();\n        }\n    };\n    /**\n     * Destroys allocated elements.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#destroy\n     */\n    RangeSelector.prototype.destroy = function () {\n        var rSelector = this,\n            minInput = rSelector.minInput,\n            maxInput = rSelector.maxInput;\n        if (rSelector.eventsToUnbind) {\n            rSelector.eventsToUnbind.forEach(function (unbind) { return unbind(); });\n            rSelector.eventsToUnbind = void 0;\n        }\n        // Destroy elements in collections\n        RangeSelector_destroyObjectProperties(rSelector.buttons);\n        // Clear input element events\n        if (minInput) {\n            minInput.onfocus = minInput.onblur = minInput.onchange = null;\n        }\n        if (maxInput) {\n            maxInput.onfocus = maxInput.onblur = maxInput.onchange = null;\n        }\n        // Destroy HTML and SVG elements\n        RangeSelector_objectEach(rSelector, function (val, key) {\n            if (val && key !== 'chart') {\n                if (val instanceof (highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_default())) {\n                    // SVGElement\n                    val.destroy();\n                }\n                else if (val instanceof window.HTMLElement) {\n                    // HTML element\n                    discardElement(val);\n                }\n                delete rSelector[key];\n            }\n            if (val !== RangeSelector.prototype[key]) {\n                rSelector[key] = null;\n            }\n        }, this);\n        this.buttons = [];\n    };\n    return RangeSelector;\n}());\nRangeSelector_extend(RangeSelector.prototype, {\n    /**\n     * The date formats to use when setting min, max and value on date inputs.\n     * @private\n     */\n    inputTypeFormats: {\n        'datetime-local': '%Y-%m-%dT%H:%M:%S',\n        'date': '%Y-%m-%d',\n        'time': '%H:%M:%S'\n    }\n});\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var RangeSelector_RangeSelector = (RangeSelector);\n/* *\n *\n *  API Options\n *\n * */\n/**\n * Define the time span for the button\n *\n * @typedef {\"all\"|\"day\"|\"hour\"|\"millisecond\"|\"minute\"|\"month\"|\"second\"|\"week\"|\"year\"|\"ytd\"} Highcharts.RangeSelectorButtonTypeValue\n */\n/**\n * Callback function to react on button clicks.\n *\n * @callback Highcharts.RangeSelectorClickCallbackFunction\n *\n * @param {global.Event} e\n *        Event arguments.\n *\n * @param {boolean|undefined}\n *        Return false to cancel the default button event.\n */\n/**\n * Callback function to parse values entered in the input boxes and return a\n * valid JavaScript time as milliseconds since 1970.\n *\n * @callback Highcharts.RangeSelectorParseCallbackFunction\n *\n * @param {string} value\n *        Input value to parse.\n *\n * @return {number}\n *         Parsed JavaScript time value.\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 PathfinderAlgorithms_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 = PathfinderAlgorithms_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 = PathfinderAlgorithms_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 PathfinderComposition_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            PathfinderComposition_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 Pathfinder_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, Pathfinder_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        Pathfinder_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                            Pathfinder_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 = Pathfinder_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/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 = ((/* unused pure expression or super */ null && (Highcharts)));\n\n;// ./code/es5/es-modules/Extensions/StaticScale.js\n/* *\n *\n *  (c) 2016-2024 Torstein Honsi, Lars Cabrera\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar StaticScale_addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, StaticScale_defined = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defined, StaticScale_isNumber = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isNumber, StaticScale_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick;\n/* *\n *\n *  Composition\n *\n * */\n/** @private */\nfunction StaticScale_compose(AxisClass, ChartClass) {\n    var chartProto = ChartClass.prototype;\n    if (!chartProto.adjustHeight) {\n        StaticScale_addEvent(AxisClass, 'afterSetOptions', StaticScale_onAxisAfterSetOptions);\n        chartProto.adjustHeight = chartAdjustHeight;\n        StaticScale_addEvent(ChartClass, 'render', chartProto.adjustHeight);\n    }\n}\n/** @private */\nfunction StaticScale_onAxisAfterSetOptions() {\n    var chartOptions = this.chart.options.chart;\n    if (!this.horiz &&\n        StaticScale_isNumber(this.options.staticScale) &&\n        (!chartOptions.height ||\n            (chartOptions.scrollablePlotArea &&\n                chartOptions.scrollablePlotArea.minHeight))) {\n        this.staticScale = this.options.staticScale;\n    }\n}\n/** @private */\nfunction chartAdjustHeight() {\n    var chart = this;\n    if (chart.redrawTrigger !== 'adjustHeight') {\n        var _loop_1 = function (axis) {\n                var chart_1 = axis.chart,\n            animate = !!chart_1.initiatedScale &&\n                    chart_1.options.animation,\n            staticScale = axis.options.staticScale;\n            if (axis.staticScale && StaticScale_defined(axis.min)) {\n                var height = StaticScale_pick(axis.brokenAxis && axis.brokenAxis.unitLength,\n                    axis.max + axis.tickInterval - axis.min) * staticScale;\n                // Minimum height is 1 x staticScale.\n                height = Math.max(height, staticScale);\n                var diff = height - chart_1.plotHeight;\n                if (!chart_1.scrollablePixelsY && Math.abs(diff) >= 1) {\n                    chart_1.plotHeight = height;\n                    chart_1.redrawTrigger = 'adjustHeight';\n                    chart_1.setSize(void 0, chart_1.chartHeight + diff, animate);\n                }\n                // Make sure clip rects have the right height before initial\n                // animation.\n                axis.series.forEach(function (series) {\n                    var clipRect = series.sharedClipKey &&\n                            chart_1.sharedClips[series.sharedClipKey];\n                    if (clipRect) {\n                        clipRect.attr(chart_1.inverted ? {\n                            width: chart_1.plotHeight\n                        } : {\n                            height: chart_1.plotHeight\n                        });\n                    }\n                });\n            }\n        };\n        for (var _i = 0, _a = (chart.axes || []); _i < _a.length; _i++) {\n            var axis = _a[_i];\n            _loop_1(axis);\n        }\n        this.initiatedScale = true;\n    }\n    this.redrawTrigger = null;\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar StaticScale = {\n    compose: StaticScale_compose\n};\n/* harmony default export */ var Extensions_StaticScale = (StaticScale);\n/* *\n *\n *  API Options\n *\n * */\n/**\n * For vertical axes only. Setting the static scale ensures that each tick unit\n * is translated into a fixed pixel height. For example, setting the static\n * scale to 24 results in each Y axis category taking up 24 pixels, and the\n * height of the chart adjusts. Adding or removing items will make the chart\n * resize.\n *\n * @sample gantt/xrange-series/demo/\n *         X-range series with static scale\n *\n * @type      {number}\n * @default   50\n * @since     6.2.0\n * @product   gantt\n * @apioption yAxis.staticScale\n */\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/masters/modules/static-scale.src.js\n/**\n * @license Highcharts Gantt JS v12.1.2 (2025-01-09)\n * @module highcharts/modules/static-scale\n * @requires highcharts\n *\n * StaticScale\n *\n * (c) 2016-2024 Torstein Honsi, Lars A. V. Cabrera\n *\n * License: www.highcharts.com/license\n */\n\n\n\nvar static_scale_src_G = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\nExtensions_StaticScale.compose(static_scale_src_G.Axis, static_scale_src_G.Chart);\n/* harmony default export */ var static_scale_src = ((/* unused pure expression or super */ null && (Highcharts)));\n\n;// ./code/es5/es-modules/Series/XRange/XRangeSeriesDefaults.js\n/* *\n *\n *  X-range series module\n *\n *  (c) 2010-2024 Torstein Honsi, 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\nvar XRangeSeriesDefaults_correctFloat = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).correctFloat, XRangeSeriesDefaults_isNumber = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isNumber, isObject = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isObject;\n/* *\n *\n *  Constants\n *\n * */\n/**\n * The X-range series displays ranges on the X axis, typically time\n * intervals with a start and end date.\n *\n * @sample {highcharts} highcharts/demo/x-range/\n *         X-range\n * @sample {highcharts} highcharts/css/x-range/\n *         Styled mode X-range\n * @sample {highcharts} highcharts/chart/inverted-xrange/\n *         Inverted X-range\n *\n * @extends      plotOptions.column\n * @since        6.0.0\n * @product      highcharts highstock gantt\n * @excluding    boostThreshold, crisp, cropThreshold, depth, edgeColor,\n *               edgeWidth, findNearestPointBy, getExtremesFromAll,\n *               negativeColor, pointInterval, pointIntervalUnit,\n *               pointPlacement, pointRange, pointStart, softThreshold,\n *               stacking, threshold, data, dataSorting, boostBlending\n * @requires     modules/xrange\n * @optionparent plotOptions.xrange\n */\nvar XRangeSeriesDefaults = {\n    /**\n     * A partial fill for each point, typically used to visualize how much\n     * of a task is performed. The partial fill object can be set either on\n     * series or point level.\n     *\n     * @sample {highcharts} highcharts/demo/x-range\n     *         X-range with partial fill\n     *\n     * @product   highcharts highstock gantt\n     * @apioption plotOptions.xrange.partialFill\n     */\n    /**\n     * The fill color to be used for partial fills. Defaults to a darker\n     * shade of the point color.\n     *\n     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @product   highcharts highstock gantt\n     * @apioption plotOptions.xrange.partialFill.fill\n     */\n    /**\n     * A partial fill for each point, typically used to visualize how much\n     * of a task is performed. See [completed](series.gantt.data.completed).\n     *\n     * @sample gantt/demo/progress-indicator\n     *         Gantt with progress indicator\n     *\n     * @product   gantt\n     * @apioption plotOptions.gantt.partialFill\n     */\n    /**\n     * In an X-range series, this option makes all points of the same Y-axis\n     * category the same color.\n     */\n    colorByPoint: true,\n    dataLabels: {\n        formatter: function () {\n            var amount = this.partialFill;\n            if (isObject(amount)) {\n                amount = amount.amount;\n            }\n            if (XRangeSeriesDefaults_isNumber(amount) && amount > 0) {\n                return XRangeSeriesDefaults_correctFloat(amount * 100) + '%';\n            }\n        },\n        inside: true,\n        verticalAlign: 'middle',\n        style: {\n            whiteSpace: 'nowrap'\n        }\n    },\n    tooltip: {\n        headerFormat: '<span style=\"font-size: 0.8em\">{ucfirst point.x} - {point.x2}</span><br/>',\n        pointFormat: '<span style=\"color:{point.color}\">\\u25CF</span> {series.name}: <b>{point.yCategory}</b><br/>'\n    },\n    borderRadius: 3,\n    pointRange: 0\n};\n/* *\n *\n *  Export Default\n *\n * */\n/* harmony default export */ var XRange_XRangeSeriesDefaults = (XRangeSeriesDefaults);\n/* *\n *\n * API Options\n *\n * */\n/**\n * An `xrange` series. If the [type](#series.xrange.type) option is not\n * specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends   series,plotOptions.xrange\n * @excluding boostThreshold, crisp, cropThreshold, depth, edgeColor, edgeWidth,\n *            findNearestPointBy, getExtremesFromAll, negativeColor,\n *            pointInterval, pointIntervalUnit, pointPlacement, pointRange,\n *            pointStart, softThreshold, stacking, threshold, dataSorting,\n *            boostBlending\n * @product   highcharts highstock gantt\n * @requires  modules/xrange\n * @apioption series.xrange\n */\n/**\n * An array of data points for the series. For the `xrange` series type,\n * points can be given in the following ways:\n *\n * 1. An array of objects with named values. The objects are point configuration\n *    objects as seen below.\n *    ```js\n *    data: [{\n *        x: Date.UTC(2017, 0, 1),\n *        x2: Date.UTC(2017, 0, 3),\n *        name: \"Test\",\n *        y: 0,\n *        color: \"#00FF00\"\n *    }, {\n *        x: Date.UTC(2017, 0, 4),\n *        x2: Date.UTC(2017, 0, 5),\n *        name: \"Deploy\",\n *        y: 1,\n *        color: \"#FF0000\"\n *    }]\n *    ```\n *\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n *         Config objects\n *\n * @declare   Highcharts.XrangePointOptionsObject\n * @type      {Array<*>}\n * @extends   series.line.data\n * @product   highcharts highstock gantt\n * @apioption series.xrange.data\n */\n/**\n * The starting X value of the range point.\n *\n * @sample {highcharts} highcharts/demo/x-range\n *         X-range\n *\n * @type      {number}\n * @product   highcharts highstock gantt\n * @apioption series.xrange.data.x\n */\n/**\n * The ending X value of the range point.\n *\n * @sample {highcharts} highcharts/demo/x-range\n *         X-range\n *\n * @type      {number}\n * @product   highcharts highstock gantt\n * @apioption series.xrange.data.x2\n */\n/**\n * The Y value of the range point.\n *\n * @sample {highcharts} highcharts/demo/x-range\n *         X-range\n *\n * @type      {number}\n * @product   highcharts highstock gantt\n * @apioption series.xrange.data.y\n */\n/**\n * A partial fill for each point, typically used to visualize how much of\n * a task is performed. The partial fill object can be set either on series\n * or point level.\n *\n * @sample {highcharts} highcharts/demo/x-range\n *         X-range with partial fill\n *\n * @declare   Highcharts.XrangePointPartialFillOptionsObject\n * @product   highcharts highstock gantt\n * @apioption series.xrange.data.partialFill\n */\n/**\n * The amount of the X-range point to be filled. Values can be 0-1 and are\n * converted to percentages in the default data label formatter.\n *\n * @type      {number}\n * @product   highcharts highstock gantt\n * @apioption series.xrange.data.partialFill.amount\n */\n/**\n * The fill color to be used for partial fills. Defaults to a darker shade\n * of the point color.\n *\n * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @product   highcharts highstock gantt\n * @apioption series.xrange.data.partialFill.fill\n */\n(''); // Adds doclets above to transpiled file\n\n;// ./code/es5/es-modules/Series/XRange/XRangePoint.js\n/* *\n *\n *  X-range series module\n *\n *  (c) 2010-2024 Torstein Honsi, 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\nvar XRangePoint_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d,\n        b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d,\n        b) { d.__proto__ = b; }) ||\n                function (d,\n        b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n        p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\nvar ColumnPoint = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes.column.prototype.pointClass;\n\nvar XRangePoint_extend = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).extend;\n/* *\n *\n *  Class\n *\n * */\nvar XRangePoint = /** @class */ (function (_super) {\n    XRangePoint_extends(XRangePoint, _super);\n    /**\n     * Extend init to have y default to 0.\n     *\n     * @private\n     */\n    function XRangePoint(series, options) {\n        var _this = _super.call(this,\n            series,\n            options) || this;\n        if (!_this.y) {\n            _this.y = 0;\n        }\n        return _this;\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * Return color of a point based on its category.\n     *\n     * @private\n     * @function getColorByCategory\n     *\n     * @param {object} series\n     *        The series which the point belongs to.\n     *\n     * @param {object} point\n     *        The point to calculate its color for.\n     *\n     * @return {object}\n     *         Returns an object containing the properties color and colorIndex.\n     */\n    XRangePoint.getColorByCategory = function (series, point) {\n        var colors = series.options.colors || series.chart.options.colors,\n            colorCount = colors ?\n                colors.length :\n                series.chart.options.chart.colorCount,\n            colorIndex = point.y % colorCount,\n            color = colors && colors[colorIndex];\n        return {\n            colorIndex: colorIndex,\n            color: color\n        };\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    XRangePoint.prototype.resolveColor = function () {\n        var series = this.series;\n        if (series.options.colorByPoint && !this.options.color) {\n            var colorByPoint = XRangePoint.getColorByCategory(series,\n                this);\n            if (!series.chart.styledMode) {\n                this.color = colorByPoint.color;\n            }\n            if (!this.options.colorIndex) {\n                this.colorIndex = colorByPoint.colorIndex;\n            }\n        }\n        else {\n            this.color = this.options.color || series.color;\n        }\n    };\n    /**\n     * Extend applyOptions to handle time strings for x2\n     *\n     * @private\n     */\n    XRangePoint.prototype.applyOptions = function (options, x) {\n        var _a;\n        _super.prototype.applyOptions.call(this, options, x);\n        this.x2 = this.series.chart.time.parse(this.x2);\n        this.isNull = !((_a = this.isValid) === null || _a === void 0 ? void 0 : _a.call(this));\n        return this;\n    };\n    /**\n     * @private\n     */\n    XRangePoint.prototype.setState = function () {\n        _super.prototype.setState.apply(this, arguments);\n        this.series.drawPoint(this, this.series.getAnimationVerb());\n    };\n    /**\n     * @private\n     */\n    XRangePoint.prototype.isValid = function () {\n        return typeof this.x === 'number' &&\n            typeof this.x2 === 'number';\n    };\n    return XRangePoint;\n}(ColumnPoint));\nXRangePoint_extend(XRangePoint.prototype, {\n    ttBelow: false,\n    tooltipDateKeys: ['x', 'x2']\n});\n/* *\n *\n *  Class Namespace\n *\n * */\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var XRange_XRangePoint = (XRangePoint);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * The ending X value of the range point.\n * @name Highcharts.Point#x2\n * @type {number|undefined}\n * @requires modules/xrange\n */\n/**\n * @interface Highcharts.PointOptionsObject in parts/Point.ts\n */ /**\n* The ending X value of the range point.\n* @name Highcharts.PointOptionsObject#x2\n* @type {number|undefined}\n* @requires modules/xrange\n*/\n(''); // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Series/XRange/XRangeSeries.js\n/* *\n *\n *  X-range series module\n *\n *  (c) 2010-2024 Torstein Honsi, 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\nvar XRangeSeries_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d,\n        b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d,\n        b) { d.__proto__ = b; }) ||\n                function (d,\n        b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n        p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\nvar XRangeSeries_composed = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).composed, noop = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).noop;\n\nvar XRangeSeries_color = (highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default()).parse;\n\nvar ColumnSeries = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes.column;\n\nvar XRangeSeries_addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, XRangeSeries_clamp = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).clamp, XRangeSeries_crisp = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).crisp, XRangeSeries_defined = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defined, XRangeSeries_extend = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).extend, XRangeSeries_find = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).find, XRangeSeries_isNumber = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isNumber, XRangeSeries_isObject = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isObject, XRangeSeries_merge = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).merge, XRangeSeries_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick, XRangeSeries_pushUnique = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pushUnique, XRangeSeries_relativeLength = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).relativeLength;\n\n\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Max x2 should be considered in xAxis extremes\n * @private\n */\nfunction onAxisAfterGetSeriesExtremes() {\n    var dataMax,\n        modMax;\n    if (this.isXAxis) {\n        dataMax = XRangeSeries_pick(this.dataMax, -Number.MAX_VALUE);\n        for (var _i = 0, _a = this.series; _i < _a.length; _i++) {\n            var series = _a[_i];\n            var column = (series.dataTable.getColumn('x2',\n                true) ||\n                    series.dataTable.getColumn('end',\n                true));\n            if (column) {\n                for (var _b = 0, _c = column; _b < _c.length; _b++) {\n                    var val = _c[_b];\n                    if (XRangeSeries_isNumber(val) && val > dataMax) {\n                        dataMax = val;\n                        modMax = true;\n                    }\n                }\n            }\n        }\n        if (modMax) {\n            this.dataMax = dataMax;\n        }\n    }\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * @private\n * @class\n * @name Highcharts.seriesTypes.xrange\n *\n * @augments Highcharts.Series\n */\nvar XRangeSeries = /** @class */ (function (_super) {\n    XRangeSeries_extends(XRangeSeries, _super);\n    function XRangeSeries() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    XRangeSeries.compose = function (AxisClass) {\n        if (XRangeSeries_pushUnique(XRangeSeries_composed, 'Series.XRange')) {\n            XRangeSeries_addEvent(AxisClass, 'afterGetSeriesExtremes', onAxisAfterGetSeriesExtremes);\n        }\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    XRangeSeries.prototype.init = function () {\n        _super.prototype.init.apply(this, arguments);\n        this.options.stacking = void 0; // #13161\n    };\n    /**\n     * Borrow the column series metrics, but with swapped axes. This gives\n     * free access to features like groupPadding, grouping, pointWidth etc.\n     * @private\n     */\n    XRangeSeries.prototype.getColumnMetrics = function () {\n        var _this = this;\n        var swapAxes = function () {\n                for (var _i = 0,\n            _a = _this.chart.series; _i < _a.length; _i++) {\n                    var series = _a[_i];\n                var xAxis = series.xAxis;\n                series.xAxis = series.yAxis;\n                series.yAxis = xAxis;\n            }\n        };\n        swapAxes();\n        var metrics = _super.prototype.getColumnMetrics.call(this);\n        swapAxes();\n        return metrics;\n    };\n    /**\n     * Override cropData to show a point where x or x2 is outside visible range,\n     * but one of them is inside.\n     * @private\n     */\n    XRangeSeries.prototype.cropData = function (table, min, max) {\n        // Replace xData with x2Data to find the appropriate cropStart\n        var xData = table.getColumn('x') || [], x2Data = table.getColumn('x2');\n        table.setColumn('x', x2Data, void 0, { silent: true });\n        var croppedData = _super.prototype.cropData.call(this,\n            table,\n            min,\n            max);\n        // Re-insert the cropped xData\n        table.setColumn('x', xData.slice(croppedData.start, croppedData.end), void 0, { silent: true });\n        return croppedData;\n    };\n    /**\n     * Finds the index of an existing point that matches the given point\n     * options.\n     *\n     * @private\n     *\n     * @param {Highcharts.XRangePointOptions} options\n     *        The options of the point.\n     *\n     * @return {number|undefined}\n     *         Returns index of a matching point, or undefined if no match is\n     *         found.\n     */\n    XRangeSeries.prototype.findPointIndex = function (options) {\n        var _a = this,\n            cropStart = _a.cropStart,\n            points = _a.points;\n        var id = options.id;\n        var pointIndex;\n        if (id) {\n            var point = XRangeSeries_find(points,\n                function (point) { return point.id === id; });\n            pointIndex = point ? point.index : void 0;\n        }\n        if (typeof pointIndex === 'undefined') {\n            var point = XRangeSeries_find(points,\n                function (point) { return (point.x === options.x &&\n                    point.x2 === options.x2 &&\n                    !point.touched); });\n            pointIndex = point ? point.index : void 0;\n        }\n        // Reduce pointIndex if data is cropped\n        if (this.cropped &&\n            XRangeSeries_isNumber(pointIndex) &&\n            XRangeSeries_isNumber(cropStart) &&\n            pointIndex >= cropStart) {\n            pointIndex -= cropStart;\n        }\n        return pointIndex;\n    };\n    XRangeSeries.prototype.alignDataLabel = function (point) {\n        var _a;\n        var oldPlotX = point.plotX;\n        point.plotX = XRangeSeries_pick(point.dlBox && point.dlBox.centerX, point.plotX);\n        if (point.dataLabel && ((_a = point.shapeArgs) === null || _a === void 0 ? void 0 : _a.width)) {\n            point.dataLabel.css({\n                width: \"\" + point.shapeArgs.width + \"px\"\n            });\n        }\n        _super.prototype.alignDataLabel.apply(this, arguments);\n        point.plotX = oldPlotX;\n    };\n    /**\n     * @private\n     */\n    XRangeSeries.prototype.translatePoint = function (point) {\n        var _a,\n            _b;\n        var xAxis = this.xAxis,\n            yAxis = this.yAxis,\n            metrics = this.columnMetrics,\n            options = this.options,\n            minPointLength = options.minPointLength || 0,\n            oldColWidth = (point.shapeArgs && point.shapeArgs.width || 0) / 2,\n            seriesXOffset = this.pointXOffset = metrics.offset,\n            posX = XRangeSeries_pick(point.x2,\n            point.x + (point.len || 0)),\n            borderRadius = options.borderRadius,\n            plotTop = this.chart.plotTop,\n            plotLeft = this.chart.plotLeft;\n        var plotX = point.plotX,\n            plotX2 = xAxis.translate(posX, 0, 0, 0, 1);\n        var length = Math.abs(plotX2 - plotX),\n            inverted = this.chart.inverted,\n            borderWidth = XRangeSeries_pick(options.borderWidth, 1);\n        var widthDifference,\n            partialFill,\n            yOffset = metrics.offset,\n            pointHeight = Math.round(metrics.width),\n            dlLeft,\n            dlRight,\n            dlWidth,\n            clipRectWidth;\n        if (minPointLength) {\n            widthDifference = minPointLength - length;\n            if (widthDifference < 0) {\n                widthDifference = 0;\n            }\n            plotX -= widthDifference / 2;\n            plotX2 += widthDifference / 2;\n        }\n        plotX = Math.max(plotX, -10);\n        plotX2 = XRangeSeries_clamp(plotX2, -10, xAxis.len + 10);\n        // Handle individual pointWidth\n        if (XRangeSeries_defined(point.options.pointWidth)) {\n            yOffset -= ((Math.ceil(point.options.pointWidth) - pointHeight) / 2);\n            pointHeight = Math.ceil(point.options.pointWidth);\n        }\n        // Apply pointPlacement to the Y axis\n        if (options.pointPlacement &&\n            XRangeSeries_isNumber(point.plotY) &&\n            yAxis.categories) {\n            point.plotY = yAxis.translate(point.y, 0, 1, 0, 1, options.pointPlacement);\n        }\n        var x = XRangeSeries_crisp(Math.min(plotX,\n            plotX2),\n            borderWidth),\n            x2 = XRangeSeries_crisp(Math.max(plotX,\n            plotX2),\n            borderWidth),\n            width = x2 - x;\n        var r = Math.min(XRangeSeries_relativeLength((typeof borderRadius === 'object' ?\n                borderRadius.radius :\n                borderRadius || 0),\n            pointHeight),\n            Math.min(width,\n            pointHeight) / 2);\n        var shapeArgs = {\n                x: x,\n                y: XRangeSeries_crisp((point.plotY || 0) + yOffset,\n            borderWidth),\n                width: width,\n                height: pointHeight,\n                r: r\n            };\n        point.shapeArgs = shapeArgs;\n        // Move tooltip to default position\n        if (!inverted) {\n            point.tooltipPos[0] -= oldColWidth +\n                seriesXOffset -\n                shapeArgs.width / 2;\n        }\n        else {\n            point.tooltipPos[1] += seriesXOffset +\n                oldColWidth;\n        }\n        // Align data labels inside the shape and inside the plot area\n        dlLeft = shapeArgs.x;\n        dlRight = dlLeft + shapeArgs.width;\n        if (dlLeft < 0 || dlRight > xAxis.len) {\n            dlLeft = XRangeSeries_clamp(dlLeft, 0, xAxis.len);\n            dlRight = XRangeSeries_clamp(dlRight, 0, xAxis.len);\n            dlWidth = dlRight - dlLeft;\n            point.dlBox = XRangeSeries_merge(shapeArgs, {\n                x: dlLeft,\n                width: dlRight - dlLeft,\n                centerX: dlWidth ? dlWidth / 2 : null\n            });\n        }\n        else {\n            point.dlBox = null;\n        }\n        // Tooltip position\n        var tooltipPos = point.tooltipPos;\n        var xIndex = !inverted ? 0 : 1;\n        var yIndex = !inverted ? 1 : 0;\n        var tooltipYOffset = (this.columnMetrics ?\n                this.columnMetrics.offset :\n                -metrics.width / 2);\n        // Centering tooltip position (#14147)\n        if (inverted) {\n            tooltipPos[xIndex] += shapeArgs.width / 2;\n        }\n        else {\n            tooltipPos[xIndex] = XRangeSeries_clamp(tooltipPos[xIndex] +\n                (xAxis.reversed ? -1 : 0) * shapeArgs.width, xAxis.left - plotLeft, xAxis.left + xAxis.len - plotLeft - 1);\n        }\n        tooltipPos[yIndex] = XRangeSeries_clamp(tooltipPos[yIndex] + ((inverted ? -1 : 1) * tooltipYOffset), yAxis.top - plotTop, yAxis.top + yAxis.len - plotTop - 1);\n        // Add a partShapeArgs to the point, based on the shapeArgs property\n        partialFill = point.partialFill;\n        if (partialFill) {\n            // Get the partial fill amount\n            if (XRangeSeries_isObject(partialFill)) {\n                partialFill = partialFill.amount;\n            }\n            // If it was not a number, assume 0\n            if (!XRangeSeries_isNumber(partialFill)) {\n                partialFill = 0;\n            }\n            point.partShapeArgs = XRangeSeries_merge(shapeArgs);\n            clipRectWidth = Math.max(Math.round(length * partialFill + point.plotX -\n                plotX), 0);\n            point.clipRectArgs = {\n                x: xAxis.reversed ? // #10717\n                    shapeArgs.x + length - clipRectWidth :\n                    shapeArgs.x,\n                y: shapeArgs.y,\n                width: clipRectWidth,\n                height: shapeArgs.height\n            };\n        }\n        // Add formatting keys for tooltip and data labels. Use 'category' as\n        // 'key' to ensure tooltip datetime formatting. Use 'name' only when\n        // 'category' is undefined.\n        point.key = point.category || point.name;\n        point.yCategory = (_a = yAxis.categories) === null || _a === void 0 ? void 0 : _a[(_b = point.y) !== null && _b !== void 0 ? _b : -1];\n    };\n    /**\n     * @private\n     */\n    XRangeSeries.prototype.translate = function () {\n        _super.prototype.translate.apply(this, arguments);\n        for (var _i = 0, _a = this.points; _i < _a.length; _i++) {\n            var point = _a[_i];\n            this.translatePoint(point);\n        }\n    };\n    /**\n     * Draws a single point in the series. Needed for partial fill.\n     *\n     * This override turns point.graphic into a group containing the\n     * original graphic and an overlay displaying the partial fill.\n     *\n     * @private\n     *\n     * @param {Highcharts.Point} point\n     *        An instance of Point in the series.\n     *\n     * @param {\"animate\"|\"attr\"} verb\n     *        'animate' (animates changes) or 'attr' (sets options)\n     */\n    XRangeSeries.prototype.drawPoint = function (point, verb) {\n        var seriesOpts = this.options,\n            renderer = this.chart.renderer,\n            type = point.shapeType,\n            shapeArgs = point.shapeArgs,\n            partShapeArgs = point.partShapeArgs,\n            clipRectArgs = point.clipRectArgs,\n            pointState = point.state,\n            stateOpts = (seriesOpts.states[pointState || 'normal'] ||\n                {}),\n            pointStateVerb = typeof pointState === 'undefined' ?\n                'attr' : verb,\n            pointAttr = this.pointAttribs(point,\n            pointState),\n            animation = XRangeSeries_pick(this.chart.options.chart.animation,\n            stateOpts.animation);\n        var graphic = point.graphic,\n            pfOptions = point.partialFill;\n        if (!point.isNull && point.visible !== false) {\n            // Original graphic\n            if (graphic) { // Update\n                graphic.rect[verb](shapeArgs);\n            }\n            else {\n                point.graphic = graphic = renderer.g('point')\n                    .addClass(point.getClassName())\n                    .add(point.group || this.group);\n                graphic.rect = renderer[type](XRangeSeries_merge(shapeArgs))\n                    .addClass(point.getClassName())\n                    .addClass('highcharts-partfill-original')\n                    .add(graphic);\n            }\n            // Partial fill graphic\n            if (partShapeArgs) {\n                if (graphic.partRect) {\n                    graphic.partRect[verb](XRangeSeries_merge(partShapeArgs));\n                    graphic.partialClipRect[verb](XRangeSeries_merge(clipRectArgs));\n                }\n                else {\n                    graphic.partialClipRect = renderer.clipRect(clipRectArgs.x, clipRectArgs.y, clipRectArgs.width, clipRectArgs.height);\n                    graphic.partRect =\n                        renderer[type](partShapeArgs)\n                            .addClass('highcharts-partfill-overlay')\n                            .add(graphic)\n                            .clip(graphic.partialClipRect);\n                }\n            }\n            // Presentational\n            if (!this.chart.styledMode) {\n                graphic\n                    .rect[verb](pointAttr, animation)\n                    .shadow(seriesOpts.shadow);\n                if (partShapeArgs) {\n                    // Ensure pfOptions is an object\n                    if (!XRangeSeries_isObject(pfOptions)) {\n                        pfOptions = {};\n                    }\n                    if (XRangeSeries_isObject(seriesOpts.partialFill)) {\n                        pfOptions = XRangeSeries_merge(seriesOpts.partialFill, pfOptions);\n                    }\n                    var fill = (pfOptions.fill ||\n                            XRangeSeries_color(pointAttr.fill).brighten(-0.3).get() ||\n                            XRangeSeries_color(point.color || this.color)\n                                .brighten(-0.3).get());\n                    pointAttr.fill = fill;\n                    graphic\n                        .partRect[pointStateVerb](pointAttr, animation)\n                        .shadow(seriesOpts.shadow);\n                }\n            }\n        }\n        else if (graphic) {\n            point.graphic = graphic.destroy(); // #1269\n        }\n    };\n    /**\n     * @private\n     */\n    XRangeSeries.prototype.drawPoints = function () {\n        var verb = this.getAnimationVerb();\n        // Draw the columns\n        for (var _i = 0, _a = this.points; _i < _a.length; _i++) {\n            var point = _a[_i];\n            this.drawPoint(point, verb);\n        }\n    };\n    /**\n     * Returns \"animate\", or \"attr\" if the number of points is above the\n     * animation limit.\n     *\n     * @private\n     */\n    XRangeSeries.prototype.getAnimationVerb = function () {\n        return (this.chart.pointCount < (this.options.animationLimit || 250) ?\n            'animate' :\n            'attr');\n    };\n    /**\n     * @private\n     */\n    XRangeSeries.prototype.isPointInside = function (point) {\n        var shapeArgs = point.shapeArgs,\n            plotX = point.plotX,\n            plotY = point.plotY;\n        if (!shapeArgs) {\n            return _super.prototype.isPointInside.apply(this, arguments);\n        }\n        var isInside = typeof plotX !== 'undefined' &&\n                typeof plotY !== 'undefined' &&\n                plotY >= 0 &&\n                plotY <= this.yAxis.len &&\n                (shapeArgs.x || 0) + (shapeArgs.width || 0) >= 0 &&\n                plotX <= this.xAxis.len;\n        return isInside;\n    };\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    XRangeSeries.defaultOptions = XRangeSeries_merge(ColumnSeries.defaultOptions, XRange_XRangeSeriesDefaults);\n    return XRangeSeries;\n}(ColumnSeries));\nXRangeSeries_extend(XRangeSeries.prototype, {\n    pointClass: XRange_XRangePoint,\n    pointArrayMap: ['x2', 'y'],\n    getExtremesFromAll: true,\n    keysAffectYAxis: ['y'],\n    parallelArrays: ['x', 'x2', 'y'],\n    requireSorting: false,\n    type: 'xrange',\n    animate: (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).series.prototype.animate,\n    autoIncrement: noop,\n    buildKDTree: noop\n});\nhighcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default().registerSeriesType('xrange', XRangeSeries);\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var XRange_XRangeSeries = (XRangeSeries);\n\n;// ./code/es5/es-modules/masters/modules/xrange.src.js\n/**\n * @license Highcharts JS v12.1.2 (2025-01-09)\n * @module highcharts/modules/xrange\n * @requires highcharts\n *\n * X-range series\n *\n * (c) 2010-2024 Torstein Honsi, Lars A. V. Cabrera\n *\n * License: www.highcharts.com/license\n */\n\n\n\nvar xrange_src_G = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\nXRange_XRangeSeries.compose(xrange_src_G.Axis);\n/* harmony default export */ var xrange_src = ((/* unused pure expression or super */ null && (Highcharts)));\n\n;// ./code/es5/es-modules/Series/Gantt/GanttPoint.js\n/* *\n *\n *  (c) 2016-2024 Highsoft AS\n *\n *  Author: 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\nvar GanttPoint_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d,\n        b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d,\n        b) { d.__proto__ = b; }) ||\n                function (d,\n        b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n        p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\nvar GanttPoint_XRangePoint = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes.xrange.prototype.pointClass;\n/* *\n *\n *  Class\n *\n * */\nvar GanttPoint = /** @class */ (function (_super) {\n    GanttPoint_extends(GanttPoint, _super);\n    function GanttPoint() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    GanttPoint.setGanttPointAliases = function (options, chart) {\n        var _a,\n            _b,\n            _c;\n        options.x = options.start = chart.time.parse((_a = options.start) !== null && _a !== void 0 ? _a : options.x);\n        options.x2 = options.end = chart.time.parse((_b = options.end) !== null && _b !== void 0 ? _b : options.x2);\n        options.partialFill = options.completed =\n            (_c = options.completed) !== null && _c !== void 0 ? _c : options.partialFill;\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Applies the options containing the x and y data and possible some\n     * extra properties. This is called on point init or from point.update.\n     *\n     * @private\n     * @function Highcharts.Point#applyOptions\n     *\n     * @param {Object} options\n     *        The point options\n     *\n     * @param {number} x\n     *        The x value\n     *\n     * @return {Highcharts.Point}\n     *         The Point instance\n     */\n    GanttPoint.prototype.applyOptions = function (options, x) {\n        var _a;\n        var ganttPoint = _super.prototype.applyOptions.call(this,\n            options,\n            x);\n        GanttPoint.setGanttPointAliases(ganttPoint, ganttPoint.series.chart);\n        this.isNull = !((_a = this.isValid) === null || _a === void 0 ? void 0 : _a.call(this));\n        return ganttPoint;\n    };\n    GanttPoint.prototype.isValid = function () {\n        return ((typeof this.start === 'number' ||\n            typeof this.x === 'number') &&\n            (typeof this.end === 'number' ||\n                typeof this.x2 === 'number' ||\n                this.milestone));\n    };\n    return GanttPoint;\n}(GanttPoint_XRangePoint));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Gantt_GanttPoint = (GanttPoint);\n\n;// ./code/es5/es-modules/Series/Gantt/GanttSeriesDefaults.js\n/* *\n *\n *  (c) 2016-2024 Highsoft AS\n *\n *  Author: 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\nvar GanttSeriesDefaults_isNumber = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isNumber;\n/* *\n *\n *  API Options\n *\n * */\n/**\n * A `gantt` series. If the [type](#series.gantt.type) option is not specified,\n * it is inherited from [chart.type](#chart.type).\n *\n * @extends      plotOptions.xrange\n * @product      gantt\n * @requires     highcharts-gantt\n * @optionparent plotOptions.gantt\n */\nvar GanttSeriesDefaults = {\n    // Options - default options merged with parent\n    grouping: false,\n    dataLabels: {\n        enabled: true\n    },\n    tooltip: {\n        headerFormat: '<span style=\"font-size: 0.8em\">{series.name}</span><br/>',\n        pointFormat: null,\n        pointFormatter: function () {\n            var point = this,\n                series = point.series,\n                xAxis = series.xAxis,\n                formats = series.tooltipOptions.dateTimeLabelFormats,\n                startOfWeek = xAxis.options.startOfWeek,\n                ttOptions = series.tooltipOptions,\n                milestone = point.options.milestone;\n            var format = ttOptions.xDateFormat,\n                retVal = '<b>' + (point.name || point.yCategory) + '</b>';\n            if (ttOptions.pointFormat) {\n                return point.tooltipFormatter(ttOptions.pointFormat);\n            }\n            if (!format && GanttSeriesDefaults_isNumber(point.start)) {\n                format = series.chart.time.getDateFormat(xAxis.closestPointRange, point.start, startOfWeek, formats || {});\n            }\n            var start = series.chart.time.dateFormat(format,\n                point.start),\n                end = series.chart.time.dateFormat(format,\n                point.end);\n            retVal += '<br/>';\n            if (!milestone) {\n                retVal += 'Start: ' + start + '<br/>';\n                retVal += 'End: ' + end + '<br/>';\n            }\n            else {\n                retVal += start + '<br/>';\n            }\n            return retVal;\n        }\n    },\n    connectors: {\n        type: 'simpleConnect',\n        /**\n         * @declare Highcharts.ConnectorsAnimationOptionsObject\n         */\n        animation: {\n            reversed: true // Dependencies go from child to parent\n        },\n        radius: 0,\n        startMarker: {\n            enabled: true,\n            symbol: 'arrow-filled',\n            radius: 4,\n            fill: '#fa0',\n            align: 'left'\n        },\n        endMarker: {\n            enabled: false, // Only show arrow on the dependent task\n            align: 'right'\n        }\n    }\n};\n/**\n * A `gantt` series.\n *\n * @extends   series,plotOptions.gantt\n * @excluding boostThreshold, dashStyle, findNearestPointBy,\n *            getExtremesFromAll, marker, negativeColor, pointInterval,\n *            pointIntervalUnit, pointPlacement, pointStart\n * @product   gantt\n * @requires  highcharts-gantt\n * @apioption series.gantt\n */\n/**\n * Data for a Gantt series.\n *\n * @declare   Highcharts.GanttPointOptionsObject\n * @type      {Array<*>}\n * @extends   series.xrange.data\n * @excluding className, connect, dataLabels, events,\n *            partialFill, selected, x, x2\n * @product   gantt\n * @apioption series.gantt.data\n */\n/**\n * Whether the grid node belonging to this point should start as collapsed. Used\n * in axes of type treegrid.\n *\n * @sample {gantt} gantt/treegrid-axis/collapsed/\n *         Start as collapsed\n *\n * @type      {boolean}\n * @default   false\n * @product   gantt\n * @apioption series.gantt.data.collapsed\n */\n/**\n * The start time of a task. May be a timestamp or a date string.\n *\n * @type      {number|string}\n * @product   gantt\n * @apioption series.gantt.data.start\n */\n/**\n * The end time of a task. May be a timestamp or a date string.\n *\n * @type      {number|string}\n * @product   gantt\n * @apioption series.gantt.data.end\n */\n/**\n * The Y value of a task.\n *\n * @type      {number}\n * @product   gantt\n * @apioption series.gantt.data.y\n */\n/**\n * The name of a task. If a `treegrid` y-axis is used (default in Gantt charts),\n * this will be picked up automatically, and used to calculate the y-value.\n *\n * @type      {string}\n * @product   gantt\n * @apioption series.gantt.data.name\n */\n/**\n * Progress indicator, how much of the task completed. If it is a number, the\n * `fill` will be applied automatically.\n *\n * @sample {gantt} gantt/demo/progress-indicator\n *         Progress indicator\n *\n * @type      {number|*}\n * @extends   series.xrange.data.partialFill\n * @product   gantt\n * @apioption series.gantt.data.completed\n */\n/**\n * The amount of the progress indicator, ranging from 0 (not started) to 1\n * (finished).\n *\n * @type      {number}\n * @default   0\n * @apioption series.gantt.data.completed.amount\n */\n/**\n * The fill of the progress indicator. Defaults to a darkened variety of the\n * main color.\n *\n * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @apioption series.gantt.data.completed.fill\n */\n/**\n * The ID of the point (task) that this point depends on in Gantt charts.\n * Aliases [connect](series.xrange.data.connect). Can also be an object,\n * specifying further connecting [options](series.gantt.connectors) between the\n * points. Multiple connections can be specified by providing an array.\n *\n * @sample gantt/demo/project-management\n *         Dependencies\n * @sample gantt/pathfinder/demo\n *         Different connection types\n *\n * @type      {string|Array<string|*>|*}\n * @extends   series.xrange.data.connect\n * @since     6.2.0\n * @product   gantt\n * @apioption series.gantt.data.dependency\n */\n/**\n * Whether this point is a milestone. If so, only the `start` option is handled,\n * while `end` is ignored.\n *\n * @sample gantt/gantt/milestones\n *         Milestones\n *\n * @type      {boolean}\n * @since     6.2.0\n * @product   gantt\n * @apioption series.gantt.data.milestone\n */\n/**\n * The ID of the parent point (task) of this point in Gantt charts.\n *\n * @sample gantt/demo/subtasks\n *         Gantt chart with subtasks\n *\n * @type      {string}\n * @since     6.2.0\n * @product   gantt\n * @apioption series.gantt.data.parent\n */\n/**\n * @excluding afterAnimate\n * @apioption series.gantt.events\n */\n''; // Detachs doclets above\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Gantt_GanttSeriesDefaults = (GanttSeriesDefaults);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"StackItem\"],\"commonjs\":[\"highcharts\",\"StackItem\"],\"commonjs2\":[\"highcharts\",\"StackItem\"],\"root\":[\"Highcharts\",\"StackItem\"]}\nvar highcharts_StackItem_commonjs_highcharts_StackItem_commonjs2_highcharts_StackItem_root_Highcharts_StackItem_ = __webpack_require__(184);\nvar highcharts_StackItem_commonjs_highcharts_StackItem_commonjs2_highcharts_StackItem_root_Highcharts_StackItem_default = /*#__PURE__*/__webpack_require__.n(highcharts_StackItem_commonjs_highcharts_StackItem_commonjs2_highcharts_StackItem_root_Highcharts_StackItem_);\n;// ./code/es5/es-modules/Core/Axis/BrokenAxis.js\n/* *\n *\n *  (c) 2009-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar BrokenAxis_addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, BrokenAxis_find = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).find, BrokenAxis_fireEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).fireEvent, BrokenAxis_isArray = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isArray, BrokenAxis_isNumber = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isNumber, BrokenAxis_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick;\n/* *\n *\n *  Composition\n *\n * */\n/**\n * Axis with support of broken data rows.\n * @private\n */\nvar BrokenAxis;\n(function (BrokenAxis) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Adds support for broken axes.\n     * @private\n     */\n    function compose(AxisClass, SeriesClass) {\n        if (!AxisClass.keepProps.includes('brokenAxis')) {\n            AxisClass.keepProps.push('brokenAxis');\n            BrokenAxis_addEvent(AxisClass, 'init', onAxisInit);\n            BrokenAxis_addEvent(AxisClass, 'afterInit', onAxisAfterInit);\n            BrokenAxis_addEvent(AxisClass, 'afterSetTickPositions', onAxisAfterSetTickPositions);\n            BrokenAxis_addEvent(AxisClass, 'afterSetOptions', onAxisAfterSetOptions);\n            var seriesProto = SeriesClass.prototype;\n            seriesProto.drawBreaks = seriesDrawBreaks;\n            seriesProto.gappedPath = seriesGappedPath;\n            BrokenAxis_addEvent(SeriesClass, 'afterGeneratePoints', onSeriesAfterGeneratePoints);\n            BrokenAxis_addEvent(SeriesClass, 'afterRender', onSeriesAfterRender);\n        }\n        return AxisClass;\n    }\n    BrokenAxis.compose = compose;\n    /**\n     * @private\n     */\n    function onAxisAfterInit() {\n        if (typeof this.brokenAxis !== 'undefined') {\n            this.brokenAxis.setBreaks(this.options.breaks, false);\n        }\n    }\n    /**\n     * Force Axis to be not-ordinal when breaks are defined.\n     * @private\n     */\n    function onAxisAfterSetOptions() {\n        var _a;\n        var axis = this;\n        if ((_a = axis.brokenAxis) === null || _a === void 0 ? void 0 : _a.hasBreaks) {\n            axis.options.ordinal = false;\n        }\n    }\n    /**\n     * @private\n     */\n    function onAxisAfterSetTickPositions() {\n        var axis = this,\n            brokenAxis = axis.brokenAxis;\n        if (brokenAxis === null || brokenAxis === void 0 ? void 0 : brokenAxis.hasBreaks) {\n            var tickPositions = axis.tickPositions,\n                info = axis.tickPositions.info,\n                newPositions = [];\n            for (var i = 0; i < tickPositions.length; i++) {\n                if (!brokenAxis.isInAnyBreak(tickPositions[i])) {\n                    newPositions.push(tickPositions[i]);\n                }\n            }\n            axis.tickPositions = newPositions;\n            axis.tickPositions.info = info;\n        }\n    }\n    /**\n     * @private\n     */\n    function onAxisInit() {\n        var axis = this;\n        if (!axis.brokenAxis) {\n            axis.brokenAxis = new Additions(axis);\n        }\n    }\n    /**\n     * @private\n     */\n    function onSeriesAfterGeneratePoints() {\n        var _a,\n            _b;\n        var _c = this,\n            isDirty = _c.isDirty,\n            connectNulls = _c.options.connectNulls,\n            points = _c.points,\n            xAxis = _c.xAxis,\n            yAxis = _c.yAxis;\n        // Set, or reset visibility of the points. Axis.setBreaks marks\n        // the series as isDirty\n        if (isDirty) {\n            var i = points.length;\n            while (i--) {\n                var point = points[i];\n                // Respect nulls inside the break (#4275)\n                var nullGap = point.y === null && connectNulls === false;\n                var isPointInBreak = (!nullGap && (((_a = xAxis === null || xAxis === void 0 ? void 0 : xAxis.brokenAxis) === null || _a === void 0 ? void 0 : _a.isInAnyBreak(point.x,\n                    true)) ||\n                        ((_b = yAxis === null || yAxis === void 0 ? void 0 : yAxis.brokenAxis) === null || _b === void 0 ? void 0 : _b.isInAnyBreak(point.y,\n                    true))));\n                // Set point.visible if in any break.\n                // If not in break, reset visible to original value.\n                point.visible = isPointInBreak ?\n                    false :\n                    point.options.visible !== false;\n            }\n        }\n    }\n    /**\n     * @private\n     */\n    function onSeriesAfterRender() {\n        this.drawBreaks(this.xAxis, ['x']);\n        this.drawBreaks(this.yAxis, BrokenAxis_pick(this.pointArrayMap, ['y']));\n    }\n    /**\n     * @private\n     */\n    function seriesDrawBreaks(axis, keys) {\n        var _a;\n        var series = this,\n            points = series.points;\n        var breaks,\n            threshold,\n            y;\n        if ((_a = axis === null || axis === void 0 ? void 0 : axis.brokenAxis) === null || _a === void 0 ? void 0 : _a.hasBreaks) {\n            var brokenAxis_1 = axis.brokenAxis;\n            keys.forEach(function (key) {\n                var _a,\n                    _b;\n                breaks = (brokenAxis_1 === null || brokenAxis_1 === void 0 ? void 0 : brokenAxis_1.breakArray) || [];\n                threshold = axis.isXAxis ?\n                    axis.min :\n                    BrokenAxis_pick(series.options.threshold, axis.min);\n                // Array of breaks that have been \"zoomed-out\" which means that\n                // they were shown previously, but now after zoom, they are not\n                // (#19885).\n                var breaksOutOfRange = (_b = (_a = axis === null || axis === void 0 ? void 0 : axis.options) === null || _a === void 0 ? void 0 : _a.breaks) === null || _b === void 0 ? void 0 : _b.filter(function (brk) {\n                        var isOut = true;\n                    // Iterate to see if \"brk\" is in axis range\n                    for (var i = 0; i < breaks.length; i++) {\n                        var otherBreak = breaks[i];\n                        if (otherBreak.from === brk.from &&\n                            otherBreak.to === brk.to) {\n                            isOut = false;\n                            break;\n                        }\n                    }\n                    return isOut;\n                });\n                points.forEach(function (point) {\n                    y = BrokenAxis_pick(point['stack' + key.toUpperCase()], point[key]);\n                    breaks.forEach(function (brk) {\n                        if (BrokenAxis_isNumber(threshold) && BrokenAxis_isNumber(y)) {\n                            var eventName = '';\n                            if ((threshold < brk.from && y > brk.to) ||\n                                (threshold > brk.from && y < brk.from)) {\n                                eventName = 'pointBreak';\n                            }\n                            else if ((threshold < brk.from &&\n                                y > brk.from &&\n                                y < brk.to) || (threshold > brk.from &&\n                                y > brk.to &&\n                                y < brk.from)) {\n                                eventName = 'pointInBreak';\n                            }\n                            if (eventName) {\n                                BrokenAxis_fireEvent(axis, eventName, { point: point, brk: brk });\n                            }\n                        }\n                    });\n                    breaksOutOfRange === null || breaksOutOfRange === void 0 ? void 0 : breaksOutOfRange.forEach(function (brk) {\n                        BrokenAxis_fireEvent(axis, 'pointOutsideOfBreak', { point: point, brk: brk });\n                    });\n                });\n            });\n        }\n    }\n    /**\n     * Extend getGraphPath by identifying gaps in the data so that we\n     * can draw a gap in the line or area. This was moved from ordinal\n     * axis module to broken axis module as of #5045.\n     *\n     * @private\n     * @function Highcharts.Series#gappedPath\n     *\n     * @return {Highcharts.SVGPathArray}\n     * Gapped path\n     */\n    function seriesGappedPath() {\n        var currentDataGrouping = this.currentDataGrouping,\n            groupingSize = currentDataGrouping === null || currentDataGrouping === void 0 ? void 0 : currentDataGrouping.gapSize,\n            points = this.points.slice(),\n            yAxis = this.yAxis;\n        var gapSize = this.options.gapSize,\n            i = points.length - 1,\n            stack;\n        /**\n         * Defines when to display a gap in the graph, together with the\n         * [gapUnit](plotOptions.series.gapUnit) option.\n         *\n         * In case when `dataGrouping` is enabled, points can be grouped\n         * into a larger time span. This can make the grouped points to\n         * have a greater distance than the absolute value of `gapSize`\n         * property, which will result in disappearing graph completely.\n         * To prevent this situation the mentioned distance between\n         * grouped points is used instead of previously defined\n         * `gapSize`.\n         *\n         * In practice, this option is most often used to visualize gaps\n         * in time series. In a stock chart, intraday data is available\n         * for daytime hours, while gaps will appear in nights and\n         * weekends.\n         *\n         * @see [gapUnit](plotOptions.series.gapUnit)\n         * @see [xAxis.breaks](#xAxis.breaks)\n         *\n         * @sample {highstock} stock/plotoptions/series-gapsize/\n         * Setting the gap size to 2 introduces gaps for weekends in\n         * daily datasets.\n         *\n         * @type      {number}\n         * @default   0\n         * @product   highstock\n         * @requires  modules/broken-axis\n         * @apioption plotOptions.series.gapSize\n         */\n        /**\n         * Together with [gapSize](plotOptions.series.gapSize), this\n         * option defines where to draw gaps in the graph.\n         *\n         * When the `gapUnit` is `\"relative\"` (default), a gap size of 5\n         * means that if the distance between two points is greater than\n         * 5 times that of the two closest points, the graph will be\n         * broken.\n         *\n         * When the `gapUnit` is `\"value\"`, the gap is based on absolute\n         * axis values, which on a datetime axis is milliseconds. This\n         * also applies to the navigator series that inherits gap\n         * options from the base series.\n         *\n         * @see [gapSize](plotOptions.series.gapSize)\n         *\n         * @type       {string}\n         * @default    relative\n         * @since      5.0.13\n         * @product    highstock\n         * @validvalue [\"relative\", \"value\"]\n         * @requires   modules/broken-axis\n         * @apioption  plotOptions.series.gapUnit\n         */\n        if (gapSize && i > 0) { // #5008\n            // Gap unit is relative\n            if (this.options.gapUnit !== 'value') {\n                gapSize *= this.basePointRange;\n            }\n            // Setting a new gapSize in case dataGrouping is enabled\n            // (#7686)\n            if (groupingSize &&\n                groupingSize > gapSize &&\n                // Except when DG is forced (e.g. from other series)\n                // and has lower granularity than actual points (#11351)\n                groupingSize >= this.basePointRange) {\n                gapSize = groupingSize;\n            }\n            // Extension for ordinal breaks\n            var current = void 0,\n                next = void 0;\n            while (i--) {\n                // Reassign next if it is not visible\n                if (!(next && next.visible !== false)) {\n                    next = points[i + 1];\n                }\n                current = points[i];\n                // Skip iteration if one of the points is not visible\n                if (next.visible === false || current.visible === false) {\n                    continue;\n                }\n                if (next.x - current.x > gapSize) {\n                    var xRange = (current.x + next.x) / 2;\n                    points.splice(// Insert after this one\n                    i + 1, 0, {\n                        isNull: true,\n                        x: xRange\n                    });\n                    // For stacked chart generate empty stack items, #6546\n                    if (yAxis.stacking && this.options.stacking) {\n                        stack = yAxis.stacking.stacks[this.stackKey][xRange] = new (highcharts_StackItem_commonjs_highcharts_StackItem_commonjs2_highcharts_StackItem_root_Highcharts_StackItem_default())(yAxis, yAxis.options.stackLabels, false, xRange, this.stack);\n                        stack.total = 0;\n                    }\n                }\n                // Assign current to next for the upcoming iteration\n                next = current;\n            }\n        }\n        // Call base method\n        return this.getGraphPath(points);\n    }\n    /* *\n     *\n     *  Class\n     *\n     * */\n    /**\n     * Provides support for broken axes.\n     * @private\n     * @class\n     */\n    var Additions = /** @class */ (function () {\n            /* *\n             *\n             *  Constructors\n             *\n             * */\n            function Additions(axis) {\n                this.hasBreaks = false;\n            this.axis = axis;\n        }\n        /* *\n         *\n         *  Static Functions\n         *\n         * */\n        /**\n         * @private\n         */\n        Additions.isInBreak = function (brk, val) {\n            var repeat = brk.repeat || Infinity,\n                from = brk.from,\n                length = brk.to - brk.from,\n                test = (val >= from ?\n                    (val - from) % repeat :\n                    repeat - ((from - val) % repeat));\n            var ret;\n            if (!brk.inclusive) {\n                ret = test < length && test !== 0;\n            }\n            else {\n                ret = test <= length;\n            }\n            return ret;\n        };\n        /**\n         * @private\n         */\n        Additions.lin2Val = function (val) {\n            var axis = this;\n            var brokenAxis = axis.brokenAxis;\n            var breakArray = brokenAxis && brokenAxis.breakArray;\n            if (!breakArray || !BrokenAxis_isNumber(val)) {\n                return val;\n            }\n            var nval = val,\n                brk,\n                i;\n            for (i = 0; i < breakArray.length; i++) {\n                brk = breakArray[i];\n                if (brk.from >= nval) {\n                    break;\n                }\n                else if (brk.to < nval) {\n                    nval += brk.len;\n                }\n                else if (Additions.isInBreak(brk, nval)) {\n                    nval += brk.len;\n                }\n            }\n            return nval;\n        };\n        /**\n         * @private\n         */\n        Additions.val2Lin = function (val) {\n            var axis = this;\n            var brokenAxis = axis.brokenAxis;\n            var breakArray = brokenAxis && brokenAxis.breakArray;\n            if (!breakArray || !BrokenAxis_isNumber(val)) {\n                return val;\n            }\n            var nval = val,\n                brk,\n                i;\n            for (i = 0; i < breakArray.length; i++) {\n                brk = breakArray[i];\n                if (brk.to <= val) {\n                    nval -= brk.len;\n                }\n                else if (brk.from >= val) {\n                    break;\n                }\n                else if (Additions.isInBreak(brk, val)) {\n                    nval -= (val - brk.from);\n                    break;\n                }\n            }\n            return nval;\n        };\n        /* *\n         *\n         *  Functions\n         *\n         * */\n        /**\n         * Returns the first break found where the x is larger then break.from\n         * and smaller then break.to.\n         *\n         * @param {number} x\n         * The number which should be within a break.\n         *\n         * @param {Array<Highcharts.XAxisBreaksOptions>} breaks\n         * The array of breaks to search within.\n         *\n         * @return {Highcharts.XAxisBreaksOptions|undefined}\n         * Returns the first break found that matches, returns false if no break\n         * is found.\n         */\n        Additions.prototype.findBreakAt = function (x, breaks) {\n            return BrokenAxis_find(breaks, function (b) {\n                return b.from < x && x < b.to;\n            });\n        };\n        /**\n         * @private\n         */\n        Additions.prototype.isInAnyBreak = function (val, testKeep) {\n            var brokenAxis = this,\n                axis = brokenAxis.axis,\n                breaks = axis.options.breaks || [];\n            var i = breaks.length,\n                inbrk,\n                keep,\n                ret;\n            if (i && BrokenAxis_isNumber(val)) {\n                while (i--) {\n                    if (Additions.isInBreak(breaks[i], val)) {\n                        inbrk = true;\n                        if (!keep) {\n                            keep = BrokenAxis_pick(breaks[i].showPoints, !axis.isXAxis);\n                        }\n                    }\n                }\n                if (inbrk && testKeep) {\n                    ret = inbrk && !keep;\n                }\n                else {\n                    ret = inbrk;\n                }\n            }\n            return ret;\n        };\n        /**\n         * Dynamically set or unset breaks in an axis. This function in lighter\n         * than using Axis.update, and it also preserves animation.\n         *\n         * @private\n         * @function Highcharts.Axis#setBreaks\n         *\n         * @param {Array<Highcharts.XAxisBreaksOptions>} [breaks]\n         * The breaks to add. When `undefined` it removes existing breaks.\n         *\n         * @param {boolean} [redraw=true]\n         * Whether to redraw the chart immediately.\n         */\n        Additions.prototype.setBreaks = function (breaks, redraw) {\n            var brokenAxis = this,\n                axis = brokenAxis.axis,\n                time = axis.chart.time,\n                hasBreaks = BrokenAxis_isArray(breaks) &&\n                    !!breaks.length &&\n                    !!Object.keys(breaks[0]).length; // Check for [{}], #16368.\n                axis.isDirty = brokenAxis.hasBreaks !== hasBreaks;\n            brokenAxis.hasBreaks = hasBreaks;\n            // Compile string dates\n            breaks === null || breaks === void 0 ? void 0 : breaks.forEach(function (brk) {\n                brk.from = time.parse(brk.from) || 0;\n                brk.to = time.parse(brk.to) || 0;\n            });\n            if (breaks !== axis.options.breaks) {\n                axis.options.breaks = axis.userOptions.breaks = breaks;\n            }\n            axis.forceRedraw = true; // Force recalculation in setScale\n            // Recalculate series related to the axis.\n            axis.series.forEach(function (series) {\n                series.isDirty = true;\n            });\n            if (!hasBreaks && axis.val2lin === Additions.val2Lin) {\n                // Revert to prototype functions\n                delete axis.val2lin;\n                delete axis.lin2val;\n            }\n            if (hasBreaks) {\n                axis.userOptions.ordinal = false;\n                axis.lin2val = Additions.lin2Val;\n                axis.val2lin = Additions.val2Lin;\n                axis.setExtremes = function (newMin, newMax, redraw, animation, eventArguments) {\n                    // If trying to set extremes inside a break, extend min to\n                    // after, and max to before the break ( #3857 )\n                    if (brokenAxis.hasBreaks) {\n                        var breaks_1 = (this.options.breaks || []);\n                        var axisBreak = void 0;\n                        while ((axisBreak = brokenAxis.findBreakAt(newMin, breaks_1))) {\n                            newMin = axisBreak.to;\n                        }\n                        while ((axisBreak = brokenAxis.findBreakAt(newMax, breaks_1))) {\n                            newMax = axisBreak.from;\n                        }\n                        // If both min and max is within the same break.\n                        if (newMax < newMin) {\n                            newMax = newMin;\n                        }\n                    }\n                    axis.constructor.prototype.setExtremes.call(this, newMin, newMax, redraw, animation, eventArguments);\n                };\n                axis.setAxisTranslation = function () {\n                    axis.constructor.prototype.setAxisTranslation.call(this);\n                    brokenAxis.unitLength = void 0;\n                    if (brokenAxis.hasBreaks) {\n                        var breaks_2 = axis.options.breaks || [], \n                            // Temporary one:\n                            breakArrayT_1 = [],\n                            breakArray_1 = [],\n                            pointRangePadding = BrokenAxis_pick(axis.pointRangePadding, 0);\n                        var length_1 = 0,\n                            inBrk_1,\n                            repeat_1,\n                            min_1 = axis.userMin || axis.min,\n                            max_1 = axis.userMax || axis.max,\n                            start_1,\n                            i_1;\n                        // Min & max check (#4247)\n                        breaks_2.forEach(function (brk) {\n                            repeat_1 = brk.repeat || Infinity;\n                            if (BrokenAxis_isNumber(min_1) && BrokenAxis_isNumber(max_1)) {\n                                if (Additions.isInBreak(brk, min_1)) {\n                                    min_1 += ((brk.to % repeat_1) -\n                                        (min_1 % repeat_1));\n                                }\n                                if (Additions.isInBreak(brk, max_1)) {\n                                    max_1 -= ((max_1 % repeat_1) -\n                                        (brk.from % repeat_1));\n                                }\n                            }\n                        });\n                        // Construct an array holding all breaks in the axis\n                        breaks_2.forEach(function (brk) {\n                            start_1 = brk.from;\n                            repeat_1 = brk.repeat || Infinity;\n                            if (BrokenAxis_isNumber(min_1) && BrokenAxis_isNumber(max_1)) {\n                                while (start_1 - repeat_1 > min_1) {\n                                    start_1 -= repeat_1;\n                                }\n                                while (start_1 < min_1) {\n                                    start_1 += repeat_1;\n                                }\n                                for (i_1 = start_1; i_1 < max_1; i_1 += repeat_1) {\n                                    breakArrayT_1.push({\n                                        value: i_1,\n                                        move: 'in'\n                                    });\n                                    breakArrayT_1.push({\n                                        value: i_1 + brk.to - brk.from,\n                                        move: 'out',\n                                        size: brk.breakSize\n                                    });\n                                }\n                            }\n                        });\n                        breakArrayT_1.sort(function (a, b) {\n                            return ((a.value === b.value) ?\n                                ((a.move === 'in' ? 0 : 1) -\n                                    (b.move === 'in' ? 0 : 1)) :\n                                a.value - b.value);\n                        });\n                        // Simplify the breaks\n                        inBrk_1 = 0;\n                        start_1 = min_1;\n                        breakArrayT_1.forEach(function (brk) {\n                            inBrk_1 += (brk.move === 'in' ? 1 : -1);\n                            if (inBrk_1 === 1 && brk.move === 'in') {\n                                start_1 = brk.value;\n                            }\n                            if (inBrk_1 === 0 && BrokenAxis_isNumber(start_1)) {\n                                breakArray_1.push({\n                                    from: start_1,\n                                    to: brk.value,\n                                    len: brk.value - start_1 - (brk.size || 0)\n                                });\n                                length_1 += (brk.value -\n                                    start_1 -\n                                    (brk.size || 0));\n                            }\n                        });\n                        brokenAxis.breakArray = breakArray_1;\n                        // Used with staticScale, and below the actual axis\n                        // length, when breaks are subtracted.\n                        if (BrokenAxis_isNumber(min_1) &&\n                            BrokenAxis_isNumber(max_1) &&\n                            BrokenAxis_isNumber(axis.min)) {\n                            brokenAxis.unitLength = max_1 - min_1 - length_1 +\n                                pointRangePadding;\n                            BrokenAxis_fireEvent(axis, 'afterBreaks');\n                            if (axis.staticScale) {\n                                axis.transA = axis.staticScale;\n                            }\n                            else if (brokenAxis.unitLength) {\n                                axis.transA *=\n                                    (max_1 - axis.min + pointRangePadding) /\n                                        brokenAxis.unitLength;\n                            }\n                            if (pointRangePadding) {\n                                axis.minPixelPadding =\n                                    axis.transA * (axis.minPointOffset || 0);\n                            }\n                            axis.min = min_1;\n                            axis.max = max_1;\n                        }\n                    }\n                };\n            }\n            if (BrokenAxis_pick(redraw, true)) {\n                axis.chart.redraw();\n            }\n        };\n        return Additions;\n    }());\n    BrokenAxis.Additions = Additions;\n})(BrokenAxis || (BrokenAxis = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Axis_BrokenAxis = (BrokenAxis);\n\n;// ./code/es5/es-modules/Core/Axis/GridAxis.js\n/* *\n *\n *  (c) 2016 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\nvar dateFormats = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).dateFormats;\n\nvar GridAxis_addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, GridAxis_defined = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).defined, GridAxis_erase = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).erase, GridAxis_find = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).find, GridAxis_isArray = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isArray, GridAxis_isNumber = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isNumber, GridAxis_merge = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).merge, GridAxis_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick, GridAxis_timeUnits = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).timeUnits, GridAxis_wrap = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).wrap;\n/* *\n *\n *  Enums\n *\n * */\n/**\n * Enum for which side the axis is on. Maps to axis.side.\n * @private\n */\nvar GridAxisSide;\n(function (GridAxisSide) {\n    GridAxisSide[GridAxisSide[\"top\"] = 0] = \"top\";\n    GridAxisSide[GridAxisSide[\"right\"] = 1] = \"right\";\n    GridAxisSide[GridAxisSide[\"bottom\"] = 2] = \"bottom\";\n    GridAxisSide[GridAxisSide[\"left\"] = 3] = \"left\";\n})(GridAxisSide || (GridAxisSide = {}));\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction argsToArray(args) {\n    return Array.prototype.slice.call(args, 1);\n}\n/**\n * @private\n */\nfunction GridAxis_isObject(x) {\n    // Always use strict mode\n    return highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default().isObject(x, true);\n}\n/**\n * @private\n */\nfunction applyGridOptions(axis) {\n    var options = axis.options;\n    // Center-align by default\n    /*\n    if (!options.labels) {\n        options.labels = {};\n    }\n    */\n    options.labels.align = GridAxis_pick(options.labels.align, 'center');\n    // @todo: Check against tickLabelPlacement between/on etc\n    /* Prevents adding the last tick label if the axis is not a category\n       axis.\n       Since numeric labels are normally placed at starts and ends of a\n       range of value, and this module makes the label point at the value,\n       an \"extra\" label would appear. */\n    if (!axis.categories) {\n        options.showLastLabel = false;\n    }\n    // Prevents rotation of labels when squished, as rotating them would not\n    // help.\n    axis.labelRotation = 0;\n    options.labels.rotation = 0;\n    // Allow putting ticks closer than their data points.\n    options.minTickInterval = 1;\n}\n/**\n * Extends axis class with grid support.\n * @private\n */\nfunction GridAxis_compose(AxisClass, ChartClass, TickClass) {\n    if (!AxisClass.keepProps.includes('grid')) {\n        AxisClass.keepProps.push('grid');\n        AxisClass.prototype.getMaxLabelDimensions = getMaxLabelDimensions;\n        GridAxis_wrap(AxisClass.prototype, 'unsquish', wrapUnsquish);\n        GridAxis_wrap(AxisClass.prototype, 'getOffset', wrapGetOffset);\n        // Add event handlers\n        GridAxis_addEvent(AxisClass, 'init', onInit);\n        GridAxis_addEvent(AxisClass, 'afterGetTitlePosition', onAfterGetTitlePosition);\n        GridAxis_addEvent(AxisClass, 'afterInit', onAfterInit);\n        GridAxis_addEvent(AxisClass, 'afterRender', onAfterRender);\n        GridAxis_addEvent(AxisClass, 'afterSetAxisTranslation', onAfterSetAxisTranslation);\n        GridAxis_addEvent(AxisClass, 'afterSetOptions', onAfterSetOptions);\n        GridAxis_addEvent(AxisClass, 'afterSetOptions', onAfterSetOptions2);\n        GridAxis_addEvent(AxisClass, 'afterSetScale', onAfterSetScale);\n        GridAxis_addEvent(AxisClass, 'afterTickSize', onAfterTickSize);\n        GridAxis_addEvent(AxisClass, 'trimTicks', onTrimTicks);\n        GridAxis_addEvent(AxisClass, 'destroy', onDestroy);\n        GridAxis_addEvent(ChartClass, 'afterSetChartSize', GridAxis_onChartAfterSetChartSize);\n        GridAxis_addEvent(TickClass, 'afterGetLabelPosition', onTickAfterGetLabelPosition);\n        GridAxis_addEvent(TickClass, 'labelFormat', onTickLabelFormat);\n    }\n    return AxisClass;\n}\n/**\n * Get the largest label width and height.\n *\n * @private\n * @function Highcharts.Axis#getMaxLabelDimensions\n *\n * @param {Highcharts.Dictionary<Highcharts.Tick>} ticks\n * All the ticks on one axis.\n *\n * @param {Array<number|string>} tickPositions\n * All the tick positions on one axis.\n *\n * @return {Highcharts.SizeObject}\n * Object containing the properties height and width.\n *\n * @todo Move this to the generic axis implementation, as it is used there.\n */\nfunction getMaxLabelDimensions(ticks, tickPositions) {\n    var dimensions = {\n            width: 0,\n            height: 0\n        };\n    tickPositions.forEach(function (pos) {\n        var tick = ticks[pos];\n        var labelHeight = 0,\n            labelWidth = 0,\n            label;\n        if (GridAxis_isObject(tick)) {\n            label = GridAxis_isObject(tick.label) ? tick.label : {};\n            // Find width and height of label\n            labelHeight = label.getBBox ? label.getBBox().height : 0;\n            if (label.textStr && !GridAxis_isNumber(label.textPxLength)) {\n                label.textPxLength = label.getBBox().width;\n            }\n            labelWidth = GridAxis_isNumber(label.textPxLength) ?\n                // Math.round ensures crisp lines\n                Math.round(label.textPxLength) :\n                0;\n            if (label.textStr) {\n                // Set the tickWidth same as the label width after ellipsis\n                // applied #10281\n                labelWidth = Math.round(label.getBBox().width);\n            }\n            // Update the result if width and/or height are larger\n            dimensions.height = Math.max(labelHeight, dimensions.height);\n            dimensions.width = Math.max(labelWidth, dimensions.width);\n        }\n    });\n    // For tree grid, add indentation\n    if (this.type === 'treegrid' &&\n        this.treeGrid &&\n        this.treeGrid.mapOfPosToGridNode) {\n        var treeDepth = this.treeGrid.mapOfPosToGridNode[-1].height || 0;\n        dimensions.width += (this.options.labels.indentation *\n            (treeDepth - 1));\n    }\n    return dimensions;\n}\n/**\n * Handle columns and getOffset.\n * @private\n */\nfunction wrapGetOffset(proceed) {\n    var grid = this.grid, \n        // On the left side we handle the columns first because the offset is\n        // calculated from the plot area and out\n        columnsFirst = this.side === 3;\n    if (!columnsFirst) {\n        proceed.apply(this);\n    }\n    if (!(grid === null || grid === void 0 ? void 0 : grid.isColumn)) {\n        var columns = (grid === null || grid === void 0 ? void 0 : grid.columns) || [];\n        if (columnsFirst) {\n            columns = columns.slice().reverse();\n        }\n        columns\n            .forEach(function (column) {\n            column.getOffset();\n        });\n    }\n    if (columnsFirst) {\n        proceed.apply(this);\n    }\n}\n/**\n * @private\n */\nfunction onAfterGetTitlePosition(e) {\n    var axis = this;\n    var options = axis.options;\n    var gridOptions = options.grid || {};\n    if (gridOptions.enabled === true) {\n        // Compute anchor points for each of the title align options\n        var axisTitle = axis.axisTitle,\n            axisHeight = axis.height,\n            horiz = axis.horiz,\n            axisLeft = axis.left,\n            offset = axis.offset,\n            opposite = axis.opposite,\n            options_1 = axis.options,\n            axisTop = axis.top,\n            axisWidth = axis.width;\n        var tickSize = axis.tickSize();\n        var titleWidth = axisTitle && axisTitle.getBBox().width;\n        var xOption = options_1.title.x;\n        var yOption = options_1.title.y;\n        var titleMargin = GridAxis_pick(options_1.title.margin,\n            horiz ? 5 : 10);\n        var titleFontSize = axisTitle ? axis.chart.renderer.fontMetrics(axisTitle).f : 0;\n        var crispCorr = tickSize ? tickSize[0] / 2 : 0;\n        // TODO account for alignment\n        // the position in the perpendicular direction of the axis\n        var offAxis = ((horiz ? axisTop + axisHeight : axisLeft) +\n                (horiz ? 1 : -1) * // Horizontal axis reverses the margin\n                    (opposite ? -1 : 1) * // So does opposite axes\n                    crispCorr +\n                (axis.side === GridAxisSide.bottom ? titleFontSize : 0));\n        e.titlePosition.x = horiz ?\n            axisLeft - (titleWidth || 0) / 2 - titleMargin + xOption :\n            offAxis + (opposite ? axisWidth : 0) + offset + xOption;\n        e.titlePosition.y = horiz ?\n            (offAxis -\n                (opposite ? axisHeight : 0) +\n                (opposite ? titleFontSize : -titleFontSize) / 2 +\n                offset +\n                yOption) :\n            axisTop - titleMargin + yOption;\n    }\n}\n/**\n * @private\n */\nfunction onAfterInit() {\n    var axis = this;\n    var chart = axis.chart,\n        _a = axis.options.grid,\n        gridOptions = _a === void 0 ? {} : _a,\n        userOptions = axis.userOptions;\n    if (gridOptions.enabled) {\n        applyGridOptions(axis);\n    }\n    if (gridOptions.columns) {\n        var columns = axis.grid.columns = [];\n        var columnIndex = axis.grid.columnIndex = 0;\n        // Handle columns, each column is a grid axis\n        while (++columnIndex < gridOptions.columns.length) {\n            var columnOptions = GridAxis_merge(userOptions,\n                gridOptions.columns[columnIndex], {\n                    isInternal: true,\n                    linkedTo: 0,\n                    // Disable by default the scrollbar on the grid axis\n                    scrollbar: {\n                        enabled: false\n                    }\n                }, \n                // Avoid recursion\n                {\n                    grid: {\n                        columns: void 0\n                    }\n                });\n            var column = new (highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_default())(axis.chart,\n                columnOptions, 'yAxis');\n            column.grid.isColumn = true;\n            column.grid.columnIndex = columnIndex;\n            // Remove column axis from chart axes array, and place it\n            // in the columns array.\n            GridAxis_erase(chart.axes, column);\n            GridAxis_erase(chart[axis.coll] || [], column);\n            columns.push(column);\n        }\n    }\n}\n/**\n * Draw an extra line on the far side of the outermost axis,\n * creating floor/roof/wall of a grid. And some padding.\n * ```\n * Make this:\n *             (axis.min) __________________________ (axis.max)\n *                           |    |    |    |    |\n * Into this:\n *             (axis.min) __________________________ (axis.max)\n *                        ___|____|____|____|____|__\n * ```\n * @private\n */\nfunction onAfterRender() {\n    var axis = this,\n        axisTitle = axis.axisTitle,\n        grid = axis.grid,\n        options = axis.options,\n        gridOptions = options.grid || {};\n    if (gridOptions.enabled === true) {\n        var min = axis.min || 0,\n            max = axis.max || 0,\n            firstTick = axis.ticks[axis.tickPositions[0]];\n        // Adjust the title max width to the column width (#19657)\n        if (axisTitle &&\n            !axis.chart.styledMode &&\n            (firstTick === null || firstTick === void 0 ? void 0 : firstTick.slotWidth) &&\n            !axis.options.title.style.width) {\n            axisTitle.css({ width: \"\" + firstTick.slotWidth + \"px\" });\n        }\n        // @todo actual label padding (top, bottom, left, right)\n        axis.maxLabelDimensions = axis.getMaxLabelDimensions(axis.ticks, axis.tickPositions);\n        // Remove right wall before rendering if updating\n        if (axis.rightWall) {\n            axis.rightWall.destroy();\n        }\n        /*\n        Draw an extra axis line on outer axes\n                    >\n        Make this:    |______|______|______|___\n\n                    > _________________________\n        Into this:    |______|______|______|__|\n                                                */\n        if (axis.grid && axis.grid.isOuterAxis() && axis.axisLine) {\n            var lineWidth = options.lineWidth;\n            if (lineWidth) {\n                var linePath = axis.getLinePath(lineWidth),\n                    startPoint = linePath[0],\n                    endPoint = linePath[1], \n                    // Negate distance if top or left axis\n                    // Subtract 1px to draw the line at the end of the tick\n                    tickLength = (axis.tickSize('tick') || [1])[0],\n                    distance = tickLength * ((axis.side === GridAxisSide.top ||\n                        axis.side === GridAxisSide.left) ? -1 : 1);\n                // If axis is horizontal, reposition line path vertically\n                if (startPoint[0] === 'M' && endPoint[0] === 'L') {\n                    if (axis.horiz) {\n                        startPoint[2] += distance;\n                        endPoint[2] += distance;\n                    }\n                    else {\n                        startPoint[1] += distance;\n                        endPoint[1] += distance;\n                    }\n                }\n                // If it doesn't exist, add an upper and lower border\n                // for the vertical grid axis.\n                if (!axis.horiz && axis.chart.marginRight) {\n                    var upperBorderStartPoint = startPoint,\n                        upperBorderEndPoint = [\n                            'L',\n                            axis.left,\n                            startPoint[2] || 0\n                        ],\n                        upperBorderPath = [\n                            upperBorderStartPoint,\n                            upperBorderEndPoint\n                        ],\n                        lowerBorderEndPoint = [\n                            'L',\n                            axis.chart.chartWidth - axis.chart.marginRight,\n                            axis.toPixels(max + axis.tickmarkOffset)\n                        ],\n                        lowerBorderStartPoint = [\n                            'M',\n                            endPoint[1] || 0,\n                            axis.toPixels(max + axis.tickmarkOffset)\n                        ],\n                        lowerBorderPath = [\n                            lowerBorderStartPoint,\n                            lowerBorderEndPoint\n                        ];\n                    if (!axis.grid.upperBorder && min % 1 !== 0) {\n                        axis.grid.upperBorder = axis.grid.renderBorder(upperBorderPath);\n                    }\n                    if (axis.grid.upperBorder) {\n                        axis.grid.upperBorder.attr({\n                            stroke: options.lineColor,\n                            'stroke-width': options.lineWidth\n                        });\n                        axis.grid.upperBorder.animate({\n                            d: upperBorderPath\n                        });\n                    }\n                    if (!axis.grid.lowerBorder && max % 1 !== 0) {\n                        axis.grid.lowerBorder = axis.grid.renderBorder(lowerBorderPath);\n                    }\n                    if (axis.grid.lowerBorder) {\n                        axis.grid.lowerBorder.attr({\n                            stroke: options.lineColor,\n                            'stroke-width': options.lineWidth\n                        });\n                        axis.grid.lowerBorder.animate({\n                            d: lowerBorderPath\n                        });\n                    }\n                }\n                // Render an extra line parallel to the existing axes, to\n                // close the grid.\n                if (!axis.grid.axisLineExtra) {\n                    axis.grid.axisLineExtra = axis.grid.renderBorder(linePath);\n                }\n                else {\n                    axis.grid.axisLineExtra.attr({\n                        stroke: options.lineColor,\n                        'stroke-width': options.lineWidth\n                    });\n                    axis.grid.axisLineExtra.animate({\n                        d: linePath\n                    });\n                }\n                // Show or hide the line depending on options.showEmpty\n                axis.axisLine[axis.showAxis ? 'show' : 'hide']();\n            }\n        }\n        (grid && grid.columns || []).forEach(function (column) { return column.render(); });\n        // Manipulate the tick mark visibility\n        // based on the axis.max- allows smooth scrolling.\n        if (!axis.horiz &&\n            axis.chart.hasRendered &&\n            (axis.scrollbar ||\n                (axis.linkedParent && axis.linkedParent.scrollbar)) &&\n            axis.tickPositions.length) {\n            var tickmarkOffset = axis.tickmarkOffset,\n                lastTick = axis.tickPositions[axis.tickPositions.length - 1],\n                firstTick_1 = axis.tickPositions[0];\n            var label = void 0,\n                tickMark = void 0;\n            while ((label = axis.hiddenLabels.pop()) && label.element) {\n                label.show(); // #15453\n            }\n            while ((tickMark = axis.hiddenMarks.pop()) &&\n                tickMark.element) {\n                tickMark.show(); // #16439\n            }\n            // Hide/show first tick label.\n            label = axis.ticks[firstTick_1].label;\n            if (label) {\n                if (min - firstTick_1 > tickmarkOffset) {\n                    axis.hiddenLabels.push(label.hide());\n                }\n                else {\n                    label.show();\n                }\n            }\n            // Hide/show last tick mark/label.\n            label = axis.ticks[lastTick].label;\n            if (label) {\n                if (lastTick - max > tickmarkOffset) {\n                    axis.hiddenLabels.push(label.hide());\n                }\n                else {\n                    label.show();\n                }\n            }\n            var mark = axis.ticks[lastTick].mark;\n            if (mark &&\n                lastTick - max < tickmarkOffset &&\n                lastTick - max > 0 && axis.ticks[lastTick].isLast) {\n                axis.hiddenMarks.push(mark.hide());\n            }\n        }\n    }\n}\n/**\n * @private\n */\nfunction onAfterSetAxisTranslation() {\n    var axis = this;\n    var tickInfo = axis.tickPositions && axis.tickPositions.info;\n    var options = axis.options;\n    var gridOptions = options.grid || {};\n    var userLabels = axis.userOptions.labels || {};\n    // Fire this only for the Gantt type chart, #14868.\n    if (gridOptions.enabled) {\n        if (axis.horiz) {\n            axis.series.forEach(function (series) {\n                series.options.pointRange = 0;\n            });\n            // Lower level time ticks, like hours or minutes, represent\n            // points in time and not ranges. These should be aligned\n            // left in the grid cell by default. The same applies to\n            // years of higher order.\n            if (tickInfo &&\n                options.dateTimeLabelFormats &&\n                options.labels &&\n                !GridAxis_defined(userLabels.align) &&\n                (options.dateTimeLabelFormats[tickInfo.unitName]\n                    .range === false ||\n                    tickInfo.count > 1 // Years\n                )) {\n                options.labels.align = 'left';\n                if (!GridAxis_defined(userLabels.x)) {\n                    options.labels.x = 3;\n                }\n            }\n        }\n        else {\n            // Don't trim ticks which not in min/max range but\n            // they are still in the min/max plus tickInterval.\n            if (this.type !== 'treegrid' &&\n                axis.grid &&\n                axis.grid.columns) {\n                this.minPointOffset = this.tickInterval;\n            }\n        }\n    }\n}\n/**\n * Creates a left and right wall on horizontal axes:\n * - Places leftmost tick at the start of the axis, to create a left\n *   wall\n * - Ensures that the rightmost tick is at the end of the axis, to\n *   create a right wall.\n * @private\n */\nfunction onAfterSetOptions(e) {\n    var options = this.options,\n        userOptions = e.userOptions,\n        gridOptions = ((options && GridAxis_isObject(options.grid)) ? options.grid : {});\n    var gridAxisOptions;\n    if (gridOptions.enabled === true) {\n        // Merge the user options into default grid axis options so\n        // that when a user option is set, it takes precedence.\n        gridAxisOptions = GridAxis_merge(true, {\n            className: ('highcharts-grid-axis ' + (userOptions.className || '')),\n            dateTimeLabelFormats: {\n                hour: {\n                    list: ['%[HM]', '%[H]']\n                },\n                day: {\n                    list: ['%[AeB]', '%[aeb]', '%[E]']\n                },\n                week: {\n                    list: ['Week %W', 'W%W']\n                },\n                month: {\n                    list: ['%[B]', '%[b]', '%o']\n                }\n            },\n            grid: {\n                borderWidth: 1\n            },\n            labels: {\n                padding: 2,\n                style: {\n                    fontSize: '0.9em'\n                }\n            },\n            margin: 0,\n            title: {\n                text: null,\n                reserveSpace: false,\n                rotation: 0,\n                style: {\n                    textOverflow: 'ellipsis'\n                }\n            },\n            // In a grid axis, only allow one unit of certain types,\n            // for example we shouldn't have one grid cell spanning\n            // two days.\n            units: [[\n                    'millisecond', // Unit name\n                    [1, 10, 100]\n                ], [\n                    'second',\n                    [1, 10]\n                ], [\n                    'minute',\n                    [1, 5, 15]\n                ], [\n                    'hour',\n                    [1, 6]\n                ], [\n                    'day',\n                    [1]\n                ], [\n                    'week',\n                    [1]\n                ], [\n                    'month',\n                    [1]\n                ], [\n                    'year',\n                    null\n                ]]\n        }, userOptions);\n        // X-axis specific options\n        if (this.coll === 'xAxis') {\n            // For linked axes, tickPixelInterval is used only if\n            // the tickPositioner below doesn't run or returns\n            // undefined (like multiple years)\n            if (GridAxis_defined(userOptions.linkedTo) &&\n                !GridAxis_defined(userOptions.tickPixelInterval)) {\n                gridAxisOptions.tickPixelInterval = 350;\n            }\n            // For the secondary grid axis, use the primary axis'\n            // tick intervals and return ticks one level higher.\n            if (\n            // Check for tick pixel interval in options\n            !GridAxis_defined(userOptions.tickPixelInterval) &&\n                // Only for linked axes\n                GridAxis_defined(userOptions.linkedTo) &&\n                !GridAxis_defined(userOptions.tickPositioner) &&\n                !GridAxis_defined(userOptions.tickInterval) &&\n                !GridAxis_defined(userOptions.units)) {\n                gridAxisOptions.tickPositioner = function (min, max) {\n                    var parentInfo = (this.linkedParent &&\n                            this.linkedParent.tickPositions &&\n                            this.linkedParent.tickPositions.info);\n                    if (parentInfo) {\n                        var units = (gridAxisOptions.units || []);\n                        var unitIdx = void 0,\n                            count = 1,\n                            unitName = 'year';\n                        for (var i = 0; i < units.length; i++) {\n                            var unit_1 = units[i];\n                            if (unit_1 && unit_1[0] === parentInfo.unitName) {\n                                unitIdx = i;\n                                break;\n                            }\n                        }\n                        // Get the first allowed count on the next unit.\n                        var unit = (GridAxis_isNumber(unitIdx) && units[unitIdx + 1]);\n                        if (unit) {\n                            unitName = unit[0] || 'year';\n                            var counts = unit[1];\n                            count = counts && counts[0] || 1;\n                            // In case the base X axis shows years, make the\n                            // secondary axis show ten times the years (#11427)\n                        }\n                        else if (parentInfo.unitName === 'year') {\n                            // `unitName` is 'year'\n                            count = parentInfo.count * 10;\n                        }\n                        var unitRange = GridAxis_timeUnits[unitName];\n                        this.tickInterval = unitRange * count;\n                        return this.chart.time.getTimeTicks({ unitRange: unitRange, count: count, unitName: unitName }, min, max, this.options.startOfWeek);\n                    }\n                };\n            }\n        }\n        // Now merge the combined options into the axis options\n        GridAxis_merge(true, this.options, gridAxisOptions);\n        if (this.horiz) {\n            /*               _________________________\n            Make this:    ___|_____|_____|_____|__|\n                            ^                     ^\n                            _________________________\n            Into this:    |_____|_____|_____|_____|\n                                ^                 ^    */\n            options.minPadding = GridAxis_pick(userOptions.minPadding, 0);\n            options.maxPadding = GridAxis_pick(userOptions.maxPadding, 0);\n        }\n        // If borderWidth is set, then use its value for tick and\n        // line width.\n        if (GridAxis_isNumber(options.grid.borderWidth)) {\n            options.tickWidth = options.lineWidth =\n                gridOptions.borderWidth;\n        }\n    }\n}\n/**\n * @private\n */\nfunction onAfterSetOptions2(e) {\n    var axis = this;\n    var userOptions = e.userOptions;\n    var gridOptions = userOptions && userOptions.grid || {};\n    var columns = gridOptions.columns;\n    // Add column options to the parent axis. Children has their column options\n    // set on init in onGridAxisAfterInit.\n    if (gridOptions.enabled && columns) {\n        GridAxis_merge(true, axis.options, columns[0]);\n    }\n}\n/**\n * Handle columns and setScale.\n * @private\n */\nfunction onAfterSetScale() {\n    var axis = this;\n    (axis.grid.columns || []).forEach(function (column) { return column.setScale(); });\n}\n/**\n * Draw vertical axis ticks extra long to create cell floors and roofs.\n * Overrides the tickLength for vertical axes.\n * @private\n */\nfunction onAfterTickSize(e) {\n    var _a = this,\n        horiz = _a.horiz,\n        maxLabelDimensions = _a.maxLabelDimensions,\n        _b = _a.options.grid,\n        gridOptions = _b === void 0 ? {} : _b;\n    if (gridOptions.enabled && maxLabelDimensions) {\n        var labelPadding = this.options.labels.distance * 2;\n        var distance = horiz ?\n                (gridOptions.cellHeight ||\n                    labelPadding + maxLabelDimensions.height) :\n                labelPadding + maxLabelDimensions.width;\n        if (GridAxis_isArray(e.tickSize)) {\n            e.tickSize[0] = distance;\n        }\n        else {\n            e.tickSize = [distance, 0];\n        }\n    }\n}\n/**\n * @private\n */\nfunction GridAxis_onChartAfterSetChartSize() {\n    this.axes.forEach(function (axis) {\n        (axis.grid && axis.grid.columns || []).forEach(function (column) {\n            column.setAxisSize();\n            column.setAxisTranslation();\n        });\n    });\n}\n/**\n * @private\n */\nfunction onDestroy(e) {\n    var grid = this.grid;\n    (grid.columns || []).forEach(function (column) { return column.destroy(e.keepEvents); });\n    grid.columns = void 0;\n}\n/**\n * Wraps axis init to draw cell walls on vertical axes.\n * @private\n */\nfunction onInit(e) {\n    var axis = this;\n    var userOptions = e.userOptions || {};\n    var gridOptions = userOptions.grid || {};\n    if (gridOptions.enabled && GridAxis_defined(gridOptions.borderColor)) {\n        userOptions.tickColor = userOptions.lineColor = (gridOptions.borderColor);\n    }\n    if (!axis.grid) {\n        axis.grid = new GridAxisAdditions(axis);\n    }\n    axis.hiddenLabels = [];\n    axis.hiddenMarks = [];\n}\n/**\n * Center tick labels in cells.\n * @private\n */\nfunction onTickAfterGetLabelPosition(e) {\n    var tick = this,\n        label = tick.label,\n        axis = tick.axis,\n        reversed = axis.reversed,\n        chart = axis.chart,\n        options = axis.options,\n        gridOptions = options.grid || {},\n        labelOpts = axis.options.labels,\n        align = labelOpts.align, \n        // `verticalAlign` is currently not supported for axis.labels.\n        verticalAlign = 'middle', // LabelOpts.verticalAlign,\n        side = GridAxisSide[axis.side],\n        tickmarkOffset = e.tickmarkOffset,\n        tickPositions = axis.tickPositions,\n        tickPos = tick.pos - tickmarkOffset,\n        nextTickPos = (GridAxis_isNumber(tickPositions[e.index + 1]) ?\n            tickPositions[e.index + 1] - tickmarkOffset :\n            (axis.max || 0) + tickmarkOffset),\n        tickSize = axis.tickSize('tick'),\n        tickWidth = tickSize ? tickSize[0] : 0,\n        crispCorr = tickSize ? tickSize[1] / 2 : 0;\n    // Only center tick labels in grid axes\n    if (gridOptions.enabled === true) {\n        var bottom = void 0,\n            top_1,\n            left = void 0,\n            right = void 0;\n        // Calculate top and bottom positions of the cell.\n        if (side === 'top') {\n            bottom = axis.top + axis.offset;\n            top_1 = bottom - tickWidth;\n        }\n        else if (side === 'bottom') {\n            top_1 = chart.chartHeight - axis.bottom + axis.offset;\n            bottom = top_1 + tickWidth;\n        }\n        else {\n            bottom = axis.top + axis.len - (axis.translate(reversed ? nextTickPos : tickPos) || 0);\n            top_1 = axis.top + axis.len - (axis.translate(reversed ? tickPos : nextTickPos) || 0);\n        }\n        // Calculate left and right positions of the cell.\n        if (side === 'right') {\n            left = chart.chartWidth - axis.right + axis.offset;\n            right = left + tickWidth;\n        }\n        else if (side === 'left') {\n            right = axis.left + axis.offset;\n            left = right - tickWidth;\n        }\n        else {\n            left = Math.round(axis.left + (axis.translate(reversed ? nextTickPos : tickPos) || 0)) - crispCorr;\n            right = Math.min(// #15742\n            Math.round(axis.left + (axis.translate(reversed ? tickPos : nextTickPos) || 0)) - crispCorr, axis.left + axis.len);\n        }\n        tick.slotWidth = right - left;\n        // Calculate the positioning of the label based on\n        // alignment.\n        e.pos.x = (align === 'left' ?\n            left :\n            align === 'right' ?\n                right :\n                left + ((right - left) / 2) // Default to center\n        );\n        e.pos.y = (verticalAlign === 'top' ?\n            top_1 :\n            verticalAlign === 'bottom' ?\n                bottom :\n                top_1 + ((bottom - top_1) / 2) // Default to middle\n        );\n        if (label) {\n            var lblMetrics = chart.renderer.fontMetrics(label),\n                labelHeight = label.getBBox().height;\n            // Adjustment to y position to align the label correctly.\n            // Would be better to have a setter or similar for this.\n            if (!labelOpts.useHTML) {\n                var lines = Math.round(labelHeight / lblMetrics.h);\n                e.pos.y += (\n                // Center the label\n                // TODO: why does this actually center the label?\n                ((lblMetrics.b - (lblMetrics.h - lblMetrics.f)) / 2) +\n                    // Adjust for height of additional lines.\n                    -(((lines - 1) * lblMetrics.h) / 2));\n            }\n            else {\n                e.pos.y += (\n                // Readjust yCorr in htmlUpdateTransform\n                lblMetrics.b +\n                    // Adjust for height of html label\n                    -(labelHeight / 2));\n            }\n        }\n        e.pos.x += (axis.horiz && labelOpts.x) || 0;\n    }\n}\n/**\n * @private\n */\nfunction onTickLabelFormat(ctx) {\n    var axis = ctx.axis,\n        value = ctx.value;\n    if (axis.options.grid &&\n        axis.options.grid.enabled) {\n        var tickPos = axis.tickPositions;\n        var series = (axis.linkedParent || axis).series[0];\n        var isFirst = value === tickPos[0];\n        var isLast = value === tickPos[tickPos.length - 1];\n        var point = series && GridAxis_find(series.options.data,\n            function (p) {\n                return p[axis.isXAxis ? 'x' : 'y'] === value;\n        });\n        var pointCopy = void 0;\n        if (point && series.is('gantt')) {\n            // For the Gantt set point aliases to the pointCopy\n            // to do not change the original point\n            pointCopy = GridAxis_merge(point);\n            highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default().seriesTypes.gantt.prototype.pointClass\n                .setGanttPointAliases(pointCopy, axis.chart);\n        }\n        // Make additional properties available for the\n        // formatter\n        ctx.isFirst = isFirst;\n        ctx.isLast = isLast;\n        ctx.point = pointCopy;\n    }\n}\n/**\n * Makes tick labels which are usually ignored in a linked axis\n * displayed if they are within range of linkedParent.min.\n * ```\n *                        _____________________________\n *                        |   |       |       |       |\n * Make this:             |   |   2   |   3   |   4   |\n *                        |___|_______|_______|_______|\n *                          ^\n *                        _____________________________\n *                        |   |       |       |       |\n * Into this:             | 1 |   2   |   3   |   4   |\n *                        |___|_______|_______|_______|\n *                          ^\n * ```\n * @private\n * @todo Does this function do what the drawing says? Seems to affect\n *       ticks and not the labels directly?\n */\nfunction onTrimTicks() {\n    var axis = this,\n        options = axis.options,\n        gridOptions = options.grid || {},\n        categoryAxis = axis.categories,\n        tickPositions = axis.tickPositions,\n        firstPos = tickPositions[0],\n        secondPos = tickPositions[1],\n        lastPos = tickPositions[tickPositions.length - 1],\n        beforeLastPos = tickPositions[tickPositions.length - 2],\n        linkedMin = axis.linkedParent && axis.linkedParent.min,\n        linkedMax = axis.linkedParent && axis.linkedParent.max,\n        min = linkedMin || axis.min,\n        max = linkedMax || axis.max,\n        tickInterval = axis.tickInterval,\n        startLessThanMin = ( // #19845\n        GridAxis_isNumber(min) &&\n            min >= firstPos + tickInterval &&\n            min < secondPos),\n        endMoreThanMin = (GridAxis_isNumber(min) &&\n            firstPos < min &&\n            firstPos + tickInterval > min),\n        startLessThanMax = (GridAxis_isNumber(max) &&\n            lastPos > max &&\n            lastPos - tickInterval < max),\n        endMoreThanMax = (GridAxis_isNumber(max) &&\n            max <= lastPos - tickInterval &&\n            max > beforeLastPos);\n    if (gridOptions.enabled === true &&\n        !categoryAxis &&\n        (axis.isXAxis || axis.isLinked)) {\n        if ((endMoreThanMin || startLessThanMin) && !options.startOnTick) {\n            tickPositions[0] = min;\n        }\n        if ((startLessThanMax || endMoreThanMax) && !options.endOnTick) {\n            tickPositions[tickPositions.length - 1] = max;\n        }\n    }\n}\n/**\n * Avoid altering tickInterval when reserving space.\n * @private\n */\nfunction wrapUnsquish(proceed) {\n    var axis = this;\n    var _a = axis.options.grid,\n        gridOptions = _a === void 0 ? {} : _a;\n    if (gridOptions.enabled === true && axis.categories) {\n        return axis.tickInterval;\n    }\n    return proceed.apply(axis, argsToArray(arguments));\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * Additions for grid axes.\n * @private\n * @class\n */\nvar GridAxisAdditions = /** @class */ (function () {\n    /* *\n    *\n    *  Constructors\n    *\n    * */\n    function GridAxisAdditions(axis) {\n        this.axis = axis;\n    }\n    /* *\n    *\n    *  Functions\n    *\n    * */\n    /**\n     * Checks if an axis is the outer axis in its dimension. Since\n     * axes are placed outwards in order, the axis with the highest\n     * index is the outermost axis.\n     *\n     * Example: If there are multiple x-axes at the top of the chart,\n     * this function returns true if the axis supplied is the last\n     * of the x-axes.\n     *\n     * @private\n     *\n     * @return {boolean}\n     * True if the axis is the outermost axis in its dimension; false if\n     * not.\n     */\n    GridAxisAdditions.prototype.isOuterAxis = function () {\n        var _a;\n        var axis = this.axis;\n        var chart = axis.chart;\n        var columnIndex = axis.grid.columnIndex;\n        var columns = (((_a = axis.linkedParent) === null || _a === void 0 ? void 0 : _a.grid.columns) ||\n                axis.grid.columns ||\n                []);\n        var parentAxis = columnIndex ? axis.linkedParent : axis;\n        var thisIndex = -1,\n            lastIndex = 0;\n        // On the left side, when we have columns (not only multiple axes), the\n        // main axis is to the left\n        if (axis.side === 3 && !chart.inverted && columns.length) {\n            return !axis.linkedParent;\n        }\n        (chart[axis.coll] || []).forEach(function (otherAxis, index) {\n            if (otherAxis.side === axis.side &&\n                !otherAxis.options.isInternal) {\n                lastIndex = index;\n                if (otherAxis === parentAxis) {\n                    // Get the index of the axis in question\n                    thisIndex = index;\n                }\n            }\n        });\n        return (lastIndex === thisIndex &&\n            (GridAxis_isNumber(columnIndex) ?\n                columns.length === columnIndex :\n                true));\n    };\n    /**\n     * Add extra border based on the provided path.\n     * @private\n     * @param {SVGPath} path\n     * The path of the border.\n     * @return {Highcharts.SVGElement}\n     * Border\n     */\n    GridAxisAdditions.prototype.renderBorder = function (path) {\n        var axis = this.axis,\n            renderer = axis.chart.renderer,\n            options = axis.options,\n            extraBorderLine = renderer.path(path)\n                .addClass('highcharts-axis-line')\n                .add(axis.axisGroup);\n        if (!renderer.styledMode) {\n            extraBorderLine.attr({\n                stroke: options.lineColor,\n                'stroke-width': options.lineWidth,\n                zIndex: 7\n            });\n        }\n        return extraBorderLine;\n    };\n    return GridAxisAdditions;\n}());\n/* *\n *\n *  Registry\n *\n * */\n// First letter of the day of the week, e.g. 'M' for 'Monday'.\ndateFormats.E = function (timestamp) {\n    return this.dateFormat('%a', timestamp, true).charAt(0);\n};\n// Adds week date format\ndateFormats.W = function (timestamp) {\n    var d = this.toParts(timestamp),\n        firstDay = (d[7] + 6) % 7,\n        thursday = d.slice(0);\n    thursday[2] = d[2] - firstDay + 3;\n    var firstThursday = this.toParts(this.makeTime(thursday[0], 0, 1));\n    if (firstThursday[7] !== 4) {\n        d[1] = 0; // Set month to January\n        d[2] = 1 + (11 - firstThursday[7]) % 7;\n    }\n    var thursdayTS = this.makeTime(thursday[0],\n        thursday[1],\n        thursday[2]),\n        firstThursdayTS = this.makeTime(firstThursday[0],\n        firstThursday[1],\n        firstThursday[2]);\n    return (1 +\n        Math.floor((thursdayTS - firstThursdayTS) / 604800000)).toString();\n};\n/* *\n *\n *  Default Export\n *\n * */\nvar GridAxis = {\n    compose: GridAxis_compose\n};\n/* harmony default export */ var Axis_GridAxis = (GridAxis);\n/* *\n *\n *  API Options\n *\n * */\n/**\n * @productdesc {gantt}\n * For grid axes (like in Gantt charts),\n * it is possible to declare as a list to provide different\n * formats depending on available space.\n *\n * Defaults to:\n * ```js\n * {\n *     hour: { list: ['%H:%M', '%H'] },\n *     day: { list: ['%A, %e. %B', '%a, %e. %b', '%E'] },\n *     week: { list: ['Week %W', 'W%W'] },\n *     month: { list: ['%B', '%b', '%o'] }\n * }\n * ```\n *\n * @sample {gantt} gantt/grid-axis/date-time-label-formats\n *         Gantt chart with custom axis date format.\n *\n * @apioption xAxis.dateTimeLabelFormats\n */\n/**\n * Set grid options for the axis labels. Requires Highcharts Gantt.\n *\n * @since     6.2.0\n * @product   gantt\n * @apioption xAxis.grid\n */\n/**\n * Enable grid on the axis labels. Defaults to true for Gantt charts.\n *\n * @type      {boolean}\n * @default   true\n * @since     6.2.0\n * @product   gantt\n * @apioption xAxis.grid.enabled\n */\n/**\n * Set specific options for each column (or row for horizontal axes) in the\n * grid. Each extra column/row is its own axis, and the axis options can be set\n * here.\n *\n * @sample gantt/demo/left-axis-table\n *         Left axis as a table\n * @sample gantt/demo/treegrid-columns\n *         Collapsible tree grid with columns\n *\n * @type      {Array<Highcharts.XAxisOptions>}\n * @apioption xAxis.grid.columns\n */\n/**\n * Set border color for the label grid lines.\n *\n * @type      {Highcharts.ColorString}\n * @default   #e6e6e6\n * @apioption xAxis.grid.borderColor\n */\n/**\n * Set border width of the label grid lines.\n *\n * @type      {number}\n * @default   1\n * @apioption xAxis.grid.borderWidth\n */\n/**\n * Set cell height for grid axis labels. By default this is calculated from font\n * size. This option only applies to horizontal axes. For vertical axes, check\n * the [#yAxis.staticScale](yAxis.staticScale) option.\n *\n * @sample gantt/grid-axis/cellheight\n *         Gant chart with custom cell height\n * @type      {number}\n * @apioption xAxis.grid.cellHeight\n */\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Gantt/Tree.js\n/* *\n *\n *  (c) 2016-2024 Highsoft AS\n *\n *  Authors: Jon Arild Nygard\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\n/* *\n *\n *  Imports\n *\n * */\n\nvar Tree_extend = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).extend, Tree_isNumber = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isNumber, Tree_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Creates an object map from parent id to children's index.\n *\n * @private\n * @function Highcharts.Tree#getListOfParents\n *\n * @param {Array<*>} data\n *        List of points set in options. `Array.parent` is parent id of point.\n *\n * @return {Highcharts.Dictionary<Array<*>>}\n * Map from parent id to children index in data\n */\nfunction getListOfParents(data) {\n    var root = '',\n        ids = [],\n        listOfParents = data.reduce(function (prev,\n        curr) {\n            var _a = curr.parent,\n        parent = _a === void 0 ? '' : _a,\n        id = curr.id;\n        if (typeof prev[parent] === 'undefined') {\n            prev[parent] = [];\n        }\n        prev[parent].push(curr);\n        if (id) {\n            ids.push(id);\n        }\n        return prev;\n    }, {});\n    Object.keys(listOfParents).forEach(function (node) {\n        var _a;\n        if ((node !== root) && (ids.indexOf(node) === -1)) {\n            var adoptedByRoot = listOfParents[node].map(function (orphan) {\n                    var parentExcluded = __rest(orphan,\n                []); // #15196\n                    return parentExcluded;\n            });\n            (_a = listOfParents[root]).push.apply(_a, adoptedByRoot);\n            delete listOfParents[node];\n        }\n    });\n    return listOfParents;\n}\n/** @private */\nfunction getNode(id, parent, level, data, mapOfIdToChildren, options) {\n    var after = options && options.after,\n        before = options && options.before,\n        node = {\n            data: data,\n            depth: level - 1,\n            id: id,\n            level: level,\n            parent: (parent || '')\n        };\n    var descendants = 0,\n        height = 0,\n        start,\n        end;\n    // Allow custom logic before the children has been created.\n    if (typeof before === 'function') {\n        before(node, options);\n    }\n    // Call getNode recursively on the children. Calculate the height of the\n    // node, and the number of descendants.\n    var children = ((mapOfIdToChildren[id] || [])).map(function (child) {\n            var node = getNode(child.id,\n        id, (level + 1),\n        child,\n        mapOfIdToChildren,\n        options),\n        childStart = child.start || NaN,\n        childEnd = (child.milestone === true ?\n                childStart :\n                child.end ||\n                    NaN);\n        // Start should be the lowest child.start.\n        start = ((!Tree_isNumber(start) || childStart < start) ?\n            childStart :\n            start);\n        // End should be the largest child.end.\n        // If child is milestone, then use start as end.\n        end = ((!Tree_isNumber(end) || childEnd > end) ?\n            childEnd :\n            end);\n        descendants = descendants + 1 + node.descendants;\n        height = Math.max(node.height + 1, height);\n        return node;\n    });\n    // Calculate start and end for point if it is not already explicitly set.\n    if (data) {\n        data.start = Tree_pick(data.start, start);\n        data.end = Tree_pick(data.end, end);\n    }\n    Tree_extend(node, {\n        children: children,\n        descendants: descendants,\n        height: height\n    });\n    // Allow custom logic after the children has been created.\n    if (typeof after === 'function') {\n        after(node, options);\n    }\n    return node;\n}\n/** @private */\nfunction getTree(data, options) {\n    return getNode('', null, 1, null, getListOfParents(data), options);\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar Tree = {\n    getNode: getNode,\n    getTree: getTree\n};\n/* harmony default export */ var Gantt_Tree = (Tree);\n\n;// ./code/es5/es-modules/Core/Axis/TreeGrid/TreeGridTick.js\n/* *\n *\n *  (c) 2016 Highsoft AS\n *  Authors: Jon Arild Nygard\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar TreeGridTick_addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, TreeGridTick_removeEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).removeEvent, TreeGridTick_isObject = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isObject, TreeGridTick_isNumber = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isNumber, TreeGridTick_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick, TreeGridTick_wrap = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).wrap;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction onTickInit() {\n    var tick = this;\n    if (!tick.treeGrid) {\n        tick.treeGrid = new TreeGridTickAdditions(tick);\n    }\n}\n/**\n * @private\n */\nfunction onTickHover(label) {\n    label.addClass('highcharts-treegrid-node-active');\n    if (!label.renderer.styledMode) {\n        label.css({\n            textDecoration: 'underline'\n        });\n    }\n}\n/**\n * @private\n */\nfunction onTickHoverExit(label, options) {\n    var css = TreeGridTick_isObject(options.style) ? options.style : {};\n    label.removeClass('highcharts-treegrid-node-active');\n    if (!label.renderer.styledMode) {\n        label.css({ textDecoration: (css.textDecoration || 'none') });\n    }\n}\n/**\n * @private\n */\nfunction renderLabelIcon(tick, params) {\n    var _a;\n    var treeGrid = tick.treeGrid,\n        isNew = !treeGrid.labelIcon,\n        renderer = params.renderer,\n        labelBox = params.xy,\n        options = params.options,\n        width = options.width || 0,\n        height = options.height || 0,\n        padding = ((_a = options.padding) !== null && _a !== void 0 ? _a : tick.axis.linkedParent) ? 0 : 5,\n        iconCenter = {\n            x: labelBox.x - (width / 2) - padding,\n            y: labelBox.y - (height / 2)\n        },\n        rotation = params.collapsed ? 90 : 180,\n        shouldRender = params.show && TreeGridTick_isNumber(iconCenter.y);\n    var icon = treeGrid.labelIcon;\n    if (!icon) {\n        treeGrid.labelIcon = icon = renderer\n            .path(renderer.symbols[options.type](options.x || 0, options.y || 0, width, height))\n            .addClass('highcharts-label-icon')\n            .add(params.group);\n    }\n    // Set the new position, and show or hide\n    icon[shouldRender ? 'show' : 'hide'](); // #14904, #1338\n    // Presentational attributes\n    if (!renderer.styledMode) {\n        icon\n            .attr({\n            cursor: 'pointer',\n            'fill': TreeGridTick_pick(params.color, \"#666666\" /* Palette.neutralColor60 */),\n            'stroke-width': 1,\n            stroke: options.lineColor,\n            strokeWidth: options.lineWidth || 0\n        });\n    }\n    // Update the icon positions\n    icon[isNew ? 'attr' : 'animate']({\n        translateX: iconCenter.x,\n        translateY: iconCenter.y,\n        rotation: rotation\n    });\n}\n/**\n * @private\n */\nfunction wrapGetLabelPosition(proceed, x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {\n    var tick = this,\n        lbOptions = TreeGridTick_pick(tick.options && tick.options.labels,\n        labelOptions),\n        pos = tick.pos,\n        axis = tick.axis,\n        isTreeGrid = axis.type === 'treegrid',\n        result = proceed.apply(tick,\n        [x,\n        y,\n        label,\n        horiz,\n        lbOptions,\n        tickmarkOffset,\n        index,\n        step]);\n    var mapOfPosToGridNode,\n        node,\n        level;\n    if (isTreeGrid) {\n        var _a = (lbOptions && TreeGridTick_isObject(lbOptions.symbol,\n            true) ?\n                lbOptions.symbol :\n                {}),\n            _b = _a.width,\n            width = _b === void 0 ? 0 : _b,\n            _c = _a.padding,\n            padding = _c === void 0 ? axis.linkedParent ? 0 : 5 : _c,\n            indentation = (lbOptions && TreeGridTick_isNumber(lbOptions.indentation) ?\n                lbOptions.indentation :\n                0);\n        mapOfPosToGridNode = axis.treeGrid.mapOfPosToGridNode;\n        node = mapOfPosToGridNode && mapOfPosToGridNode[pos];\n        level = (node && node.depth) || 1;\n        result.x += (\n        // Add space for symbols\n        (width + (padding * 2)) +\n            // Apply indentation\n            ((level - 1) * indentation));\n    }\n    return result;\n}\n/**\n * @private\n */\nfunction wrapRenderLabel(proceed) {\n    var tick = this, pos = tick.pos, axis = tick.axis, label = tick.label, tickGrid = tick.treeGrid, tickOptions = tick.options, icon = tickGrid === null || tickGrid === void 0 ? void 0 : tickGrid.labelIcon, labelElement = label === null || label === void 0 ? void 0 : label.element, axisGrid = axis.treeGrid, axisOptions = axis.options, chart = axis.chart, tickPositions = axis.tickPositions, mapOfPosToGridNode = axisGrid.mapOfPosToGridNode, labelOptions = TreeGridTick_pick(tickOptions === null || tickOptions === void 0 ? void 0 : tickOptions.labels, axisOptions === null || axisOptions === void 0 ? void 0 : axisOptions.labels), symbolOptions = (labelOptions && TreeGridTick_isObject(labelOptions.symbol, true) ?\n            labelOptions.symbol :\n            {}), node = mapOfPosToGridNode && mapOfPosToGridNode[pos], _a = node || {}, descendants = _a.descendants, depth = _a.depth, hasDescendants = node && descendants && descendants > 0, level = depth, isTreeGridElement = (axis.type === 'treegrid') && labelElement, shouldRender = tickPositions.indexOf(pos) > -1, prefixClassName = 'highcharts-treegrid-node-', prefixLevelClass = prefixClassName + 'level-', styledMode = chart.styledMode;\n    var collapsed,\n        addClassName,\n        removeClassName;\n    if (isTreeGridElement && node) {\n        // Add class name for hierarchical styling.\n        label\n            .removeClass(new RegExp(prefixLevelClass + '.*'))\n            .addClass(prefixLevelClass + level);\n    }\n    proceed.apply(tick, Array.prototype.slice.call(arguments, 1));\n    if (isTreeGridElement && hasDescendants) {\n        collapsed = axisGrid.isCollapsed(node);\n        renderLabelIcon(tick, {\n            color: (!styledMode &&\n                label.styles.color ||\n                ''),\n            collapsed: collapsed,\n            group: label.parentGroup,\n            options: symbolOptions,\n            renderer: label.renderer,\n            show: shouldRender,\n            xy: label.xy\n        });\n        // Add class name for the node.\n        addClassName = prefixClassName +\n            (collapsed ? 'collapsed' : 'expanded');\n        removeClassName = prefixClassName +\n            (collapsed ? 'expanded' : 'collapsed');\n        label\n            .addClass(addClassName)\n            .removeClass(removeClassName);\n        if (!styledMode) {\n            label.css({\n                cursor: 'pointer'\n            });\n        }\n        // Add events to both label text and icon\n        [label, icon].forEach(function (object) {\n            if (object && !object.attachedTreeGridEvents) {\n                // On hover\n                TreeGridTick_addEvent(object.element, 'mouseover', function () {\n                    onTickHover(label);\n                });\n                // On hover out\n                TreeGridTick_addEvent(object.element, 'mouseout', function () {\n                    onTickHoverExit(label, labelOptions);\n                });\n                TreeGridTick_addEvent(object.element, 'click', function () {\n                    tickGrid.toggleCollapse();\n                });\n                object.attachedTreeGridEvents = true;\n            }\n        });\n    }\n    else if (icon) {\n        TreeGridTick_removeEvent(labelElement);\n        label === null || label === void 0 ? void 0 : label.css({ cursor: 'default' });\n        icon.destroy();\n    }\n}\n/* *\n *\n *  Classes\n *\n * */\n/**\n * @private\n * @class\n */\nvar TreeGridTickAdditions = /** @class */ (function () {\n    /* *\n     *\n     *  Constructors\n     *\n     * */\n    /**\n     * @private\n     */\n    function TreeGridTickAdditions(tick) {\n        this.tick = tick;\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    TreeGridTickAdditions.compose = function (TickClass) {\n        var tickProto = TickClass.prototype;\n        if (!tickProto.toggleCollapse) {\n            TreeGridTick_addEvent(TickClass, 'init', onTickInit);\n            TreeGridTick_wrap(tickProto, 'getLabelPosition', wrapGetLabelPosition);\n            TreeGridTick_wrap(tickProto, 'renderLabel', wrapRenderLabel);\n            // Backwards compatibility\n            tickProto.collapse = function (redraw) {\n                this.treeGrid.collapse(redraw);\n            };\n            tickProto.expand = function (redraw) {\n                this.treeGrid.expand(redraw);\n            };\n            tickProto.toggleCollapse = function (redraw) {\n                this.treeGrid.toggleCollapse(redraw);\n            };\n        }\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Collapse the grid cell. Used when axis is of type treegrid.\n     *\n     * @see gantt/treegrid-axis/collapsed-dynamically/demo.js\n     *\n     * @private\n     * @function Highcharts.Tick#collapse\n     *\n     * @param {boolean} [redraw=true]\n     * Whether to redraw the chart or wait for an explicit call to\n     * {@link Highcharts.Chart#redraw}\n     */\n    TreeGridTickAdditions.prototype.collapse = function (redraw) {\n        var tick = this.tick,\n            axis = tick.axis,\n            brokenAxis = axis.brokenAxis;\n        if (brokenAxis &&\n            axis.treeGrid.mapOfPosToGridNode) {\n            var pos = tick.pos,\n                node = axis.treeGrid.mapOfPosToGridNode[pos],\n                breaks = axis.treeGrid.collapse(node);\n            brokenAxis.setBreaks(breaks, TreeGridTick_pick(redraw, true));\n        }\n    };\n    /**\n     * Destroy remaining labelIcon if exist.\n     *\n     * @private\n     * @function Highcharts.Tick#destroy\n     */\n    TreeGridTickAdditions.prototype.destroy = function () {\n        if (this.labelIcon) {\n            this.labelIcon.destroy();\n        }\n    };\n    /**\n     * Expand the grid cell. Used when axis is of type treegrid.\n     *\n     * @see gantt/treegrid-axis/collapsed-dynamically/demo.js\n     *\n     * @private\n     * @function Highcharts.Tick#expand\n     *\n     * @param {boolean} [redraw=true]\n     * Whether to redraw the chart or wait for an explicit call to\n     * {@link Highcharts.Chart#redraw}\n     */\n    TreeGridTickAdditions.prototype.expand = function (redraw) {\n        var _a = this.tick,\n            pos = _a.pos,\n            axis = _a.axis,\n            treeGrid = axis.treeGrid,\n            brokenAxis = axis.brokenAxis,\n            posMappedNodes = treeGrid.mapOfPosToGridNode;\n        if (brokenAxis && posMappedNodes) {\n            var node = posMappedNodes[pos],\n                breaks = treeGrid.expand(node);\n            brokenAxis.setBreaks(breaks, TreeGridTick_pick(redraw, true));\n        }\n    };\n    /**\n     * Toggle the collapse/expand state of the grid cell. Used when axis is\n     * of type treegrid.\n     *\n     * @see gantt/treegrid-axis/collapsed-dynamically/demo.js\n     *\n     * @private\n     * @function Highcharts.Tick#toggleCollapse\n     *\n     * @param {boolean} [redraw=true]\n     * Whether to redraw the chart or wait for an explicit call to\n     * {@link Highcharts.Chart#redraw}\n     */\n    TreeGridTickAdditions.prototype.toggleCollapse = function (redraw) {\n        var tick = this.tick,\n            axis = tick.axis,\n            brokenAxis = axis.brokenAxis;\n        if (brokenAxis &&\n            axis.treeGrid.mapOfPosToGridNode) {\n            var pos = tick.pos,\n                node = axis.treeGrid.mapOfPosToGridNode[pos],\n                breaks = axis.treeGrid.toggleCollapse(node);\n            brokenAxis.setBreaks(breaks, TreeGridTick_pick(redraw, true));\n        }\n    };\n    return TreeGridTickAdditions;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var TreeGridTick = (TreeGridTickAdditions);\n\n;// ./code/es5/es-modules/Series/TreeUtilities.js\n/* *\n *\n *  (c) 2014-2024 Highsoft AS\n *\n *  Authors: Jon Arild Nygard / Oystein Moseng\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar TreeUtilities_extend = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).extend, TreeUtilities_isArray = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isArray, TreeUtilities_isNumber = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isNumber, TreeUtilities_isObject = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isObject, TreeUtilities_merge = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).merge, TreeUtilities_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick, TreeUtilities_relativeLength = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).relativeLength;\n/* *\n *\n *  Functions\n *\n * */\n/* eslint-disable valid-jsdoc */\n/**\n * @private\n */\nfunction getColor(node, options) {\n    var index = options.index,\n        mapOptionsToLevel = options.mapOptionsToLevel,\n        parentColor = options.parentColor,\n        parentColorIndex = options.parentColorIndex,\n        series = options.series,\n        colors = options.colors,\n        siblings = options.siblings,\n        points = series.points,\n        chartOptionsChart = series.chart.options.chart;\n    var getColorByPoint,\n        point,\n        level,\n        colorByPoint,\n        colorIndexByPoint,\n        color,\n        colorIndex;\n    /**\n     * @private\n     */\n    var variateColor = function (color) {\n            var colorVariation = level && level.colorVariation;\n        if (colorVariation &&\n            colorVariation.key === 'brightness' &&\n            index &&\n            siblings) {\n            return highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default().parse(color).brighten(colorVariation.to * (index / siblings)).get();\n        }\n        return color;\n    };\n    if (node) {\n        point = points[node.i];\n        level = mapOptionsToLevel[node.level] || {};\n        getColorByPoint = point && level.colorByPoint;\n        if (getColorByPoint) {\n            colorIndexByPoint = point.index % (colors ?\n                colors.length :\n                chartOptionsChart.colorCount);\n            colorByPoint = colors && colors[colorIndexByPoint];\n        }\n        // Select either point color, level color or inherited color.\n        if (!series.chart.styledMode) {\n            color = TreeUtilities_pick(point && point.options.color, level && level.color, colorByPoint, parentColor && variateColor(parentColor), series.color);\n        }\n        colorIndex = TreeUtilities_pick(point && point.options.colorIndex, level && level.colorIndex, colorIndexByPoint, parentColorIndex, options.colorIndex);\n    }\n    return {\n        color: color,\n        colorIndex: colorIndex\n    };\n}\n/**\n * Creates a map from level number to its given options.\n *\n * @private\n *\n * @param {Object} params\n * Object containing parameters.\n * - `defaults` Object containing default options. The default options are\n *   merged with the userOptions to get the final options for a specific\n *   level.\n * - `from` The lowest level number.\n * - `levels` User options from series.levels.\n * - `to` The highest level number.\n *\n * @return {Highcharts.Dictionary<object>|null}\n * Returns a map from level number to its given options.\n */\nfunction getLevelOptions(params) {\n    var result = {};\n    var defaults,\n        converted,\n        i,\n        from,\n        to,\n        levels;\n    if (TreeUtilities_isObject(params)) {\n        from = TreeUtilities_isNumber(params.from) ? params.from : 1;\n        levels = params.levels;\n        converted = {};\n        defaults = TreeUtilities_isObject(params.defaults) ? params.defaults : {};\n        if (TreeUtilities_isArray(levels)) {\n            converted = levels.reduce(function (obj, item) {\n                var level,\n                    levelIsConstant,\n                    options;\n                if (TreeUtilities_isObject(item) && TreeUtilities_isNumber(item.level)) {\n                    options = TreeUtilities_merge({}, item);\n                    levelIsConstant = TreeUtilities_pick(options.levelIsConstant, defaults.levelIsConstant);\n                    // Delete redundant properties.\n                    delete options.levelIsConstant;\n                    delete options.level;\n                    // Calculate which level these options apply to.\n                    level = item.level + (levelIsConstant ? 0 : from - 1);\n                    if (TreeUtilities_isObject(obj[level])) {\n                        TreeUtilities_merge(true, obj[level], options); // #16329\n                    }\n                    else {\n                        obj[level] = options;\n                    }\n                }\n                return obj;\n            }, {});\n        }\n        to = TreeUtilities_isNumber(params.to) ? params.to : 1;\n        for (i = 0; i <= to; i++) {\n            result[i] = TreeUtilities_merge({}, defaults, TreeUtilities_isObject(converted[i]) ? converted[i] : {});\n        }\n    }\n    return result;\n}\n/**\n * @private\n * @todo Combine buildTree and buildNode with setTreeValues\n * @todo Remove logic from Treemap and make it utilize this mixin.\n */\nfunction setTreeValues(tree, options) {\n    var before = options.before,\n        idRoot = options.idRoot,\n        mapIdToNode = options.mapIdToNode,\n        nodeRoot = mapIdToNode[idRoot],\n        levelIsConstant = (options.levelIsConstant !== false),\n        points = options.points,\n        point = points[tree.i],\n        optionsPoint = point && point.options || {},\n        children = [];\n    var childrenTotal = 0;\n    tree.levelDynamic = tree.level - (levelIsConstant ? 0 : nodeRoot.level);\n    tree.name = TreeUtilities_pick(point && point.name, '');\n    tree.visible = (idRoot === tree.id ||\n        options.visible === true);\n    if (typeof before === 'function') {\n        tree = before(tree, options);\n    }\n    // First give the children some values\n    tree.children.forEach(function (child, i) {\n        var newOptions = TreeUtilities_extend({},\n            options);\n        TreeUtilities_extend(newOptions, {\n            index: i,\n            siblings: tree.children.length,\n            visible: tree.visible\n        });\n        child = setTreeValues(child, newOptions);\n        children.push(child);\n        if (child.visible) {\n            childrenTotal += child.val;\n        }\n    });\n    // Set the values\n    var value = TreeUtilities_pick(optionsPoint.value,\n        childrenTotal);\n    tree.visible = value >= 0 && (childrenTotal > 0 || tree.visible);\n    tree.children = children;\n    tree.childrenTotal = childrenTotal;\n    tree.isLeaf = tree.visible && !childrenTotal;\n    tree.val = value;\n    return tree;\n}\n/**\n * Update the rootId property on the series. Also makes sure that it is\n * accessible to exporting.\n *\n * @private\n *\n * @param {Object} series\n * The series to operate on.\n *\n * @return {string}\n * Returns the resulting rootId after update.\n */\nfunction updateRootId(series) {\n    var rootId,\n        options;\n    if (TreeUtilities_isObject(series)) {\n        // Get the series options.\n        options = TreeUtilities_isObject(series.options) ? series.options : {};\n        // Calculate the rootId.\n        rootId = TreeUtilities_pick(series.rootNode, options.rootId, '');\n        // Set rootId on series.userOptions to pick it up in exporting.\n        if (TreeUtilities_isObject(series.userOptions)) {\n            series.userOptions.rootId = rootId;\n        }\n        // Set rootId on series to pick it up on next update.\n        series.rootNode = rootId;\n    }\n    return rootId;\n}\n/**\n * Get the node width, which relies on the plot width and the nodeDistance\n * option.\n *\n * @private\n */\nfunction getNodeWidth(series, columnCount) {\n    var chart = series.chart,\n        options = series.options,\n        _a = options.nodeDistance,\n        nodeDistance = _a === void 0 ? 0 : _a,\n        _b = options.nodeWidth,\n        nodeWidth = _b === void 0 ? 0 : _b,\n        _c = chart.plotSizeX,\n        plotSizeX = _c === void 0 ? 1 : _c;\n    // Node width auto means they are evenly distributed along the width of\n    // the plot area\n    if (nodeWidth === 'auto') {\n        if (typeof nodeDistance === 'string' && /%$/.test(nodeDistance)) {\n            var fraction = parseFloat(nodeDistance) / 100,\n                total = columnCount + fraction * (columnCount - 1);\n            return plotSizeX / total;\n        }\n        var nDistance = Number(nodeDistance);\n        return ((plotSizeX + nDistance) /\n            (columnCount || 1)) - nDistance;\n    }\n    return TreeUtilities_relativeLength(nodeWidth, plotSizeX);\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar TreeUtilities = {\n    getColor: getColor,\n    getLevelOptions: getLevelOptions,\n    getNodeWidth: getNodeWidth,\n    setTreeValues: setTreeValues,\n    updateRootId: updateRootId\n};\n/* harmony default export */ var Series_TreeUtilities = (TreeUtilities);\n\n;// ./code/es5/es-modules/Core/Axis/TreeGrid/TreeGridAxis.js\n/* *\n *\n *  (c) 2016 Highsoft AS\n *  Authors: Jon Arild Nygard\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 TreeGridAxis_getLevelOptions = Series_TreeUtilities.getLevelOptions;\n\nvar TreeGridAxis_addEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).addEvent, TreeGridAxis_isArray = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isArray, TreeGridAxis_splat = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).splat, TreeGridAxis_find = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).find, TreeGridAxis_fireEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).fireEvent, TreeGridAxis_isObject = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isObject, TreeGridAxis_isString = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isString, TreeGridAxis_merge = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).merge, TreeGridAxis_pick = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).pick, TreeGridAxis_removeEvent = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).removeEvent, TreeGridAxis_wrap = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).wrap;\n/* *\n *\n *  Variables\n *\n * */\nvar TickConstructor;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction getBreakFromNode(node, max) {\n    var to = node.collapseEnd || 0;\n    var from = node.collapseStart || 0;\n    // In broken-axis, the axis.max is minimized until it is not within a\n    // break. Therefore, if break.to is larger than axis.max, the axis.to\n    // should not add the 0.5 axis.tickMarkOffset, to avoid adding a break\n    // larger than axis.max.\n    // TODO consider simplifying broken-axis and this might solve itself\n    if (to >= max) {\n        from -= 0.5;\n    }\n    return {\n        from: from,\n        to: to,\n        showPoints: false\n    };\n}\n/**\n * Creates a tree structure of the data, and the treegrid. Calculates\n * categories, and y-values of points based on the tree.\n *\n * @private\n * @function getTreeGridFromData\n *\n * @param {Array<Highcharts.GanttPointOptions>} data\n * All the data points to display in the axis.\n *\n * @param {boolean} uniqueNames\n * Whether or not the data node with the same name should share grid cell. If\n * true they do share cell. False by default.\n *\n * @param {number} numberOfSeries\n *\n * @return {Object}\n * Returns an object containing categories, mapOfIdToNode,\n * mapOfPosToGridNode, and tree.\n *\n * @todo There should be only one point per line.\n * @todo It should be optional to have one category per point, or merge\n *       cells\n * @todo Add unit-tests.\n */\nfunction getTreeGridFromData(data, uniqueNames, numberOfSeries) {\n    var categories = [],\n        collapsedNodes = [],\n        mapOfIdToNode = {},\n        uniqueNamesEnabled = uniqueNames || false;\n    var mapOfPosToGridNode = {},\n        posIterator = -1;\n    // Build the tree from the series data.\n    var treeParams = {\n            // After the children has been created.\n            after: function (node) {\n                var gridNode = mapOfPosToGridNode[node.pos];\n            var height = 0,\n                descendants = 0;\n            gridNode.children.forEach(function (child) {\n                descendants += (child.descendants || 0) + 1;\n                height = Math.max((child.height || 0) + 1, height);\n            });\n            gridNode.descendants = descendants;\n            gridNode.height = height;\n            if (gridNode.collapsed) {\n                collapsedNodes.push(gridNode);\n            }\n        },\n        // Before the children has been created.\n        before: function (node) {\n            var data = TreeGridAxis_isObject(node.data,\n                true) ?\n                    node.data :\n                    {},\n                name = TreeGridAxis_isString(data.name) ? data.name : '',\n                parentNode = mapOfIdToNode[node.parent],\n                parentGridNode = (TreeGridAxis_isObject(parentNode,\n                true) ?\n                    mapOfPosToGridNode[parentNode.pos] :\n                    null),\n                hasSameName = function (x) {\n                    return x.name === name;\n            };\n            var gridNode,\n                pos;\n            // If not unique names, look for sibling node with the same name\n            if (uniqueNamesEnabled &&\n                TreeGridAxis_isObject(parentGridNode, true) &&\n                !!(gridNode = TreeGridAxis_find(parentGridNode.children, hasSameName))) {\n                // If there is a gridNode with the same name, reuse position\n                pos = gridNode.pos;\n                // Add data node to list of nodes in the grid node.\n                gridNode.nodes.push(node);\n            }\n            else {\n                // If it is a new grid node, increment position.\n                pos = posIterator++;\n            }\n            // Add new grid node to map.\n            if (!mapOfPosToGridNode[pos]) {\n                mapOfPosToGridNode[pos] = gridNode = {\n                    depth: parentGridNode ? parentGridNode.depth + 1 : 0,\n                    name: name,\n                    id: data.id,\n                    nodes: [node],\n                    children: [],\n                    pos: pos\n                };\n                // If not root, then add name to categories.\n                if (pos !== -1) {\n                    categories.push(name);\n                }\n                // Add name to list of children.\n                if (TreeGridAxis_isObject(parentGridNode, true)) {\n                    parentGridNode.children.push(gridNode);\n                }\n            }\n            // Add data node to map\n            if (TreeGridAxis_isString(node.id)) {\n                mapOfIdToNode[node.id] = node;\n            }\n            // If one of the points are collapsed, then start the grid node\n            // in collapsed state.\n            if (gridNode &&\n                data.collapsed === true) {\n                gridNode.collapsed = true;\n            }\n            // Assign pos to data node\n            node.pos = pos;\n        }\n    };\n    var updateYValuesAndTickPos = function (map,\n        numberOfSeries) {\n            var setValues = function (gridNode,\n        start,\n        result) {\n                var nodes = gridNode.nodes,\n        padding = 0.5;\n            var end = start + (start === -1 ? 0 : numberOfSeries - 1);\n            var diff = (end - start) / 2,\n                pos = start + diff;\n            nodes.forEach(function (node) {\n                var data = node.data;\n                if (TreeGridAxis_isObject(data, true)) {\n                    // Update point\n                    data.y = start + (data.seriesIndex || 0);\n                    // Remove the property once used\n                    delete data.seriesIndex;\n                }\n                node.pos = pos;\n            });\n            result[pos] = gridNode;\n            gridNode.pos = pos;\n            gridNode.tickmarkOffset = diff + padding;\n            gridNode.collapseStart = end + padding;\n            gridNode.children.forEach(function (child) {\n                setValues(child, end + 1, result);\n                end = (child.collapseEnd || 0) - padding;\n            });\n            // Set collapseEnd to the end of the last child node.\n            gridNode.collapseEnd = end + padding;\n            return result;\n        };\n        return setValues(map['-1'], -1, {});\n    };\n    // Create tree from data\n    var tree = Gantt_Tree.getTree(data,\n        treeParams);\n    // Update y values of data, and set calculate tick positions.\n    mapOfPosToGridNode = updateYValuesAndTickPos(mapOfPosToGridNode, numberOfSeries);\n    // Return the resulting data.\n    return {\n        categories: categories,\n        mapOfIdToNode: mapOfIdToNode,\n        mapOfPosToGridNode: mapOfPosToGridNode,\n        collapsedNodes: collapsedNodes,\n        tree: tree\n    };\n}\n/**\n * Builds the tree of categories and calculates its positions.\n * @private\n * @param {Object} e Event object\n * @param {Object} e.target The chart instance which the event was fired on.\n * @param {object[]} e.target.axes The axes of the chart.\n */\nfunction onBeforeRender(e) {\n    var chart = e.target,\n        axes = chart.axes;\n    axes.filter(function (axis) { return axis.type === 'treegrid'; }).forEach(function (axis) {\n        var options = axis.options || {},\n            labelOptions = options.labels,\n            uniqueNames = axis.uniqueNames,\n            max = chart.time.parse(options.max), \n            // Check whether any of series is rendering for the first\n            // time, visibility has changed, or its data is dirty, and\n            // only then update. #10570, #10580. Also check if\n            // mapOfPosToGridNode exists. #10887\n            isDirty = (!axis.treeGrid.mapOfPosToGridNode ||\n                axis.series.some(function (series) {\n                    return !series.hasRendered ||\n                        series.isDirtyData ||\n                        series.isDirty;\n            }));\n        var numberOfSeries = 0,\n            data,\n            treeGrid;\n        if (isDirty) {\n            var seriesHasPrimitivePoints_1 = [];\n            // Concatenate data from all series assigned to this axis.\n            data = axis.series.reduce(function (arr, s) {\n                var seriesData = (s.options.data || []),\n                    firstPoint = seriesData[0], \n                    // Check if the first point is a simple array of values.\n                    // If so we assume that this is the case for all points.\n                    foundPrimitivePoint = (Array.isArray(firstPoint) &&\n                        !firstPoint.find(function (value) { return (typeof value === 'object'); }));\n                seriesHasPrimitivePoints_1.push(foundPrimitivePoint);\n                if (s.visible) {\n                    // Push all data to array\n                    seriesData.forEach(function (pointOptions) {\n                        // For using keys, or when using primitive points,\n                        // rebuild the data structure\n                        if (foundPrimitivePoint ||\n                            (s.options.keys && s.options.keys.length)) {\n                            pointOptions = s.pointClass.prototype\n                                .optionsToObject\n                                .call({ series: s }, pointOptions);\n                            s.pointClass.setGanttPointAliases(pointOptions, chart);\n                        }\n                        if (TreeGridAxis_isObject(pointOptions, true)) {\n                            // Set series index on data. Removed again\n                            // after use.\n                            pointOptions.seriesIndex = (numberOfSeries);\n                            arr.push(pointOptions);\n                        }\n                    });\n                    // Increment series index\n                    if (uniqueNames === true) {\n                        numberOfSeries++;\n                    }\n                }\n                return arr;\n            }, []);\n            // If max is higher than set data - add a\n            // dummy data to render categories #10779\n            if (max && data.length < max) {\n                for (var i = data.length; i <= max; i++) {\n                    data.push({\n                        // Use the zero-width character\n                        // to avoid conflict with uniqueNames\n                        name: i + '\\u200B'\n                    });\n                }\n            }\n            // `setScale` is fired after all the series is initialized,\n            // which is an ideal time to update the axis.categories.\n            treeGrid = getTreeGridFromData(data, uniqueNames || false, (uniqueNames === true) ? numberOfSeries : 1);\n            // Assign values to the axis.\n            axis.categories = treeGrid.categories;\n            axis.treeGrid.mapOfPosToGridNode = (treeGrid.mapOfPosToGridNode);\n            axis.hasNames = true;\n            axis.treeGrid.tree = treeGrid.tree;\n            // Update yData now that we have calculated the y values\n            axis.series.forEach(function (series, index) {\n                var axisData = (series.options.data || []).map(function (d) {\n                        if (seriesHasPrimitivePoints_1[index] ||\n                            (TreeGridAxis_isArray(d) &&\n                                series.options.keys &&\n                                series.options.keys.length)) {\n                            // Get the axisData from the data array used to\n                            // build the treeGrid where has been modified\n                            data.forEach(function (point) {\n                                var toArray = TreeGridAxis_splat(d);\n                            if (toArray.indexOf(point.x || 0) >= 0 &&\n                                toArray.indexOf(point.x2 || 0) >= 0) {\n                                d = point;\n                            }\n                        });\n                    }\n                    return TreeGridAxis_isObject(d, true) ? TreeGridAxis_merge(d) : d;\n                });\n                // Avoid destroying points when series is not visible\n                if (series.visible) {\n                    series.setData(axisData, false);\n                }\n            });\n            // Calculate the label options for each level in the tree.\n            axis.treeGrid.mapOptionsToLevel =\n                TreeGridAxis_getLevelOptions({\n                    defaults: labelOptions,\n                    from: 1,\n                    levels: labelOptions && labelOptions.levels,\n                    to: axis.treeGrid.tree && axis.treeGrid.tree.height\n                });\n            // Setting initial collapsed nodes\n            if (e.type === 'beforeRender') {\n                axis.treeGrid.collapsedNodes = treeGrid.collapsedNodes;\n            }\n        }\n    });\n}\n/**\n * Generates a tick for initial positioning.\n *\n * @private\n * @function Highcharts.GridAxis#generateTick\n *\n * @param {Function} proceed\n * The original generateTick function.\n *\n * @param {number} pos\n * The tick position in axis values.\n */\nfunction wrapGenerateTick(proceed, pos) {\n    var axis = this,\n        mapOptionsToLevel = axis.treeGrid.mapOptionsToLevel || {},\n        isTreeGrid = axis.type === 'treegrid',\n        ticks = axis.ticks;\n    var tick = ticks[pos],\n        levelOptions,\n        options,\n        gridNode;\n    if (isTreeGrid &&\n        axis.treeGrid.mapOfPosToGridNode) {\n        gridNode = axis.treeGrid.mapOfPosToGridNode[pos];\n        levelOptions = mapOptionsToLevel[gridNode.depth];\n        if (levelOptions) {\n            options = {\n                labels: levelOptions\n            };\n        }\n        if (!tick &&\n            TickConstructor) {\n            ticks[pos] = tick =\n                new TickConstructor(axis, pos, void 0, void 0, {\n                    category: gridNode.name,\n                    tickmarkOffset: gridNode.tickmarkOffset,\n                    options: options\n                });\n        }\n        else {\n            // Update labels depending on tick interval\n            tick.parameters.category = gridNode.name;\n            tick.options = options;\n            tick.addLabel();\n        }\n    }\n    else {\n        proceed.apply(axis, Array.prototype.slice.call(arguments, 1));\n    }\n}\n/**\n * @private\n */\nfunction wrapInit(proceed, chart, userOptions, coll) {\n    var axis = this,\n        isTreeGrid = userOptions.type === 'treegrid';\n    if (!axis.treeGrid) {\n        axis.treeGrid = new TreeGridAxisAdditions(axis);\n    }\n    // Set default and forced options for TreeGrid\n    if (isTreeGrid) {\n        // Add event for updating the categories of a treegrid.\n        // NOTE Preferably these events should be set on the axis.\n        TreeGridAxis_addEvent(chart, 'beforeRender', onBeforeRender);\n        TreeGridAxis_addEvent(chart, 'beforeRedraw', onBeforeRender);\n        // Add new collapsed nodes on addseries\n        TreeGridAxis_addEvent(chart, 'addSeries', function (e) {\n            if (e.options.data) {\n                var treeGrid = getTreeGridFromData(e.options.data,\n                    userOptions.uniqueNames || false, 1);\n                axis.treeGrid.collapsedNodes = (axis.treeGrid.collapsedNodes || []).concat(treeGrid.collapsedNodes);\n            }\n        });\n        // Collapse all nodes in axis.treegrid.collapsednodes\n        // where collapsed equals true.\n        TreeGridAxis_addEvent(axis, 'foundExtremes', function () {\n            if (axis.treeGrid.collapsedNodes) {\n                axis.treeGrid.collapsedNodes.forEach(function (node) {\n                    var breaks = axis.treeGrid.collapse(node);\n                    if (axis.brokenAxis) {\n                        axis.brokenAxis.setBreaks(breaks, false);\n                        // Remove the node from the axis collapsedNodes\n                        if (axis.treeGrid.collapsedNodes) {\n                            axis.treeGrid.collapsedNodes = axis.treeGrid\n                                .collapsedNodes\n                                .filter(function (n) { return ((node.collapseStart !==\n                                n.collapseStart) ||\n                                node.collapseEnd !== n.collapseEnd); });\n                        }\n                    }\n                });\n            }\n        });\n        // If staticScale is not defined on the yAxis\n        // and chart height is set, set axis.isDirty\n        // to ensure collapsing works (#12012)\n        TreeGridAxis_addEvent(axis, 'afterBreaks', function () {\n            if (axis.coll === 'yAxis' &&\n                !axis.staticScale &&\n                axis.chart.options.chart.height) {\n                axis.isDirty = true;\n            }\n        });\n        userOptions = TreeGridAxis_merge({\n            // Default options\n            grid: {\n                enabled: true\n            },\n            // TODO: add support for align in treegrid.\n            labels: {\n                align: 'left',\n                /**\n                * Set options on specific levels in a tree grid axis. Takes\n                * precedence over labels options.\n                *\n                * @sample {gantt} gantt/treegrid-axis/labels-levels\n                *         Levels on TreeGrid Labels\n                *\n                * @type      {Array<*>}\n                * @product   gantt\n                * @apioption yAxis.labels.levels\n                *\n                * @private\n                */\n                levels: [{\n                        /**\n                        * Specify the level which the options within this object\n                        * applies to.\n                        *\n                        * @type      {number}\n                        * @product   gantt\n                        * @apioption yAxis.labels.levels.level\n                        *\n                        * @private\n                        */\n                        level: void 0\n                    }, {\n                        level: 1,\n                        /**\n                         * @type      {Highcharts.CSSObject}\n                         * @product   gantt\n                         * @apioption yAxis.labels.levels.style\n                         *\n                         * @private\n                         */\n                        style: {\n                            /** @ignore-option */\n                            fontWeight: 'bold'\n                        }\n                    }],\n                /**\n                 * The symbol for the collapse and expand icon in a\n                 * treegrid.\n                 *\n                 * @product      gantt\n                 * @optionparent yAxis.labels.symbol\n                 *\n                 * @private\n                 */\n                symbol: {\n                    /**\n                     * The symbol type. Points to a definition function in\n                     * the `Highcharts.Renderer.symbols` collection.\n                     *\n                     * @type {Highcharts.SymbolKeyValue}\n                     *\n                     * @private\n                     */\n                    type: 'triangle',\n                    x: -5,\n                    y: -5,\n                    height: 10,\n                    width: 10\n                }\n            },\n            uniqueNames: false\n        }, userOptions, {\n            // Forced options\n            reversed: true\n        });\n    }\n    // Now apply the original function with the original arguments, which are\n    // sliced off this function's arguments\n    proceed.apply(axis, [chart, userOptions, coll]);\n    if (isTreeGrid) {\n        axis.hasNames = true;\n        axis.options.showLastLabel = true;\n    }\n}\n/**\n * Set the tick positions, tickInterval, axis min and max.\n *\n * @private\n * @function Highcharts.GridAxis#setTickInterval\n *\n * @param {Function} proceed\n * The original setTickInterval function.\n */\nfunction wrapSetTickInterval(proceed) {\n    var _a,\n        _b,\n        _c,\n        _d,\n        _e;\n    var axis = this,\n        options = axis.options,\n        time = axis.chart.time,\n        linkedParent = typeof options.linkedTo === 'number' ?\n            (_a = this.chart[axis.coll]) === null || _a === void 0 ? void 0 : _a[options.linkedTo] :\n            void 0,\n        isTreeGrid = axis.type === 'treegrid';\n    if (isTreeGrid) {\n        axis.min = (_c = (_b = axis.userMin) !== null && _b !== void 0 ? _b : time.parse(options.min)) !== null && _c !== void 0 ? _c : axis.dataMin;\n        axis.max = (_e = (_d = axis.userMax) !== null && _d !== void 0 ? _d : time.parse(options.max)) !== null && _e !== void 0 ? _e : axis.dataMax;\n        TreeGridAxis_fireEvent(axis, 'foundExtremes');\n        // `setAxisTranslation` modifies the min and max according to axis\n        // breaks.\n        axis.setAxisTranslation();\n        axis.tickInterval = 1;\n        axis.tickmarkOffset = 0.5;\n        axis.tickPositions = axis.treeGrid.mapOfPosToGridNode ?\n            axis.treeGrid.getTickPositions() :\n            [];\n        if (linkedParent) {\n            var linkedParentExtremes = linkedParent.getExtremes();\n            axis.min = TreeGridAxis_pick(linkedParentExtremes.min, linkedParentExtremes.dataMin);\n            axis.max = TreeGridAxis_pick(linkedParentExtremes.max, linkedParentExtremes.dataMax);\n            axis.tickPositions = linkedParent.tickPositions;\n        }\n        axis.linkedParent = linkedParent;\n    }\n    else {\n        proceed.apply(axis, Array.prototype.slice.call(arguments, 1));\n    }\n}\n/**\n * Wrap axis redraw to remove TreeGrid events from ticks\n *\n * @private\n * @function Highcharts.GridAxis#redraw\n *\n * @param {Function} proceed\n * The original setTickInterval function.\n */\nfunction wrapRedraw(proceed) {\n    var axis = this,\n        isTreeGrid = this.type === 'treegrid';\n    if (isTreeGrid && axis.visible) {\n        axis.tickPositions.forEach(function (pos) {\n            var tick = axis.ticks[pos];\n            if (tick.label && tick.label.attachedTreeGridEvents) {\n                TreeGridAxis_removeEvent(tick.label.element);\n                tick.label.attachedTreeGridEvents = false;\n            }\n        });\n    }\n    proceed.apply(axis, Array.prototype.slice.call(arguments, 1));\n}\n/* *\n *\n *  Classes\n *\n * */\n/**\n * @private\n * @class\n */\nvar TreeGridAxisAdditions = /** @class */ (function () {\n    /* *\n     *\n     *  Constructors\n     *\n     * */\n    /**\n     * @private\n     */\n    function TreeGridAxisAdditions(axis) {\n        this.axis = axis;\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    TreeGridAxisAdditions.compose = function (AxisClass, ChartClass, SeriesClass, TickClass) {\n        if (!AxisClass.keepProps.includes('treeGrid')) {\n            var axisProps = AxisClass.prototype;\n            AxisClass.keepProps.push('treeGrid');\n            TreeGridAxis_wrap(axisProps, 'generateTick', wrapGenerateTick);\n            TreeGridAxis_wrap(axisProps, 'init', wrapInit);\n            TreeGridAxis_wrap(axisProps, 'setTickInterval', wrapSetTickInterval);\n            TreeGridAxis_wrap(axisProps, 'redraw', wrapRedraw);\n            // Make utility functions available for testing.\n            axisProps.utils = {\n                getNode: Gantt_Tree.getNode\n            };\n            if (!TickConstructor) {\n                TickConstructor = TickClass;\n            }\n        }\n        Axis_GridAxis.compose(AxisClass, ChartClass, TickClass);\n        Axis_BrokenAxis.compose(AxisClass, SeriesClass);\n        TreeGridTick.compose(TickClass);\n        return AxisClass;\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Set the collapse status.\n     *\n     * @private\n     *\n     * @param {Highcharts.Axis} axis\n     * The axis to check against.\n     *\n     * @param {Highcharts.GridNode} node\n     * The node to collapse.\n     */\n    TreeGridAxisAdditions.prototype.setCollapsedStatus = function (node) {\n        var axis = this.axis,\n            chart = axis.chart;\n        axis.series.forEach(function (series) {\n            var data = series.options.data;\n            if (node.id && data) {\n                var point = chart.get(node.id),\n                    dataPoint = data[series.data.indexOf(point)];\n                if (point && dataPoint) {\n                    point.collapsed = node.collapsed;\n                    dataPoint.collapsed = node.collapsed;\n                }\n            }\n        });\n    };\n    /**\n     * Calculates the new axis breaks to collapse a node.\n     *\n     * @private\n     *\n     * @param {Highcharts.Axis} axis\n     * The axis to check against.\n     *\n     * @param {Highcharts.GridNode} node\n     * The node to collapse.\n     *\n     * @param {number} pos\n     * The tick position to collapse.\n     *\n     * @return {Array<object>}\n     * Returns an array of the new breaks for the axis.\n     */\n    TreeGridAxisAdditions.prototype.collapse = function (node) {\n        var axis = this.axis,\n            breaks = (axis.options.breaks || []),\n            obj = getBreakFromNode(node,\n            axis.max);\n        breaks.push(obj);\n        // Change the collapsed flag #13838\n        node.collapsed = true;\n        axis.treeGrid.setCollapsedStatus(node);\n        return breaks;\n    };\n    /**\n     * Calculates the new axis breaks to expand a node.\n     *\n     * @private\n     *\n     * @param {Highcharts.Axis} axis\n     * The axis to check against.\n     *\n     * @param {Highcharts.GridNode} node\n     * The node to expand.\n     *\n     * @param {number} pos\n     * The tick position to expand.\n     *\n     * @return {Array<object>}\n     * Returns an array of the new breaks for the axis.\n     */\n    TreeGridAxisAdditions.prototype.expand = function (node) {\n        var axis = this.axis,\n            breaks = (axis.options.breaks || []),\n            obj = getBreakFromNode(node,\n            axis.max);\n        // Change the collapsed flag #13838\n        node.collapsed = false;\n        axis.treeGrid.setCollapsedStatus(node);\n        // Remove the break from the axis breaks array.\n        return breaks.reduce(function (arr, b) {\n            if (b.to !== obj.to || b.from !== obj.from) {\n                arr.push(b);\n            }\n            return arr;\n        }, []);\n    };\n    /**\n     * Creates a list of positions for the ticks on the axis. Filters out\n     * positions that are outside min and max, or is inside an axis break.\n     *\n     * @private\n     *\n     * @return {Array<number>}\n     * List of positions.\n     */\n    TreeGridAxisAdditions.prototype.getTickPositions = function () {\n        var axis = this.axis, roundedMin = Math.floor(axis.min / axis.tickInterval) * axis.tickInterval, roundedMax = Math.ceil(axis.max / axis.tickInterval) * axis.tickInterval;\n        return Object.keys(axis.treeGrid.mapOfPosToGridNode || {}).reduce(function (arr, key) {\n            var pos = +key;\n            if (pos >= roundedMin &&\n                pos <= roundedMax &&\n                !(axis.brokenAxis && axis.brokenAxis.isInAnyBreak(pos))) {\n                arr.push(pos);\n            }\n            return arr;\n        }, []);\n    };\n    /**\n     * Check if a node is collapsed.\n     *\n     * @private\n     *\n     * @param {Highcharts.Axis} axis\n     * The axis to check against.\n     *\n     * @param {Object} node\n     * The node to check if is collapsed.\n     *\n     * @param {number} pos\n     * The tick position to collapse.\n     *\n     * @return {boolean}\n     * Returns true if collapsed, false if expanded.\n     */\n    TreeGridAxisAdditions.prototype.isCollapsed = function (node) {\n        var axis = this.axis,\n            breaks = (axis.options.breaks || []),\n            obj = getBreakFromNode(node,\n            axis.max);\n        return breaks.some(function (b) {\n            return b.from === obj.from && b.to === obj.to;\n        });\n    };\n    /**\n     * Calculates the new axis breaks after toggling the collapse/expand\n     * state of a node. If it is collapsed it will be expanded, and if it is\n     * expanded it will be collapsed.\n     *\n     * @private\n     *\n     * @param {Highcharts.Axis} axis\n     * The axis to check against.\n     *\n     * @param {Highcharts.GridNode} node\n     * The node to toggle.\n     *\n     * @return {Array<object>}\n     * Returns an array of the new breaks for the axis.\n     */\n    TreeGridAxisAdditions.prototype.toggleCollapse = function (node) {\n        return (this.isCollapsed(node) ?\n            this.expand(node) :\n            this.collapse(node));\n    };\n    return TreeGridAxisAdditions;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var TreeGridAxis = (TreeGridAxisAdditions);\n\n;// ./code/es5/es-modules/Series/Gantt/GanttSeries.js\n/* *\n *\n *  (c) 2016-2024 Highsoft AS\n *\n *  Author: 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\nvar GanttSeries_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d,\n        b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d,\n        b) { d.__proto__ = b; }) ||\n                function (d,\n        b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n        p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\nvar Series = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).series, GanttSeries_XRangeSeries = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes.xrange;\n\n\n\nvar GanttSeries_extend = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).extend, GanttSeries_isNumber = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isNumber, GanttSeries_merge = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).merge;\n/* *\n *\n *  Class\n *\n * */\n/**\n * @private\n * @class\n * @name Highcharts.seriesTypes.gantt\n *\n * @augments Highcharts.Series\n */\nvar GanttSeries = /** @class */ (function (_super) {\n    GanttSeries_extends(GanttSeries, _super);\n    function GanttSeries() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    GanttSeries.compose = function (AxisClass, ChartClass, SeriesClass, TickClass) {\n        GanttSeries_XRangeSeries.compose(AxisClass);\n        if (!ChartClass) {\n            return;\n        }\n        Extensions_StaticScale.compose(AxisClass, ChartClass);\n        if (!SeriesClass) {\n            return;\n        }\n        Gantt_Pathfinder.compose(ChartClass, SeriesClass.prototype.pointClass);\n        if (!TickClass) {\n            return;\n        }\n        TreeGridAxis.compose(AxisClass, ChartClass, SeriesClass, TickClass);\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Draws a single point in the series.\n     *\n     * This override draws the point as a diamond if point.options.milestone\n     * is true, and uses the original drawPoint() if it is false or not set.\n     *\n     * @requires highcharts-gantt\n     *\n     * @private\n     * @function Highcharts.seriesTypes.gantt#drawPoint\n     *\n     * @param {Highcharts.Point} point\n     *        An instance of Point in the series\n     *\n     * @param {\"animate\"|\"attr\"} verb\n     *        'animate' (animates changes) or 'attr' (sets options)\n     */\n    GanttSeries.prototype.drawPoint = function (point, verb) {\n        var series = this,\n            seriesOpts = series.options,\n            renderer = series.chart.renderer,\n            shapeArgs = point.shapeArgs,\n            plotY = point.plotY,\n            state = point.selected && 'select',\n            cutOff = seriesOpts.stacking && !seriesOpts.borderRadius;\n        var graphic = point.graphic,\n            diamondShape;\n        if (point.options.milestone) {\n            if (GanttSeries_isNumber(plotY) &&\n                point.y !== null &&\n                point.visible !== false) {\n                diamondShape = renderer.symbols.diamond(shapeArgs.x || 0, shapeArgs.y || 0, shapeArgs.width || 0, shapeArgs.height || 0);\n                if (graphic) {\n                    graphic[verb]({\n                        d: diamondShape\n                    });\n                }\n                else {\n                    point.graphic = graphic = renderer.path(diamondShape)\n                        .addClass(point.getClassName(), true)\n                        .add(point.group || series.group);\n                }\n                // Presentational\n                if (!series.chart.styledMode) {\n                    point.graphic\n                        .attr(series.pointAttribs(point, state))\n                        .shadow(seriesOpts.shadow, null, cutOff);\n                }\n            }\n            else if (graphic) {\n                point.graphic = graphic.destroy(); // #1269\n            }\n        }\n        else {\n            _super.prototype.drawPoint.call(this, point, verb);\n        }\n    };\n    /**\n     * Handle milestones, as they have no x2.\n     * @private\n     */\n    GanttSeries.prototype.translatePoint = function (point) {\n        var shapeArgs,\n            size;\n        _super.prototype.translatePoint.call(this, point);\n        if (point.options.milestone) {\n            shapeArgs = point.shapeArgs;\n            size = shapeArgs.height || 0;\n            point.shapeArgs = {\n                x: (shapeArgs.x || 0) - (size / 2),\n                y: shapeArgs.y,\n                width: size,\n                height: size\n            };\n        }\n    };\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    GanttSeries.defaultOptions = GanttSeries_merge(GanttSeries_XRangeSeries.defaultOptions, Gantt_GanttSeriesDefaults);\n    return GanttSeries;\n}(GanttSeries_XRangeSeries));\nGanttSeries_extend(GanttSeries.prototype, {\n    pointArrayMap: ['start', 'end', 'y'],\n    pointClass: Gantt_GanttPoint,\n    setData: Series.prototype.setData\n});\nhighcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default().registerSeriesType('gantt', GanttSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Gantt_GanttSeries = (GanttSeries);\n\n;// ./code/es5/es-modules/masters/modules/gantt.src.js\n/**\n * @license Highcharts Gantt JS v12.1.2 (2025-01-09)\n * @module highcharts/modules/gantt\n * @requires highcharts\n *\n * Gantt series\n *\n * (c) 2016-2024 Lars A. V. Cabrera\n *\n * License: www.highcharts.com/license\n */\n\n\n\n\n\n\n\n\n\n\n\n// Series\n\n\nvar gantt_src_G = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n// Classes\ngantt_src_G.Connection = gantt_src_G.Connection || Gantt_Connection;\ngantt_src_G.GanttChart = gantt_src_G.GanttChart || Chart_GanttChart;\ngantt_src_G.Navigator = gantt_src_G.Navigator || Navigator_Navigator;\ngantt_src_G.RangeSelector = gantt_src_G.RangeSelector || RangeSelector_RangeSelector;\ngantt_src_G.Scrollbar = gantt_src_G.Scrollbar || Scrollbar_Scrollbar;\n// Functions\ngantt_src_G.ganttChart = gantt_src_G.GanttChart.ganttChart;\n// Compositions\nExtensions_ArrowSymbols.compose(gantt_src_G.SVGRenderer);\nExtensions_CurrentDateIndication.compose(gantt_src_G.Axis, gantt_src_G.PlotLineOrBand);\nGantt_GanttSeries.compose(gantt_src_G.Axis, gantt_src_G.Chart, gantt_src_G.Series, gantt_src_G.Tick);\ngantt_src_G.Navigator.compose(gantt_src_G.Chart, gantt_src_G.Axis, gantt_src_G.Series);\ngantt_src_G.RangeSelector.compose(gantt_src_G.Axis, gantt_src_G.Chart);\ngantt_src_G.Scrollbar.compose(gantt_src_G.Axis);\n/* harmony default export */ var gantt_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__960__","__WEBPACK_EXTERNAL_MODULE__532__","__WEBPACK_EXTERNAL_MODULE__620__","__WEBPACK_EXTERNAL_MODULE__512__","__WEBPACK_EXTERNAL_MODULE__608__","__WEBPACK_EXTERNAL_MODULE__540__","__WEBPACK_EXTERNAL_MODULE__28__","__WEBPACK_EXTERNAL_MODULE__260__","__WEBPACK_EXTERNAL_MODULE__184__","extendStatics","GanttChart","GridAxisSide","NavigatorConstructor","ScrollbarAxis","RangeSelectorConstructor","OrdinalAxis","ConnectionComposition","BrokenAxis","TickConstructor","__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__","gantt_src","highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_","highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default","arrow","x","y","w","h","arrowHalf","triangleLeft","triangleLeftHalf","SVGRendererClass","symbols","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","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","composed","addEvent","CurrentDateIndication_merge","pushUnique","wrap","defaultOptions","label","format","formatter","value","axis","time","dateFormat","style","fontSize","onAxisAfterSetOptions","cdiOptions","currentDateIndicator","plotLineOptions","Date","now","className","plotLines","push","onPlotLineOrBandRender","text","getLabelText","wrapPlotLineOrBandGetLabelText","defaultMethod","defaultLabelOptions","indexOf","highcharts_Chart_commonjs_highcharts_Chart_commonjs2_highcharts_Chart_root_Highcharts_Chart_","highcharts_Chart_commonjs_highcharts_Chart_commonjs2_highcharts_Chart_root_Highcharts_Chart_default","__extends","b","setPrototypeOf","__proto__","Array","p","__","constructor","create","GanttChart_defaultOptions","isArray","GanttChart_merge","splat","_super","apply","arguments","userOptions","callback","defaultLinkedTo","xAxisOptions","xAxis","yAxisOptions","yAxis","title","legend","navigator","isGantt","map","i","_a","_b","_c","grid","borderColor","opposite","linkedTo","staticScale","reversed","categories","ganttChart","c","Chart_GanttChart","highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_","highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_default","isTouchDevice","ChartNavigatorComposition_addEvent","ChartNavigatorComposition_merge","pick","composedMembers","onChartAfterAddSeries","setBaseSeries","onChartAfterSetChartSize","legendOptions","scrollbarHeight","scrollButtonSize","inverted","left","chartWidth","spacing","top","navigatorOptions","chartHeight","scrollbar","rangeSelector","extraBottomMargin","getHeight","verticalAlign","layout","floating","legendHeight","titleOffset","setAxisSize","onChartAfterUpdate","event","scroller","redraw","onChartBeforeRender","onChartBeforeShowResetZoom","chartOptions","zooming","pinchType","onChartCallback","extremes","getExtremes","onChartUpdate","e","scrollbarOptions","ChartClass","NavigatorClass","chartProto","callbacks","NavigatorAxisComposition_isTouchDevice","NavigatorAxisComposition_addEvent","correctFloat","NavigatorAxisComposition_defined","isNumber","NavigatorAxisComposition_pick","onAxisInit","navigatorAxis","NavigatorAxisAdditions","onAxisSetExtremes","zoomed","zoomType","isXAxis","trigger","range","previousZoom","preventDefault","compose","AxisClass","keepProps","includes","toFixedRange","pxMin","pxMax","fixedMin","fixedMax","halfPointRange","pointRange","newMin","horiz","newMax","highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_","highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default","highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_","highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default","parse","seriesTypes","NavigatorDefaults","maskInside","handles","borderRadius","backgroundColor","maskFill","setOpacity","outlineColor","outlineWidth","areaspline","fillOpacity","compare","sonification","dataGrouping","approximation","groupPixelWidth","firstAnchor","lastAnchor","units","dataLabels","id","threshold","tickLength","gridLineColor","gridLineWidth","tickPixelInterval","labels","align","textOutline","crosshair","startOnTick","endOnTick","minPadding","maxPadding","tickWidth","__spreadArray","pack","ar","l","slice","relativeLength","Navigator_NavigatorSymbols","_x","_y","r","halfWidth","markerPosition","highcharts_RendererRegistry_commonjs_highcharts_RendererRegistry_commonjs2_highcharts_RendererRegistry_root_Highcharts_RendererRegistry_","highcharts_RendererRegistry_commonjs_highcharts_RendererRegistry_commonjs2_highcharts_RendererRegistry_root_Highcharts_RendererRegistry_default","StockUtilities_defined","setOptions","NavigatorComposition_composed","getRendererType","NavigatorComposition_setFixedRange","Utilities_StockUtilities","setFixedRange","dataMax","dataMin","fixedRange","NavigatorComposition_addEvent","extend","NavigatorComposition_pushUnique","onSeriesAfterUpdate","isInternal","SeriesClass","NavigatorAxisComposition","ScrollbarAxis_composed","ScrollbarAxis_addEvent","ScrollbarAxis_defined","ScrollbarAxis_pick","ScrollbarAxis_pushUnique","Scrollbar","axisMin","axisMax","scrollMin","Infinity","scrollMax","onAxisAfterGetOffset","index","scrollbarsOffsets","axisOffset","size","onAxisAfterInit","vertical","unitedMin","unitedMax","shouldUpdateExtremes","DOMType","setExtremes","setRange","onAxisAfterRender","offsetsIndex","offset","axisTitleMargin","axisMargin","position","xPosition","isNaN","interval","ScrollbarClass","Axis_ScrollbarAxis","Scrollbar_ScrollbarDefaults","barBorderRadius","buttonBorderRadius","buttonsEnabled","liveRedraw","minWidth","step","barBackgroundColor","barBorderWidth","barBorderColor","buttonArrowColor","buttonBackgroundColor","buttonBorderColor","buttonBorderWidth","rifleColor","trackBackgroundColor","trackBorderColor","trackBorderRadius","trackBorderWidth","Scrollbar_defaultOptions","Scrollbar_addEvent","Scrollbar_correctFloat","crisp","Scrollbar_defined","destroyObjectProperties","fireEvent","Scrollbar_merge","Scrollbar_pick","removeEvent","_events","chartX","chartY","scrollbarButtons","scrollbarLeft","scrollbarStrokeWidth","scrollbarTop","swapXY","forEach","seg","temp","len","addEvents","buttonsOrder","buttons","bar","scrollbarGroup","element","track","mouseDownHandler","bind","mouseMoveHandler","mouseUpHandler","buttonToMinClick","buttonToMaxClick","trackClick","ownerDocument","args","updatePosition","DOMEvent","cursorToScrollbarPosition","normalizedEvent","minWidthDifference","calculatedWidth","xOffset","barWidth","yOffset","removeEvents","drawScrollbarButton","rect","strokeWidth","pointer","normalize","mousePosition","initPositions","grabbedCenter","change","direction","touches","chartPosition","hasDragged","method","rendered","show","translateX","translateY","hide","scrollbarRifles","fromPX","newSize","fullWidth","toPX","newPos","floor","newRiflesPos","showFull","eventType","svg","boosted","update","highcharts_SVGRenderer_commonjs_highcharts_SVGRenderer_commonjs2_highcharts_SVGRenderer_root_Highcharts_SVGRenderer_","highcharts_SVGRenderer_commonjs_highcharts_SVGRenderer_commonjs2_highcharts_SVGRenderer_root_Highcharts_SVGRenderer_default","__assign","assign","t","s","Navigator_defaultOptions","Navigator_isTouchDevice","Navigator_addEvent","clamp","Navigator_correctFloat","Navigator_defined","Navigator_destroyObjectProperties","erase","Navigator_extend","find","Navigator_fireEvent","Navigator_isArray","Navigator_isNumber","Navigator_merge","Navigator_pick","Navigator_removeEvent","Navigator_splat","numExt","extreme","_i","numbers","filter","Navigator","isDirty","Navigator_ChartNavigatorComposition","Navigator_NavigatorComposition","drawHandle","verb","round","parseInt","drawOutline","zoomedMin","zoomedMax","verticalMin","outline","halfOutline","outlineCorrection","navigatorSize","navigatorTop","lineTop","lineBtm","drawMasks","navigatorHeight","shades","shade","renderElements","mouseCursor","cursor","navigatorGroup","visibility","hasMask","css","handlesOptions_1","height_1","width_1","symbolName","symbolUrl","isImg","symbolFn","addMouseEvents","_d","_this","invertedUpdate","setOpposite","navigatorEnabled","adaptToUpdatedData","baseSeries","updatedDataHandler","eventsToUnbind","offsets","getXAxisOffsets","navigatorWidth","scrollbarXAxis","fake","minRange","maxRange","toPixels","abs","toValue","currentRange","grabbedLeft","grabbedRight","fixedWidth","container","onMouseMove","onMouseUp","getPartsEvents","renderTo","modifyNavigatorAxisExtremes","eventName","events","name","navigatorItem","shadesMousedown","ext","navigatorPosition","dragOffset","reversedExtremes","getUnionExtremes","eventArguments","handlesMousedown","baseXAxis","reverse","otherHandlePos","fixedExtreme","pageX","setTimeout","unionExtremes","triggerOp","keys","unbind","removeBaseSeriesEvents","modifyBaseAxisExtremes","scrollbarEnabled","xAxisIndex","yAxisIndex","baseXaxis","isDirtyBox","breaks","ordinal","overscroll","keepOrdinalPadding","zoomEnabled","alignTicks","data","updateNavigatorSeries","unbindRedraw","scrollTrackWidth","valueRange","addBaseSeriesEvents","addChartEvents","Boolean","returnFalseOnNoBaseSeries","ret","baseAxis","navAxis","navAxisOptions","baseAxisOptions","baseSeriesOptions","showInNavigator","baseOptions","mergedNavSeriesOptions","baseNavigatorOptions","navSeriesMixin","enableMouseTracking","padXAxis","showInLegend","stacking","states","inactive","navigatorSeries","navSeries","base","chartNavigatorSeriesOptions","linkedNavSeries","userNavOptions","visible","plotOptions","navigatorSeriesData","hasNavigatorData","initSeries","setSortedData","userSeriesOptions","colors","setVisible","remove","getBaseSeriesMin","currentSeriesMin","reduce","getColumn","baseExtremes","baseMin","baseMax","baseDataMin","baseDataMax","stickToMin","stickToMax","convertOverscroll","hasSetExtremes","eventArgs","xData","Number","MAX_VALUE","userMin","userMax","shouldStickToMax","shouldStickToMin","pointStart","setData","xDataMin","marginName","axes","coll","RangeSelector_RangeSelectorDefaults","lang","rangeSelectorZoom","rangeSelectorFrom","rangeSelectorTo","allButtonsEnabled","count","buttonSpacing","dropdown","buttonTheme","padding","inputBoxBorderColor","inputBoxHeight","inputBoxWidth","inputDateFormat","inputDateParser","inputEditDateFormat","inputEnabled","inputPosition","inputSpacing","selected","buttonPosition","inputStyle","labelStyle","RangeSelectorComposition_defaultOptions","RangeSelectorComposition_composed","RangeSelectorComposition_addEvent","RangeSelectorComposition_defined","RangeSelectorComposition_extend","RangeSelectorComposition_isNumber","RangeSelectorComposition_merge","RangeSelectorComposition_pick","RangeSelectorComposition_pushUnique","chartDestroyEvents","axisMinFromRange","rangeOptions","getTrueRange","original","toParts","modified","makeTime","MIN_VALUE","_offsetMin","updateRangeSelectorButtons","redrawElements","createRangeSelector","RangeSelectorComposition_onChartBeforeRender","deferredYTDClick","clickButton","extraTopMargin","redrawRangeSelector","alignTo","display","spacingBox","placed","onChartDestroy","iEnd","splice","onChartGetMargins","rangeSelectorHeight","marginBottom","RangeSelectorComposition_onChartUpdate","optionsRangeSelector","extraBottomMarginWas","extraTopMarginWas","RangeSelectorClass","minFromRange","highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_","highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_default","DataTableCore_fireEvent","DataTableCore_isArray","DataTableCore_objectEach","uniqueKey","DataTableCore","autoId","columns","rowCount","versionTag","column","columnName","applyRowCount","asReference","getColumns","columnNames","getRow","rowIndex","setColumn","eventDetail","setColumns","silent","setRow","row","insert","indexRowCount","cellValue","addColumns","OrdinalAxis_assign","OrdinalAxis_addEvent","OrdinalAxis_correctFloat","OrdinalAxis_defined","OrdinalAxis_error","OrdinalAxis_isNumber","OrdinalAxis_pick","timeUnits","isString","getTimeTicks","normalizedInterval","startOfWeek","positions","closestDistance","findHigherRanks","end","segmentPositions","hasCrossedHigherRank","info","outsideMax","higherRanks","tickPixelIntervalOption","segmentStarts","start","groupPositions","lastGroupPosition","posLength","shift","unitRange","hour","length_1","translatedArr","distances","itemToRemove","translated","lastTranslated","medianDistance","distance","sort","index2val","ordinalPositions","lin2val","localMin","old","localA","transA","getExtendedPositions","pixelVal","minPixelPadding","getIndexOfPoint","mantissa","leftNeighbour","rightNeighbour","getIndexInArray","Additions","findIndexOf","percent","onAxisFoundExtremes","originalOrdinalRange","onAxisAfterSetScale","isOrdinal","onAxisInitialAxisTranslation","beforeSetTickPositions","tickInterval","postProcessTickInterval","onChartPan","originalEvent","panning","runBase","mouseDownX","hoverPoints","closestPointRange","overscrollPointsRange","movedUnits","translationSlope","slope","extendedOrdinalPositions","extendedAxis","index2val_1","val2lin_1","val2lin","trimmedRange","setState","test","onSeriesUpdatedData","toIndex","ordinalIndex","ordinalLength","length_2","originalPositionsReference","diff","approximateIndexOffset","axisProto","ordinal2lin","uniqueOrdinalPositions","dist","minIndex","maxIndex","hasBreaks","brokenAxis","useOrdinal","adjustOrdinalExtremesPoints","isBoosted","distanceBetweenPoint_1","reserveSpace","takeOrdinalPosition","unshift","pop","forceOrdinal","getOverscrollPositions","groupIntervalFactor","sortedArray","indirectSearch","middle","withOverscroll","fakeAxis","k","grouping","currentDataGrouping","unitName","fakeSeries","applyGrouping","getGroupPixelWidth","getGroupIntervalFactor","destroyGroupedData","noop","getProcessedData","dataTable","forced","processData","hasExtremesChanged","basePointRange","median","processedXData","ordinalArray","minX","indexOfMin","extraRange","ordinalSlope","calculateOverscroll","overscrollPercentage","overscrollValue","pixelToPercent","limitedOverscrollValue","Axis_OrdinalAxis","RangeSelector_defaultOptions","RangeSelector_addEvent","createElement","RangeSelector_css","RangeSelector_defined","RangeSelector_destroyObjectProperties","diffObjects","discardElement","RangeSelector_extend","RangeSelector_fireEvent","RangeSelector_isNumber","RangeSelector_isString","RangeSelector_merge","RangeSelector_objectEach","RangeSelector_pick","RangeSelector_splat","preferredInputType","hasTimeKey","char","RegExp","fractionalSecondDigits","date","some","dateStyle","day","month","year","timeStyle","minute","second","RangeSelector","buttonOptions","defaultButtons","initialButtonGroupWidth","maxButtonWidth","buttonWidth","button","bBox","getBBox","RangeSelector_RangeSelectorComposition","baseXAxisOptions","rangeMin","ctx","ytdExtremes","_range","addOffsetMin","setSelected","forcedDataGrouping","setDataGrouping","frozenStates","preserveDataGrouping","hasData","getYTDExtremes","_offsetMax","selectedIndex","rangeSelectorButton","axisRangeUpdateEvent_1","selectedOption","blurInputs","minInput","maxInput","blur","computeButtonRange","createElements","updateButtonStates","dropdownLabel","actualRange","hasNoData","hasVisibleSeries","ytdMin","ytdMax","buttonStates","selectedExists","isSelectedTooGreat","offsetRange","isSelected","isTooGreatRange","isTooSmallRange","isYTDButNotSelected","isSameRange","prevOrdinalPosition","nextOrdinalPosition","disable","select","state","disabled","bbox","fixedTimes","millisecond","week","offsetMin","offsetMax","getInputValue","input","defaultInputDateParser","timezone","setInputValue","inputTime","dateBox","minDateBox","maxDateBox","setAttribute","hcTimeAttr","getAttribute","updatedTime","previousTime","inputTypeFormats","setInputExtremes","showInput","inputGroup","isTextInput","_e","_f","border","offsetWidth","offsetHeight","hideInput","inputDate","useUTC","drawInput","div","chartStyle","isMin","updateExtremes","chartAxis","currentExtreme","on","focus","boxShadow","textAlign","fontFamily","onfocus","onblur","doc","activeElement","keyDown","onchange","onkeypress","keyCode","onkeydown","onkeyup","getPosition","buttonTop","inputTop","inputsZIndex","renderButtons","parentNode","insertBefore","createInputs","minElems","minLabel","maxElems","maxLabel","x_1","zoomText","alignElements","buttonGroup","userButtonTheme","paddingLeft","paddingRight","hover","mouseOver","isMS","mouseOut","textContent","textStr","createButtons","createButton","callDefaultEvent","buttonEvents","click","isActive","navButtonOptions","exporting","navigation","getXOffsetForExportButton","rightAligned","titleCollision","positionButtons","xOffsetForExportButton_1","alignButtonGroup","hasLoaded","xOffsetForExportButton","handleCollision","alignTranslateY","alignAttr","groupHeight","marginTop","_g","_h","isCollapsed","newButtonsOptions","btnLength","_j","btn","dropdownTranslateX","hasVisibleDropdown","buttonLeft","moveInputsDown","collapseButtons","expandButtons","showDropdown","hideDropdown","rangeSelectorGroup","yPosition","buttonPositionY","inputPositionY","minPosition","subtitle","rSelector","window","HTMLElement","prevSeg","nextSeg","x1","y1","x2","y2","directionX","directionY","PathfinderAlgorithms_pick","PathfinderAlgorithms_min","PathfinderAlgorithms_max","findLastObstacleBefore","startIx","cmp","right","findObstacleFromPoint","obstacle","pathFromSegments","segments","limitObstacleToBounds","bounds","simpleConnect","endSegment","startObstacle","waypoint","useMax","endPoint","startObstacleIx","endObstacleIx","dir","copyFromPoint","fromKey","toKey","getMeOut","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","clearPathTo","pivot","waypointUseMax","envelopingObstacle","secondEnvelopingObstacle","envelopWaypoint","obstacleMargin","ConnectorsDefaults","inside","PathfinderComposition_setOptions","PathfinderComposition_defined","PathfinderComposition_error","PathfinderComposition_merge","getPointBB","shapeArgs","bb","graphic","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","PathfinderClass","PointClass","pointProto","acc","PathfinderComposition","highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_","highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default","Pathfinder_addEvent","Pathfinder_defined","Pathfinder_pick","Pathfinder_splat","Pathfinder_max","Pathfinder_min","Pathfinder","connections","deferRender","oldConnections","points","ganttPointOptions","dependency","connect","connects","isInside","toId","j","found","lenOld","lenNew","oldCon","newCon","renderConnections","conns","pathfinderRemoveRenderEvent","calculatedMargin","sLen","pLen","Pathfinder_getPointBB","calculateObstacleMargin","onstacleDistance","calculateObstacleDistance","bbMargin","yOverlap","xOverlap","xDistance","yDistance","xCenter","yCenter","straight","G","Extensions_ArrowSymbols","SVGRenderer","Chart","Point","StaticScale_addEvent","StaticScale_defined","StaticScale_isNumber","StaticScale_pick","StaticScale_onAxisAfterSetOptions","scrollablePlotArea","minHeight","chartAdjustHeight","redrawTrigger","_loop_1","chart_1","initiatedScale","unitLength","scrollablePixelsY","setSize","clipRect","sharedClipKey","sharedClips","adjustHeight","static_scale_src_G","Extensions_StaticScale","Axis","XRangeSeriesDefaults_correctFloat","XRangeSeriesDefaults_isNumber","isObject","XRange_XRangeSeriesDefaults","colorByPoint","amount","partialFill","whiteSpace","tooltip","headerFormat","pointFormat","XRangePoint_extends","TypeError","String","ColumnPoint","pointClass","XRangePoint_extend","XRangePoint","getColorByCategory","colorCount","resolveColor","applyOptions","isNull","isValid","drawPoint","getAnimationVerb","ttBelow","tooltipDateKeys","XRangeSeries_extends","XRangeSeries_composed","XRangeSeries_color","ColumnSeries","XRangeSeries_addEvent","XRangeSeries_clamp","XRangeSeries_crisp","XRangeSeries_defined","XRangeSeries_extend","XRangeSeries_find","XRangeSeries_isNumber","XRangeSeries_isObject","XRangeSeries_merge","XRangeSeries_pick","XRangeSeries_pushUnique","XRangeSeries_relativeLength","onAxisAfterGetSeriesExtremes","modMax","XRangeSeries","getColumnMetrics","swapAxes","cropData","table","x2Data","croppedData","findPointIndex","pointIndex","cropStart","touched","cropped","alignDataLabel","oldPlotX","dlBox","centerX","dataLabel","translatePoint","widthDifference","dlLeft","dlRight","dlWidth","clipRectWidth","columnMetrics","minPointLength","oldColWidth","seriesXOffset","pointXOffset","posX","plotX2","borderWidth","pointHeight","pointWidth","pointPlacement","tooltipPos","xIndex","yIndex","tooltipYOffset","partShapeArgs","clipRectArgs","category","yCategory","seriesOpts","shapeType","pointState","stateOpts","pointStateVerb","pointAttr","pointAttribs","pfOptions","getClassName","partRect","partialClipRect","clip","shadow","brighten","drawPoints","pointCount","animationLimit","isPointInside","pointArrayMap","getExtremesFromAll","keysAffectYAxis","parallelArrays","requireSorting","autoIncrement","buildKDTree","registerSeriesType","xrange_src_G","XRange_XRangeSeries","GanttPoint_extends","GanttPoint","setGanttPointAliases","completed","ganttPoint","milestone","xrange","GanttSeriesDefaults_isNumber","Gantt_GanttSeriesDefaults","pointFormatter","formats","tooltipOptions","dateTimeLabelFormats","ttOptions","xDateFormat","retVal","tooltipFormatter","getDateFormat","highcharts_StackItem_commonjs_highcharts_StackItem_commonjs2_highcharts_StackItem_root_Highcharts_StackItem_","highcharts_StackItem_commonjs_highcharts_StackItem_commonjs2_highcharts_StackItem_root_Highcharts_StackItem_default","BrokenAxis_addEvent","BrokenAxis_find","BrokenAxis_fireEvent","BrokenAxis_isArray","BrokenAxis_isNumber","BrokenAxis_pick","setBreaks","onAxisAfterSetTickPositions","tickPositions","newPositions","isInAnyBreak","onSeriesAfterGeneratePoints","connectNulls","isPointInBreak","onSeriesAfterRender","drawBreaks","seriesDrawBreaks","brokenAxis_1","breakArray","breaksOutOfRange","brk","isOut","otherBreak","toUpperCase","seriesGappedPath","groupingSize","gapSize","gapUnit","current","next","xRange","stack","stacks","stackKey","stackLabels","total","getGraphPath","seriesProto","gappedPath","isInBreak","repeat","inclusive","lin2Val","nval","val2Lin","findBreakAt","testKeep","inbrk","keep","showPoints","forceRedraw","breaks_1","axisBreak","setAxisTranslation","inBrk_1","repeat_1","start_1","i_1","breaks_2","breakArrayT_1","breakArray_1","pointRangePadding","min_1","max_1","move","breakSize","minPointOffset","Axis_BrokenAxis","dateFormats","GridAxis_addEvent","GridAxis_defined","GridAxis_erase","GridAxis_find","GridAxis_isArray","GridAxis_isNumber","GridAxis_merge","GridAxis_pick","GridAxis_timeUnits","GridAxis_wrap","GridAxis_isObject","getMaxLabelDimensions","ticks","dimensions","pos","tick","labelHeight","labelWidth","textPxLength","treeGrid","mapOfPosToGridNode","treeDepth","indentation","wrapGetOffset","proceed","columnsFirst","side","isColumn","getOffset","onAfterGetTitlePosition","gridOptions","axisTitle","axisHeight","axisLeft","options_1","axisTop","axisWidth","tickSize","titleWidth","xOption","yOption","titleMargin","titleFontSize","fontMetrics","f","offAxis","bottom","titlePosition","onAfterInit","showLastLabel","labelRotation","minTickInterval","columnIndex","columnOptions","onAfterRender","firstTick","slotWidth","maxLabelDimensions","rightWall","isOuterAxis","axisLine","linePath","getLinePath","startPoint","marginRight","upperBorderEndPoint","upperBorderPath","lowerBorderEndPoint","tickmarkOffset","lowerBorderPath","upperBorder","renderBorder","lowerBorder","axisLineExtra","showAxis","hasRendered","linkedParent","lastTick","firstTick_1","tickMark","hiddenLabels","hiddenMarks","mark","isLast","onAfterSetAxisTranslation","tickInfo","userLabels","onAfterSetOptions","gridAxisOptions","list","textOverflow","tickPositioner","parentInfo","unitIdx","unit_1","unit","counts","onAfterSetOptions2","onAfterSetScale","setScale","onAfterTickSize","labelPadding","cellHeight","GridAxis_onChartAfterSetChartSize","onDestroy","keepEvents","onInit","tickColor","GridAxisAdditions","onTickAfterGetLabelPosition","labelOpts","tickPos","nextTickPos","crispCorr","top_1","lblMetrics","useHTML","lines","onTickLabelFormat","isFirst","pointCopy","is","gantt","onTrimTicks","categoryAxis","firstPos","secondPos","lastPos","beforeLastPos","linkedMin","linkedMax","startLessThanMin","endMoreThanMin","startLessThanMax","endMoreThanMax","isLinked","wrapUnsquish","parentAxis","thisIndex","lastIndex","otherAxis","extraBorderLine","axisGroup","E","timestamp","charAt","W","firstDay","thursday","firstThursday","thursdayTS","toString","__rest","getOwnPropertySymbols","propertyIsEnumerable","Tree_extend","Tree_isNumber","Tree_pick","getNode","parent","level","mapOfIdToChildren","after","before","node","depth","descendants","children","child","childStart","NaN","childEnd","Gantt_Tree","getTree","ids","listOfParents","prev","curr","adoptedByRoot","orphan","TreeGridTick_addEvent","TreeGridTick_removeEvent","TreeGridTick_isObject","TreeGridTick_isNumber","TreeGridTick_pick","TreeGridTick_wrap","onTickInit","TreeGridTickAdditions","wrapGetLabelPosition","labelOptions","lbOptions","isTreeGrid","result","wrapRenderLabel","params","isNew","labelBox","iconCenter","shouldRender","icon","collapsed","addClassName","removeClassName","tickGrid","tickOptions","labelIcon","labelElement","axisGrid","axisOptions","symbolOptions","hasDescendants","isTreeGridElement","prefixClassName","prefixLevelClass","removeClass","styles","parentGroup","xy","object","attachedTreeGridEvents","textDecoration","toggleCollapse","TickClass","tickProto","collapse","expand","posMappedNodes","TreeUtilities_isArray","TreeUtilities_isNumber","TreeUtilities_isObject","TreeUtilities_merge","TreeUtilities_pick","TreeGridAxis_getLevelOptions","defaults","converted","levels","item","levelIsConstant","TreeGridAxis_addEvent","TreeGridAxis_isArray","TreeGridAxis_splat","TreeGridAxis_find","TreeGridAxis_fireEvent","TreeGridAxis_isObject","TreeGridAxis_isString","TreeGridAxis_merge","TreeGridAxis_pick","TreeGridAxis_removeEvent","TreeGridAxis_wrap","getBreakFromNode","collapseEnd","collapseStart","getTreeGridFromData","uniqueNames","numberOfSeries","setValues","collapsedNodes","mapOfIdToNode","uniqueNamesEnabled","posIterator","tree","gridNode","parentGridNode","nodes","seriesIndex","onBeforeRender","target","isDirtyData","seriesHasPrimitivePoints_1","arr","seriesData","foundPrimitivePoint","pointOptions","optionsToObject","hasNames","axisData","toArray","mapOptionsToLevel","wrapGenerateTick","levelOptions","parameters","addLabel","wrapInit","TreeGridAxisAdditions","fontWeight","wrapSetTickInterval","getTickPositions","linkedParentExtremes","wrapRedraw","axisProps","utils","TreeGridTick","setCollapsedStatus","dataPoint","roundedMin","roundedMax","GanttSeries_extends","Series","GanttSeries_XRangeSeries","GanttSeries_extend","GanttSeries_isNumber","GanttSeries_merge","GanttSeries","Gantt_Pathfinder","TreeGridAxis","diamondShape","cutOff","diamond","gantt_src_G","Extensions_CurrentDateIndication","PlotLineOrBandClass","PlotLineOrBand","Gantt_GanttSeries","Tick"],"mappings":"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"}

Hacked By AnonymousFox1.0, Coded By AnonymousFox