Hacked By AnonymousFox
{"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