Hacked By AnonymousFox

Current Path : C:/AppServ/www/financial/stacked/code/modules/
Upload File :
Current File : C:/AppServ/www/financial/stacked/code/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(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\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"highcharts/modules/gantt\", [\"highcharts/highcharts\"], function (amd1) {return factory(amd1,amd1[\"Chart\"],amd1[\"Axis\"],amd1[\"Color\"],amd1[\"SeriesRegistry\"],amd1[\"RendererRegistry\"],amd1[\"SVGRenderer\"],amd1[\"SVGElement\"],amd1[\"Point\"],amd1[\"StackItem\"]);});\n\telse if(typeof exports === 'object')\n\t\texports[\"highcharts/modules/gantt\"] = 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\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})(typeof window === 'undefined' ? this : window, (__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 /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 532:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__532__;\n\n/***/ }),\n\n/***/ 960:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__960__;\n\n/***/ }),\n\n/***/ 620:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__620__;\n\n/***/ }),\n\n/***/ 260:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__260__;\n\n/***/ }),\n\n/***/ 608:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__608__;\n\n/***/ }),\n\n/***/ 28:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__28__;\n\n/***/ }),\n\n/***/ 540:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__540__;\n\n/***/ }),\n\n/***/ 512:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__512__;\n\n/***/ }),\n\n/***/ 184:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__184__;\n\n/***/ }),\n\n/***/ 944:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__944__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t(() => {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = (module) => {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\t() => (module['default']) :\n/******/ \t\t\t\t() => (module);\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  \"default\": () => (/* binding */ 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/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    const 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 * */\nconst ArrowSymbols = {\n    compose\n};\n/* harmony default export */ const Extensions_ArrowSymbols = (ArrowSymbols);\n\n;// ./code/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\nconst { defined, error, merge, objectEach } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Constants\n *\n * */\nconst 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 */\nclass Connection {\n    constructor(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    init(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    renderPath(path, attribs) {\n        const connection = this, chart = this.chart, styledMode = chart.styledMode, pathfinder = this.pathfinder, anim = {};\n        let 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    addMarker(type, options, path) {\n        const connection = this, chart = connection.fromPoint.series.chart, pathfinder = chart.pathfinder, renderer = chart.renderer, point = (type === 'start' ?\n            connection.fromPoint :\n            connection.toPoint), anchor = point.getPathfinderAnchorPoint(options);\n        let markerVector, radians, rotation, box, width, height, pathVector, 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    getPath(options) {\n        const pathfinder = this.pathfinder, chart = this.chart, algorithm = pathfinder.algorithms[options.type];\n        let 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    render() {\n        const connection = this, fromPoint = connection.fromPoint, series = fromPoint.series, chart = series.chart, pathfinder = chart.pathfinder, attribs = {};\n        let options = merge(chart.options.connectors, series.options.connectors, fromPoint.options.connectors, 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        const pathResult = connection.getPath(options), 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    destroy() {\n        if (this.graphics) {\n            objectEach(this.graphics, function (val) {\n                val.destroy();\n            });\n            delete this.graphics;\n        }\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const 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/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\nconst { composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent, merge: CurrentDateIndication_merge, pushUnique, wrap } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\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 */\nconst 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    const options = this.options, cdiOptions = options.currentDateIndicator;\n    if (cdiOptions) {\n        const plotLineOptions = typeof cdiOptions === 'object' ?\n            CurrentDateIndication_merge(defaultOptions, 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    const 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 * */\nconst CurrentDateIndication = {\n    compose: CurrentDateIndication_compose\n};\n/* harmony default export */ const 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/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\n\n\nconst { defaultOptions: GanttChart_defaultOptions } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { isArray, merge: GanttChart_merge, splat } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\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 */\nclass GanttChart extends (highcharts_Chart_commonjs_highcharts_Chart_commonjs2_highcharts_Chart_root_Highcharts_Chart_default()) {\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    init(userOptions, callback) {\n        const xAxisOptions = userOptions.xAxis, yAxisOptions = userOptions.yAxis;\n        let defaultLinkedTo;\n        // Avoid doing these twice\n        userOptions.xAxis = userOptions.yAxis = void 0;\n        const 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        }, 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((xAxisOptions, i) => {\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: GanttChart_defaultOptions.xAxis?.opposite ??\n                    xAxisOptions.opposite ??\n                    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((yAxisOptions) => 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.init(options, callback);\n    }\n}\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 */ const 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/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\nconst { isTouchDevice } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: ChartNavigatorComposition_addEvent, merge: ChartNavigatorComposition_merge, pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Constants\n *\n * */\nconst composedMembers = [];\n/* *\n *\n *  Variables\n *\n * */\nlet 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        const 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    const legend = this.legend, navigator = this.navigator;\n    let legendOptions, xAxis, yAxis;\n    if (navigator) {\n        legendOptions = legend && legend.options;\n        xAxis = navigator.xAxis;\n        yAxis = navigator.yAxis;\n        const { scrollbarHeight, scrollButtonSize } = navigator;\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                    (this.scrollbar?.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    const 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    const chartOptions = this.options, navigator = chartOptions.navigator, 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    const navigator = chart.navigator;\n    // Initialize the navigator\n    if (navigator && chart.xAxis[0]) {\n        const 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    const navigatorOptions = (e.options.navigator || {}), 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 * */\nconst ChartNavigatorComposition = {\n    compose: ChartNavigatorComposition_compose\n};\n/* harmony default export */ const Navigator_ChartNavigatorComposition = (ChartNavigatorComposition);\n\n;// ./code/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\nconst { isTouchDevice: NavigatorAxisComposition_isTouchDevice } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: NavigatorAxisComposition_addEvent, correctFloat, defined: NavigatorAxisComposition_defined, isNumber, pick: NavigatorAxisComposition_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction onAxisInit() {\n    const 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    const axis = this, chart = axis.chart, chartOptions = chart.options, navigator = chartOptions.navigator, navigatorAxis = axis.navigatorAxis, pinchType = chart.zooming.pinchType, rangeSelector = chartOptions.rangeSelector, zoomType = chart.zooming.type;\n    let zoomed;\n    if (axis.isXAxis &&\n        (navigator?.enabled || 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            const 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 */\nclass NavigatorAxisAdditions {\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    static compose(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     *  Constructors\n     *\n     * */\n    constructor(axis) {\n        this.axis = axis;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    destroy() {\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    toFixedRange(pxMin, pxMax, fixedMin, fixedMax) {\n        const axis = this.axis, halfPointRange = (axis.pointRange || 0) / 2;\n        let newMin = NavigatorAxisComposition_pick(fixedMin, axis.translate(pxMin, true, !axis.horiz)), newMax = NavigatorAxisComposition_pick(fixedMax, axis.translate(pxMax, 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}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const 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/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\nconst { parse: color } = (highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default());\n\nconst { seriesTypes } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default());\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 */\nconst 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 */ const 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/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\nconst { defined: Symbols_defined, isNumber: Symbols_isNumber, pick: Symbols_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/* eslint-disable require-jsdoc, valid-jsdoc */\n/**\n *\n */\nfunction arc(cx, cy, w, h, options) {\n    const arc = [];\n    if (options) {\n        const start = options.start || 0, rx = Symbols_pick(options.r, w), ry = Symbols_pick(options.r, 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)), fullCircle = (Math.abs((options.end || 0) - start - 2 * Math.PI) <\n            proximity), end = (options.end || 0) - (fullCircle ? proximity : 0), innerRadius = options.innerR, open = Symbols_pick(options.open, fullCircle), cosStart = Math.cos(start), sinStart = Math.sin(start), cosEnd = Math.cos(end), sinEnd = Math.sin(end), \n        // Proximity takes care of rounding errors around PI (#6971)\n        longArc = Symbols_pick(options.longArc, end - start - Math.PI < proximity ? 0 : 1);\n        let 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, end, cx, 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,\n                cy\n            };\n            arc.push(open ?\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) {\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    const arrowLength = 6, halfDistance = 6, r = Math.min((options && options.r) || 0, w, h), safeDistance = r + halfDistance, anchorX = options && options.anchorX, anchorY = options && options.anchorY || 0;\n    const path = roundedRect(x, y, w, h, { 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                const isTopCorner = anchorY < y + safeDistance, cornerY = isTopCorner ? y : y + h, 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                const isTopCorner = anchorY < y + safeDistance, cornerY = isTopCorner ? y : y + h, 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    const r = 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}\nconst Symbols = {\n    arc,\n    callout,\n    circle,\n    diamond,\n    rect,\n    roundedRect,\n    square: rect,\n    triangle,\n    'triangle-down': triangleDown\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const SVG_Symbols = (Symbols);\n\n;// ./code/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\n\n\nconst { relativeLength } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\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    const halfWidth = options.width ? options.width / 2 : width, markerPosition = 1.5, r = relativeLength(options.borderRadius || 0, Math.min(halfWidth * 2, height));\n    height = options.height || height;\n    return [\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 })\n    ];\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst NavigatorSymbols = {\n    'navigator-handle': navigatorHandle\n};\n/* harmony default export */ const 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/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\nconst { defined: StockUtilities_defined } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\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    const 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}\nconst StockUtilities = {\n    setFixedRange\n};\n/* harmony default export */ const Utilities_StockUtilities = (StockUtilities);\n\n;// ./code/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\nconst { setOptions } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { composed: NavigatorComposition_composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\n\nconst { getRendererType } = (highcharts_RendererRegistry_commonjs_highcharts_RendererRegistry_commonjs2_highcharts_RendererRegistry_root_Highcharts_RendererRegistry_default());\n\nconst { setFixedRange: NavigatorComposition_setFixedRange } = Utilities_StockUtilities;\n\nconst { addEvent: NavigatorComposition_addEvent, extend, pushUnique: NavigatorComposition_pushUnique } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\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 * */\nconst NavigatorComposition = {\n    compose: NavigatorComposition_compose\n};\n/* harmony default export */ const Navigator_NavigatorComposition = (NavigatorComposition);\n\n;// ./code/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\nconst { composed: ScrollbarAxis_composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: ScrollbarAxis_addEvent, defined: ScrollbarAxis_defined, pick: ScrollbarAxis_pick, pushUnique: ScrollbarAxis_pushUnique } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Composition\n *\n * */\nvar ScrollbarAxis;\n(function (ScrollbarAxis) {\n    /* *\n     *\n     *  Variables\n     *\n     * */\n    let 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        const axisMin = ScrollbarAxis_pick(axis.options && axis.options.min, axis.min);\n        const axisMax = ScrollbarAxis_pick(axis.options && axis.options.max, axis.max);\n        return {\n            axisMin,\n            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        const axis = this, scrollbar = axis.scrollbar, opposite = scrollbar && !scrollbar.options.opposite, 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        const 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                const { axisMin, axisMax, scrollMin: unitedMin, scrollMax: unitedMax } = getExtremes(axis), range = unitedMax - unitedMin;\n                let to, 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                    const 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        const axis = this, { scrollMin, scrollMax } = getExtremes(axis), scrollbar = axis.scrollbar, offset = (axis.axisTitleMargin + (axis.titleOffset || 0)), scrollbarsOffsets = axis.chart.scrollbarsOffsets, axisMargin = axis.options.margin || 0;\n        let offsetsIndex, from, 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                let xPosition;\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                const 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 */ const Axis_ScrollbarAxis = (ScrollbarAxis);\n\n;// ./code/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 */\nconst 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 */ const Scrollbar_ScrollbarDefaults = (ScrollbarDefaults);\n\n;// ./code/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\nconst { defaultOptions: Scrollbar_defaultOptions } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\n\nconst { addEvent: Scrollbar_addEvent, correctFloat: Scrollbar_correctFloat, crisp, defined: Scrollbar_defined, destroyObjectProperties, fireEvent, merge: Scrollbar_merge, pick: Scrollbar_pick, removeEvent } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\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 */\nclass Scrollbar {\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    static compose(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    static swapXY(path, vertical) {\n        if (vertical) {\n            path.forEach((seg) => {\n                const len = seg.length;\n                let temp;\n                for (let 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     *  Constructors\n     *\n     * */\n    constructor(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     *  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    addEvents() {\n        const buttonsOrder = this.options.inverted ? [1, 0] : [0, 1], buttons = this.scrollbarButtons, bar = this.scrollbarGroup.element, track = this.track.element, mouseDownHandler = this.mouseDownHandler.bind(this), mouseMoveHandler = this.mouseMoveHandler.bind(this), mouseUpHandler = this.mouseUpHandler.bind(this);\n        const _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', this.trackClick.bind(this)],\n            [bar, 'mousedown', mouseDownHandler],\n            [bar.ownerDocument, 'mousemove', mouseMoveHandler],\n            [bar.ownerDocument, 'mouseup', mouseUpHandler],\n            // Touch events\n            [bar, 'touchstart', mouseDownHandler],\n            [bar.ownerDocument, 'touchmove', mouseMoveHandler],\n            [bar.ownerDocument, 'touchend', mouseUpHandler]\n        ];\n        // Add them all\n        _events.forEach(function (args) {\n            Scrollbar_addEvent.apply(null, args);\n        });\n        this._events = _events;\n    }\n    buttonToMaxClick(e) {\n        const scroller = this;\n        const 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    buttonToMinClick(e) {\n        const scroller = this;\n        const 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    cursorToScrollbarPosition(normalizedEvent) {\n        const scroller = this, options = scroller.options, 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    destroy() {\n        const scroller = this, 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    drawScrollbarButton(index) {\n        const scroller = this, renderer = scroller.renderer, scrollbarButtons = scroller.scrollbarButtons, options = scroller.options, size = scroller.size, group = renderer.g().add(scroller.group);\n        scrollbarButtons.push(group);\n        if (options.buttonsEnabled) {\n            // Create a rectangle for the scrollbar button\n            const 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            const arrow = renderer\n                .path(Scrollbar.swapXY([[\n                    'M',\n                    size / 2 + (index ? -1 : 1),\n                    size / 2 - 3\n                ], [\n                    'L',\n                    size / 2 + (index ? -1 : 1),\n                    size / 2 + 3\n                ], [\n                    'L',\n                    size / 2 + (index ? 2 : -2),\n                    size / 2\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    init(renderer, options, chart) {\n        const 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    mouseDownHandler(e) {\n        const scroller = this, normalizedEvent = scroller.chart.pointer?.normalize(e) || e, 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    mouseMoveHandler(e) {\n        const scroller = this, normalizedEvent = scroller.chart.pointer?.normalize(e) || e, options = scroller.options, direction = options.vertical ?\n            'chartY' : 'chartX', initPositions = scroller.initPositions || [];\n        let scrollPosition, chartPosition, 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    mouseUpHandler(e) {\n        const 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    position(x, y, width, height) {\n        const scroller = this, options = scroller.options, { buttonsEnabled, margin = 0, vertical } = options, method = scroller.rendered ? 'animate' : 'attr';\n        let xOffset = height, 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    removeEvents() {\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    render() {\n        const scroller = this, renderer = scroller.renderer, options = scroller.options, size = scroller.size, styledMode = scroller.chart.styledMode, 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        const 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    setRange(from, to) {\n        const scroller = this, options = scroller.options, vertical = options.vertical, minWidth = options.minWidth, fullWidth = scroller.barWidth, 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        const toPX = fullWidth * Math.min(to, 1);\n        let fromPX, 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        const newPos = Math.floor(fromPX + scroller.xOffset + scroller.yOffset);\n        const 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    shouldUpdateExtremes(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    trackClick(e) {\n        const scroller = this;\n        const normalizedEvent = scroller.chart.pointer?.normalize(e) || e, range = scroller.to - scroller.from, top = scroller.y + scroller.scrollbarTop, 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    update(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    updatePosition(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 *\n *  Static Properties\n *\n * */\nScrollbar.defaultOptions = Scrollbar_ScrollbarDefaults;\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 */ const 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/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\n\n\n\nconst { defaultOptions: Navigator_defaultOptions } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { isTouchDevice: Navigator_isTouchDevice } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\n\nconst { prototype: { symbols } } = (highcharts_SVGRenderer_commonjs_highcharts_SVGRenderer_commonjs2_highcharts_SVGRenderer_root_Highcharts_SVGRenderer_default());\n\nconst { addEvent: Navigator_addEvent, clamp, correctFloat: Navigator_correctFloat, defined: Navigator_defined, destroyObjectProperties: Navigator_destroyObjectProperties, erase, extend: Navigator_extend, find, fireEvent: Navigator_fireEvent, isArray: Navigator_isArray, isNumber: Navigator_isNumber, merge: Navigator_merge, pick: Navigator_pick, removeEvent: Navigator_removeEvent, splat: Navigator_splat } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\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, ...args) {\n    const numbers = [].filter.call(args, 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 */\nclass Navigator {\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    static compose(ChartClass, AxisClass, SeriesClass) {\n        Navigator_ChartNavigatorComposition.compose(ChartClass, Navigator);\n        Navigator_NavigatorComposition.compose(ChartClass, AxisClass, SeriesClass);\n    }\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor(chart) {\n        this.isDirty = false;\n        this.scrollbarHeight = 0;\n        this.init(chart);\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    drawHandle(x, index, inverted, verb) {\n        const navigator = this, 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    drawOutline(zoomedMin, zoomedMax, inverted, verb) {\n        const 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        let left = navigator.left, verticalMin, 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    drawMasks(zoomedMin, zoomedMax, inverted, verb) {\n        const navigator = this, left = navigator.left, top = navigator.top, navigatorHeight = navigator.height;\n        let height, width, x, 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((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    renderElements() {\n        const navigator = this, navigatorOptions = navigator.navigatorOptions, maskInside = navigatorOptions.maskInside, chart = navigator.chart, inverted = chart.inverted, renderer = chart.renderer, mouseCursor = {\n            cursor: inverted ? 'ns-resize' : 'ew-resize'\n        }, \n        // Create the main navigator group\n        navigatorGroup = navigator.navigatorGroup ??\n            (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((hasMask, index) => {\n            const shade = navigator.shades[index] ??\n                (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 (navigatorOptions.handles?.enabled) {\n            const handlesOptions = navigatorOptions.handles, { height, width } = handlesOptions;\n            [0, 1].forEach((index) => {\n                const symbolName = handlesOptions.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                    navigator.handles[index]?.destroy();\n                    navigator.handles[index] = renderer.symbol(symbolName, -width / 2 - 1, 0, width, height, handlesOptions);\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                    const symbolFn = symbols[symbolName], path = symbolFn.call(symbols, -width / 2 - 1, 0, width, height);\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 / 2),\n                        rotationOriginY: (height + width) / 2\n                    });\n                }\n                if (!chart.styledMode) {\n                    navigator.handles[index]\n                        .attr({\n                        fill: handlesOptions.backgroundColor,\n                        stroke: handlesOptions.borderColor,\n                        'stroke-width': handlesOptions.lineWidth,\n                        width: handlesOptions.width,\n                        height: handlesOptions.height,\n                        x: -width / 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    update(options, redraw = false) {\n        const chart = this.chart, invertedUpdate = chart.options.chart.inverted !==\n            chart.scrollbar?.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((series) => {\n                    Navigator_removeEvent(series, 'updatedData', this.updatedDataHandler);\n                }, this);\n            }\n            if (options.adaptToUpdatedData) {\n                this.baseSeries.forEach((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 = options.height ?? this.height;\n                const offsets = this.getXAxisOffsets();\n                this.xAxis.update({\n                    ...options.xAxis,\n                    offsets,\n                    [chart.inverted ? 'width' : 'height']: this.height,\n                    [chart.inverted ? 'height' : 'width']: void 0\n                }, false);\n                this.yAxis.update({\n                    ...options.yAxis,\n                    [chart.inverted ? 'width' : 'height']: this.height\n                }, 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    render(min, max, pxMin, pxMax) {\n        const navigator = this, chart = navigator.chart, xAxis = navigator.xAxis, pointRange = xAxis.pointRange || 0, scrollbarXAxis = xAxis.navigatorAxis.fake ? chart.xAxis[0] : xAxis, navigatorEnabled = navigator.navigatorEnabled, rendered = navigator.rendered, inverted = chart.inverted, minRange = chart.xAxis[0].minRange, maxRange = chart.xAxis[0].options.maxRange, scrollButtonSize = navigator.scrollButtonSize;\n        let navigatorWidth, scrollbarLeft, scrollbarTop, scrollbarHeight = navigator.scrollbarHeight, navigatorSize, 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        let 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        const newMin = xAxis.toValue(pxMin, true), newMax = xAxis.toValue(pxMax, true), 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        const 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    addMouseEvents() {\n        const navigator = this, chart = navigator.chart, container = chart.container;\n        let eventsToUnbind = [], mouseMoveHandler, 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    getPartsEvents(eventName) {\n        const navigator = this, 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    shadesMousedown(e, index) {\n        e = this.chart.pointer?.normalize(e) || e;\n        const navigator = this, chart = navigator.chart, xAxis = navigator.xAxis, zoomedMin = navigator.zoomedMin, navigatorSize = navigator.size, range = navigator.range;\n        let navigatorPosition = navigator.left, chartX = e.chartX, fixedMax, fixedMin, ext, 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    handlesMousedown(e, index) {\n        e = this.chart.pointer?.normalize(e) || e;\n        const navigator = this, chart = navigator.chart, 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    onMouseMove(e) {\n        const navigator = this, chart = navigator.chart, navigatorSize = navigator.navigatorSize, range = navigator.range, dragOffset = navigator.dragOffset, inverted = chart.inverted;\n        let left = navigator.left, 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 = chart.pointer?.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    onMouseUp(e) {\n        const navigator = this, chart = navigator.chart, xAxis = navigator.xAxis, scrollbar = navigator.scrollbar, DOMEvent = e.DOMEvent || e, inverted = chart.inverted, verb = navigator.rendered && !navigator.hasDragged ?\n            'animate' : 'attr';\n        let zoomedMax, zoomedMin, unionExtremes, fixedMin, fixedMax, 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    removeEvents() {\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    removeBaseSeriesEvents() {\n        const 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    getXAxisOffsets() {\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    init(chart) {\n        const chartOptions = chart.options, navigatorOptions = chartOptions.navigator || {}, navigatorEnabled = navigatorOptions.enabled, scrollbarOptions = chartOptions.scrollbar || {}, scrollbarEnabled = scrollbarOptions.enabled, height = navigatorEnabled && navigatorOptions.height || 0, scrollbarHeight = scrollbarEnabled && scrollbarOptions.height || 0, 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        const navigator = this, baseSeries = navigator.baseSeries, xAxisIndex = chart.xAxis.length, yAxisIndex = chart.yAxis.length, baseXaxis = baseSeries && baseSeries[0] && baseSeries[0].xAxis ||\n            chart.xAxis[0] || { options: {} };\n        chart.isDirtyBox = true;\n        if (navigator.navigatorEnabled) {\n            const 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: navigatorOptions.yAxis?.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,\n                width: height\n            } : {\n                offsets,\n                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,\n                navigatorAxis: {\n                    fake: true\n                },\n                translate: function (value, reverse) {\n                    const 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            const 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                const range = navigator.size, to = range * this.to, 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    setOpposite() {\n        const navigatorOptions = this.navigatorOptions, navigatorEnabled = this.navigatorEnabled, 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    getUnionExtremes(returnFalseOnNoBaseSeries) {\n        const baseAxis = this.chart.xAxis[0], time = this.chart.time, navAxis = this.xAxis, navAxisOptions = navAxis.options, baseAxisOptions = baseAxis.options;\n        let ret;\n        if (!returnFalseOnNoBaseSeries || baseAxis.dataMin !== null) {\n            ret = {\n                dataMin: Navigator_pick(// #4053\n                time.parse(navAxisOptions?.min), numExt('min', time.parse(baseAxisOptions.min), baseAxis.dataMin, navAxis.dataMin, navAxis.min)),\n                dataMax: Navigator_pick(time.parse(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    setBaseSeries(baseSeriesOptions, redraw) {\n        const chart = this.chart, 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, (s) => (!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((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    updateNavigatorSeries(addEvents, redraw) {\n        const navigator = this, chart = navigator.chart, baseSeries = navigator.baseSeries, navSeriesMixin = {\n            enableMouseTracking: false,\n            index: null, // #6162\n            linkedTo: null, // #6734\n            group: 'nav', // For columns\n            padXAxis: false,\n            xAxis: this.navigatorOptions.xAxis?.id,\n            yAxis: this.navigatorOptions.yAxis?.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((navSeries) => {\n                const 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        let baseOptions, mergedNavSeriesOptions, chartNavigatorSeriesOptions = navigator.navigatorOptions.series, baseNavigatorOptions;\n        // Go through each base series and merge the options to create new\n        // series\n        if (baseSeries && baseSeries.length) {\n            baseSeries.forEach((base) => {\n                const linkedNavSeries = base.navigatorSeries, 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                const navigatorSeriesData = baseNavigatorOptions.data || userNavOptions.data;\n                navigator.hasNavigatorData =\n                    navigator.hasNavigatorData || !!navigatorSeriesData;\n                mergedNavSeriesOptions.data = (navigatorSeriesData ||\n                    baseOptions.data?.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((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    addBaseSeriesEvents() {\n        const navigator = this, 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((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    getBaseSeriesMin(currentSeriesMin) {\n        return this.baseSeries.reduce(function (min, series) {\n            // #10193\n            return Math.min(min, series.getColumn('x')[0] ?? 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    modifyNavigatorAxisExtremes() {\n        const xAxis = this.xAxis;\n        if (typeof xAxis.getExtremes !== 'undefined') {\n            const 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    modifyBaseAxisExtremes() {\n        const baseXAxis = this, navigator = baseXAxis.chart.navigator, baseExtremes = baseXAxis.getExtremes(), baseMin = baseExtremes.min, baseMax = baseExtremes.max, baseDataMin = baseExtremes.dataMin, baseDataMax = baseExtremes.dataMax, range = baseMax - baseMin, stickToMin = navigator.stickToMin, stickToMax = navigator.stickToMax, overscroll = Navigator_pick(baseXAxis.ordinal?.convertOverscroll(baseXAxis.options.overscroll), 0), navigatorSeries = navigator.series && navigator.series[0], 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        let newMax, 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    updatedDataHandler() {\n        const navigator = this.chart.navigator, baseSeries = this, navigatorSeries = this.navigatorSeries, 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    shouldStickToMin(baseSeries, navigator) {\n        const xDataMin = navigator.getBaseSeriesMin(baseSeries.getColumn('x')[0]), xAxis = baseSeries.xAxis, max = xAxis.max, min = xAxis.min, range = xAxis.options.range;\n        let 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    addChartEvents() {\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            const navigator = this.navigator, 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, xAxis.max);\n            }\n        }), \n        // Make room for the navigator, can be placed around the chart:\n        Navigator_addEvent(this.chart, 'getMargins', function () {\n            const chart = this, navigator = chart.navigator;\n            let 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    destroy() {\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((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((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((coll) => {\n            Navigator_destroyObjectProperties(coll);\n        });\n        this.navigatorEnabled = false;\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Navigator_Navigator = (Navigator);\n\n;// ./code/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 */\nconst 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 */\nconst 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 * */\nconst RangeSelectorDefaults = {\n    lang,\n    rangeSelector\n};\n/* harmony default export */ const RangeSelector_RangeSelectorDefaults = (RangeSelectorDefaults);\n\n;// ./code/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\nconst { defaultOptions: RangeSelectorComposition_defaultOptions } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { composed: RangeSelectorComposition_composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\nconst { addEvent: RangeSelectorComposition_addEvent, defined: RangeSelectorComposition_defined, extend: RangeSelectorComposition_extend, isNumber: RangeSelectorComposition_isNumber, merge: RangeSelectorComposition_merge, pick: RangeSelectorComposition_pick, pushUnique: RangeSelectorComposition_pushUnique } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Constants\n *\n * */\nconst chartDestroyEvents = [];\n/* *\n *\n *  Variables\n *\n * */\nlet 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    const rangeOptions = this.range, type = rangeOptions.type, max = this.max, time = this.chart.time, \n    // Get the true range from a start date\n    getTrueRange = function (base, count) {\n        const original = time.toParts(base), modified = original.slice();\n        if (type === 'year') {\n            modified[0] += count;\n        }\n        else {\n            modified[1] += count;\n        }\n        let d = time.makeTime.apply(time, modified);\n        const 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    let min, 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    const dataMin = RangeSelectorComposition_pick(this.dataMin, 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    this.rangeSelector?.redrawElements();\n}\n/**\n * @private\n */\nfunction RangeSelectorComposition_compose(AxisClass, ChartClass, RangeSelectorClass) {\n    RangeSelectorConstructor = RangeSelectorClass;\n    if (RangeSelectorComposition_pushUnique(RangeSelectorComposition_composed, 'RangeSelector')) {\n        const 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    const chart = this, rangeSelector = chart.rangeSelector;\n    if (rangeSelector) {\n        if (RangeSelectorComposition_isNumber(rangeSelector.deferredYTDClick)) {\n            rangeSelector.clickButton(rangeSelector.deferredYTDClick);\n            delete rangeSelector.deferredYTDClick;\n        }\n        const 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    const chart = this;\n    const rangeSelector = this.rangeSelector;\n    if (!rangeSelector) {\n        return;\n    }\n    let alignTo;\n    const extremes = chart.xAxis[0].getExtremes();\n    const legend = chart.legend;\n    const 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 (let i = 0, iEnd = chartDestroyEvents.length; i < iEnd; ++i) {\n        const events = chartDestroyEvents[i];\n        if (events[0] === this) {\n            events[1].forEach((unbind) => unbind());\n            chartDestroyEvents.splice(i, 1);\n            return;\n        }\n    }\n}\n/**\n *\n */\nfunction onChartGetMargins() {\n    const rangeSelector = this.rangeSelector;\n    if (rangeSelector?.options?.enabled) {\n        const rangeSelectorHeight = rangeSelector.getHeight();\n        const 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    const chart = this, options = e.options, optionsRangeSelector = options.rangeSelector, extraBottomMarginWas = this.extraBottomMargin, extraTopMarginWas = this.extraTopMargin;\n    let 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        const 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 * */\nconst RangeSelectorComposition = {\n    compose: RangeSelectorComposition_compose\n};\n/* harmony default export */ const 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/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\nconst { fireEvent: DataTableCore_fireEvent, isArray: DataTableCore_isArray, objectEach: DataTableCore_objectEach, uniqueKey } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\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 */\nclass DataTableCore {\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    constructor(options = {}) {\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        let rowCount = 0;\n        DataTableCore_objectEach(options.columns || {}, (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    applyRowCount(rowCount) {\n        this.rowCount = rowCount;\n        DataTableCore_objectEach(this.columns, (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    getColumn(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    getColumns(columnNames, \n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    asReference) {\n        return (columnNames || Object.keys(this.columns)).reduce((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    getRow(rowIndex, columnNames) {\n        return (columnNames || Object.keys(this.columns)).map((key) => this.columns[key]?.[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    setColumn(columnName, column = [], rowIndex = 0, eventDetail) {\n        this.setColumns({ [columnName]: column }, 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    setColumns(columns, rowIndex, eventDetail) {\n        let rowCount = this.rowCount;\n        DataTableCore_objectEach(columns, (column, columnName) => {\n            this.columns[columnName] = column.slice();\n            rowCount = column.length;\n        });\n        this.applyRowCount(rowCount);\n        if (!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    setRow(row, rowIndex = this.rowCount, insert, eventDetail) {\n        const { columns } = this, indexRowCount = insert ? this.rowCount + 1 : rowIndex + 1;\n        DataTableCore_objectEach(row, (cellValue, columnName) => {\n            const column = columns[columnName] ||\n                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?.silent) {\n            DataTableCore_fireEvent(this, 'afterSetRows');\n            this.versionTag = uniqueKey();\n        }\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const 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/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\n\n\n\n\nconst { addEvent: OrdinalAxis_addEvent, correctFloat: OrdinalAxis_correctFloat, css, defined: OrdinalAxis_defined, error: OrdinalAxis_error, isNumber: OrdinalAxis_isNumber, pick: OrdinalAxis_pick, timeUnits, isString } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\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        const 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 = 0, findHigherRanks) {\n        const higherRanks = {}, tickPixelIntervalOption = this.options.tickPixelInterval, 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        let end, segmentPositions, hasCrossedHigherRank, info, outsideMax, start = 0, groupPositions = [], 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        const 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            const length = groupPositions.length, translatedArr = [], distances = [];\n            let itemToRemove, translated, lastTranslated, medianDistance, distance, i = length;\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((a, b) => 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] > max ? length - 1 : length; // #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        const axis = this, 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        let i = ordinalPositions.length - 1, 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        const axis = this, ordinal = axis.ordinal, localMin = axis.old ? axis.old.min : axis.min, localA = axis.old ? axis.old.transA : axis.transA;\n        // Always use extendedPositions (#19816)\n        const positions = ordinal.getExtendedPositions();\n        // In some cases (especially in early stages of the chart creation) the\n        // getExtendedPositions might return undefined.\n        if (positions?.length) {\n            // Convert back from modivied value to pixels. // #15970\n            const pixelVal = OrdinalAxis_correctFloat((val - localMin) * localA +\n                axis.minPixelPadding), index = OrdinalAxis_correctFloat(ordinal.getIndexOfPoint(pixelVal, positions)), 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                const leftNeighbour = positions[Math.floor(index)], rightNeighbour = positions[Math.ceil(index)], 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        const index = OrdinalAxis.Additions.findIndexOf(ordinalPositions, val, true);\n        if (ordinalPositions[index] === val) {\n            return index;\n        }\n        const percent = (val - ordinalPositions[index]) /\n            (ordinalPositions[index + 1] - ordinalPositions[index]);\n        return index + percent;\n    }\n    /**\n    * @private\n    */\n    function onAxisAfterInit() {\n        const axis = this;\n        if (!axis.ordinal) {\n            axis.ordinal = new OrdinalAxis.Additions(axis);\n        }\n    }\n    /**\n     * @private\n     */\n    function onAxisFoundExtremes() {\n        const axis = this, { eventArgs, options } = axis;\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?.trigger !== 'pan' ||\n                    axis.isInternal) &&\n                // Scrollbar buttons are the other execption\n                eventArgs?.trigger !== 'navigator') {\n                const 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?.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        const 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        const 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        const chart = this, xAxis = chart.xAxis[0], overscroll = xAxis.ordinal.convertOverscroll(xAxis.options.overscroll), chartX = e.originalEvent.chartX, panning = chart.options.chart.panning;\n        let 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            const mouseDownX = chart.mouseDownX, extremes = xAxis.getExtremes(), dataMin = extremes.dataMin, dataMax = extremes.dataMax, min = extremes.min, max = extremes.max, hoverPoints = chart.hoverPoints, closestPointRange = (xAxis.closestPointRange ||\n                (xAxis.ordinal && xAxis.ordinal.overscrollPointsRange)), 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(), extendedAxis = {\n                ordinal: {\n                    positions: extendedOrdinalPositions,\n                    extendedOrdinalPositions: extendedOrdinalPositions\n                }\n            }, index2val = xAxis.index2val, val2lin = xAxis.val2lin;\n            let trimmedRange, ordinalPositions;\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.apply(extendedAxis, [\n                    val2lin.apply(extendedAxis, [min, true]) +\n                        movedUnits\n                ]), index2val.apply(extendedAxis, [\n                    val2lin.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        const 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        const axis = this, ordinal = axis.ordinal, ordinalPositions = ordinal.positions;\n        let slope = ordinal.slope, extendedOrdinalPositions;\n        if (!ordinalPositions) {\n            return val;\n        }\n        const ordinalLength = ordinalPositions.length;\n        let 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            const length = extendedOrdinalPositions.length;\n            if (!slope) {\n                slope =\n                    (extendedOrdinalPositions[length - 1] -\n                        extendedOrdinalPositions[0]) /\n                        length;\n            }\n            // `originalPointReference` is equal to the index of first point of\n            // ordinalPositions in extendedOrdinalPositions.\n            const originalPositionsReference = getIndexInArray(extendedOrdinalPositions, 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 - 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                    const diff = extendedOrdinalPositions[0] - val, approximateIndexOffset = diff / slope;\n                    ordinalIndex =\n                        -originalPositionsReference -\n                            approximateIndexOffset;\n                }\n                else {\n                    const diff = val -\n                        extendedOrdinalPositions[length - 1], approximateIndexOffset = diff / slope;\n                    ordinalIndex =\n                        approximateIndexOffset +\n                            length -\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    class Additions {\n        /* *\n         *\n         *  Constructors\n         *\n         * */\n        /**\n         * @private\n         */\n        constructor(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        beforeSetTickPositions() {\n            const axis = this.axis, ordinal = axis.ordinal, extremes = axis.getExtremes(), min = extremes.min, max = extremes.max, hasBreaks = axis.brokenAxis?.hasBreaks, isOrdinal = axis.options.ordinal;\n            let len, uniqueOrdinalPositions, dist, minIndex, maxIndex, slope, i, ordinalPositions = [], overscrollPointsRange = Number.MAX_VALUE, useOrdinal = false, adjustOrdinalExtremesPoints = false, isBoosted = false;\n            // Apply the ordinal logic\n            if (isOrdinal || hasBreaks) { // #4167 YAxis is never ordinal ?\n                let distanceBetweenPoint = 0;\n                axis.series.forEach(function (series, i) {\n                    const xData = series.getColumn('x', 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 !== xData[1] - xData[0]);\n                    }\n                    distanceBetweenPoint = 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        static findIndexOf(sortedArray, key, indirectSearch) {\n            let start = 0, end = sortedArray.length - 1, 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        getExtendedPositions(withOverscroll = true) {\n            const ordinal = this, axis = ordinal.axis, axisProto = axis.constructor.prototype, chart = axis.chart, key = axis.series.reduce((k, series) => {\n                const 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            let fakeAxis, fakeSeries = void 0, 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((series) => {\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                    const 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 = {\n                        ...series.options,\n                        dataGrouping: series.currentDataGrouping ? {\n                            firstAnchor: series.options.dataGrouping?.firstAnchor,\n                            anchor: series.options.dataGrouping?.anchor,\n                            lastAnchor: series.options.dataGrouping?.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                    };\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?.closestPointRange !==\n                    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        getGroupIntervalFactor(xMin, xMax, series) {\n            const ordinal = this, processedXData = series.getColumn('x', true), len = processedXData.length, distances = [];\n            let median, i, 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        getIndexOfPoint(pixelVal, ordinalArray) {\n            const ordinal = this, axis = ordinal.axis, min = axis.min, minX = axis.minPixelPadding, indexOfMin = getIndexInArray(ordinalArray, min);\n            const ordinalPointPixelInterval = axis.translationSlope *\n                (ordinal.slope ||\n                    axis.closestPointRange ||\n                    ordinal.overscrollPointsRange);\n            const 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        getOverscrollPositions() {\n            const ordinal = this, axis = ordinal.axis, extraRange = ordinal.convertOverscroll(axis.options.overscroll), distance = ordinal.overscrollPointsRange, positions = [];\n            let 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        postProcessTickInterval(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            const ordinal = this, axis = ordinal.axis, ordinalSlope = ordinal.slope, closestPointRange = axis.closestPointRange;\n            let 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        convertOverscroll(overscroll = 0) {\n            const ordinal = this, axis = ordinal.axis, calculateOverscroll = function (overscrollPercentage) {\n                return OrdinalAxis_pick(ordinal.originalOrdinalRange, OrdinalAxis_defined(axis.dataMax) && OrdinalAxis_defined(axis.dataMin) ?\n                    axis.dataMax - axis.dataMin : 0) * overscrollPercentage;\n            };\n            if (isString(overscroll)) {\n                const 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                    const limitedOverscrollValue = Math.min(overscrollValue, axis.len * 0.9), 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    }\n    OrdinalAxis.Additions = Additions;\n})(OrdinalAxis || (OrdinalAxis = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Axis_OrdinalAxis = (OrdinalAxis);\n\n;// ./code/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\nconst { defaultOptions: RangeSelector_defaultOptions } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\n\n\nconst { addEvent: RangeSelector_addEvent, createElement, css: RangeSelector_css, defined: RangeSelector_defined, destroyObjectProperties: RangeSelector_destroyObjectProperties, diffObjects, discardElement, extend: RangeSelector_extend, fireEvent: RangeSelector_fireEvent, isNumber: RangeSelector_isNumber, isString: RangeSelector_isString, merge: RangeSelector_merge, objectEach: RangeSelector_objectEach, pick: RangeSelector_pick, splat: RangeSelector_splat } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\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    const hasTimeKey = (char) => new RegExp(`%[[a-zA-Z]*${char}`).test(format);\n    const 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    const 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    const 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 */\nclass RangeSelector {\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    static compose(AxisClass, ChartClass) {\n        RangeSelector_RangeSelectorComposition.compose(AxisClass, ChartClass, RangeSelector);\n    }\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor(chart) {\n        this.isDirty = false;\n        this.buttonOptions = RangeSelector.prototype.defaultButtons;\n        this.initialButtonGroupWidth = 0;\n        this.maxButtonWidth = () => {\n            let buttonWidth = 0;\n            this.buttons.forEach((button) => {\n                const 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     *  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    clickButton(i, redraw) {\n        const rangeSelector = this, chart = rangeSelector.chart, rangeOptions = rangeSelector.buttonOptions[i], baseAxis = chart.xAxis[0], unionExtremes = (chart.scroller && chart.scroller.getUnionExtremes()) || baseAxis || {}, type = rangeOptions.type, dataGrouping = rangeOptions.dataGrouping;\n        let dataMin = unionExtremes.dataMin, dataMax = unionExtremes.dataMax, newMin, newMax = RangeSelector_isNumber(baseAxis?.max) ? Math.round(Math.min(baseAxis.max, dataMax ?? baseAxis.max)) : void 0, // #1568\n        baseXAxisOptions, range = rangeOptions._range, rangeMin, ctx, ytdExtremes, 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((series) => {\n                        // Reassign it to the last item\n                        const 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            const axisRangeUpdateEvent = RangeSelector_addEvent(chart, 'afterCreateAxes', function () {\n                const 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                const xAxis = chart.xAxis[0];\n                chart.setFixedRange(rangeOptions._range);\n                xAxis.options.range = baseXAxisOptions.range;\n                xAxis.options.min = baseXAxisOptions.min;\n                axisRangeUpdateEvent(); // 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    setSelected(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    init(chart) {\n        const rangeSelector = this, options = chart.options.rangeSelector, buttonOptions = options.buttons, selectedOption = options.selected, blurInputs = function () {\n            const minInput = rangeSelector.minInput, 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    updateButtonStates() {\n        const rangeSelector = this, chart = this.chart, dropdown = this.dropdown, dropdownLabel = this.dropdownLabel, baseAxis = chart.xAxis[0], actualRange = Math.round(baseAxis.max - baseAxis.min), hasNoData = !baseAxis.hasVisibleSeries, day = 24 * 36e5, // A single day in milliseconds\n        unionExtremes = (chart.scroller &&\n            chart.scroller.getUnionExtremes()) || baseAxis, dataMin = unionExtremes.dataMin, dataMax = unionExtremes.dataMax, ytdExtremes = rangeSelector.getYTDExtremes(dataMax, dataMin), ytdMin = ytdExtremes.min, ytdMax = ytdExtremes.max, selected = rangeSelector.selected, allButtonsEnabled = rangeSelector.options.allButtonsEnabled, buttonStates = new Array(rangeSelector.buttonOptions.length)\n            .fill(0), selectedExists = RangeSelector_isNumber(selected), buttons = rangeSelector.buttons;\n        let isSelectedTooGreat = false, selectedIndex = null;\n        rangeSelector.buttonOptions.forEach((rangeOptions, i) => {\n            const range = rangeOptions._range, type = rangeOptions.type, count = rangeOptions.count || 1, offsetRange = rangeOptions._offsetMax -\n                rangeOptions._offsetMin, 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            let 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                baseAxis.ordinal?.positions &&\n                range &&\n                actualRange < range) {\n                // Handle ordinal ranges\n                const positions = baseAxis.ordinal.positions, prevOrdinalPosition = Axis_OrdinalAxis.Additions.findIndexOf(positions, baseAxis.min, true), nextOrdinalPosition = Math.min(Axis_OrdinalAxis.Additions.findIndexOf(positions, baseAxis.max, true) + 1, 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            const disable = (!allButtonsEnabled &&\n                !(isSelectedTooGreat && type === 'all') &&\n                (isTooGreatRange ||\n                    isTooSmallRange ||\n                    hasNoData));\n            const 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 (let i = 0; i < buttonStates.length; i++) {\n            const state = buttonStates[i];\n            const 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                    const 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    computeButtonRange(rangeOptions) {\n        const type = rangeOptions.type, 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    getInputValue(name) {\n        const input = name === 'min' ? this.minInput : this.maxInput;\n        const options = this.chart.options\n            .rangeSelector;\n        const 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    setInputValue(name, inputTime) {\n        const 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            const hcTimeAttr = input.getAttribute('data-hc-time');\n            let updatedTime = RangeSelector_defined(hcTimeAttr) ? Number(hcTimeAttr) : void 0;\n            if (RangeSelector_defined(inputTime)) {\n                const 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    setInputExtremes(name, min, max) {\n        const input = name === 'min' ? this.minInput : this.maxInput;\n        if (input) {\n            const format = this.inputTypeFormats[input.type];\n            const time = this.chart.time;\n            if (format) {\n                const newMin = time.dateFormat(format, min);\n                if (input.min !== newMin) {\n                    input.min = newMin;\n                }\n                const newMax = time.dateFormat(format, 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    showInput(name) {\n        const dateBox = name === 'min' ? this.minDateBox : this.maxDateBox, input = name === 'min' ? this.minInput : this.maxInput;\n        if (input && dateBox && this.inputGroup) {\n            const isTextInput = input.type === 'text', { translateX = 0, translateY = 0 } = this.inputGroup, { x = 0, width = 0, height = 0 } = dateBox, { inputBoxWidth } = this.options;\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    hideInput(name) {\n        const 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    defaultInputDateParser(inputDate, useUTC, time) {\n        return 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    drawInput(name) {\n        const { chart, div, inputGroup } = this;\n        const rangeSelector = this, chartStyle = chart.renderer.style || {}, renderer = chart.renderer, options = chart.options.rangeSelector, lang = RangeSelector_defaultOptions.lang, isMin = name === 'min';\n        /**\n         * @private\n         */\n        function updateExtremes(name) {\n            const { maxInput, minInput } = rangeSelector, chartAxis = chart.xAxis[0], unionExtremes = chart.scroller?.getUnionExtremes() || chartAxis, dataMin = unionExtremes.dataMin, dataMax = unionExtremes.dataMax, currentExtreme = chart.xAxis[0].getExtremes()[name];\n            let 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        const text = lang[isMin ? 'rangeSelectorFrom' : 'rangeSelectorTo'] || '';\n        const 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        const 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', 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        const input = createElement('input', {\n            name: name,\n            className: 'highcharts-range-selector'\n        }, void 0, 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 = () => {\n            rangeSelector.showInput(name);\n        };\n        // Hide away the input box\n        input.onblur = () => {\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        let keyDown = false;\n        // Handle changes in the input boxes\n        input.onchange = () => {\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 = (event) => {\n            // IE does not fire onchange on enter\n            if (event.keyCode === 13) {\n                updateExtremes(name);\n            }\n        };\n        input.onkeydown = (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 = () => {\n            keyDown = false;\n        };\n        return { dateBox, input, 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    getPosition() {\n        const chart = this.chart, options = chart.options.rangeSelector, 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    getYTDExtremes(dataMax, dataMin) {\n        const time = this.chart.time, year = time.toParts(dataMax)[0], startOfYear = time.makeTime(year, 0);\n        return {\n            max: dataMax,\n            min: Math.max(dataMin, startOfYear)\n        };\n    }\n    createElements() {\n        const chart = this.chart, renderer = chart.renderer, container = chart.container, chartOptions = chart.options, options = chartOptions.rangeSelector, inputEnabled = options.inputEnabled, inputsZIndex = RangeSelector_pick(chartOptions.chart.style?.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    createInputs() {\n        this.inputGroup = this.chart.renderer.g('input-group').add(this.group);\n        const minElems = this.drawInput('min');\n        this.minDateBox = minElems.dateBox;\n        this.minLabel = minElems.label;\n        this.minInput = minElems.input;\n        const 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    render(min, max) {\n        if (this.options.enabled === false) {\n            return;\n        }\n        const chart = this.chart, chartOptions = chart.options, 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                this.maxLabel?.css(options.labelStyle);\n                this.minLabel?.css(options.labelStyle);\n            }\n            const unionExtremes = (chart.scroller && chart.scroller.getUnionExtremes()) || chart.xAxis[0] || {};\n            if (RangeSelector_defined(unionExtremes.dataMin) &&\n                RangeSelector_defined(unionExtremes.dataMax)) {\n                const 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                let x = 0;\n                [\n                    this.minLabel,\n                    this.minDateBox,\n                    this.maxLabel,\n                    this.maxDateBox\n                ].forEach((label) => {\n                    if (label) {\n                        const { width } = label.getBBox();\n                        if (width) {\n                            label.attr({ x });\n                            x += 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    renderButtons() {\n        var _a;\n        const { chart, options } = this;\n        const lang = RangeSelector_defaultOptions.lang;\n        const renderer = chart.renderer;\n        const buttonTheme = RangeSelector_merge(options.buttonTheme);\n        const 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        const dropdown = this.dropdown = createElement('select', void 0, {\n            position: 'absolute',\n            padding: 0,\n            border: 0,\n            cursor: 'pointer',\n            opacity: 0.0001\n        }, this.div);\n        // Create a label for dropdown select element\n        const userButtonTheme = chart.userOptions.rangeSelector?.buttonTheme;\n        this.dropdownLabel = renderer.button('', 0, 0, () => { }, RangeSelector_merge(buttonTheme, {\n            'stroke-width': RangeSelector_pick(buttonTheme['stroke-width'], 0),\n            width: 'auto',\n            paddingLeft: RangeSelector_pick(options.buttonTheme.paddingLeft, userButtonTheme?.padding, 8),\n            paddingRight: RangeSelector_pick(options.buttonTheme.paddingRight, 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', () => {\n            dropdown.style.fontSize = '16px';\n        });\n        // Forward events from select to button\n        const 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, () => {\n            RangeSelector_fireEvent(this.dropdownLabel.element, mouseOver);\n        });\n        RangeSelector_addEvent(dropdown, mouseOut, () => {\n            RangeSelector_fireEvent(this.dropdownLabel.element, mouseOut);\n        });\n        RangeSelector_addEvent(dropdown, 'change', () => {\n            const 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            (_a = options.buttonTheme)['stroke-width'] ?? (_a['stroke-width'] = 0);\n        }\n        createElement('option', {\n            textContent: this.zoomText.textStr,\n            disabled: true\n        }, void 0, dropdown);\n        this.createButtons();\n    }\n    createButtons() {\n        const { options } = this;\n        const buttonTheme = RangeSelector_merge(options.buttonTheme);\n        const 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        const width = buttonTheme.width || 28;\n        delete buttonTheme.width;\n        delete buttonTheme.states;\n        this.buttonOptions.forEach((rangeOptions, i) => {\n            this.createButton(rangeOptions, i, width, states);\n        });\n    }\n    createButton(rangeOptions, i, width, states) {\n        const { dropdown, buttons, chart, options } = this;\n        const renderer = chart.renderer;\n        const buttonTheme = RangeSelector_merge(options.buttonTheme);\n        dropdown?.add(createElement('option', {\n            textContent: rangeOptions.title || rangeOptions.text\n        }), i + 2);\n        buttons[i] = renderer\n            .button(rangeOptions.text, 0, 0, (e) => {\n            // Extract events from button object and call\n            const buttonEvents = (rangeOptions.events && rangeOptions.events.click);\n            let 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\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    alignElements() {\n        const { buttonGroup, buttons, chart, group, inputGroup, options, zoomText } = this;\n        const chartOptions = chart.options;\n        const navButtonOptions = (chartOptions.exporting &&\n            chartOptions.exporting.enabled !== false &&\n            chartOptions.navigation &&\n            chartOptions.navigation.buttonOptions);\n        const { buttonPosition, inputPosition, verticalAlign } = options;\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        const getXOffsetForExportButton = (group, position, 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        let plotLeft = chart.plotLeft;\n        if (group && buttonPosition && inputPosition) {\n            let translateX = buttonPosition.x - chart.spacing[3];\n            if (buttonGroup) {\n                this.positionButtons();\n                if (!this.initialButtonGroupWidth) {\n                    let width = 0;\n                    if (zoomText) {\n                        width += zoomText.getBBox().width + 5;\n                    }\n                    buttons.forEach((button, i) => {\n                        width += button.width || 0;\n                        if (i !== buttons.length - 1) {\n                            width += options.buttonSpacing;\n                        }\n                    });\n                    this.initialButtonGroupWidth = width;\n                }\n                plotLeft -= chart.spacing[3];\n                // Detect collision between button group and exporting\n                const xOffsetForExportButton = getXOffsetForExportButton(buttonGroup, buttonPosition, buttonPosition.align === 'right' ||\n                    inputPosition.align === 'right');\n                this.alignButtonGroup(xOffsetForExportButton);\n                if (this.buttonGroup?.translateY) {\n                    this.dropdownLabel\n                        .attr({ y: this.buttonGroup.translateY });\n                }\n                // Skip animation\n                group.placed = buttonGroup.placed = chart.hasLoaded;\n            }\n            let 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\n            }, true, chart.spacingBox);\n            const alignTranslateY = group.alignAttr.translateY;\n            // Set position\n            let groupHeight = group.getBBox().height + 20; // # 20 padding\n            let translateY = 0;\n            // Calculate bottom position\n            if (verticalAlign === 'bottom') {\n                const legendOptions = chart.legend && chart.legend.options;\n                const 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            const { minInput, maxInput, dropdown } = this;\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    redrawElements() {\n        const chart = this.chart, { inputBoxHeight, inputBoxBorderColor } = this.options;\n        this.maxDateBox?.attr({\n            height: inputBoxHeight\n        });\n        this.minDateBox?.attr({\n            height: inputBoxHeight\n        });\n        if (!chart.styledMode) {\n            this.maxDateBox?.attr({\n                stroke: inputBoxBorderColor\n            });\n            this.minDateBox?.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            const newButtonsOptions = this.options.buttons ?? [];\n            const btnLength = Math.min(newButtonsOptions.length, this.buttonOptions.length);\n            const { dropdown, options } = this;\n            const buttonTheme = RangeSelector_merge(options.buttonTheme);\n            const 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            const width = buttonTheme.width || 28;\n            // Destroy additional buttons\n            if (newButtonsOptions.length < this.buttonOptions.length) {\n                for (let i = this.buttonOptions.length - 1; i >= newButtonsOptions.length; i--) {\n                    const btn = this.buttons.pop();\n                    btn?.destroy();\n                    this.dropdown?.options.remove(i + 1);\n                }\n            }\n            // Update current buttons\n            for (let i = btnLength - 1; i >= 0; i--) {\n                const diff = diffObjects(newButtonsOptions[i], this.buttonOptions[i]);\n                if (Object.keys(diff).length !== 0) {\n                    const rangeOptions = newButtonsOptions[i];\n                    this.buttons[i].destroy();\n                    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 (let 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 = this.options.buttons ?? [];\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    alignButtonGroup(xOffsetForExportButton, width) {\n        const { chart, options, buttonGroup, dropdown, dropdownLabel } = this;\n        const { buttonPosition } = options;\n        const plotLeft = chart.plotLeft - chart.spacing[3];\n        let translateX = buttonPosition.x - chart.spacing[3];\n        let 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?.translateY + 'px'\n            });\n        }\n        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    positionButtons() {\n        const { buttons, chart, options, zoomText } = this;\n        const verb = chart.hasLoaded ? 'animate' : 'attr';\n        const { buttonPosition } = options;\n        const plotLeft = chart.plotLeft;\n        let 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 (let 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    handleCollision(xOffsetForExportButton) {\n        const { chart, buttonGroup, inputGroup, initialButtonGroupWidth } = this;\n        const { buttonPosition, dropdown, inputPosition } = this.options;\n        const moveInputsDown = () => {\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    collapseButtons() {\n        const { buttons, zoomText } = this;\n        if (this.isCollapsed === true) {\n            return;\n        }\n        this.isCollapsed = true;\n        zoomText.hide();\n        buttons.forEach((button) => 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    expandButtons() {\n        const { buttons, zoomText } = this;\n        if (this.isCollapsed === false) {\n            return;\n        }\n        this.isCollapsed = false;\n        this.hideDropdown();\n        zoomText.show();\n        buttons.forEach((button) => 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    showDropdown() {\n        const { buttonGroup, dropdownLabel, dropdown } = this;\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    hideDropdown() {\n        const { dropdown } = this;\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    getHeight() {\n        const rangeSelector = this, options = rangeSelector.options, rangeSelectorGroup = rangeSelector.group, inputPosition = options.inputPosition, buttonPosition = options.buttonPosition, yPosition = options.y, buttonPositionY = buttonPosition.y, inputPositionY = inputPosition.y;\n        let 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        const minPosition = Math.min(inputPositionY, 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    titleCollision(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    update(options, redraw = true) {\n        const 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    destroy() {\n        const rSelector = this, minInput = rSelector.minInput, maxInput = rSelector.maxInput;\n        if (rSelector.eventsToUnbind) {\n            rSelector.eventsToUnbind.forEach((unbind) => 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}\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 */ const 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/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\nconst getLinkPath = {\n    'default': getDefaultPath,\n    straight: getStraightPath,\n    curved: getCurvedPath\n};\n/**\n *\n */\nfunction getDefaultPath(pathParams) {\n    const { x1, y1, x2, y2, width = 0, inverted = false, radius, parentVisible } = pathParams;\n    const path = [\n        ['M', x1, y1],\n        ['L', x1, y1],\n        ['C', x1, y1, x1, y2, x1, y2],\n        ['L', x1, y2],\n        ['C', x1, y1, x1, y2, x1, y2],\n        ['L', x1, 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    const { x1, y1, x2, y2, width = 0, inverted = false, parentVisible } = pathParams;\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    const { x1, y1, x2, y2, offset = 0, width = 0, inverted = false, parentVisible } = pathParams;\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    const d = [];\n    for (let i = 0; i < path.length; i++) {\n        const x = path[i][1];\n        const 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                const prevSeg = path[i - 1];\n                const nextSeg = path[i + 1];\n                if (prevSeg && nextSeg) {\n                    const x1 = prevSeg[1], y1 = prevSeg[2], x2 = nextSeg[1], 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                        const directionX = x1 < x2 ? 1 : -1, 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}\nconst PathUtilities = {\n    applyRadius,\n    getLinkPath\n};\n/* harmony default export */ const Series_PathUtilities = (PathUtilities);\n\n;// ./code/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\nconst { pick: PathfinderAlgorithms_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Constants\n *\n * */\nconst { min: PathfinderAlgorithms_min, max: PathfinderAlgorithms_max, abs } = Math;\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    const min = xMin - 0.0000001; // Make sure we include all obstacles at xMin\n    let left = startIx || 0, // Left limit\n    right = obstacles.length - 1, // Right limit\n    cursor, 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    let i = findLastObstacleBefore(obstacles, 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    const path = [];\n    if (segments.length) {\n        path.push(['M', segments[0].start.x, segments[0].start.y]);\n        for (let 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 */\nconst simpleConnect = function (start, end, options) {\n    const segments = [], chartObstacles = options.chartObstacles, startObstacleIx = findObstacleFromPoint(chartObstacles, start), endObstacleIx = findObstacleFromPoint(chartObstacles, end);\n    let endSegment, dir = PathfinderAlgorithms_pick(options.startDirectionX, abs(end.x - start.x) > abs(end.y - start.y)) ? 'x' : 'y', startObstacle, endObstacle, waypoint, useMax, 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        const 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        const 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    const 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    const waypoint2 = copyFromPoint(waypoint, dir, endPoint);\n    segments.push({\n        start: waypoint,\n        end: waypoint2\n    });\n    // Finally add the endSegment\n    segments.push(endSegment);\n    const path = Series_PathUtilities.applyRadius(pathFromSegments(segments), options.radius);\n    return {\n        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    const dirIsX = PathfinderAlgorithms_pick(options.startDirectionX, abs(end.x - start.x) > abs(end.y - start.y)), dir = dirIsX ? 'x' : 'y', 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, softMinX = PathfinderAlgorithms_min(start.x, end.x) - metrics.maxWidth - 10, softMaxX = PathfinderAlgorithms_max(start.x, end.x) + metrics.maxWidth + 10, softMinY = PathfinderAlgorithms_min(start.y, end.y) - metrics.maxHeight - 10, softMaxY = PathfinderAlgorithms_max(start.y, end.y) + metrics.maxHeight + 10;\n    let segments, useMax, extractedEndPoint, forceObstacleBreak = false, // Used in clearPathTo to keep track of\n    // when to force break through an obstacle.\n    // Obstacles\n    chartObstacles = options.chartObstacles, endObstacleIx = findLastObstacleBefore(chartObstacles, softMaxX);\n    const startObstacleIx = findLastObstacleBefore(chartObstacles, 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        const searchDirection = fromPoint.x < toPoint.x ? 1 : -1;\n        let firstPoint, lastPoint, highestPoint, 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        let i = searchDirection < 0 ?\n            // Searching backwards, start at last obstacle before last point\n            PathfinderAlgorithms_min(findLastObstacleBefore(chartObstacles, lastPoint.x), 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        const 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        let // 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        const minPivot = pivotPoint(fromPoint, toPointMin, dirIsX)[dir] !==\n            toPointMin[dir], maxPivot = pivotPoint(fromPoint, toPointMax, 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        const dir = dirIsX ? 'x' : 'y', obstacleMargin = options.obstacleOptions.margin, bounds = {\n            soft: {\n                xMin: softMinX,\n                xMax: softMaxX,\n                yMin: softMinY,\n                yMax: softMaxY\n            },\n            hard: options.hardBounds\n        };\n        let pivot, segments, waypoint, waypointUseMax, envelopingObstacle, secondEnvelopingObstacle, 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        const dirIsX = PathfinderAlgorithms_min(obstacle.xMax - point.x, point.x - obstacle.xMin) <\n            PathfinderAlgorithms_min(obstacle.yMax - point.y, point.y - obstacle.yMin), bounds = {\n            soft: options.hardBounds,\n            hard: options.hardBounds\n        }, useMax = getDodgeDirection(obstacle, point, goalPoint, dirIsX, 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.\nconst algorithms = {\n    fastAvoid,\n    straight,\n    simpleConnect\n};\n/* harmony default export */ const PathfinderAlgorithms = (algorithms);\n\n;// ./code/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*/\nconst 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 */ const 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/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\nconst { setOptions: PathfinderComposition_setOptions } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { defined: PathfinderComposition_defined, error: PathfinderComposition_error, merge: PathfinderComposition_merge } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\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    const 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    const 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        const pointProto = PointClass.prototype;\n        if (!pointProto.getPathfinderAnchorPoint) {\n            // Initialize Pathfinder for charts\n            ChartClass.prototype.callbacks.push(function (chart) {\n                const 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        const bb = getPointBB(this);\n        let x, 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        let 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        const 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        let theta = radians, tanTheta = 1, leftOrRightRegion = false, xFactor = 1, 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 */ const 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/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\nconst { addEvent: Pathfinder_addEvent, defined: Pathfinder_defined, pick: Pathfinder_pick, splat: Pathfinder_splat } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Constants\n *\n * */\nconst 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    const 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    const 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    const margin = Pathfinder_pick(bbMargin, 10), yOverlap = a.yMax + margin > b.yMin - margin &&\n        a.yMin - margin < b.yMax + margin, xOverlap = a.xMax + margin > b.xMin - margin &&\n        a.xMin - margin < b.xMax + margin, xDistance = yOverlap ? (a.xMin > b.xMax ? a.xMin - b.xMax : b.xMin - a.xMax) : Infinity, 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    const len = obstacles.length, distances = [];\n    let onstacleDistance;\n    // Go over all obstacles and compare them to the others.\n    for (let 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 (let 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 */\nclass Pathfinder {\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    static compose(ChartClass, PointClass) {\n        PathfinderComposition.compose(ChartClass, Pathfinder, PointClass);\n    }\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor(chart) {\n        this.init(chart);\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    init(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    update(deferRender) {\n        const chart = this.chart, pathfinder = this, 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                    const 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                    const connects = point.options?.connect ?\n                        Pathfinder_splat(point.options.connect) :\n                        [];\n                    let to;\n                    if (point.visible && point.isInside !== false) {\n                        connects.forEach((connect) => {\n                            const 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 (let j = 0, k, found, lenOld = oldConnections.length, lenNew = pathfinder.connections.length; j < lenOld; ++j) {\n            found = false;\n            const oldCon = oldConnections[j];\n            for (k = 0; k < lenNew; ++k) {\n                const 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    renderConnections(deferRender) {\n        if (deferRender) {\n            // Render after series are done animating\n            this.chart.series.forEach(function (series) {\n                const render = function () {\n                    // Find pathfinder connections belonging to this series\n                    // that haven't rendered, and render them now.\n                    const pathfinder = series.chart.pathfinder, 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    getChartObstacles(options) {\n        const series = this.chart.series, margin = Pathfinder_pick(options.algorithmMargin, 0);\n        let obstacles = [], calculatedMargin;\n        for (let i = 0, sLen = series.length; i < sLen; ++i) {\n            if (series[i].visible && !series[i].options.isInternal) {\n                for (let j = 0, pLen = series[i].points.length, bb, point; 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    getObstacleMetrics(obstacles) {\n        let maxWidth = 0, maxHeight = 0, width, height, 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    getAlgorithmStartDirection(markerOptions) {\n        const 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}\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 */ const 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/es-modules/masters/modules/pathfinder.src.js\n\n\n\n\n\nconst 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 */ const pathfinder_src = ((/* unused pure expression or super */ null && (Highcharts)));\n\n;// ./code/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\nconst { addEvent: StaticScale_addEvent, defined: StaticScale_defined, isNumber: StaticScale_isNumber, pick: StaticScale_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Composition\n *\n * */\n/** @private */\nfunction StaticScale_compose(AxisClass, ChartClass) {\n    const 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    const 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    const chart = this;\n    if (chart.redrawTrigger !== 'adjustHeight') {\n        for (const axis of (chart.axes || [])) {\n            const chart = axis.chart, animate = !!chart.initiatedScale &&\n                chart.options.animation, staticScale = axis.options.staticScale;\n            if (axis.staticScale && StaticScale_defined(axis.min)) {\n                let height = StaticScale_pick(axis.brokenAxis && axis.brokenAxis.unitLength, axis.max + axis.tickInterval - axis.min) * staticScale;\n                // Minimum height is 1 x staticScale.\n                height = Math.max(height, staticScale);\n                const diff = height - chart.plotHeight;\n                if (!chart.scrollablePixelsY && Math.abs(diff) >= 1) {\n                    chart.plotHeight = height;\n                    chart.redrawTrigger = 'adjustHeight';\n                    chart.setSize(void 0, chart.chartHeight + diff, animate);\n                }\n                // Make sure clip rects have the right height before initial\n                // animation.\n                axis.series.forEach(function (series) {\n                    const clipRect = series.sharedClipKey &&\n                        chart.sharedClips[series.sharedClipKey];\n                    if (clipRect) {\n                        clipRect.attr(chart.inverted ? {\n                            width: chart.plotHeight\n                        } : {\n                            height: chart.plotHeight\n                        });\n                    }\n                });\n            }\n        }\n        this.initiatedScale = true;\n    }\n    this.redrawTrigger = null;\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst StaticScale = {\n    compose: StaticScale_compose\n};\n/* harmony default export */ const 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/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\nconst 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 */ const static_scale_src = ((/* unused pure expression or super */ null && (Highcharts)));\n\n;// ./code/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\nconst { correctFloat: XRangeSeriesDefaults_correctFloat, isNumber: XRangeSeriesDefaults_isNumber, isObject } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\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 */\nconst 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            let 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 */ const 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/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\n\nconst { column: { prototype: { pointClass: ColumnPoint } } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes;\n\nconst { extend: XRangePoint_extend } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Class\n *\n * */\nclass XRangePoint extends ColumnPoint {\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    static getColorByCategory(series, point) {\n        const colors = series.options.colors || series.chart.options.colors, colorCount = colors ?\n            colors.length :\n            series.chart.options.chart.colorCount, colorIndex = point.y % colorCount, 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    resolveColor() {\n        const series = this.series;\n        if (series.options.colorByPoint && !this.options.color) {\n            const colorByPoint = XRangePoint.getColorByCategory(series, 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 init to have y default to 0.\n     *\n     * @private\n     */\n    constructor(series, options) {\n        super(series, options);\n        if (!this.y) {\n            this.y = 0;\n        }\n    }\n    /**\n     * Extend applyOptions to handle time strings for x2\n     *\n     * @private\n     */\n    applyOptions(options, x) {\n        super.applyOptions(options, x);\n        this.x2 = this.series.chart.time.parse(this.x2);\n        this.isNull = !this.isValid?.();\n        return this;\n    }\n    /**\n     * @private\n     */\n    setState() {\n        super.setState.apply(this, arguments);\n        this.series.drawPoint(this, this.series.getAnimationVerb());\n    }\n    /**\n     * @private\n     */\n    isValid() {\n        return typeof this.x === 'number' &&\n            typeof this.x2 === 'number';\n    }\n}\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 */ const 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/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\n\nconst { composed: XRangeSeries_composed, noop } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { parse: XRangeSeries_color } = (highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default());\n\nconst { column: ColumnSeries } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes;\n\nconst { addEvent: XRangeSeries_addEvent, clamp: XRangeSeries_clamp, crisp: XRangeSeries_crisp, defined: XRangeSeries_defined, extend: XRangeSeries_extend, find: XRangeSeries_find, isNumber: XRangeSeries_isNumber, isObject: XRangeSeries_isObject, merge: XRangeSeries_merge, pick: XRangeSeries_pick, pushUnique: XRangeSeries_pushUnique, relativeLength: XRangeSeries_relativeLength } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Max x2 should be considered in xAxis extremes\n * @private\n */\nfunction onAxisAfterGetSeriesExtremes() {\n    let dataMax, modMax;\n    if (this.isXAxis) {\n        dataMax = XRangeSeries_pick(this.dataMax, -Number.MAX_VALUE);\n        for (const series of this.series) {\n            const column = (series.dataTable.getColumn('x2', true) ||\n                series.dataTable.getColumn('end', true));\n            if (column) {\n                for (const val of column) {\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 */\nclass XRangeSeries extends ColumnSeries {\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    static compose(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    init() {\n        super.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    getColumnMetrics() {\n        const swapAxes = () => {\n            for (const series of this.chart.series) {\n                const xAxis = series.xAxis;\n                series.xAxis = series.yAxis;\n                series.yAxis = xAxis;\n            }\n        };\n        swapAxes();\n        const metrics = super.getColumnMetrics();\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    cropData(table, min, max) {\n        // Replace xData with x2Data to find the appropriate cropStart\n        const xData = table.getColumn('x') || [], x2Data = table.getColumn('x2');\n        table.setColumn('x', x2Data, void 0, { silent: true });\n        const croppedData = super.cropData(table, min, 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    findPointIndex(options) {\n        const { cropStart, points } = this;\n        const { id } = options;\n        let pointIndex;\n        if (id) {\n            const point = XRangeSeries_find(points, (point) => point.id === id);\n            pointIndex = point ? point.index : void 0;\n        }\n        if (typeof pointIndex === 'undefined') {\n            const point = XRangeSeries_find(points, (point) => (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    alignDataLabel(point) {\n        const oldPlotX = point.plotX;\n        point.plotX = XRangeSeries_pick(point.dlBox && point.dlBox.centerX, point.plotX);\n        if (point.dataLabel && point.shapeArgs?.width) {\n            point.dataLabel.css({\n                width: `${point.shapeArgs.width}px`\n            });\n        }\n        super.alignDataLabel.apply(this, arguments);\n        point.plotX = oldPlotX;\n    }\n    /**\n     * @private\n     */\n    translatePoint(point) {\n        const xAxis = this.xAxis, yAxis = this.yAxis, metrics = this.columnMetrics, options = this.options, minPointLength = options.minPointLength || 0, oldColWidth = (point.shapeArgs && point.shapeArgs.width || 0) / 2, seriesXOffset = this.pointXOffset = metrics.offset, posX = XRangeSeries_pick(point.x2, point.x + (point.len || 0)), borderRadius = options.borderRadius, plotTop = this.chart.plotTop, plotLeft = this.chart.plotLeft;\n        let plotX = point.plotX, plotX2 = xAxis.translate(posX, 0, 0, 0, 1);\n        const length = Math.abs(plotX2 - plotX), inverted = this.chart.inverted, borderWidth = XRangeSeries_pick(options.borderWidth, 1);\n        let widthDifference, partialFill, yOffset = metrics.offset, pointHeight = Math.round(metrics.width), dlLeft, dlRight, dlWidth, 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        const x = XRangeSeries_crisp(Math.min(plotX, plotX2), borderWidth), x2 = XRangeSeries_crisp(Math.max(plotX, plotX2), borderWidth), width = x2 - x;\n        const r = Math.min(XRangeSeries_relativeLength((typeof borderRadius === 'object' ?\n            borderRadius.radius :\n            borderRadius || 0), pointHeight), Math.min(width, pointHeight) / 2);\n        const shapeArgs = {\n            x,\n            y: XRangeSeries_crisp((point.plotY || 0) + yOffset, borderWidth),\n            width,\n            height: pointHeight,\n            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        const tooltipPos = point.tooltipPos;\n        const xIndex = !inverted ? 0 : 1;\n        const yIndex = !inverted ? 1 : 0;\n        const 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 = yAxis.categories?.[point.y ?? -1];\n    }\n    /**\n     * @private\n     */\n    translate() {\n        super.translate.apply(this, arguments);\n        for (const point of this.points) {\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    drawPoint(point, verb) {\n        const seriesOpts = this.options, renderer = this.chart.renderer, type = point.shapeType, shapeArgs = point.shapeArgs, partShapeArgs = point.partShapeArgs, clipRectArgs = point.clipRectArgs, pointState = point.state, stateOpts = (seriesOpts.states[pointState || 'normal'] ||\n            {}), pointStateVerb = typeof pointState === 'undefined' ?\n            'attr' : verb, pointAttr = this.pointAttribs(point, pointState), animation = XRangeSeries_pick(this.chart.options.chart.animation, stateOpts.animation);\n        let graphic = point.graphic, 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                    const 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    drawPoints() {\n        const verb = this.getAnimationVerb();\n        // Draw the columns\n        for (const point of this.points) {\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    getAnimationVerb() {\n        return (this.chart.pointCount < (this.options.animationLimit || 250) ?\n            'animate' :\n            'attr');\n    }\n    /**\n     * @private\n     */\n    isPointInside(point) {\n        const shapeArgs = point.shapeArgs, plotX = point.plotX, plotY = point.plotY;\n        if (!shapeArgs) {\n            return super.isPointInside.apply(this, arguments);\n        }\n        const 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 *\n *  Static Properties\n *\n * */\nXRangeSeries.defaultOptions = XRangeSeries_merge(ColumnSeries.defaultOptions, XRange_XRangeSeriesDefaults);\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 */ const XRange_XRangeSeries = (XRangeSeries);\n\n;// ./code/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\nconst xrange_src_G = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\nXRange_XRangeSeries.compose(xrange_src_G.Axis);\n/* harmony default export */ const xrange_src = ((/* unused pure expression or super */ null && (Highcharts)));\n\n;// ./code/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\n\nconst { xrange: { prototype: { pointClass: GanttPoint_XRangePoint } } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes;\n/* *\n *\n *  Class\n *\n * */\nclass GanttPoint extends GanttPoint_XRangePoint {\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    static setGanttPointAliases(options, chart) {\n        options.x = options.start = chart.time.parse(options.start ?? options.x);\n        options.x2 = options.end = chart.time.parse(options.end ?? options.x2);\n        options.partialFill = options.completed =\n            options.completed ?? 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    applyOptions(options, x) {\n        const ganttPoint = super.applyOptions(options, x);\n        GanttPoint.setGanttPointAliases(ganttPoint, ganttPoint.series.chart);\n        this.isNull = !this.isValid?.();\n        return ganttPoint;\n    }\n    isValid() {\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}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Gantt_GanttPoint = (GanttPoint);\n\n;// ./code/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\nconst { isNumber: GanttSeriesDefaults_isNumber } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\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 */\nconst 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            const point = this, series = point.series, xAxis = series.xAxis, formats = series.tooltipOptions.dateTimeLabelFormats, startOfWeek = xAxis.options.startOfWeek, ttOptions = series.tooltipOptions, milestone = point.options.milestone;\n            let format = ttOptions.xDateFormat, 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            const start = series.chart.time.dateFormat(format, point.start), end = series.chart.time.dateFormat(format, 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 */ const 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/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\nconst { addEvent: BrokenAxis_addEvent, find: BrokenAxis_find, fireEvent: BrokenAxis_fireEvent, isArray: BrokenAxis_isArray, isNumber: BrokenAxis_isNumber, pick: BrokenAxis_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\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            const 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        const axis = this;\n        if (axis.brokenAxis?.hasBreaks) {\n            axis.options.ordinal = false;\n        }\n    }\n    /**\n     * @private\n     */\n    function onAxisAfterSetTickPositions() {\n        const axis = this, brokenAxis = axis.brokenAxis;\n        if (brokenAxis?.hasBreaks) {\n            const tickPositions = axis.tickPositions, info = axis.tickPositions.info, newPositions = [];\n            for (let 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        const axis = this;\n        if (!axis.brokenAxis) {\n            axis.brokenAxis = new Additions(axis);\n        }\n    }\n    /**\n     * @private\n     */\n    function onSeriesAfterGeneratePoints() {\n        const { isDirty, options: { connectNulls }, points, xAxis, yAxis } = this;\n        // Set, or reset visibility of the points. Axis.setBreaks marks\n        // the series as isDirty\n        if (isDirty) {\n            let i = points.length;\n            while (i--) {\n                const point = points[i];\n                // Respect nulls inside the break (#4275)\n                const nullGap = point.y === null && connectNulls === false;\n                const isPointInBreak = (!nullGap && (xAxis?.brokenAxis?.isInAnyBreak(point.x, true) ||\n                    yAxis?.brokenAxis?.isInAnyBreak(point.y, 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        const series = this, points = series.points;\n        let breaks, threshold, y;\n        if (axis?.brokenAxis?.hasBreaks) {\n            const brokenAxis = axis.brokenAxis;\n            keys.forEach(function (key) {\n                breaks = brokenAxis?.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                const breaksOutOfRange = axis?.options?.breaks?.filter(function (brk) {\n                    let isOut = true;\n                    // Iterate to see if \"brk\" is in axis range\n                    for (let i = 0; i < breaks.length; i++) {\n                        const 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                            let 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, brk });\n                            }\n                        }\n                    });\n                    breaksOutOfRange?.forEach(function (brk) {\n                        BrokenAxis_fireEvent(axis, 'pointOutsideOfBreak', { point, 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        const currentDataGrouping = this.currentDataGrouping, groupingSize = currentDataGrouping?.gapSize, points = this.points.slice(), yAxis = this.yAxis;\n        let gapSize = this.options.gapSize, i = points.length - 1, 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            let current, next;\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                    const 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    class Additions {\n        /* *\n         *\n         *  Static Functions\n         *\n         * */\n        /**\n         * @private\n         */\n        static isInBreak(brk, val) {\n            const repeat = brk.repeat || Infinity, from = brk.from, length = brk.to - brk.from, test = (val >= from ?\n                (val - from) % repeat :\n                repeat - ((from - val) % repeat));\n            let 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        static lin2Val(val) {\n            const axis = this;\n            const brokenAxis = axis.brokenAxis;\n            const breakArray = brokenAxis && brokenAxis.breakArray;\n            if (!breakArray || !BrokenAxis_isNumber(val)) {\n                return val;\n            }\n            let nval = val, brk, 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        static val2Lin(val) {\n            const axis = this;\n            const brokenAxis = axis.brokenAxis;\n            const breakArray = brokenAxis && brokenAxis.breakArray;\n            if (!breakArray || !BrokenAxis_isNumber(val)) {\n                return val;\n            }\n            let nval = val, brk, 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         *  Constructors\n         *\n         * */\n        constructor(axis) {\n            this.hasBreaks = false;\n            this.axis = axis;\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        findBreakAt(x, breaks) {\n            return BrokenAxis_find(breaks, function (b) {\n                return b.from < x && x < b.to;\n            });\n        }\n        /**\n         * @private\n         */\n        isInAnyBreak(val, testKeep) {\n            const brokenAxis = this, axis = brokenAxis.axis, breaks = axis.options.breaks || [];\n            let i = breaks.length, inbrk, keep, 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        setBreaks(breaks, redraw) {\n            const brokenAxis = this, axis = brokenAxis.axis, time = axis.chart.time, 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?.forEach((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                        const breaks = (this.options.breaks || []);\n                        let axisBreak;\n                        while ((axisBreak = brokenAxis.findBreakAt(newMin, breaks))) {\n                            newMin = axisBreak.to;\n                        }\n                        while ((axisBreak = brokenAxis.findBreakAt(newMax, breaks))) {\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                        const breaks = axis.options.breaks || [], \n                        // Temporary one:\n                        breakArrayT = [], breakArray = [], pointRangePadding = BrokenAxis_pick(axis.pointRangePadding, 0);\n                        let length = 0, inBrk, repeat, min = axis.userMin || axis.min, max = axis.userMax || axis.max, start, i;\n                        // Min & max check (#4247)\n                        breaks.forEach(function (brk) {\n                            repeat = brk.repeat || Infinity;\n                            if (BrokenAxis_isNumber(min) && BrokenAxis_isNumber(max)) {\n                                if (Additions.isInBreak(brk, min)) {\n                                    min += ((brk.to % repeat) -\n                                        (min % repeat));\n                                }\n                                if (Additions.isInBreak(brk, max)) {\n                                    max -= ((max % repeat) -\n                                        (brk.from % repeat));\n                                }\n                            }\n                        });\n                        // Construct an array holding all breaks in the axis\n                        breaks.forEach(function (brk) {\n                            start = brk.from;\n                            repeat = brk.repeat || Infinity;\n                            if (BrokenAxis_isNumber(min) && BrokenAxis_isNumber(max)) {\n                                while (start - repeat > min) {\n                                    start -= repeat;\n                                }\n                                while (start < min) {\n                                    start += repeat;\n                                }\n                                for (i = start; i < max; i += repeat) {\n                                    breakArrayT.push({\n                                        value: i,\n                                        move: 'in'\n                                    });\n                                    breakArrayT.push({\n                                        value: i + brk.to - brk.from,\n                                        move: 'out',\n                                        size: brk.breakSize\n                                    });\n                                }\n                            }\n                        });\n                        breakArrayT.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 = 0;\n                        start = min;\n                        breakArrayT.forEach(function (brk) {\n                            inBrk += (brk.move === 'in' ? 1 : -1);\n                            if (inBrk === 1 && brk.move === 'in') {\n                                start = brk.value;\n                            }\n                            if (inBrk === 0 && BrokenAxis_isNumber(start)) {\n                                breakArray.push({\n                                    from: start,\n                                    to: brk.value,\n                                    len: brk.value - start - (brk.size || 0)\n                                });\n                                length += (brk.value -\n                                    start -\n                                    (brk.size || 0));\n                            }\n                        });\n                        brokenAxis.breakArray = breakArray;\n                        // Used with staticScale, and below the actual axis\n                        // length, when breaks are subtracted.\n                        if (BrokenAxis_isNumber(min) &&\n                            BrokenAxis_isNumber(max) &&\n                            BrokenAxis_isNumber(axis.min)) {\n                            brokenAxis.unitLength = max - min - length +\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 - axis.min + pointRangePadding) /\n                                        brokenAxis.unitLength;\n                            }\n                            if (pointRangePadding) {\n                                axis.minPixelPadding =\n                                    axis.transA * (axis.minPointOffset || 0);\n                            }\n                            axis.min = min;\n                            axis.max = max;\n                        }\n                    }\n                };\n            }\n            if (BrokenAxis_pick(redraw, true)) {\n                axis.chart.redraw();\n            }\n        }\n    }\n    BrokenAxis.Additions = Additions;\n})(BrokenAxis || (BrokenAxis = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Axis_BrokenAxis = (BrokenAxis);\n\n;// ./code/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\nconst { dateFormats } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: GridAxis_addEvent, defined: GridAxis_defined, erase: GridAxis_erase, find: GridAxis_find, isArray: GridAxis_isArray, isNumber: GridAxis_isNumber, merge: GridAxis_merge, pick: GridAxis_pick, timeUnits: GridAxis_timeUnits, wrap: GridAxis_wrap } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\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    const 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    const dimensions = {\n        width: 0,\n        height: 0\n    };\n    tickPositions.forEach(function (pos) {\n        const tick = ticks[pos];\n        let labelHeight = 0, labelWidth = 0, 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        const 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    const { grid } = this, \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?.isColumn) {\n        let columns = grid?.columns || [];\n        if (columnsFirst) {\n            columns = columns.slice().reverse();\n        }\n        columns\n            .forEach((column) => {\n            column.getOffset();\n        });\n    }\n    if (columnsFirst) {\n        proceed.apply(this);\n    }\n}\n/**\n * @private\n */\nfunction onAfterGetTitlePosition(e) {\n    const axis = this;\n    const options = axis.options;\n    const gridOptions = options.grid || {};\n    if (gridOptions.enabled === true) {\n        // Compute anchor points for each of the title align options\n        const { axisTitle, height: axisHeight, horiz, left: axisLeft, offset, opposite, options, top: axisTop, width: axisWidth } = axis;\n        const tickSize = axis.tickSize();\n        const titleWidth = axisTitle && axisTitle.getBBox().width;\n        const xOption = options.title.x;\n        const yOption = options.title.y;\n        const titleMargin = GridAxis_pick(options.title.margin, horiz ? 5 : 10);\n        const titleFontSize = axisTitle ? axis.chart.renderer.fontMetrics(axisTitle).f : 0;\n        const crispCorr = tickSize ? tickSize[0] / 2 : 0;\n        // TODO account for alignment\n        // the position in the perpendicular direction of the axis\n        const 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    const axis = this;\n    const { chart, options: { grid: gridOptions = {} }, userOptions } = axis;\n    if (gridOptions.enabled) {\n        applyGridOptions(axis);\n    }\n    if (gridOptions.columns) {\n        const columns = axis.grid.columns = [];\n        let columnIndex = axis.grid.columnIndex = 0;\n        // Handle columns, each column is a grid axis\n        while (++columnIndex < gridOptions.columns.length) {\n            const columnOptions = GridAxis_merge(userOptions, 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            const column = new (highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_default())(axis.chart, 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    const axis = this, { axisTitle, grid, options } = axis, gridOptions = options.grid || {};\n    if (gridOptions.enabled === true) {\n        const min = axis.min || 0, max = axis.max || 0, 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?.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            const lineWidth = options.lineWidth;\n            if (lineWidth) {\n                const linePath = axis.getLinePath(lineWidth), startPoint = linePath[0], 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], 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                    const upperBorderStartPoint = startPoint, upperBorderEndPoint = [\n                        'L',\n                        axis.left,\n                        startPoint[2] || 0\n                    ], upperBorderPath = [\n                        upperBorderStartPoint,\n                        upperBorderEndPoint\n                    ], lowerBorderEndPoint = [\n                        'L',\n                        axis.chart.chartWidth - axis.chart.marginRight,\n                        axis.toPixels(max + axis.tickmarkOffset)\n                    ], lowerBorderStartPoint = [\n                        'M',\n                        endPoint[1] || 0,\n                        axis.toPixels(max + axis.tickmarkOffset)\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((column) => 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            const tickmarkOffset = axis.tickmarkOffset, lastTick = axis.tickPositions[axis.tickPositions.length - 1], firstTick = axis.tickPositions[0];\n            let label, tickMark;\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].label;\n            if (label) {\n                if (min - firstTick > 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            const 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    const axis = this;\n    const tickInfo = axis.tickPositions && axis.tickPositions.info;\n    const options = axis.options;\n    const gridOptions = options.grid || {};\n    const 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((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    const options = this.options, userOptions = e.userOptions, gridOptions = ((options && GridAxis_isObject(options.grid)) ? options.grid : {});\n    let 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                    const parentInfo = (this.linkedParent &&\n                        this.linkedParent.tickPositions &&\n                        this.linkedParent.tickPositions.info);\n                    if (parentInfo) {\n                        const units = (gridAxisOptions.units || []);\n                        let unitIdx, count = 1, unitName = 'year';\n                        for (let i = 0; i < units.length; i++) {\n                            const unit = units[i];\n                            if (unit && unit[0] === parentInfo.unitName) {\n                                unitIdx = i;\n                                break;\n                            }\n                        }\n                        // Get the first allowed count on the next unit.\n                        const unit = (GridAxis_isNumber(unitIdx) && units[unitIdx + 1]);\n                        if (unit) {\n                            unitName = unit[0] || 'year';\n                            const 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                        const unitRange = GridAxis_timeUnits[unitName];\n                        this.tickInterval = unitRange * count;\n                        return this.chart.time.getTimeTicks({ unitRange, count, 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    const axis = this;\n    const userOptions = e.userOptions;\n    const gridOptions = userOptions && userOptions.grid || {};\n    const 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    const axis = this;\n    (axis.grid.columns || []).forEach((column) => 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    const { horiz, maxLabelDimensions, options: { grid: gridOptions = {} } } = this;\n    if (gridOptions.enabled && maxLabelDimensions) {\n        const labelPadding = this.options.labels.distance * 2;\n        const 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((axis) => {\n        (axis.grid && axis.grid.columns || []).forEach((column) => {\n            column.setAxisSize();\n            column.setAxisTranslation();\n        });\n    });\n}\n/**\n * @private\n */\nfunction onDestroy(e) {\n    const { grid } = this;\n    (grid.columns || []).forEach((column) => 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    const axis = this;\n    const userOptions = e.userOptions || {};\n    const 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    const tick = this, label = tick.label, axis = tick.axis, reversed = axis.reversed, chart = axis.chart, options = axis.options, gridOptions = options.grid || {}, labelOpts = axis.options.labels, align = labelOpts.align, \n    // `verticalAlign` is currently not supported for axis.labels.\n    verticalAlign = 'middle', // LabelOpts.verticalAlign,\n    side = GridAxisSide[axis.side], tickmarkOffset = e.tickmarkOffset, tickPositions = axis.tickPositions, tickPos = tick.pos - tickmarkOffset, nextTickPos = (GridAxis_isNumber(tickPositions[e.index + 1]) ?\n        tickPositions[e.index + 1] - tickmarkOffset :\n        (axis.max || 0) + tickmarkOffset), tickSize = axis.tickSize('tick'), tickWidth = tickSize ? tickSize[0] : 0, crispCorr = tickSize ? tickSize[1] / 2 : 0;\n    // Only center tick labels in grid axes\n    if (gridOptions.enabled === true) {\n        let bottom, top, left, right;\n        // Calculate top and bottom positions of the cell.\n        if (side === 'top') {\n            bottom = axis.top + axis.offset;\n            top = bottom - tickWidth;\n        }\n        else if (side === 'bottom') {\n            top = chart.chartHeight - axis.bottom + axis.offset;\n            bottom = top + tickWidth;\n        }\n        else {\n            bottom = axis.top + axis.len - (axis.translate(reversed ? nextTickPos : tickPos) || 0);\n            top = 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 :\n            verticalAlign === 'bottom' ?\n                bottom :\n                top + ((bottom - top) / 2) // Default to middle\n        );\n        if (label) {\n            const lblMetrics = chart.renderer.fontMetrics(label), 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                const 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    const { axis, value } = ctx;\n    if (axis.options.grid &&\n        axis.options.grid.enabled) {\n        const tickPos = axis.tickPositions;\n        const series = (axis.linkedParent || axis).series[0];\n        const isFirst = value === tickPos[0];\n        const isLast = value === tickPos[tickPos.length - 1];\n        const point = series && GridAxis_find(series.options.data, function (p) {\n            return p[axis.isXAxis ? 'x' : 'y'] === value;\n        });\n        let pointCopy;\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    const axis = this, options = axis.options, gridOptions = options.grid || {}, categoryAxis = axis.categories, tickPositions = axis.tickPositions, firstPos = tickPositions[0], secondPos = tickPositions[1], lastPos = tickPositions[tickPositions.length - 1], beforeLastPos = tickPositions[tickPositions.length - 2], linkedMin = axis.linkedParent && axis.linkedParent.min, linkedMax = axis.linkedParent && axis.linkedParent.max, min = linkedMin || axis.min, max = linkedMax || axis.max, tickInterval = axis.tickInterval, startLessThanMin = ( // #19845\n    GridAxis_isNumber(min) &&\n        min >= firstPos + tickInterval &&\n        min < secondPos), endMoreThanMin = (GridAxis_isNumber(min) &&\n        firstPos < min &&\n        firstPos + tickInterval > min), startLessThanMax = (GridAxis_isNumber(max) &&\n        lastPos > max &&\n        lastPos - tickInterval < max), 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    const axis = this;\n    const { options: { grid: gridOptions = {} } } = axis;\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 */\nclass GridAxisAdditions {\n    /* *\n    *\n    *  Constructors\n    *\n    * */\n    constructor(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    isOuterAxis() {\n        const axis = this.axis;\n        const chart = axis.chart;\n        const columnIndex = axis.grid.columnIndex;\n        const columns = (axis.linkedParent?.grid.columns ||\n            axis.grid.columns ||\n            []);\n        const parentAxis = columnIndex ? axis.linkedParent : axis;\n        let thisIndex = -1, 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((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    renderBorder(path) {\n        const axis = this.axis, renderer = axis.chart.renderer, options = axis.options, 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}\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    const d = this.toParts(timestamp), firstDay = (d[7] + 6) % 7, thursday = d.slice(0);\n    thursday[2] = d[2] - firstDay + 3;\n    const 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    const thursdayTS = this.makeTime(thursday[0], thursday[1], thursday[2]), firstThursdayTS = this.makeTime(firstThursday[0], firstThursday[1], firstThursday[2]);\n    return (1 +\n        Math.floor((thursdayTS - firstThursdayTS) / 604800000)).toString();\n};\n/* *\n *\n *  Default Export\n *\n * */\nconst GridAxis = {\n    compose: GridAxis_compose\n};\n/* harmony default export */ const 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/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\n/* *\n *\n *  Imports\n *\n * */\n\nconst { extend: Tree_extend, isNumber: Tree_isNumber, pick: Tree_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\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    const root = '', ids = [], listOfParents = data.reduce((prev, curr) => {\n        const { parent = '', id } = curr;\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((node) => {\n        if ((node !== root) && (ids.indexOf(node) === -1)) {\n            const adoptedByRoot = listOfParents[node].map(function (orphan) {\n                const { ...parentExcluded } = orphan; // #15196\n                return parentExcluded;\n            });\n            listOfParents[root].push(...adoptedByRoot);\n            delete listOfParents[node];\n        }\n    });\n    return listOfParents;\n}\n/** @private */\nfunction getNode(id, parent, level, data, mapOfIdToChildren, options) {\n    const after = options && options.after, before = options && options.before, node = {\n        data,\n        depth: level - 1,\n        id,\n        level,\n        parent: (parent || '')\n    };\n    let descendants = 0, height = 0, start, 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    const children = ((mapOfIdToChildren[id] || [])).map((child) => {\n        const node = getNode(child.id, id, (level + 1), child, mapOfIdToChildren, options), childStart = child.start || NaN, 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 * */\nconst Tree = {\n    getNode,\n    getTree\n};\n/* harmony default export */ const Gantt_Tree = (Tree);\n\n;// ./code/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\nconst { addEvent: TreeGridTick_addEvent, removeEvent: TreeGridTick_removeEvent, isObject: TreeGridTick_isObject, isNumber: TreeGridTick_isNumber, pick: TreeGridTick_pick, wrap: TreeGridTick_wrap } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction onTickInit() {\n    const 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    const 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    const treeGrid = tick.treeGrid, isNew = !treeGrid.labelIcon, renderer = params.renderer, labelBox = params.xy, options = params.options, width = options.width || 0, height = options.height || 0, padding = options.padding ?? tick.axis.linkedParent ? 0 : 5, iconCenter = {\n        x: labelBox.x - (width / 2) - padding,\n        y: labelBox.y - (height / 2)\n    }, rotation = params.collapsed ? 90 : 180, shouldRender = params.show && TreeGridTick_isNumber(iconCenter.y);\n    let 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    const tick = this, lbOptions = TreeGridTick_pick(tick.options && tick.options.labels, labelOptions), pos = tick.pos, axis = tick.axis, isTreeGrid = axis.type === 'treegrid', result = proceed.apply(tick, [x, y, label, horiz, lbOptions, tickmarkOffset, index, step]);\n    let mapOfPosToGridNode, node, level;\n    if (isTreeGrid) {\n        const { width = 0, padding = axis.linkedParent ? 0 : 5 } = (lbOptions && TreeGridTick_isObject(lbOptions.symbol, true) ?\n            lbOptions.symbol :\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    const tick = this, { pos, axis, label, treeGrid: tickGrid, options: tickOptions } = tick, icon = tickGrid?.labelIcon, labelElement = label?.element, { treeGrid: axisGrid, options: axisOptions, chart, tickPositions } = axis, mapOfPosToGridNode = axisGrid.mapOfPosToGridNode, labelOptions = TreeGridTick_pick(tickOptions?.labels, axisOptions?.labels), symbolOptions = (labelOptions && TreeGridTick_isObject(labelOptions.symbol, true) ?\n        labelOptions.symbol :\n        {}), node = mapOfPosToGridNode && mapOfPosToGridNode[pos], { descendants, depth } = node || {}, 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    let collapsed, addClassName, 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((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?.css({ cursor: 'default' });\n        icon.destroy();\n    }\n}\n/* *\n *\n *  Classes\n *\n * */\n/**\n * @private\n * @class\n */\nclass TreeGridTickAdditions {\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    static compose(TickClass) {\n        const 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     *  Constructors\n     *\n     * */\n    /**\n     * @private\n     */\n    constructor(tick) {\n        this.tick = tick;\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    collapse(redraw) {\n        const tick = this.tick, axis = tick.axis, brokenAxis = axis.brokenAxis;\n        if (brokenAxis &&\n            axis.treeGrid.mapOfPosToGridNode) {\n            const pos = tick.pos, node = axis.treeGrid.mapOfPosToGridNode[pos], 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    destroy() {\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    expand(redraw) {\n        const { pos, axis } = this.tick, { treeGrid, brokenAxis } = axis, posMappedNodes = treeGrid.mapOfPosToGridNode;\n        if (brokenAxis && posMappedNodes) {\n            const node = posMappedNodes[pos], 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    toggleCollapse(redraw) {\n        const tick = this.tick, axis = tick.axis, brokenAxis = axis.brokenAxis;\n        if (brokenAxis &&\n            axis.treeGrid.mapOfPosToGridNode) {\n            const pos = tick.pos, node = axis.treeGrid.mapOfPosToGridNode[pos], breaks = axis.treeGrid.toggleCollapse(node);\n            brokenAxis.setBreaks(breaks, TreeGridTick_pick(redraw, true));\n        }\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const TreeGridTick = (TreeGridTickAdditions);\n\n;// ./code/es-modules/Series/TreeUtilities.js\n/* *\n *\n *  (c) 2014-2024 Highsoft AS\n *\n *  Authors: Jon Arild Nygard / Oystein Moseng\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { extend: TreeUtilities_extend, isArray: TreeUtilities_isArray, isNumber: TreeUtilities_isNumber, isObject: TreeUtilities_isObject, merge: TreeUtilities_merge, pick: TreeUtilities_pick, relativeLength: TreeUtilities_relativeLength } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/* eslint-disable valid-jsdoc */\n/**\n * @private\n */\nfunction getColor(node, options) {\n    const index = options.index, mapOptionsToLevel = options.mapOptionsToLevel, parentColor = options.parentColor, parentColorIndex = options.parentColorIndex, series = options.series, colors = options.colors, siblings = options.siblings, points = series.points, chartOptionsChart = series.chart.options.chart;\n    let getColorByPoint, point, level, colorByPoint, colorIndexByPoint, color, colorIndex;\n    /**\n     * @private\n     */\n    const variateColor = (color) => {\n        const colorVariation = level && level.colorVariation;\n        if (colorVariation &&\n            colorVariation.key === 'brightness' &&\n            index &&\n            siblings) {\n            return highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default().parse(color).brighten(colorVariation.to * (index / siblings)).get();\n        }\n        return color;\n    };\n    if (node) {\n        point = points[node.i];\n        level = mapOptionsToLevel[node.level] || {};\n        getColorByPoint = point && level.colorByPoint;\n        if (getColorByPoint) {\n            colorIndexByPoint = point.index % (colors ?\n                colors.length :\n                chartOptionsChart.colorCount);\n            colorByPoint = colors && colors[colorIndexByPoint];\n        }\n        // Select either point color, level color or inherited color.\n        if (!series.chart.styledMode) {\n            color = TreeUtilities_pick(point && point.options.color, level && level.color, colorByPoint, parentColor && variateColor(parentColor), series.color);\n        }\n        colorIndex = TreeUtilities_pick(point && point.options.colorIndex, level && level.colorIndex, colorIndexByPoint, parentColorIndex, options.colorIndex);\n    }\n    return {\n        color: color,\n        colorIndex: colorIndex\n    };\n}\n/**\n * Creates a map from level number to its given options.\n *\n * @private\n *\n * @param {Object} params\n * Object containing parameters.\n * - `defaults` Object containing default options. The default options are\n *   merged with the userOptions to get the final options for a specific\n *   level.\n * - `from` The lowest level number.\n * - `levels` User options from series.levels.\n * - `to` The highest level number.\n *\n * @return {Highcharts.Dictionary<object>|null}\n * Returns a map from level number to its given options.\n */\nfunction getLevelOptions(params) {\n    const result = {};\n    let defaults, converted, i, from, to, levels;\n    if (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((obj, item) => {\n                let level, levelIsConstant, 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    const before = options.before, idRoot = options.idRoot, mapIdToNode = options.mapIdToNode, nodeRoot = mapIdToNode[idRoot], levelIsConstant = (options.levelIsConstant !== false), points = options.points, point = points[tree.i], optionsPoint = point && point.options || {}, children = [];\n    let childrenTotal = 0;\n    tree.levelDynamic = tree.level - (levelIsConstant ? 0 : nodeRoot.level);\n    tree.name = TreeUtilities_pick(point && point.name, '');\n    tree.visible = (idRoot === tree.id ||\n        options.visible === true);\n    if (typeof before === 'function') {\n        tree = before(tree, options);\n    }\n    // First give the children some values\n    tree.children.forEach((child, i) => {\n        const newOptions = TreeUtilities_extend({}, options);\n        TreeUtilities_extend(newOptions, {\n            index: i,\n            siblings: tree.children.length,\n            visible: tree.visible\n        });\n        child = setTreeValues(child, newOptions);\n        children.push(child);\n        if (child.visible) {\n            childrenTotal += child.val;\n        }\n    });\n    // Set the values\n    const value = TreeUtilities_pick(optionsPoint.value, childrenTotal);\n    tree.visible = value >= 0 && (childrenTotal > 0 || tree.visible);\n    tree.children = children;\n    tree.childrenTotal = childrenTotal;\n    tree.isLeaf = tree.visible && !childrenTotal;\n    tree.val = value;\n    return tree;\n}\n/**\n * Update the rootId property on the series. Also makes sure that it is\n * accessible to exporting.\n *\n * @private\n *\n * @param {Object} series\n * The series to operate on.\n *\n * @return {string}\n * Returns the resulting rootId after update.\n */\nfunction updateRootId(series) {\n    let rootId, options;\n    if (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    const { chart, options } = series, { nodeDistance = 0, nodeWidth = 0 } = options, { plotSizeX = 1 } = chart;\n    // Node width auto means they are evenly distributed along the width of\n    // the plot area\n    if (nodeWidth === 'auto') {\n        if (typeof nodeDistance === 'string' && /%$/.test(nodeDistance)) {\n            const fraction = parseFloat(nodeDistance) / 100, total = columnCount + fraction * (columnCount - 1);\n            return plotSizeX / total;\n        }\n        const nDistance = Number(nodeDistance);\n        return ((plotSizeX + nDistance) /\n            (columnCount || 1)) - nDistance;\n    }\n    return TreeUtilities_relativeLength(nodeWidth, plotSizeX);\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst TreeUtilities = {\n    getColor,\n    getLevelOptions,\n    getNodeWidth,\n    setTreeValues,\n    updateRootId\n};\n/* harmony default export */ const Series_TreeUtilities = (TreeUtilities);\n\n;// ./code/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\nconst { getLevelOptions: TreeGridAxis_getLevelOptions } = Series_TreeUtilities;\n\nconst { addEvent: TreeGridAxis_addEvent, isArray: TreeGridAxis_isArray, splat: TreeGridAxis_splat, find: TreeGridAxis_find, fireEvent: TreeGridAxis_fireEvent, isObject: TreeGridAxis_isObject, isString: TreeGridAxis_isString, merge: TreeGridAxis_merge, pick: TreeGridAxis_pick, removeEvent: TreeGridAxis_removeEvent, wrap: TreeGridAxis_wrap } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Variables\n *\n * */\nlet TickConstructor;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction getBreakFromNode(node, max) {\n    const to = node.collapseEnd || 0;\n    let 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    const categories = [], collapsedNodes = [], mapOfIdToNode = {}, uniqueNamesEnabled = uniqueNames || false;\n    let mapOfPosToGridNode = {}, posIterator = -1;\n    // Build the tree from the series data.\n    const treeParams = {\n        // After the children has been created.\n        after: function (node) {\n            const gridNode = mapOfPosToGridNode[node.pos];\n            let height = 0, 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            const data = TreeGridAxis_isObject(node.data, true) ?\n                node.data :\n                {}, name = TreeGridAxis_isString(data.name) ? data.name : '', parentNode = mapOfIdToNode[node.parent], parentGridNode = (TreeGridAxis_isObject(parentNode, true) ?\n                mapOfPosToGridNode[parentNode.pos] :\n                null), hasSameName = function (x) {\n                return x.name === name;\n            };\n            let gridNode, 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    const updateYValuesAndTickPos = function (map, numberOfSeries) {\n        const setValues = function (gridNode, start, result) {\n            const nodes = gridNode.nodes, padding = 0.5;\n            let end = start + (start === -1 ? 0 : numberOfSeries - 1);\n            const diff = (end - start) / 2, pos = start + diff;\n            nodes.forEach(function (node) {\n                const 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    const tree = Gantt_Tree.getTree(data, 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    const chart = e.target, axes = chart.axes;\n    axes.filter((axis) => axis.type === 'treegrid').forEach(function (axis) {\n        const options = axis.options || {}, labelOptions = options.labels, uniqueNames = axis.uniqueNames, 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        let numberOfSeries = 0, data, treeGrid;\n        if (isDirty) {\n            const seriesHasPrimitivePoints = [];\n            // Concatenate data from all series assigned to this axis.\n            data = axis.series.reduce(function (arr, s) {\n                const seriesData = (s.options.data || []), 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((value) => (typeof value === 'object')));\n                seriesHasPrimitivePoints.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 (let 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                const axisData = (series.options.data || []).map(function (d) {\n                    if (seriesHasPrimitivePoints[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                            const 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    const axis = this, mapOptionsToLevel = axis.treeGrid.mapOptionsToLevel || {}, isTreeGrid = axis.type === 'treegrid', ticks = axis.ticks;\n    let tick = ticks[pos], levelOptions, options, 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    const axis = this, 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                const treeGrid = getTreeGridFromData(e.options.data, 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                    const 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((n) => ((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    const axis = this, options = axis.options, time = axis.chart.time, linkedParent = typeof options.linkedTo === 'number' ?\n        this.chart[axis.coll]?.[options.linkedTo] :\n        void 0, isTreeGrid = axis.type === 'treegrid';\n    if (isTreeGrid) {\n        axis.min = axis.userMin ?? time.parse(options.min) ?? axis.dataMin;\n        axis.max = axis.userMax ?? time.parse(options.max) ?? 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            const 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    const axis = this, isTreeGrid = this.type === 'treegrid';\n    if (isTreeGrid && axis.visible) {\n        axis.tickPositions.forEach(function (pos) {\n            const 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 */\nclass TreeGridAxisAdditions {\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    static compose(AxisClass, ChartClass, SeriesClass, TickClass) {\n        if (!AxisClass.keepProps.includes('treeGrid')) {\n            const 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     *  Constructors\n     *\n     * */\n    /**\n     * @private\n     */\n    constructor(axis) {\n        this.axis = axis;\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    setCollapsedStatus(node) {\n        const axis = this.axis, chart = axis.chart;\n        axis.series.forEach(function (series) {\n            const data = series.options.data;\n            if (node.id && data) {\n                const point = chart.get(node.id), 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    collapse(node) {\n        const axis = this.axis, breaks = (axis.options.breaks || []), obj = getBreakFromNode(node, 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    expand(node) {\n        const axis = this.axis, breaks = (axis.options.breaks || []), obj = getBreakFromNode(node, 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    getTickPositions() {\n        const 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            const 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    isCollapsed(node) {\n        const axis = this.axis, breaks = (axis.options.breaks || []), obj = getBreakFromNode(node, 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    toggleCollapse(node) {\n        return (this.isCollapsed(node) ?\n            this.expand(node) :\n            this.collapse(node));\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const TreeGridAxis = (TreeGridAxisAdditions);\n\n;// ./code/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\n\n\n\n\nconst { series: Series, seriesTypes: { xrange: GanttSeries_XRangeSeries } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default());\n\n\n\nconst { extend: GanttSeries_extend, isNumber: GanttSeries_isNumber, merge: GanttSeries_merge } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Class\n *\n * */\n/**\n * @private\n * @class\n * @name Highcharts.seriesTypes.gantt\n *\n * @augments Highcharts.Series\n */\nclass GanttSeries extends GanttSeries_XRangeSeries {\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    static compose(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    drawPoint(point, verb) {\n        const series = this, seriesOpts = series.options, renderer = series.chart.renderer, shapeArgs = point.shapeArgs, plotY = point.plotY, state = point.selected && 'select', cutOff = seriesOpts.stacking && !seriesOpts.borderRadius;\n        let graphic = point.graphic, 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.drawPoint(point, verb);\n        }\n    }\n    /**\n     * Handle milestones, as they have no x2.\n     * @private\n     */\n    translatePoint(point) {\n        let shapeArgs, size;\n        super.translatePoint(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 *\n *  Static Properties\n *\n * */\nGanttSeries.defaultOptions = GanttSeries_merge(GanttSeries_XRangeSeries.defaultOptions, Gantt_GanttSeriesDefaults);\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 */ const Gantt_GanttSeries = (GanttSeries);\n\n;// ./code/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\nconst 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 */ const 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","define","amd","amd1","window","__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__","NavigatorConstructor","RangeSelectorConstructor","TickConstructor","ScrollbarAxis","OrdinalAxis","ConnectionComposition","BrokenAxis","GridAxisSide","__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","Extensions_ArrowSymbols","compose","SVGRendererClass","symbols","defined","error","merge","objectEach","deg2rad","max","Math","min","Gantt_Connection","constructor","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","GanttChart_defaultOptions","isArray","GanttChart_merge","splat","GanttChart","userOptions","callback","defaultLinkedTo","xAxisOptions","xAxis","yAxisOptions","yAxis","title","legend","navigator","isGantt","map","i","grid","borderColor","opposite","linkedTo","staticScale","reversed","categories","ganttChart","b","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","Navigator_ChartNavigatorComposition","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","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","Symbols_defined","Symbols_isNumber","Symbols_pick","SVG_Symbols","rect","r","roundedRect","relativeLength","Navigator_NavigatorSymbols","_x","_y","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","setFixedRange","NavigatorComposition_setFixedRange","dataMax","dataMin","fixedRange","NavigatorComposition_addEvent","extend","NavigatorComposition_pushUnique","onSeriesAfterUpdate","isInternal","Navigator_NavigatorComposition","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","swapXY","forEach","seg","temp","len","_events","chartX","chartY","scrollbarButtons","scrollbarLeft","scrollbarStrokeWidth","scrollbarTop","addEvents","buttonsOrder","buttons","bar","scrollbarGroup","element","track","mouseDownHandler","bind","mouseMoveHandler","mouseUpHandler","buttonToMinClick","buttonToMaxClick","trackClick","ownerDocument","args","apply","updatePosition","DOMEvent","cursorToScrollbarPosition","normalizedEvent","minWidthDifference","calculatedWidth","xOffset","barWidth","yOffset","removeEvents","drawScrollbarButton","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","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","numbers","filter","Navigator","isDirty","drawHandle","verb","round","parseInt","drawOutline","zoomedMin","zoomedMax","outline","halfOutline","outlineCorrection","navigatorSize","navigatorTop","lineTop","lineBtm","verticalMin","drawMasks","navigatorHeight","shades","shade","renderElements","mouseCursor","cursor","navigatorGroup","visibility","hasMask","css","handlesOptions","symbolName","symbolUrl","isImg","symbolFn","addMouseEvents","invertedUpdate","setOpposite","navigatorEnabled","adaptToUpdatedData","baseSeries","updatedDataHandler","eventsToUnbind","offsets","getXAxisOffsets","scrollbarXAxis","fake","minRange","maxRange","navigatorWidth","toPixels","abs","toValue","currentRange","grabbedLeft","grabbedRight","fixedWidth","container","onMouseMove","onMouseUp","getPartsEvents","renderTo","modifyNavigatorAxisExtremes","eventName","events","name","navigatorItem","shadesMousedown","navigatorPosition","ext","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","s","showInNavigator","navSeriesMixin","enableMouseTracking","padXAxis","showInLegend","stacking","states","inactive","navigatorSeries","navSeries","base","baseOptions","mergedNavSeriesOptions","chartNavigatorSeriesOptions","baseNavigatorOptions","linkedNavSeries","userNavOptions","visible","plotOptions","navigatorSeriesData","hasNavigatorData","slice","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","RangeSelector_RangeSelectorComposition","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","Data_DataTableCore","autoId","columns","rowCount","versionTag","column","columnName","applyRowCount","asReference","getColumns","columnNames","getRow","rowIndex","setColumn","eventDetail","setColumns","silent","setRow","row","insert","indexRowCount","cellValue","addColumns","Array","OrdinalAxis_addEvent","OrdinalAxis_correctFloat","OrdinalAxis_defined","OrdinalAxis_error","OrdinalAxis_isNumber","OrdinalAxis_pick","timeUnits","isString","getTimeTicks","normalizedInterval","startOfWeek","positions","closestDistance","findHigherRanks","higherRanks","tickPixelIntervalOption","segmentStarts","end","segmentPositions","hasCrossedHigherRank","info","outsideMax","start","groupPositions","lastGroupPosition","arguments","posLength","shift","unitRange","hour","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","trimmedRange","mouseDownX","hoverPoints","closestPointRange","overscrollPointsRange","movedUnits","translationSlope","slope","extendedOrdinalPositions","extendedAxis","val2lin","setState","test","onSeriesUpdatedData","toIndex","ordinalIndex","ordinalLength","originalPositionsReference","diff","approximateIndexOffset","axisProto","ordinal2lin","hasBreaks","brokenAxis","uniqueOrdinalPositions","dist","minIndex","maxIndex","useOrdinal","adjustOrdinalExtremesPoints","isBoosted","distanceBetweenPoint","reserveSpace","takeOrdinalPosition","unshift","pop","forceOrdinal","getOverscrollPositions","groupIntervalFactor","sortedArray","indirectSearch","middle","withOverscroll","k","grouping","currentDataGrouping","unitName","fakeAxis","fakeSeries","applyGrouping","getGroupPixelWidth","getGroupIntervalFactor","destroyGroupedData","noop","getProcessedData","dataTable","forced","processData","hasExtremesChanged","basePointRange","processedXData","median","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","baseXAxisOptions","_range","rangeMin","ctx","ytdExtremes","addOffsetMin","setSelected","forcedDataGrouping","setDataGrouping","frozenStates","preserveDataGrouping","hasData","getYTDExtremes","_offsetMax","selectedIndex","rangeSelectorButton","axisRangeUpdateEvent","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","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","zoomText","alignElements","_a","buttonGroup","userButtonTheme","paddingLeft","paddingRight","hover","mouseOver","isMS","mouseOut","textContent","textStr","createButtons","createButton","callDefaultEvent","buttonEvents","click","isActive","navButtonOptions","exporting","navigation","getXOffsetForExportButton","rightAligned","titleCollision","positionButtons","xOffsetForExportButton","alignButtonGroup","hasLoaded","handleCollision","alignTranslateY","alignAttr","groupHeight","marginTop","isCollapsed","newButtonsOptions","btnLength","btn","dropdownTranslateX","hasVisibleDropdown","buttonLeft","moveInputsDown","collapseButtons","expandButtons","showDropdown","hideDropdown","rangeSelectorGroup","yPosition","buttonPositionY","inputPositionY","minPosition","subtitle","rSelector","HTMLElement","Series_PathUtilities","applyRadius","prevSeg","nextSeg","x1","y1","x2","y2","directionX","directionY","PathfinderAlgorithms_pick","PathfinderAlgorithms_min","PathfinderAlgorithms_max","findLastObstacleBefore","startIx","right","cmp","findObstacleFromPoint","obstacle","pathFromSegments","segments","limitObstacleToBounds","bounds","simpleConnect","startObstacleIx","endObstacleIx","endSegment","dir","startObstacle","waypoint","useMax","endPoint","copyFromPoint","fromKey","toKey","getMeOut","prevWaypoint","waypoint2","fastAvoid","dirIsX","endSegments","metrics","softMinX","maxWidth","softMaxX","softMinY","maxHeight","softMaxY","extractedEndPoint","forceObstacleBreak","pivotPoint","directionIsX","firstPoint","lastPoint","highestPoint","lowestPoint","searchDirection","getDodgeDirection","softBounds","soft","hard","toPointMax","toPointMin","maxOutOfSoftBounds","minOutOfSoftBounds","maxOutOfHardBounds","minOutOfHardBounds","minDistance","maxDistance","minPivot","maxPivot","extractFromObstacle","goalPoint","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","SVGRenderer","Chart","Point","StaticScale_addEvent","StaticScale_defined","StaticScale_isNumber","StaticScale_pick","StaticScale_onAxisAfterSetOptions","scrollablePlotArea","minHeight","chartAdjustHeight","redrawTrigger","initiatedScale","unitLength","scrollablePixelsY","setSize","clipRect","sharedClipKey","sharedClips","Extensions_StaticScale","adjustHeight","static_scale_src_G","Axis","XRangeSeriesDefaults_correctFloat","XRangeSeriesDefaults_isNumber","isObject","pointClass","ColumnPoint","XRangePoint_extend","XRangePoint","getColorByCategory","colorCount","resolveColor","colorByPoint","applyOptions","isNull","isValid","drawPoint","getAnimationVerb","ttBelow","tooltipDateKeys","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","columnMetrics","minPointLength","oldColWidth","seriesXOffset","pointXOffset","posX","plotX2","borderWidth","widthDifference","partialFill","pointHeight","dlLeft","dlRight","dlWidth","clipRectWidth","pointWidth","pointPlacement","tooltipPos","xIndex","yIndex","tooltipYOffset","amount","partShapeArgs","clipRectArgs","category","yCategory","seriesOpts","shapeType","pointState","stateOpts","pointStateVerb","pointAttr","pointAttribs","pfOptions","getClassName","partRect","partialClipRect","clip","shadow","brighten","drawPoints","pointCount","animationLimit","isPointInside","whiteSpace","tooltip","headerFormat","pointFormat","pointArrayMap","getExtremesFromAll","keysAffectYAxis","parallelArrays","requireSorting","autoIncrement","buildKDTree","registerSeriesType","xrange_src_G","XRange_XRangeSeries","xrange","GanttPoint_XRangePoint","GanttPoint","setGanttPointAliases","completed","ganttPoint","milestone","GanttSeriesDefaults_isNumber","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","breakArray","breaksOutOfRange","brk","isOut","otherBreak","toUpperCase","seriesGappedPath","groupingSize","gapSize","current","next","gapUnit","xRange","stack","stacks","stackKey","stackLabels","total","getGraphPath","seriesProto","gappedPath","isInBreak","repeat","inclusive","lin2Val","nval","val2Lin","findBreakAt","testKeep","inbrk","keep","showPoints","forceRedraw","axisBreak","setAxisTranslation","breakArrayT","pointRangePadding","inBrk","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","axisTop","axisWidth","tickSize","titleWidth","xOption","yOption","titleMargin","titleFontSize","fontMetrics","f","offAxis","bottom","titlePosition","onAfterInit","applyGridOptions","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","tickMark","lastTick","hiddenLabels","hiddenMarks","mark","isLast","onAfterSetAxisTranslation","tickInfo","userLabels","dateTimeLabelFormats","onAfterSetOptions","gridAxisOptions","list","textOverflow","tickPositioner","parentInfo","unitIdx","unit","counts","onAfterSetOptions2","onAfterSetScale","setScale","onAfterTickSize","labelPadding","cellHeight","GridAxis_onChartAfterSetChartSize","onDestroy","keepEvents","onInit","tickColor","GridAxisAdditions","onTickAfterGetLabelPosition","labelOpts","tickPos","nextTickPos","crispCorr","lblMetrics","useHTML","lines","onTickLabelFormat","pointCopy","isFirst","p","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","Axis_GridAxis","TickClass","Tree_extend","Tree_isNumber","Tree_pick","getNode","parent","level","mapOfIdToChildren","after","before","node","depth","descendants","children","child","childStart","NaN","childEnd","Gantt_Tree","getTree","getListOfParents","ids","listOfParents","prev","curr","adoptedByRoot","orphan","parentExcluded","TreeGridTick_addEvent","TreeGridTick_removeEvent","TreeGridTick_isObject","TreeGridTick_isNumber","TreeGridTick_pick","TreeGridTick_wrap","onTickInit","TreeGridTickAdditions","wrapGetLabelPosition","labelOptions","lbOptions","isTreeGrid","result","wrapRenderLabel","collapsed","addClassName","removeClassName","tickGrid","tickOptions","icon","labelIcon","labelElement","axisGrid","axisOptions","symbolOptions","hasDescendants","isTreeGridElement","shouldRender","prefixClassName","prefixLevelClass","removeClass","renderLabelIcon","params","isNew","labelBox","xy","iconCenter","styles","parentGroup","object","attachedTreeGridEvents","textDecoration","onTickHoverExit","toggleCollapse","tickProto","collapse","expand","posMappedNodes","TreeUtilities_extend","TreeUtilities_isArray","TreeUtilities_isNumber","TreeUtilities_isObject","TreeUtilities_merge","TreeUtilities_pick","TreeUtilities_relativeLength","getLevelOptions","TreeGridAxis_getLevelOptions","getColor","colorIndexByPoint","mapOptionsToLevel","parentColor","parentColorIndex","siblings","chartOptionsChart","variateColor","colorVariation","defaults","converted","levels","item","levelIsConstant","getNodeWidth","columnCount","nodeDistance","nodeWidth","plotSizeX","fraction","parseFloat","nDistance","setTreeValues","tree","idRoot","nodeRoot","mapIdToNode","optionsPoint","childrenTotal","levelDynamic","newOptions","isLeaf","updateRootId","rootId","rootNode","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","collapsedNodes","mapOfIdToNode","uniqueNamesEnabled","posIterator","gridNode","parentGridNode","nodes","updateYValuesAndTickPos","setValues","seriesIndex","onBeforeRender","target","isDirtyData","seriesHasPrimitivePoints","arr","seriesData","foundPrimitivePoint","pointOptions","optionsToObject","hasNames","axisData","toArray","wrapGenerateTick","levelOptions","parameters","addLabel","wrapInit","TreeGridAxisAdditions","fontWeight","wrapSetTickInterval","getTickPositions","linkedParentExtremes","wrapRedraw","axisProps","utils","TreeGridTick","setCollapsedStatus","dataPoint","roundedMin","roundedMax","Series","GanttSeries_XRangeSeries","GanttSeries_extend","GanttSeries_isNumber","GanttSeries_merge","GanttSeries","Gantt_Pathfinder","TreeGridAxis","cutOff","diamondShape","diamond","pointFormatter","formats","tooltipOptions","ttOptions","xDateFormat","retVal","tooltipFormatter","getDateFormat","gantt_src_G","Connection","Extensions_CurrentDateIndication","PlotLineOrBandClass","PlotLineOrBand","Gantt_GanttSeries","Tick"],"mappings":"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"}

Hacked By AnonymousFox1.0, Coded By AnonymousFox